squiffy-runtime 6.0.0-alpha.15 → 6.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation.d.ts +11 -0
- package/dist/events.d.ts +8 -3
- package/dist/import.d.ts +4 -0
- package/dist/linkHandler.d.ts +8 -0
- package/dist/pluginManager.d.ts +23 -0
- package/dist/squiffy.runtime.d.ts +2 -2
- package/dist/squiffy.runtime.global.js +126 -0
- package/dist/squiffy.runtime.global.js.map +1 -0
- package/dist/squiffy.runtime.js +8785 -487
- package/dist/squiffy.runtime.js.map +1 -0
- package/dist/state.d.ts +19 -0
- package/dist/textProcessor.d.ts +8 -13
- package/dist/types.d.ts +5 -2
- package/dist/types.plugins.d.ts +27 -0
- package/dist/updater.d.ts +2 -0
- package/dist/utils.d.ts +1 -2
- package/package.json +12 -5
- package/src/__snapshots__/squiffy.runtime.test.ts.snap +53 -19
- package/src/animation.ts +68 -0
- package/src/events.ts +9 -10
- package/src/import.ts +5 -0
- package/src/linkHandler.ts +18 -0
- package/src/pluginManager.ts +74 -0
- package/src/plugins/animate.ts +97 -0
- package/src/plugins/index.ts +13 -0
- package/src/plugins/live.ts +83 -0
- package/src/plugins/random.ts +22 -0
- package/src/plugins/replaceLabel.ts +22 -0
- package/src/plugins/rotateSequence.ts +61 -0
- package/src/squiffy.runtime.test.ts +306 -134
- package/src/squiffy.runtime.ts +460 -332
- package/src/state.ts +106 -0
- package/src/textProcessor.ts +61 -164
- package/src/types.plugins.ts +41 -0
- package/src/types.ts +5 -2
- package/src/updater.ts +77 -0
- package/src/utils.ts +15 -12
- package/vite.config.ts +36 -0
- package/vitest.config.ts +9 -0
- package/vitest.setup.ts +16 -0
- package/dist/events.js +0 -35
- package/dist/squiffy.runtime.test.js +0 -394
- package/dist/textProcessor.js +0 -166
- package/dist/types.js +0 -1
- package/dist/utils.js +0 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"squiffy.runtime.js","sources":["../../node_modules/marked/lib/marked.esm.js","../../node_modules/handlebars/dist/cjs/handlebars/utils.js","../../node_modules/handlebars/dist/cjs/handlebars/exception.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","../../node_modules/handlebars/dist/cjs/handlebars/helpers.js","../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","../../node_modules/handlebars/dist/cjs/handlebars/decorators.js","../../node_modules/handlebars/dist/cjs/handlebars/logger.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","../../node_modules/handlebars/dist/cjs/handlebars/base.js","../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js","../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","../../node_modules/handlebars/dist/cjs/handlebars/runtime.js","../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","../../node_modules/handlebars/dist/cjs/handlebars.runtime.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","../../node_modules/handlebars/dist/cjs/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/dist/cjs/handlebars/compiler/code-gen.js","../../node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","../../node_modules/handlebars/dist/cjs/handlebars.js","../src/textProcessor.ts","../src/events.ts","../src/state.ts","../src/updater.ts","../src/pluginManager.ts","../src/utils.ts","../src/plugins/replaceLabel.ts","../src/plugins/rotateSequence.ts","../src/plugins/random.ts","../src/plugins/live.ts","../src/plugins/animate.ts","../src/plugins/index.ts","../src/linkHandler.ts","../../node_modules/animejs/lib/anime.esm.js","../src/animation.ts","../src/import.ts","../src/squiffy.runtime.ts"],"sourcesContent":["/**\n * marked v16.3.0 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function G(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ze=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:Ge,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ze,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:He,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let H=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let Z=e.split(`\n`,1)[0],A;if(k=Z,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\" \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\" \"),te.test(k)||ne.test(k)||me.test(k)||H.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=Z+`\n`,e=e.substring(Z.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var S=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=$;Lexer=b;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];S.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,G(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,G(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=$;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=S;d.parse=d;var Dt=d.options,Ht=d.setOptions,Zt=d.use,Gt=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{S as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Ht as setOptions,Zt as use,Gt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var 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\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction 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\nfunction 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\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\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 var 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 (var 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\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var 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 (_utils.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 var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.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 = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (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\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['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 _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.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 || _utils.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 _exception2['default']('#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\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var 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.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['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\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction 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//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var 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 var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var 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\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar 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 lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.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 log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../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 */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction 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 _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.8';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar 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\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(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: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction 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 var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('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 var templateWasPrecompiledWithCompilerV7 = 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 var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var 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 _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var 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 (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var 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) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var 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(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.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 _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\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 */\n\nfunction 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\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var 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 var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\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 = _base.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\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.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 var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\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)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\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\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar 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 helperExpression(node) {\n return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n },\n\n scopedId: function scopedId(path) {\n return (/^\\.|this\\b/.test(path.original)\n );\n },\n\n // an ID is simple if it only has one part, and that part is not\n // `..` or `this`.\n simpleId: function simpleId(path) {\n return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\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.\nexports['default'] = AST;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\n\"use strict\";\n\nexports.__esModule = true;\nvar handlebars = (function () {\n var parser = { trace: function trace() {},\n yy: {},\n symbols_: { \"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 },\n terminals_: { 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\" },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [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]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n this.$ = $$[$0];\n break;\n case 4:\n this.$ = $$[$0];\n break;\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 16:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 17:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 18:\n this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n\n this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n break;\n case 20:\n this.$ = $$[$0];\n break;\n case 21:\n this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n break;\n case 22:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n break;\n case 27:\n this.$ = $$[$0];\n break;\n case 28:\n this.$ = $$[$0];\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 30:\n this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 31:\n this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 33:\n this.$ = $$[$0];\n break;\n case 34:\n this.$ = $$[$0];\n break;\n case 35:\n this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 36:\n this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n break;\n case 37:\n this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n break;\n case 38:\n this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n break;\n case 39:\n this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n break;\n case 40:\n this.$ = $$[$0];\n break;\n case 41:\n this.$ = $$[$0];\n break;\n case 42:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 43:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 44:\n $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n break;\n case 45:\n this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n break;\n case 46:\n this.$ = [];\n break;\n case 47:\n $$[$0 - 1].push($$[$0]);\n break;\n case 48:\n this.$ = [];\n break;\n case 49:\n $$[$0 - 1].push($$[$0]);\n break;\n case 50:\n this.$ = [];\n break;\n case 51:\n $$[$0 - 1].push($$[$0]);\n break;\n case 58:\n this.$ = [];\n break;\n case 59:\n $$[$0 - 1].push($$[$0]);\n break;\n case 64:\n this.$ = [];\n break;\n case 65:\n $$[$0 - 1].push($$[$0]);\n break;\n case 70:\n this.$ = [];\n break;\n case 71:\n $$[$0 - 1].push($$[$0]);\n break;\n case 78:\n this.$ = [];\n break;\n case 79:\n $$[$0 - 1].push($$[$0]);\n break;\n case 82:\n this.$ = [];\n break;\n case 83:\n $$[$0 - 1].push($$[$0]);\n break;\n case 86:\n this.$ = [];\n break;\n case 87:\n $$[$0 - 1].push($$[$0]);\n break;\n case 90:\n this.$ = [];\n break;\n case 91:\n $$[$0 - 1].push($$[$0]);\n break;\n case 94:\n this.$ = [];\n break;\n case 95:\n $$[$0 - 1].push($$[$0]);\n break;\n case 98:\n this.$ = [$$[$0]];\n break;\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 100:\n this.$ = [$$[$0]];\n break;\n case 101:\n $$[$0 - 1].push($$[$0]);\n break;\n }\n },\n table: [{ 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] }],\n defaultActions: { 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] },\n parseError: function parseError(str, hash) {\n throw new Error(str);\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = \"\",\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n 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\") 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\") 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,\n preErrorSymbol,\n state,\n action,\n a,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state]) 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) 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 */\n var lexer = (function () {\n var lexer = { EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n setInput: function setInput(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 },\n input: function input() {\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 },\n unput: function unput(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 ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\n more: function more() {\n this._more = true;\n return this;\n },\n less: function less(n) {\n this.unput(this.match.slice(n));\n },\n pastInput: function pastInput() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n upcomingInput: function upcomingInput() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n showPosition: function showPosition() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n next: function next() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token, match, tempMatch, index, col, 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;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(), { text: \"\", token: null, line: this.yylineno });\n }\n },\n lex: function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n popState: function popState() {\n return this.conditionStack.pop();\n },\n _currentRules: function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n },\n topState: function topState() {\n return this.conditionStack[this.conditionStack.length - 2];\n },\n pushState: function begin(condition) {\n this.begin(condition);\n } };\n lexer.options = {};\n lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n\n break;\n case 1:\n return 15;\n break;\n case 2:\n this.popState();\n return 15;\n\n break;\n case 3:\n this.begin('raw');return 15;\n break;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 'END_RAW_BLOCK';\n }\n\n break;\n case 5:\n return 15;\n break;\n case 6:\n this.popState();\n return 14;\n\n break;\n case 7:\n return 65;\n break;\n case 8:\n return 68;\n break;\n case 9:\n return 19;\n break;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n\n break;\n case 11:\n return 55;\n break;\n case 12:\n return 60;\n break;\n case 13:\n return 29;\n break;\n case 14:\n return 47;\n break;\n case 15:\n this.popState();return 44;\n break;\n case 16:\n this.popState();return 44;\n break;\n case 17:\n return 34;\n break;\n case 18:\n return 39;\n break;\n case 19:\n return 51;\n break;\n case 20:\n return 48;\n break;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n\n break;\n case 22:\n this.popState();\n return 14;\n\n break;\n case 23:\n return 48;\n break;\n case 24:\n return 73;\n break;\n case 25:\n return 72;\n break;\n case 26:\n return 72;\n break;\n case 27:\n return 87;\n break;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();return 54;\n break;\n case 30:\n this.popState();return 33;\n break;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n break;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n break;\n case 33:\n return 85;\n break;\n case 34:\n return 82;\n break;\n case 35:\n return 82;\n break;\n case 36:\n return 83;\n break;\n case 37:\n return 84;\n break;\n case 38:\n return 81;\n break;\n case 39:\n return 75;\n break;\n case 40:\n return 77;\n break;\n case 41:\n return 72;\n break;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n break;\n case 43:\n return 'INVALID';\n break;\n case 44:\n return 5;\n break;\n }\n };\n lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n lexer.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 } };\n return lexer;\n })();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }Parser.prototype = parser;parser.Parser = Parser;\n return new Parser();\n})();exports[\"default\"] = handlebars;\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLHlCQUF5QixFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMscUJBQXFCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQywwQkFBMEIsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxzQkFBc0IsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLDhCQUE4QixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUM7QUFDNW1ELGtCQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFB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QUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXi9dKSkvLC9eKD86XFx7XFx7XFx7XFx7XFwvW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PVs9fVxcc1xcLy5dKVxcfVxcfVxcfVxcfSkvLC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLC9eKD86W1xcc1xcU10qPy0tKH4pP1xcfVxcfSkvLC9eKD86XFwoKS8sL14oPzpcXCkpLywvXig/Olxce1xce1xce1xceykvLC9eKD86XFx9XFx9XFx9XFx9KS8sL14oPzpcXHtcXHsofik/PikvLC9eKD86XFx7XFx7KH4pPyM+KS8sL14oPzpcXHtcXHsofik/I1xcKj8pLywvXig/Olxce1xceyh+KT9cXC8pLywvXig/Olxce1xceyh+KT9cXF5cXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXF4pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxcYikvLC9eKD86XFx7XFx7KH4pP1xceykvLC9eKD86XFx7XFx7KH4pPyYpLywvXig/Olxce1xceyh+KT8hLS0pLywvXig/Olxce1xceyh+KT8hW1xcc1xcU10qP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcKj8pLywvXig/Oj0pLywvXig/OlxcLlxcLikvLC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywvXig/OltcXC8uXSkvLC9eKD86XFxzKykvLC9eKD86XFx9KH4pP1xcfVxcfSkvLC9eKD86KH4pP1xcfVxcfSkvLC9eKD86XCIoXFxcXFtcIl18W15cIl0pKlwiKS8sL14oPzonKFxcXFxbJ118W14nXSkqJykvLC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1cXHMpXSkpKS8sL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sL14oPzp1bmRlZmluZWQoPz0oW359XFxzKV0pKSkvLC9eKD86bnVsbCg/PShbfn1cXHMpXSkpKS8sL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywvXig/OmFzXFxzK1xcfCkvLC9eKD86XFx8KS8sL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLC9eKD86XFxbKFxcXFxcXF18W15cXF1dKSpcXF0pLywvXig/Oi4pLywvXig/OiQpL107XG5sZXhlci5jb25kaXRpb25zID0ge1wibXVcIjp7XCJydWxlc1wiOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NF0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJlbXVcIjp7XCJydWxlc1wiOlsyXSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImNvbVwiOntcInJ1bGVzXCI6WzZdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwicmF3XCI6e1wicnVsZXNcIjpbMyw0LDVdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiSU5JVElBTFwiOntcInJ1bGVzXCI6WzAsMSw0NF0sXCJpbmNsdXNpdmVcIjp0cnVlfX07XG5yZXR1cm4gbGV4ZXI7fSkoKVxucGFyc2VyLmxleGVyID0gbGV4ZXI7XG5mdW5jdGlvbiBQYXJzZXIgKCkgeyB0aGlzLnl5ID0ge307IH1QYXJzZXIucHJvdG90eXBlID0gcGFyc2VyO3BhcnNlci5QYXJzZXIgPSBQYXJzZXI7XG5yZXR1cm4gbmV3IFBhcnNlcjtcbn0pKCk7ZXhwb3J0IGRlZmF1bHQgaGFuZGxlYmFycztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_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 acceptKey(node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\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 acceptRequired(node, name) {\n this.acceptKey(node, name);\n\n if (!node[name]) {\n throw new _exception2['default'](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 acceptArray(array) {\n for (var 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 accept(object) {\n if (!object) {\n return;\n }\n\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new _exception2['default']('Unknown type: ' + object.type, object);\n }\n\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n\n var 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(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 PartialBlockStatement(partial) {\n visitPartial.call(this, partial);\n\n this.acceptKey(partial, 'program');\n },\n\n ContentStatement: function ContentStatement() /* content */{},\n CommentStatement: function CommentStatement() /* comment */{},\n\n SubExpression: visitSubExpression,\n\n PathExpression: function PathExpression() /* path */{},\n\n StringLiteral: function StringLiteral() /* string */{},\n NumberLiteral: function NumberLiteral() /* number */{},\n BooleanLiteral: function BooleanLiteral() /* bool */{},\n UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n NullLiteral: function NullLiteral() /* literal */{},\n\n Hash: function Hash(hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function HashPair(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\nexports['default'] = Visitor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FB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QztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction WhitespaceControl() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n this.options = options;\n}\nWhitespaceControl.prototype = new _visitor2['default']();\n\nWhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n\n if (!strip) {\n continue;\n }\n\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\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 (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n\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 var 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 var 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 (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n};\n\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 var 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(prev.original);\n }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n\n var 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(next.original);\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 var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n}\n\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 var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n}\n\nexports['default'] = WhitespaceControl;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.SourceLocation = SourceLocation;\nexports.id = id;\nexports.stripFlags = stripFlags;\nexports.stripComment = stripComment;\nexports.preparePath = preparePath;\nexports.prepareMustache = prepareMustache;\nexports.prepareRawBlock = prepareRawBlock;\nexports.prepareBlock = prepareBlock;\nexports.prepareProgram = prepareProgram;\nexports.preparePartialBlock = preparePartialBlock;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction validateClose(open, close) {\n close = close.path ? close.path.original : close;\n\n if (open.path.original !== close) {\n var errorNode = { loc: open.path.loc };\n\n throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n }\n}\n\nfunction 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\nfunction id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n}\n\nfunction stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n}\n\nfunction stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nfunction preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n\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 _exception2['default']('Invalid path: ' + original, { loc: loc });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n}\n\nfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n\n locInfo = this.locInfo(locInfo);\n var 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: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n}\n\nfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n\n var decorator = /\\*/.test(openBlock.open);\n\n program.blockParams = openBlock.blockParams;\n\n var inverse = undefined,\n inverseStrip = undefined;\n\n if (inverseAndProgram) {\n if (decorator) {\n throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\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: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var 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\nfunction 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: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.parseWithoutProcessing = parseWithoutProcessing;\nexports.parse = parse;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _whitespaceControl = require('./whitespace-control');\n\nvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\nvar _helpers = require('./helpers');\n\nvar Helpers = _interopRequireWildcard(_helpers);\n\nvar _utils = require('../utils');\n\nexports.parser = _parser2['default'];\n\nvar yy = {};\n_utils.extend(yy, Helpers);\n\nfunction 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 _parser2['default'].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 var ast = _parser2['default'].parse(input);\n\n return ast;\n}\n\nfunction parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new _whitespaceControl2['default'](options);\n\n return strip.accept(ast);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3FCQUNJLFVBQVU7O1FBRXhCLE1BQU07O0FBRWYsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osY0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWIsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVyRCxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRUQsc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksR0FBRyxHQUFHLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLE1BQUksR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFJLEtBQUssR0FBRyxtQ0FBc0IsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFNBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJiYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgV2hpdGVzcGFjZUNvbnRyb2wgZnJvbSAnLi93aGl0ZXNwYWNlLWNvbnRyb2wnO1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgeyBwYXJzZXIgfTtcblxubGV0IHl5ID0ge307XG5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRob3V0UHJvY2Vzc2luZyhpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgYXN0ID0gcGFyc2VyLnBhcnNlKGlucHV0KTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IGFzdCA9IHBhcnNlV2l0aG91dFByb2Nlc3NpbmcoaW5wdXQsIG9wdGlvbnMpO1xuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHN0cmlwLmFjY2VwdChhc3QpO1xufVxuIl19\n","/* eslint-disable new-cap */\n\n'use strict';\n\nexports.__esModule = true;\nexports.Compiler = Compiler;\nexports.precompile = precompile;\nexports.compile = compile;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _ast = require('./ast');\n\nvar _ast2 = _interopRequireDefault(_ast);\n\nvar slice = [].slice;\n\nfunction 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 equals(other) {\n var len = this.opcodes.length;\n if (other.opcodes.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var opcode = this.opcodes[i],\n otherOpcode = other.opcodes[i];\n if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\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 (var 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 compile(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 = _utils.extend(Object.create(null), {\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 }, options.knownHelpers);\n\n return this.accept(program);\n },\n\n compileProgram: function compileProgram(program) {\n var childCompiler = new this.compiler(),\n // 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 accept(node) {\n /* istanbul ignore next: Sanity code */\n if (!this[node.type]) {\n throw new _exception2['default']('Unknown type: ' + node.type, node);\n }\n\n this.sourceNode.unshift(node);\n var ret = this[node.type](node);\n this.sourceNode.shift();\n return ret;\n },\n\n Program: function Program(program) {\n this.options.blockParams.unshift(program.blockParams);\n\n var body = program.body,\n bodyLength = body.length;\n for (var 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 BlockStatement(block) {\n transformLiteralToPath(block);\n\n var program = block.program,\n inverse = block.inverse;\n\n program = program && this.compileProgram(program);\n inverse = inverse && this.compileProgram(inverse);\n\n var 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: function DecoratorBlock(decorator) {\n var program = decorator.program && this.compileProgram(decorator.program);\n var 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 PartialStatement(partial) {\n this.usePartial = true;\n\n var program = partial.program;\n if (program) {\n program = this.compileProgram(partial.program);\n }\n\n var params = partial.params;\n if (params.length > 1) {\n throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\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 var 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 var 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 PartialBlockStatement(partialBlock) {\n this.PartialStatement(partialBlock);\n },\n\n MustacheStatement: function MustacheStatement(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: function Decorator(decorator) {\n this.DecoratorBlock(decorator);\n },\n\n ContentStatement: function ContentStatement(content) {\n if (content.value) {\n this.opcode('appendContent', content.value);\n }\n },\n\n CommentStatement: function CommentStatement() {},\n\n SubExpression: function SubExpression(sexpr) {\n transformLiteralToPath(sexpr);\n var 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 ambiguousSexpr(sexpr, program, inverse) {\n var 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 simpleSexpr(sexpr) {\n var path = sexpr.path;\n path.strict = true;\n this.accept(path);\n this.opcode('resolvePossibleLambda');\n },\n\n helperSexpr: function helperSexpr(sexpr, program, inverse) {\n var 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 _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n } else {\n path.strict = true;\n path.falsy = true;\n\n this.accept(path);\n this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n }\n },\n\n PathExpression: function PathExpression(path) {\n this.addDepth(path.depth);\n this.opcode('getContext', path.depth);\n\n var name = path.parts[0],\n scoped = _ast2['default'].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('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n }\n },\n\n StringLiteral: function StringLiteral(string) {\n this.opcode('pushString', string.value);\n },\n\n NumberLiteral: function NumberLiteral(number) {\n this.opcode('pushLiteral', number.value);\n },\n\n BooleanLiteral: function BooleanLiteral(bool) {\n this.opcode('pushLiteral', bool.value);\n },\n\n UndefinedLiteral: function UndefinedLiteral() {\n this.opcode('pushLiteral', 'undefined');\n },\n\n NullLiteral: function NullLiteral() {\n this.opcode('pushLiteral', 'null');\n },\n\n Hash: function Hash(hash) {\n var 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 opcode(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 addDepth(depth) {\n if (!depth) {\n return;\n }\n\n this.useDepths = true;\n },\n\n classifySexpr: function classifySexpr(sexpr) {\n var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n var 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 var isHelper = !isBlockParam && _ast2['default'].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 var 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 var _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 pushParams(params) {\n for (var i = 0, l = params.length; i < l; i++) {\n this.pushParam(params[i]);\n }\n },\n\n pushParam: function pushParam(val) {\n var 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 var blockParamIndex = undefined;\n if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n blockParamIndex = this.blockParamIndex(val.parts[0]);\n }\n if (blockParamIndex) {\n var 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.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n }\n\n this.opcode('pushId', val.type, value);\n }\n }\n this.accept(val);\n }\n },\n\n setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n var 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 blockParamIndex(name) {\n for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n var blockParams = this.options.blockParams[depth],\n param = blockParams && _utils.indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n};\n\nfunction precompile(input, options, env) {\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\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 var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options);\n return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nfunction compile(input, options, env) {\n if (options === undefined) options = {};\n\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n }\n\n options = _utils.extend({}, options);\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var compiled = undefined;\n\n function compileInput() {\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options),\n templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\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 (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n for (var 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 var 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//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=\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 // “sources” entry. This value is prepended to the individual\n // entries in the “source” 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 // “sourceRoot”, 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, require */\n'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nvar SourceNode = undefined;\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 assume that\n // they are running on the browser and thus have no need for the source-map library.\n var SourceMap = require('source-map');\n SourceNode = SourceMap.SourceNode;\n }\n} catch (err) {}\n/* NOP */\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 add(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src += chunks;\n },\n prepend: function prepend(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src = chunks + this.src;\n },\n toStringWithSourceMap: function toStringWithSourceMap() {\n return { code: this.toString() };\n },\n toString: function toString() {\n return this.src;\n }\n };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n if (_utils.isArray(chunk)) {\n var ret = [];\n\n for (var 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: function isEmpty() {\n return !this.source.length;\n },\n prepend: function prepend(source, loc) {\n this.source.unshift(this.wrap(source, loc));\n },\n push: function push(source, loc) {\n this.source.push(this.wrap(source, loc));\n },\n\n merge: function merge() {\n var source = this.empty();\n this.each(function (line) {\n source.add([' ', line, '\\n']);\n });\n return source;\n },\n\n each: function each(iter) {\n for (var i = 0, len = this.source.length; i < len; i++) {\n iter(this.source[i]);\n }\n },\n\n empty: function empty() {\n var loc = this.currentLocation || { start: {} };\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n },\n wrap: function wrap(chunk) {\n var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n if (chunk instanceof SourceNode) {\n return chunk;\n }\n\n chunk = castChunk(chunk, this, loc);\n\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n },\n\n functionCall: function functionCall(fn, type, params) {\n params = this.generateList(params);\n return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n },\n\n quotedString: function quotedString(str) {\n return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n .replace(/\\u2029/g, '\\\\u2029') + '\"';\n },\n\n objectLiteral: function objectLiteral(obj) {\n // istanbul ignore next\n\n var _this = this;\n\n var pairs = [];\n\n Object.keys(obj).forEach(function (key) {\n var value = castChunk(obj[key], _this);\n if (value !== 'undefined') {\n pairs.push([_this.quotedString(key), ':', value]);\n }\n });\n\n var ret = this.generateList(pairs);\n ret.prepend('{');\n ret.add('}');\n return ret;\n },\n\n generateList: function generateList(entries) {\n var ret = this.empty();\n\n for (var 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 generateArray(entries) {\n var ret = this.generateList(entries);\n ret.prepend('[');\n ret.add(']');\n\n return ret;\n }\n};\n\nexports['default'] = CodeGen;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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QUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXNzdW1lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _base = require('../base');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _codeGen = require('./code-gen');\n\nvar _codeGen2 = _interopRequireDefault(_codeGen);\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 nameLookup(parent, name /*, type */) {\n return this.internalNameLookup(parent, name);\n },\n depthedLookup: function depthedLookup(name) {\n return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n },\n\n compilerInfo: function compilerInfo() {\n var revision = _base.COMPILER_REVISION,\n versions = _base.REVISION_CHANGES[revision];\n return [revision, versions];\n },\n\n appendToBuffer: function appendToBuffer(source, location, explicit) {\n // Force a source as this simplifies the merge logic.\n if (!_utils.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 initializeBuffer() {\n return this.quotedString('');\n },\n // END PUBLIC API\n internalNameLookup: function internalNameLookup(parent, name) {\n this.lookupPropertyFunctionIsUsed = true;\n return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n },\n\n lookupPropertyFunctionIsUsed: false,\n\n compile: function compile(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 = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n var opcodes = environment.opcodes,\n opcode = undefined,\n firstLoc = undefined,\n i = undefined,\n l = undefined;\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 _exception2['default']('Compile completed with content left on stack');\n }\n\n if (!this.decorators.isEmpty()) {\n this.useDecorators = true;\n\n this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n this.decorators.push('return fn;');\n\n if (asObject) {\n this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n } else {\n this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n this.decorators.push('}\\n');\n this.decorators = this.decorators.merge();\n }\n } else {\n this.decorators = undefined;\n }\n\n var fn = this.createFunctionContext(asObject);\n if (!this.isChild) {\n var 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 var _context = this.context;\n var programs = _context.programs;\n var decorators = _context.decorators;\n\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 preamble() {\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 _codeGen2['default'](this.options.srcName);\n this.decorators = new _codeGen2['default'](this.options.srcName);\n },\n\n createFunctionContext: function createFunctionContext(asObject) {\n // istanbul ignore next\n\n var _this = this;\n\n var varDeclarations = '';\n\n var 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 var aliasCount = 0;\n Object.keys(this.aliases).forEach(function (alias) {\n var 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 var 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 var 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(['function(', params.join(','), ') {\\n ', source, '}']);\n }\n },\n mergeSource: function mergeSource(varDeclarations) {\n var isSimple = this.environment.isSimple,\n appendOnly = !this.forceBuffer,\n appendFirst = undefined,\n sourceSeen = undefined,\n bufferStart = undefined,\n bufferEnd = undefined;\n this.source.each(function (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 += ', 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('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n }\n\n return this.source.merge();\n },\n\n lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\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 blockValue(name) {\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs(name, 0, params);\n\n var 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 ambiguousBlockValue() {\n // We're being a bit cheeky and reusing the options value from the prior exec\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs('', 0, params, true);\n\n this.flushInline();\n\n var current = this.topStack();\n params.splice(1, 0, current);\n\n this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\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 appendContent(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 append() {\n if (this.isInline()) {\n this.replaceStack(function (current) {\n return [' != null ? ', current, ' : \"\"'];\n });\n\n this.pushSource(this.appendToBuffer(this.popStack()));\n } else {\n var local = this.popStack();\n this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n if (this.environment.isSimple) {\n this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\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 appendEscaped() {\n this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\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 getContext(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 pushContext() {\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 lookupOnContext(parts, falsy, strict, scoped) {\n var 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 lookupBlockParam(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 lookupData(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 resolvePath(type, parts, i, falsy, strict) {\n // istanbul ignore next\n\n var _this2 = this;\n\n if (this.options.strict || this.options.assumeObjects) {\n this.push(strictLookup(this.options.strict && strict, this, parts, i, type));\n return;\n }\n\n var len = parts.length;\n for (; i < len; i++) {\n /* eslint-disable no-loop-func */\n this.replaceStack(function (current) {\n var lookup = _this2.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 resolvePossibleLambda() {\n this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\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 pushStringParam(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 emptyHash(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 pushHash() {\n if (this.hash) {\n this.hashes.push(this.hash);\n }\n this.hash = { values: {}, types: [], contexts: [], ids: [] };\n },\n popHash: function popHash() {\n var 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 pushString(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 pushLiteral(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 pushProgram(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: function registerDecorator(paramSize, name) {\n var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n options = this.setupHelperArgs(name, paramSize);\n\n this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\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 invokeHelper(paramSize, name, isSimple) {\n var nonHelper = this.popStack(),\n helper = this.setupHelper(paramSize, name);\n\n var 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(this.aliasable('container.hooks.helperMissing'));\n }\n\n var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n this.push(functionCall);\n },\n\n itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n var result = [];\n result.push(items[0]);\n for (var 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 invokeKnownHelper(paramSize, name) {\n var 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 invokeAmbiguous(name, helperCall) {\n this.useRegister('helper');\n\n var nonHelper = this.popStack();\n\n this.emptyHash();\n var helper = this.setupHelper(0, name, helperCall);\n\n var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n if (!this.options.strict) {\n lookup[0] = '(helper = ';\n lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n }\n\n this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\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 invokePartial(isDynamic, name, indent) {\n var 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 assignToHash(key) {\n var value = this.popStack(),\n context = undefined,\n type = undefined,\n id = undefined;\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 var 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 pushId(type, name, child) {\n if (type === 'BlockParam') {\n this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\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 compileChildren(environment, options) {\n var children = environment.children,\n child = undefined,\n compiler = undefined;\n\n for (var i = 0, l = children.length; i < l; i++) {\n child = children[i];\n compiler = new this.compiler(); // eslint-disable-line new-cap\n\n var existing = this.matchExistingProgram(child);\n\n if (existing == null) {\n this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n var index = this.context.programs.length;\n child.index = index;\n child.name = 'program' + index;\n this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\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 matchExistingProgram(child) {\n for (var i = 0, len = this.context.environments.length; i < len; i++) {\n var environment = this.context.environments[i];\n if (environment && environment.equals(child)) {\n return environment;\n }\n }\n },\n\n programExpression: function programExpression(guid) {\n var 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 useRegister(name) {\n if (!this.registers[name]) {\n this.registers[name] = true;\n this.registers.list.push(name);\n }\n },\n\n push: function push(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 pushStackLiteral(item) {\n this.push(new Literal(item));\n },\n\n pushSource: function pushSource(source) {\n if (this.pendingContent) {\n this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n this.pendingContent = undefined;\n }\n\n if (source) {\n this.source.push(source);\n }\n },\n\n replaceStack: function replaceStack(callback) {\n var prefix = ['('],\n stack = undefined,\n createdStack = undefined,\n usedLiteral = undefined;\n\n /* istanbul ignore next */\n if (!this.isInline()) {\n throw new _exception2['default']('replaceStack on non-inline');\n }\n\n // We want to merge the inline statement into the replacement statement via ','\n var 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 var _name = this.incrStack();\n\n prefix = ['((', this.push(_name), ' = ', top, ')'];\n stack = this.topStack();\n }\n\n var 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 incrStack() {\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 topStackName() {\n return 'stack' + this.stackSlot;\n },\n flushInline: function flushInline() {\n var inlineStack = this.inlineStack;\n this.inlineStack = [];\n for (var i = 0, len = inlineStack.length; i < len; i++) {\n var entry = inlineStack[i];\n /* istanbul ignore if */\n if (entry instanceof Literal) {\n this.compileStack.push(entry);\n } else {\n var stack = this.incrStack();\n this.pushSource([stack, ' = ', entry, ';']);\n this.compileStack.push(stack);\n }\n }\n },\n isInline: function isInline() {\n return this.inlineStack.length;\n },\n\n popStack: function popStack(wrapped) {\n var 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 _exception2['default']('Invalid stack pop');\n }\n this.stackSlot--;\n }\n return item;\n }\n },\n\n topStack: function topStack() {\n var 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 contextName(context) {\n if (this.useDepths && context) {\n return 'depths[' + context + ']';\n } else {\n return 'depth' + context;\n }\n },\n\n quotedString: function quotedString(str) {\n return this.source.quotedString(str);\n },\n\n objectLiteral: function objectLiteral(obj) {\n return this.source.objectLiteral(obj);\n },\n\n aliasable: function aliasable(name) {\n var 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 setupHelper(paramSize, name, blockHelper) {\n var params = [],\n paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n var foundHelper = this.nameLookup('helpers', name, 'helper'),\n callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n return {\n params: params,\n paramsInit: paramsInit,\n name: foundHelper,\n callParams: [callContext].concat(params)\n };\n },\n\n setupParams: function setupParams(helper, paramSize, params) {\n var options = {},\n contexts = [],\n types = [],\n ids = [],\n objectArgs = !params,\n param = undefined;\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 var 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 var 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 setupHelperArgs(helper, paramSize, params, useRegister) {\n var 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 var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n for (var 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 !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, i, type) {\n var stack = compiler.popStack(),\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 [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n } else {\n return stack;\n }\n}\n\nexports['default'] = JavaScriptCompiler;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFB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LEVBQUU7QUFDbkIsU0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRDs7QUFFRCxNQUFJLGVBQWUsRUFBRTtBQUNuQixXQUFPLENBQ0wsUUFBUSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN0QyxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMvQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztHQUNILE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O3FCQUVjLGtCQUFrQiIsImZpbGUiOiJqYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29kZUdlbiBmcm9tICcuL2NvZGUtZ2VuJztcblxuZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9XG5cbkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7XG4gIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGVcbiAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzXG4gIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAvKiwgIHR5cGUgKi8pIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocGFyZW50LCBuYW1lKTtcbiAgfSxcbiAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLFxuICAgICAgJyhkZXB0aHMsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSxcbiAgICAgICcpJ1xuICAgIF07XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTtcbiAgICByZXR1cm4gW3JldmlzaW9uLCB2ZXJzaW9uc107XG4gIH0sXG5cbiAgYXBwZW5kVG9CdWZmZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7XG4gICAgLy8gRm9yY2UgYSBzb3VyY2UgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBtZXJnZSBsb2dpYy5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoJycpO1xuICB9LFxuICAvLyBFTkQgUFVCTElDIEFQSVxuICBpbnRlcm5hbE5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gdGhpcy5vcHRpb25zLnRyYWNrSWRzO1xuICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDtcblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcbiAgICB0aGlzLmlzQ2hpbGQgPSAhIWNvbnRleHQ7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7XG4gICAgICBkZWNvcmF0b3JzOiBbXSxcbiAgICAgIHByb2dyYW1zOiBbXSxcbiAgICAgIGVudmlyb25tZW50czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5wcmVhbWJsZSgpO1xuXG4gICAgdGhpcy5zdGFja1Nsb3QgPSAwO1xuICAgIHRoaXMuc3RhY2tWYXJzID0gW107XG4gICAgdGhpcy5hbGlhc2VzID0ge307XG4gICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07XG4gICAgdGhpcy5oYXNoZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107XG5cbiAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnVzZURlcHRocyA9XG4gICAgICB0aGlzLnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8XG4gICAgICBlbnZpcm9ubWVudC51c2VEZWNvcmF0b3JzIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgb3Bjb2RlLFxuICAgICAgZmlyc3RMb2MsXG4gICAgICBpLFxuICAgICAgbDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1wdHkoKSkge1xuICAgICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoW1xuICAgICAgICAndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJyxcbiAgICAgICAgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSxcbiAgICAgICAgJztcXG4nXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgJ2ZuJyxcbiAgICAgICAgICAncHJvcHMnLFxuICAgICAgICAgICdjb250YWluZXInLFxuICAgICAgICAgICdkZXB0aDAnLFxuICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAnYmxvY2tQYXJhbXMnLFxuICAgICAgICAgICdkZXB0aHMnLFxuICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoXG4gICAgICAgICAgJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICBsZXQgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBwcm9ncmFtcywgZGVjb3JhdG9ycyB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgc3RyaWN0TG9va3VwKHRoaXMub3B0aW9ucy5zdHJpY3QgJiYgc3RyaWN0LCB0aGlzLCBwYXJ0cywgaSwgdHlwZSlcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgW1xuICAgICAgICAnZm4nLFxuICAgICAgICAncHJvcHMnLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgbGV0IHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaChcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9uTG9va3VwQ29kZSA9IFtcbiAgICAgICcoJyxcbiAgICAgIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLFxuICAgICAgJyknXG4gICAgXTtcbiAgICBsZXQgZnVuY3Rpb25DYWxsID0gdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKFxuICAgICAgZnVuY3Rpb25Mb29rdXBDb2RlLFxuICAgICAgJ2NhbGwnLFxuICAgICAgaGVscGVyLmNhbGxQYXJhbXNcbiAgICApO1xuICAgIHRoaXMucHVzaChmdW5jdGlvbkNhbGwpO1xuICB9LFxuXG4gIGl0ZW1zU2VwYXJhdGVkQnk6IGZ1bmN0aW9uKGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwpIHtcbiAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXInKTtcblxuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICB0aGlzLmVtcHR5SGFzaCgpO1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpO1xuXG4gICAgbGV0IGhlbHBlck5hbWUgPSAodGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKFxuICAgICAgJ2hlbHBlcnMnLFxuICAgICAgbmFtZSxcbiAgICAgICdoZWxwZXInXG4gICAgKSk7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJywgJyhoZWxwZXIgPSAnLCBoZWxwZXJOYW1lLCAnIHx8ICcsIG5vbkhlbHBlciwgJyknXTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cFswXSA9ICcoaGVscGVyID0gJztcbiAgICAgIGxvb2t1cC5wdXNoKFxuICAgICAgICAnICE9IG51bGwgPyBoZWxwZXIgOiAnLFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goW1xuICAgICAgJygnLFxuICAgICAgbG9va3VwLFxuICAgICAgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLFxuICAgICAgJyksJyxcbiAgICAgICcodHlwZW9mIGhlbHBlciA9PT0gJyxcbiAgICAgIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSxcbiAgICAgICcgPyAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSxcbiAgICAgICcgOiBoZWxwZXIpKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihpc0R5bmFtaWMsIG5hbWUsIGluZGVudCkge1xuICAgIGxldCBwYXJhbXMgPSBbXSxcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgY29udGV4dCxcbiAgICAgIHR5cGUsXG4gICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgJ2Jsb2NrUGFyYW1zWycgK1xuICAgICAgICAgIG5hbWVbMF0gK1xuICAgICAgICAgICddLnBhdGhbJyArXG4gICAgICAgICAgbmFtZVsxXSArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpO1xuICAgIH1cbiAgfSxcblxuICAvLyBIRUxQRVJTXG5cbiAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlcixcblxuICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICBjaGlsZCxcbiAgICAgIGNvbXBpbGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTtcblxuICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIGksIHR5cGUpIHtcbiAgbGV0IHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSxcbiAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICBsZW4tLTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzdGFjayA9IGNvbXBpbGVyLm5hbWVMb29rdXAoc3RhY2ssIHBhcnRzW2ldLCB0eXBlKTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksXG4gICAgICAnKCcsXG4gICAgICBzdGFjayxcbiAgICAgICcsICcsXG4gICAgICBjb21waWxlci5xdW90ZWRTdHJpbmcocGFydHNbaV0pLFxuICAgICAgJywgJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLFxuICAgICAgJyApJ1xuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _handlebarsRuntime = require('./handlebars.runtime');\n\nvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n// Compiler imports\n\nvar _handlebarsCompilerAst = require('./handlebars/compiler/ast');\n\nvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\nvar _handlebarsCompilerBase = require('./handlebars/compiler/base');\n\nvar _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');\n\nvar _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');\n\nvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\nvar _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');\n\nvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\nvar _create = _handlebarsRuntime2['default'].create;\nfunction create() {\n var hb = _create();\n\n hb.compile = function (input, options) {\n return _handlebarsCompilerCompiler.compile(input, options, hb);\n };\n hb.precompile = function (input, options) {\n return _handlebarsCompilerCompiler.precompile(input, options, hb);\n };\n\n hb.AST = _handlebarsCompilerAst2['default'];\n hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n hb.Parser = _handlebarsCompilerBase.parser;\n hb.parse = _handlebarsCompilerBase.parse;\n hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst.Visitor = _handlebarsCompilerVisitor2['default'];\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==\n","import * as marked from \"marked\";\nimport Handlebars from \"handlebars\";\nimport { Section, Story } from \"./types.js\";\nimport { State } from \"./state.js\";\n\nexport class TextProcessor {\n story: Story;\n state: State;\n getCurrentSection: () => Section;\n handlebars: typeof Handlebars;\n\n constructor (story: Story,\n state: State,\n currentSection: () => Section) {\n this.story = story;\n this.state = state;\n this.getCurrentSection = currentSection;\n this.handlebars = Handlebars.create();\n\n this.handlebars.registerHelper(\"embed\", (name: string) => {\n const currentSection = this.getCurrentSection();\n if (currentSection.passages && name in currentSection.passages) {\n return this.process(currentSection.passages[name].text || \"\", true);\n } else if (name in this.story.sections) {\n return this.process(this.story.sections[name].text || \"\", true);\n }\n });\n\n this.handlebars.registerHelper(\"seen\", (name: string) => this.state.getSeen(name));\n this.handlebars.registerHelper(\"get\", (attribute: string) => this.state.get(attribute));\n this.handlebars.registerHelper(\"and\", (...args) => args.slice(0,-1).every(Boolean));\n this.handlebars.registerHelper(\"or\", (...args) => args.slice(0,-1).some(Boolean));\n this.handlebars.registerHelper(\"not\", (v) => !v);\n this.handlebars.registerHelper(\"eq\", (a,b) => a == b);\n this.handlebars.registerHelper(\"ne\", (a,b) => a != b);\n this.handlebars.registerHelper(\"gt\", (a,b) => a > b);\n this.handlebars.registerHelper(\"lt\", (a,b) => a < b);\n this.handlebars.registerHelper(\"gte\", (a,b) => a >= b);\n this.handlebars.registerHelper(\"lte\", (a,b) => a <= b);\n this.handlebars.registerHelper(\"array\", function (...args) {\n args.pop(); // remove last argument - options\n return args;\n });\n\n const addAdditionalParameters = (options: any) => {\n let result = \"\";\n const setters = options.hash.set as string || \"\";\n if (setters) {\n result += ` data-set='${JSON.stringify(setters.split(\",\").map(s => s.trim()))}'`;\n }\n return result;\n };\n\n this.handlebars.registerHelper(\"section\", (section: string, options) => {\n const text = options.hash.text as string || section;\n return new Handlebars.SafeString(`<a class=\"squiffy-link link-section\" data-section=\"${section}\"${addAdditionalParameters(options)} role=\"link\" tabindex=\"0\">${text}</a>`);\n });\n\n this.handlebars.registerHelper(\"passage\", (passage: string, options) => {\n const text = options.hash.text as string || passage;\n return new Handlebars.SafeString(`<a class=\"squiffy-link link-passage\" data-passage=\"${passage}\"${addAdditionalParameters(options)} role=\"link\" tabindex=\"0\">${text}</a>`);\n });\n }\n\n process(text: string, inline: boolean) {\n const template = this.handlebars.compile(text);\n text = template(this.state.getStore());\n\n if (inline) {\n return marked.parseInline(text, { async: false }).trim();\n }\n else {\n return marked.parse(text, { async: false }).trim();\n }\n }\n}","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nexport type SquiffyEventMap = {\n linkClick: { linkType: string }; // a story link was clicked\n set: { attribute: string, value: any }; // an attribute was set\n canGoBackChanged: { canGoBack: boolean }; // whether the \"back\" button should be enabled\n};\n\nexport type SquiffyEventHandler<E extends keyof SquiffyEventMap> =\n (payload: SquiffyEventMap[E]) => void;\n\nexport class Emitter<Events extends Record<string, any>> {\n private listeners = new Map<keyof Events, Set<Function>>();\n\n on<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n this.listeners.get(event)!.add(handler);\n return () => this.off(event, handler);\n }\n\n off<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n this.listeners.get(event)?.delete(handler);\n }\n\n once<E extends keyof Events>(event: E, handler: (p: Events[E]) => void) {\n const off = this.on(event, (payload) => {\n off();\n handler(payload);\n });\n return off;\n }\n\n emit<E extends keyof Events>(event: E, payload: Events[E]) {\n this.listeners.get(event)?.forEach(h => {\n try { (h as any)(payload); } catch (err) {\n // Swallow so a bad handler doesn't break the game; optionally log.\n console.error(`[Squiffy] handler for \"${String(event)}\" failed`, err);\n }\n });\n }\n}\n","import { Emitter, SquiffyEventMap } from \"./events.js\";\n\nexport class State {\n persist: boolean;\n storyId: string;\n onSet: (attribute: string, value: any) => void;\n onSetInternal?: (attribute: string, oldValue: any, newValue: any) => void;\n store: Record<string, any> = {};\n emitter: Emitter<SquiffyEventMap>;\n\n constructor(persist: boolean,\n storyId: string,\n onSet: (attribute: string, value: any) => void,\n emitter: Emitter<SquiffyEventMap>,\n onSetInternal?: (attribute: string, oldValue: any, newValue: any) => void) {\n this.persist = persist;\n this.storyId = storyId;\n this.onSet = onSet;\n this.emitter = emitter;\n this.onSetInternal = onSetInternal;\n }\n\n private usePersistentStorage() {\n return this.persist && window.localStorage && this.storyId;\n }\n\n set(attribute: string, value: any) {\n this.setInternal(attribute, value, true);\n }\n\n setInternal(attribute: string, value: any, raiseEvents: boolean) {\n if (typeof value === \"undefined\") value = true;\n\n if (raiseEvents && this.onSetInternal) {\n this.onSetInternal(attribute, this.get(attribute), structuredClone(value));\n }\n\n this.store[attribute] = structuredClone(value);\n\n if (this.usePersistentStorage()) {\n localStorage[this.storyId + \"-\" + attribute] = JSON.stringify(value);\n }\n\n if (raiseEvents) {\n this.emitter.emit(\"set\", { attribute, value });\n }\n\n this.onSet(attribute, value);\n }\n\n get(attribute: string): any {\n if (attribute in this.store) {\n return structuredClone(this.store[attribute]);\n }\n\n return null;\n }\n\n getStore() {\n return structuredClone(this.store);\n }\n\n load() {\n if (!this.usePersistentStorage()) {\n return;\n }\n\n const keys = Object.keys(localStorage);\n for (const key of keys) {\n if (key.startsWith(this.storyId + \"-\")) {\n const attribute = key.substring(this.storyId.length + 1);\n this.store[attribute] = JSON.parse(localStorage[key]);\n }\n }\n }\n\n reset() {\n this.store = {};\n\n if (!this.usePersistentStorage()) {\n return;\n }\n\n const keys = Object.keys(localStorage);\n for (const key of keys) {\n if (key.startsWith(this.storyId)) {\n localStorage.removeItem(key);\n }\n }\n }\n\n setSeen(sectionName: string) {\n let seenSections = this.get(\"_seen_sections\");\n if (!seenSections) seenSections = [];\n if (seenSections.indexOf(sectionName) == -1) {\n seenSections.push(sectionName);\n this.set(\"_seen_sections\", seenSections);\n }\n }\n\n getSeen(sectionName: string) {\n const seenSections = this.get(\"_seen_sections\");\n if (!seenSections) return false;\n return (seenSections.indexOf(sectionName) > -1);\n }\n}","import { Story } from \"./types.js\";\n\nexport function updateStory(oldStory: Story,\n newStory: Story,\n outputElement: HTMLElement,\n ui: any,\n disableLink: (link: Element) => void) {\n\n function safeQuerySelector(name: string) {\n return name.replace(/'/g, \"\\\\'\");\n }\n\n function getSectionContent(section: string) {\n return outputElement.querySelectorAll(`[data-source='[[${safeQuerySelector(section)}]]']`);\n }\n\n function getPassageContent(section: string, passage: string) {\n return outputElement.querySelectorAll(`[data-source='[[${safeQuerySelector(section)}]][${safeQuerySelector(passage)}]']`);\n }\n\n function updateElementTextPreservingDisabledPassageLinks(element: Element, text: string) {\n // Record which passage links are disabled\n const disabledPassages = Array.from(element\n .querySelectorAll(\"a.link-passage.disabled\"))\n .map((el: HTMLElement) => el.getAttribute(\"data-passage\"));\n\n element.innerHTML = text;\n\n // Re-disable links that were disabled before the update\n for (const passage of disabledPassages) {\n const link = element.querySelector(`a.link-passage[data-passage=\"${passage}\"]`);\n if (link) disableLink(link);\n }\n }\n\n for (const existingSection of Object.keys(oldStory.sections)) {\n const elements = getSectionContent(existingSection);\n if (elements.length) {\n const newSection = newStory.sections[existingSection];\n if (!newSection) {\n // section has been deleted\n for (const element of elements) {\n const parentOutputSection = element.closest(\".squiffy-output-section\");\n parentOutputSection.remove();\n }\n }\n else if (newSection.text != oldStory.sections[existingSection].text) {\n // section has been updated\n for (const element of elements) {\n updateElementTextPreservingDisabledPassageLinks(element, ui.processText(newSection.text, false));\n }\n }\n }\n\n if (!oldStory.sections[existingSection].passages) continue;\n\n for (const existingPassage of Object.keys(oldStory.sections[existingSection].passages)) {\n const elements = getPassageContent(existingSection, existingPassage);\n if (!elements.length) continue;\n\n const newPassage = newStory.sections[existingSection]?.passages && newStory.sections[existingSection]?.passages[existingPassage];\n if (!newPassage) {\n // passage has been deleted\n for (const element of elements) {\n const parentOutputPassage = element.closest(\".squiffy-output-passage\");\n parentOutputPassage.remove();\n }\n }\n else if (newPassage.text && newPassage.text != oldStory.sections[existingSection].passages[existingPassage].text) {\n // passage has been updated\n for (const element of elements) {\n updateElementTextPreservingDisabledPassageLinks(element, ui.processText(newPassage.text, false));\n }\n }\n }\n }\n}","import { TextProcessor } from \"./textProcessor.js\";\nimport { SquiffyPlugin } from \"./types.plugins.js\";\nimport { State } from \"./state.js\";\nimport { LinkHandler } from \"./linkHandler.js\";\nimport { Emitter, SquiffyEventMap } from \"./events.js\";\nimport { Animation } from \"./animation.js\";\n\nexport class PluginManager {\n outputElement: HTMLElement;\n textProcessor: TextProcessor;\n state: State;\n linkHandler: LinkHandler;\n getSectionText: (name: string) => string | null;\n getPassageText: (name: string) => string | null;\n processText: (text: string, inline: boolean) => string;\n addTransition: (fn: () => Promise<void>) => void;\n emitter: Emitter<SquiffyEventMap>;\n plugins: SquiffyPlugin[] = [];\n animation: Animation;\n\n constructor(outputElement: HTMLElement,\n textProcessor: TextProcessor,\n state: State,\n linkHandler: LinkHandler,\n getSectionText: (name: string) => string | null,\n getPassageText: (name: string) => string | null,\n processText: (text: string, inline: boolean) => string,\n addTransition: (fn: () => Promise<void>) => void,\n animation: Animation,\n emitter: Emitter<SquiffyEventMap>) {\n this.outputElement = outputElement;\n this.textProcessor = textProcessor;\n this.state = state;\n this.linkHandler = linkHandler;\n this.getSectionText = getSectionText;\n this.getPassageText = getPassageText;\n this.processText = processText;\n this.addTransition = addTransition;\n this.animation = animation;\n this.emitter = emitter;\n }\n\n add(plugin: SquiffyPlugin) {\n const instance = plugin.init({\n outputElement: this.outputElement,\n registerHelper: (name, helper) => {\n this.textProcessor.handlebars.registerHelper(name, helper);\n },\n registerLinkHandler: (type, handler) => {\n this.linkHandler.registerLinkHandler(type, handler);\n },\n get: (attribute) => this.state.get(attribute),\n set: (attribute, value) => this.state.set(attribute, value),\n getSectionText: this.getSectionText,\n getPassageText: this.getPassageText,\n processText: this.processText,\n addTransition: this.addTransition,\n animation: this.animation,\n on: (e, h) => this.emitter.on(e, h),\n off: (e, h) => this.emitter.off(e, h),\n once: (e, h) => this.emitter.once(e, h),\n });\n this.plugins.push(plugin);\n return instance;\n }\n\n onWrite(el: HTMLElement) {\n this.plugins.forEach(p => p.onWrite?.(el));\n }\n\n onLoad() {\n this.plugins.forEach(p => p.onLoad?.());\n }\n}","export function fadeReplace(element: HTMLElement, text: string): Promise<void> {\n return new Promise((resolve) => {\n element.addEventListener(\"transitionend\", function () {\n element.innerHTML = text;\n\n element.addEventListener(\"transitionend\", function () {\n element.classList.remove(\"fade-in\");\n resolve();\n }, { once: true });\n\n element.classList.remove(\"fade-out\");\n element.classList.add(\"fade-in\");\n }, { once: true });\n\n element.classList.add(\"fade-out\");\n });\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport { fadeReplace } from \"../utils.js\";\n\nexport function ReplaceLabel() : SquiffyPlugin {\n return {\n name: \"replaceLabel\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"label\", (name: string, options) => {\n return new Handlebars.SafeString(`<span class=\"squiffy-label-${name}\">${options.fn(this)}</span>`);\n });\n squiffy.registerHelper(\"replace\", (name: string, options) => {\n const result = options.fn(this);\n const element = squiffy.outputElement.querySelector<HTMLElement>(`.squiffy-label-${name}`);\n if (element) {\n squiffy.addTransition(() => fadeReplace(element, result));\n }\n return \"\";\n });\n }\n };\n}","import { HandleLinkResult, PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport type { SafeString } from \"handlebars\";\n\nexport function RotateSequencePlugin() : SquiffyPlugin {\n const rotateSequence = (squiffy: PluginHost, type: string, items: (string | SafeString)[], options: any) => {\n const stringItems = items.map(i => i.toString());\n const rotation = rotate(stringItems, null);\n const attribute = options.hash.set as string || \"\";\n if (attribute) {\n squiffy.set(attribute, rotation[0]);\n }\n const optionsString = JSON.stringify(rotation.slice(1)) || \"\";\n const text = options.hash.show == \"next\" ? rotation[1] : rotation[0];\n return new Handlebars.SafeString(`<a class=\"squiffy-link\" data-handler=\"${type}\" data-value=\"${rotation[0]}\" data-show=\"${options.hash.show || \"\"}\" data-options='${optionsString}' data-attribute=\"${attribute}\" role=\"link\">${text}</a>`);\n };\n\n const handleLink = (squiffy: PluginHost, link: HTMLElement, isRotate: boolean) => {\n const result: HandleLinkResult = {};\n const options = JSON.parse(link.getAttribute(\"data-options\")) as string[] || [];\n\n const rotateResult = rotate(options, isRotate ? link.getAttribute(\"data-value\") : \"\");\n\n link.innerHTML = link.getAttribute(\"data-show\") == \"next\" ? rotateResult[1] : rotateResult[0];\n link.setAttribute(\"data-value\", rotateResult[0]);\n link.setAttribute(\"data-options\", JSON.stringify(rotateResult.slice(1)) || \"\");\n if (!rotateResult[1]) {\n result.disableLink = true;\n }\n const attribute = link.getAttribute(\"data-attribute\");\n if (attribute) {\n squiffy.set(attribute, link.getAttribute(\"data-value\"));\n }\n\n return result;\n };\n\n const rotate = (options: string[], current: string | null): string[] => {\n const next = options[0];\n const remaining = options.slice(1);\n if (current) remaining.push(current);\n return [next, ...remaining];\n };\n\n return {\n name: \"rotateSequence\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"rotate\", (items: (string | SafeString)[], options) =>\n rotateSequence(squiffy, \"rotate\", items, options));\n squiffy.registerHelper(\"sequence\", (items: (string | SafeString)[], options) =>\n rotateSequence(squiffy, \"sequence\", items, options));\n\n squiffy.registerLinkHandler(\"rotate\", (link: HTMLElement) => {\n return handleLink(squiffy, link, true);\n });\n squiffy.registerLinkHandler(\"sequence\", (link: HTMLElement) => {\n return handleLink(squiffy, link, false);\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport type { SafeString } from \"handlebars\";\n\nexport function RandomPlugin() : SquiffyPlugin {\n return {\n name: \"random\",\n init(squiffy: PluginHost) {\n squiffy.registerHelper(\"random\", (items: (string | SafeString)[], options) => {\n const stringItems = items.map(i => i.toString());\n const randomIndex = Math.floor(Math.random() * stringItems.length);\n const item = stringItems[randomIndex];\n\n const attribute = options.hash.set as string || \"\";\n if (attribute) {\n squiffy.set(attribute, item);\n }\n return new Handlebars.SafeString(item);\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\nimport { fadeReplace } from \"../utils.js\";\nimport { SquiffyEventMap } from \"../events.js\";\n\nexport function LivePlugin(): SquiffyPlugin {\n let squiffy: PluginHost;\n return {\n name: \"live\",\n init(sq: PluginHost) {\n squiffy = sq;\n\n // No need to render the attribute value (or section or passage contents) here - this\n // is handled by onWrite, so that we pick up any attribute values set in the same passage.\n // TODO: We could mark values as \"pending\", then in onWrite we could iteratively resolve\n // any that are still pending. That would let us pick up {{live}} helpers inside embed\n // live sections/passages.\n squiffy.registerHelper(\"live\", (attribute: string, options) => {\n const section = options.hash.section as string || \"\";\n if (section) {\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\" data-section=\"${section}\"></span>`);\n }\n const passage = options.hash.passage as string || \"\";\n if (passage) {\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\" data-passage=\"${passage}\"></span>`);\n }\n return new Handlebars.SafeString(`<span class=\"squiffy-live\" data-attribute=\"${attribute}\"></span>`);\n });\n\n const onSet = async (e: SquiffyEventMap[\"set\"]) => {\n const promises: Promise<void>[] = [];\n const selector = `.squiffy-live[data-attribute=\"${CSS.escape(e.attribute)}\"]`;\n for (const el of squiffy.outputElement.querySelectorAll<HTMLElement>(selector)) {\n const oldContent = el.innerHTML;\n let newContent = \"\";\n if (el.dataset.section) {\n const sectionText = squiffy.getSectionText(el.dataset.section);\n if (sectionText) {\n newContent = squiffy.processText(sectionText, true);\n }\n } else if (el.dataset.passage) {\n const passageText = squiffy.getPassageText(el.dataset.passage);\n if (passageText) {\n newContent = squiffy.processText(passageText, true);\n }\n } else {\n newContent = e.value;\n }\n if (oldContent !== newContent) {\n promises.push(fadeReplace(el, newContent));\n }\n }\n await Promise.all(promises);\n };\n\n let setQueue: Promise<void> = Promise.resolve();\n squiffy.on(\"set\", (e) => {\n setQueue = setQueue.then(() => onSet(e));\n });\n },\n onWrite(element: HTMLElement) {\n if (!squiffy) return;\n\n const selector = \".squiffy-live\";\n element.querySelectorAll<HTMLElement>(selector).forEach((el) => {\n if (el.dataset.section) {\n const sectionText = squiffy.getSectionText(el.dataset.section);\n if (sectionText) {\n el.innerHTML = squiffy.processText(sectionText, true);\n }\n } else if (el.dataset.passage) {\n const passageText = squiffy.getPassageText(el.dataset.passage);\n if (passageText) {\n el.innerHTML = squiffy.processText(passageText, true);\n }\n } else {\n const attribute = el.dataset.attribute;\n el.textContent = attribute ? squiffy.get(attribute) : \"\";\n }\n });\n }\n };\n}","import { PluginHost, SquiffyPlugin } from \"../types.plugins.js\";\nimport Handlebars from \"handlebars\";\n\nexport function AnimatePlugin(): SquiffyPlugin {\n let squiffy: PluginHost;\n\n const parseDataset = (dataset: DOMStringMap): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(dataset)) {\n if (value == null) {\n result[key] = value;\n continue;\n }\n\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n }\n\n return result;\n };\n\n const setupAnimations = (element: HTMLElement) => {\n const selector = \".squiffy-animate\";\n for (const el of element.querySelectorAll<HTMLElement>(selector)) {\n const params = parseDataset(el.dataset);\n\n if (!params.content) {\n continue;\n }\n el.innerHTML = params.content;\n\n if (!params.name) {\n continue;\n }\n\n const runAnimation = () => {\n if (params.loop) {\n squiffy.animation.runAnimation(params.name, el, params, () => {}, true);\n } else {\n squiffy.addTransition(() => {\n return new Promise<void>((resolve) => {\n const currentContent = el.innerHTML;\n squiffy.animation.runAnimation(params.name, el, params, () => {\n el.classList.remove(\"squiffy-animate\");\n el.innerHTML = currentContent;\n resolve();\n }, false);\n });\n });\n }\n };\n\n if (params.trigger === \"link\") {\n const links = el.querySelectorAll(\"a\");\n for (const link of links) {\n squiffy.animation.addLinkAnimation(link, runAnimation);\n }\n } else {\n runAnimation();\n }\n }\n };\n\n return {\n name: \"animate\",\n init(sq: PluginHost) {\n squiffy = sq;\n\n squiffy.registerHelper(\"animate\", (name: string, options) => {\n const content = options.fn(this);\n const dataset: Record<string, any> = {\n name,\n content,\n ...options.hash,\n };\n\n const attrs = Object.entries(dataset)\n .map(([key, value]) =>\n ` data-${Handlebars.escapeExpression(key)}=\"${Handlebars.escapeExpression(JSON.stringify(value))}\"`\n )\n .join(\"\");\n\n return new Handlebars.SafeString(`<span class=\"squiffy-animate\"${attrs}></span>`);\n });\n },\n onWrite(element: HTMLElement) {\n setupAnimations(element);\n },\n onLoad() {\n setupAnimations(squiffy.outputElement);\n }\n };\n}","import { ReplaceLabel } from \"./replaceLabel.js\";\nimport { RotateSequencePlugin } from \"./rotateSequence.js\";\nimport { RandomPlugin } from \"./random.js\";\nimport { LivePlugin } from \"./live.js\";\nimport { AnimatePlugin } from \"./animate.js\";\n\nexport const Plugins = {\n ReplaceLabel,\n RotateSequencePlugin,\n RandomPlugin,\n LivePlugin,\n AnimatePlugin,\n};","import { HandleLinkResult } from \"./types.plugins.js\";\n\nexport class LinkHandler {\n linkHandlers: {[type: string]: (el: HTMLElement) => HandleLinkResult} = {};\n\n registerLinkHandler(type: string, handler: (el: HTMLElement) => HandleLinkResult) {\n this.linkHandlers[type] = handler;\n }\n\n handleLink(link: HTMLElement): [found: boolean, type: string, result: HandleLinkResult] {\n const type = link.getAttribute(\"data-handler\") || \"\";\n const handler = this.linkHandlers[type];\n if (handler) {\n return [true, type, handler(link)];\n }\n return [false, type, null];\n }\n}","/**\n * anime.js - ESM\n * @version v4.1.3\n * @author Julian Garnier\n * @license MIT\n * @copyright (c) 2025 Julian Garnier\n * @see https://animejs.com\n */\n\n// Global types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} DefaultsParams\n * @property {Number|String} [id]\n * @property {PercentageKeyframes|DurationKeyframes} [keyframes]\n * @property {EasingParam} [playbackEase]\n * @property {Number} [playbackRate]\n * @property {Number} [frameRate]\n * @property {Number|Boolean} [loop]\n * @property {Boolean} [reversed]\n * @property {Boolean} [alternate]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number|FunctionValue} [duration]\n * @property {Number|FunctionValue} [delay]\n * @property {Number} [loopDelay]\n * @property {EasingParam} [ease]\n * @property {'none'|'replace'|'blend'|compositionTypes} [composition]\n * @property {(v: any) => any} [modifier]\n * @property {(tickable: Tickable) => void} [onBegin]\n * @property {(tickable: Tickable) => void} [onBeforeUpdate]\n * @property {(tickable: Tickable) => void} [onUpdate]\n * @property {(tickable: Tickable) => void} [onLoop]\n * @property {(tickable: Tickable) => void} [onPause]\n * @property {(tickable: Tickable) => void} [onComplete]\n * @property {(renderable: Renderable) => void} [onRender]\n */\n\n/** @typedef {JSAnimation|Timeline} Renderable */\n/** @typedef {Timer|Renderable} Tickable */\n/** @typedef {Timer&JSAnimation&Timeline} CallbackArgument */\n/** @typedef {Animatable|Tickable|WAAPIAnimation|Draggable|ScrollObserver|TextSplitter|Scope} Revertible */\n\n// Stagger types ///////////////////////////////////////////////////////////////\n\n/**\n * @template T\n * @callback StaggerFunction\n * @param {Target} [target]\n * @param {Number} [index]\n * @param {Number} [length]\n * @param {Timeline} [tl]\n * @return {T}\n */\n\n/**\n * @typedef {Object} StaggerParams\n * @property {Number|String} [start]\n * @property {Number|'first'|'center'|'last'|'random'} [from]\n * @property {Boolean} [reversed]\n * @property {Array.<Number>} [grid]\n * @property {('x'|'y')} [axis]\n * @property {String|((target: Target, i: Number, length: Number) => Number)} [use]\n * @property {Number} [total]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n */\n\n// Eases types /////////////////////////////////////////////////////////////////\n\n/**\n * @callback EasingFunction\n * @param {Number} time\n * @return {Number}\n */\n\n/**\n * @typedef {('linear'|'linear(x1, x2 25%, x3)'|'in'|'out'|'inOut'|'inQuad'|'outQuad'|'inOutQuad'|'inCubic'|'outCubic'|'inOutCubic'|'inQuart'|'outQuart'|'inOutQuart'|'inQuint'|'outQuint'|'inOutQuint'|'inSine'|'outSine'|'inOutSine'|'inCirc'|'outCirc'|'inOutCirc'|'inExpo'|'outExpo'|'inOutExpo'|'inBounce'|'outBounce'|'inOutBounce'|'inBack'|'outBack'|'inOutBack'|'inElastic'|'outElastic'|'inOutElastic'|'irregular'|'cubicBezier'|'steps'|'in(p = 1.675)'|'out(p = 1.675)'|'inOut(p = 1.675)'|'inBack(overshoot = 1.70158)'|'outBack(overshoot = 1.70158)'|'inOutBack(overshoot = 1.70158)'|'inElastic(amplitude = 1, period = .3)'|'outElastic(amplitude = 1, period = .3)'|'inOutElastic(amplitude = 1, period = .3)'|'irregular(length = 10, randomness = 1)'|'cubicBezier(x1, y1, x2, y2)'|'steps(steps = 10)')} EaseStringParamNames\n */\n\n// A hack to get both ease names suggestions AND allow any strings\n// https://github.com/microsoft/TypeScript/issues/29729#issuecomment-460346421\n/** @typedef {(String & {})|EaseStringParamNames|EasingFunction|Spring} EasingParam */\n\n/** @typedef {HTMLElement|SVGElement} DOMTarget */\n/** @typedef {Record<String, any>} JSTarget */\n/** @typedef {DOMTarget|JSTarget} Target */\n/** @typedef {Target|NodeList|String} TargetSelector */\n/** @typedef {DOMTarget|NodeList|String} DOMTargetSelector */\n/** @typedef {Array.<DOMTargetSelector>|DOMTargetSelector} DOMTargetsParam */\n/** @typedef {Array.<DOMTarget>} DOMTargetsArray */\n/** @typedef {Array.<JSTarget>|JSTarget} JSTargetsParam */\n/** @typedef {Array.<JSTarget>} JSTargetsArray */\n/** @typedef {Array.<TargetSelector>|TargetSelector} TargetsParam */\n/** @typedef {Array.<Target>} TargetsArray */\n\n// Spring types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} SpringParams\n * @property {Number} [mass=1] - Mass, default 1\n * @property {Number} [stiffness=100] - Stiffness, default 100\n * @property {Number} [damping=10] - Damping, default 10\n * @property {Number} [velocity=0] - Initial velocity, default 0\n */\n\n // Callback types //////////////////////////////////////////////////////////////\n\n/**\n * @template T\n * @callback Callback\n * @param {T} self - Returns itself\n * @param {PointerEvent} [e]\n * @return {*}\n */\n\n/**\n * @template {object} T\n * @typedef {Object} TickableCallbacks\n * @property {Callback<T>} [onBegin]\n * @property {Callback<T>} [onBeforeUpdate]\n * @property {Callback<T>} [onUpdate]\n * @property {Callback<T>} [onLoop]\n * @property {Callback<T>} [onPause]\n * @property {Callback<T>} [onComplete]\n */\n\n/**\n * @template {object} T\n * @typedef {Object} RenderableCallbacks\n * @property {Callback<T>} [onRender]\n */\n\n// Timer types /////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} TimerOptions\n * @property {Number|String} [id]\n * @property {TweenParamValue} [duration]\n * @property {TweenParamValue} [delay]\n * @property {Number} [loopDelay]\n * @property {Boolean} [reversed]\n * @property {Boolean} [alternate]\n * @property {Boolean|Number} [loop]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number} [frameRate]\n * @property {Number} [playbackRate]\n */\n\n/**\n\n/**\n * @typedef {TimerOptions & TickableCallbacks<Timer>} TimerParams\n */\n\n// Tween types /////////////////////////////////////////////////////////////////\n\n/**\n * @callback FunctionValue\n * @param {Target} target - The animated target\n * @param {Number} index - The target index\n * @param {Number} length - The total number of animated targets\n * @return {Number|String|TweenObjectValue|Array.<Number|String|TweenObjectValue>}\n */\n\n/**\n * @callback TweenModifier\n * @param {Number} value - The animated value\n * @return {Number|String}\n */\n\n/** @typedef {[Number, Number, Number, Number]} ColorArray */\n\n/**\n * @typedef {Object} Tween\n * @property {Number} id\n * @property {JSAnimation} parent\n * @property {String} property\n * @property {Target} target\n * @property {String|Number} _value\n * @property {Function|null} _func\n * @property {EasingFunction} _ease\n * @property {Array.<Number>} _fromNumbers\n * @property {Array.<Number>} _toNumbers\n * @property {Array.<String>} _strings\n * @property {Number} _fromNumber\n * @property {Number} _toNumber\n * @property {Array.<Number>} _numbers\n * @property {Number} _number\n * @property {String} _unit\n * @property {TweenModifier} _modifier\n * @property {Number} _currentTime\n * @property {Number} _delay\n * @property {Number} _updateDuration\n * @property {Number} _startTime\n * @property {Number} _changeDuration\n * @property {Number} _absoluteStartTime\n * @property {tweenTypes} _tweenType\n * @property {valueTypes} _valueType\n * @property {Number} _composition\n * @property {Number} _isOverlapped\n * @property {Number} _isOverridden\n * @property {Number} _renderTransforms\n * @property {Tween} _prevRep\n * @property {Tween} _nextRep\n * @property {Tween} _prevAdd\n * @property {Tween} _nextAdd\n * @property {Tween} _prev\n * @property {Tween} _next\n */\n\n/**\n * @typedef TweenDecomposedValue\n * @property {Number} t - Type\n * @property {Number} n - Single number value\n * @property {String} u - Value unit\n * @property {String} o - Value operator\n * @property {Array.<Number>} d - Array of Numbers (in case of complex value type)\n * @property {Array.<String>} s - Strings (in case of complex value type)\n */\n\n/** @typedef {{_head: null|Tween, _tail: null|Tween}} TweenPropertySiblings */\n/** @typedef {Record<String, TweenPropertySiblings>} TweenLookups */\n/** @typedef {WeakMap.<Target, TweenLookups>} TweenReplaceLookups */\n/** @typedef {Map.<Target, TweenLookups>} TweenAdditiveLookups */\n\n// JSAnimation types ///////////////////////////////////////////////////////////\n\n/**\n * @typedef {Number|String|FunctionValue} TweenParamValue\n */\n\n/**\n * @typedef {TweenParamValue|[TweenParamValue, TweenParamValue]} TweenPropValue\n */\n\n/**\n * @typedef {(String & {})|'none'|'replace'|'blend'|compositionTypes} TweenComposition\n */\n\n/**\n * @typedef {Object} TweenParamsOptions\n * @property {TweenParamValue} [duration]\n * @property {TweenParamValue} [delay]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n */\n\n/**\n * @typedef {Object} TweenValues\n * @property {TweenParamValue} [from]\n * @property {TweenPropValue} [to]\n * @property {TweenPropValue} [fromTo]\n */\n\n/**\n * @typedef {TweenParamsOptions & TweenValues} TweenKeyValue\n */\n\n/**\n * @typedef {Array.<TweenKeyValue|TweenPropValue>} ArraySyntaxValue\n */\n\n/**\n * @typedef {TweenParamValue|ArraySyntaxValue|TweenKeyValue} TweenOptions\n */\n\n/**\n * @typedef {Partial<{to: TweenParamValue|Array.<TweenParamValue>; from: TweenParamValue|Array.<TweenParamValue>; fromTo: TweenParamValue|Array.<TweenParamValue>;}>} TweenObjectValue\n */\n\n/**\n * @typedef {Object} PercentageKeyframeOptions\n * @property {EasingParam} [ease]\n */\n\n/**\n * @typedef {Record<String, TweenParamValue>} PercentageKeyframeParams\n */\n\n/**\n * @typedef {Record<String, PercentageKeyframeParams & PercentageKeyframeOptions>} PercentageKeyframes\n */\n\n/**\n * @typedef {Array<Record<String, TweenOptions | TweenModifier | boolean> & TweenParamsOptions>} DurationKeyframes\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {PercentageKeyframes|DurationKeyframes} [keyframes]\n * @property {EasingParam} [playbackEase]\n */\n\n// TODO: Currently setting TweenModifier to the intersected Record<> makes the FunctionValue type target param any if only one parameter is set\n/**\n * @typedef {Record<String, TweenOptions | Callback<JSAnimation> | TweenModifier | boolean | PercentageKeyframes | DurationKeyframes | ScrollObserver> & TimerOptions & AnimationOptions & TweenParamsOptions & TickableCallbacks<JSAnimation> & RenderableCallbacks<JSAnimation>} AnimationParams\n */\n\n// Timeline types //////////////////////////////////////////////////////////////\n\n/**\n * Accepts:<br>\n * - `Number` - Absolute position in milliseconds (e.g., `500` places element at exactly 500ms)<br>\n * - `'+=Number'` - Addition: Position element X ms after the last element (e.g., `'+=100'`)<br>\n * - `'-=Number'` - Subtraction: Position element X ms before the last element's end (e.g., `'-=100'`)<br>\n * - `'*=Number'` - Multiplier: Position element at a fraction of the total duration (e.g., `'*=.5'` for halfway)<br>\n * - `'<'` - Previous end: Position element at the end position of the previous element<br>\n * - `'<<'` - Previous start: Position element at the start position of the previous element<br>\n * - `'<<+=Number'` - Combined: Position element relative to previous element's start (e.g., `'<<+=250'`)<br>\n * - `'label'` - Label: Position element at a named label position (e.g., `'My Label'`)\n *\n * @typedef {Number|`+=${Number}`|`-=${Number}`|`*=${Number}`|'<'|'<<'|`<<+=${Number}`|`<<-=${Number}`|String} TimelinePosition\n */\n\n/**\n * Accepts:<br>\n * - `Number` - Absolute position in milliseconds (e.g., `500` places animation at exactly 500ms)<br>\n * - `'+=Number'` - Addition: Position animation X ms after the last animation (e.g., `'+=100'`)<br>\n * - `'-=Number'` - Subtraction: Position animation X ms before the last animation's end (e.g., `'-=100'`)<br>\n * - `'*=Number'` - Multiplier: Position animation at a fraction of the total duration (e.g., `'*=.5'` for halfway)<br>\n * - `'<'` - Previous end: Position animation at the end position of the previous animation<br>\n * - `'<<'` - Previous start: Position animation at the start position of the previous animation<br>\n * - `'<<+=Number'` - Combined: Position animation relative to previous animation's start (e.g., `'<<+=250'`)<br>\n * - `'label'` - Label: Position animation at a named label position (e.g., `'My Label'`)<br>\n * - `stagger(String|Nummber)` - Stagger multi-elements animation positions (e.g., 10, 20, 30...)\n *\n * @typedef {TimelinePosition | StaggerFunction<Number|String>} TimelineAnimationPosition\n */\n\n/**\n * @typedef {Object} TimelineOptions\n * @property {DefaultsParams} [defaults]\n * @property {EasingParam} [playbackEase]\n */\n\n/**\n * @typedef {TimerOptions & TimelineOptions & TickableCallbacks<Timeline> & RenderableCallbacks<Timeline>} TimelineParams\n */\n\n// WAAPIAnimation types ////////////////////////////////////////////////////////\n\n/**\n * @typedef {String|Number|Array<String>|Array<Number>} WAAPITweenValue\n */\n\n/**\n * @callback WAAPIFunctionValue\n * @param {DOMTarget} target - The animated target\n * @param {Number} index - The target index\n * @param {Number} length - The total number of animated targets\n * @return {WAAPITweenValue}\n */\n\n/**\n * @typedef {WAAPITweenValue|WAAPIFunctionValue|Array<String|Number|WAAPIFunctionValue>} WAAPIKeyframeValue\n */\n\n/**\n * @typedef {(animation: WAAPIAnimation) => void} WAAPICallback\n */\n\n/**\n * @typedef {Object} WAAPITweenOptions\n * @property {WAAPIKeyframeValue} [to]\n * @property {WAAPIKeyframeValue} [from]\n * @property {Number|WAAPIFunctionValue} [duration]\n * @property {Number|WAAPIFunctionValue} [delay]\n * @property {EasingParam} [ease]\n * @property {CompositeOperation} [composition]\n */\n\n/**\n * @typedef {Object} WAAPIAnimationOptions\n * @property {Number|Boolean} [loop]\n * @property {Boolean} [Reversed]\n * @property {Boolean} [Alternate]\n * @property {Boolean|ScrollObserver} [autoplay]\n * @property {Number} [playbackRate]\n * @property {Number|WAAPIFunctionValue} [duration]\n * @property {Number|WAAPIFunctionValue} [delay]\n * @property {EasingParam} [ease]\n * @property {CompositeOperation} [composition]\n * @property {WAAPICallback} [onComplete]\n */\n\n/**\n * @typedef {Record<String, WAAPIKeyframeValue | WAAPIAnimationOptions | Boolean | ScrollObserver | WAAPICallback | EasingParam | WAAPITweenOptions> & WAAPIAnimationOptions} WAAPIAnimationParams\n */\n\n// Animatable types ////////////////////////////////////////////////////////////\n\n/**\n * @callback AnimatablePropertySetter\n * @param {Number|Array.<Number>} to\n * @param {Number} [duration]\n * @param {EasingParam} [ease]\n * @return {AnimatableObject}\n */\n\n/**\n * @callback AnimatablePropertyGetter\n * @return {Number|Array.<Number>}\n */\n\n/**\n * @typedef {AnimatablePropertySetter & AnimatablePropertyGetter} AnimatableProperty\n */\n\n/**\n * @typedef {Animatable & Record<String, AnimatableProperty>} AnimatableObject\n */\n\n/**\n * @typedef {Object} AnimatablePropertyParamsOptions\n * @property {String} [unit]\n * @property {TweenParamValue} [duration]\n * @property {EasingParam} [ease]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n */\n\n/**\n * @typedef {Record<String, TweenParamValue | EasingParam | TweenModifier | TweenComposition | AnimatablePropertyParamsOptions> & AnimatablePropertyParamsOptions} AnimatableParams\n */\n\n// Scope types /////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} ReactRef\n * @property {HTMLElement|SVGElement|null} [current]\n */\n\n/**\n * @typedef {Object} AngularRef\n * @property {HTMLElement|SVGElement} [nativeElement]\n */\n\n/**\n * @typedef {Object} ScopeParams\n * @property {DOMTargetSelector|ReactRef|AngularRef} [root]\n * @property {DefaultsParams} [defaults]\n * @property {Record<String, String>} [mediaQueries]\n */\n\n/**\n * @template T\n * @callback ScopedCallback\n * @param {Scope} scope\n * @return {T}\n */\n\n/**\n * @callback ScopeCleanupCallback\n * @param {Scope} [scope]\n */\n\n/**\n * @callback ScopeConstructorCallback\n * @param {Scope} [scope]\n * @return {ScopeCleanupCallback|void}\n */\n\n/**\n * @callback ScopeMethod\n * @param {...*} args\n * @return {ScopeCleanupCallback|void}\n */\n\n// Scroll types ////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {String|Number} ScrollThresholdValue\n */\n\n/**\n * @typedef {Object} ScrollThresholdParam\n * @property {ScrollThresholdValue} [target]\n * @property {ScrollThresholdValue} [container]\n */\n\n/**\n * @callback ScrollObserverAxisCallback\n * @param {ScrollObserver} self\n * @return {'x'|'y'}\n */\n\n/**\n * @callback ScrollThresholdCallback\n * @param {ScrollObserver} self\n * @return {ScrollThresholdValue|ScrollThresholdParam}\n */\n\n/**\n * @typedef {Object} ScrollObserverParams\n * @property {Number|String} [id]\n * @property {Boolean|Number|String|EasingParam} [sync]\n * @property {TargetsParam} [container]\n * @property {TargetsParam} [target]\n * @property {'x'|'y'|ScrollObserverAxisCallback|((observer: ScrollObserver) => 'x'|'y'|ScrollObserverAxisCallback)} [axis]\n * @property {ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback|((observer: ScrollObserver) => ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback)} [enter]\n * @property {ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback|((observer: ScrollObserver) => ScrollThresholdValue|ScrollThresholdParam|ScrollThresholdCallback)} [leave]\n * @property {Boolean|((observer: ScrollObserver) => Boolean)} [repeat]\n * @property {Boolean} [debug]\n * @property {Callback<ScrollObserver>} [onEnter]\n * @property {Callback<ScrollObserver>} [onLeave]\n * @property {Callback<ScrollObserver>} [onEnterForward]\n * @property {Callback<ScrollObserver>} [onLeaveForward]\n * @property {Callback<ScrollObserver>} [onEnterBackward]\n * @property {Callback<ScrollObserver>} [onLeaveBackward]\n * @property {Callback<ScrollObserver>} [onUpdate]\n * @property {Callback<ScrollObserver>} [onSyncComplete]\n */\n\n// Draggable types /////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} DraggableAxisParam\n * @property {String} [mapTo]\n * @property {TweenModifier} [modifier]\n * @property {TweenComposition} [composition]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [snap]\n */\n\n/**\n * @typedef {Object} DraggableCursorParams\n * @property {String} [onHover]\n * @property {String} [onGrab]\n */\n\n/**\n * @typedef {Object} DraggableParams\n * @property {DOMTargetSelector} [trigger]\n * @property {DOMTargetSelector|Array<Number>|((draggable: Draggable) => DOMTargetSelector|Array<Number>)} [container]\n * @property {Boolean|DraggableAxisParam} [x]\n * @property {Boolean|DraggableAxisParam} [y]\n * @property {TweenModifier} [modifier]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [snap]\n * @property {Number|Array<Number>|((draggable: Draggable) => Number|Array<Number>)} [containerPadding]\n * @property {Number|((draggable: Draggable) => Number)} [containerFriction]\n * @property {Number|((draggable: Draggable) => Number)} [releaseContainerFriction]\n * @property {Number|((draggable: Draggable) => Number)} [dragSpeed]\n * @property {Number|((draggable: Draggable) => Number)} [scrollSpeed]\n * @property {Number|((draggable: Draggable) => Number)} [scrollThreshold]\n * @property {Number|((draggable: Draggable) => Number)} [minVelocity]\n * @property {Number|((draggable: Draggable) => Number)} [maxVelocity]\n * @property {Number|((draggable: Draggable) => Number)} [velocityMultiplier]\n * @property {Number} [releaseMass]\n * @property {Number} [releaseStiffness]\n * @property {Number} [releaseDamping]\n * @property {Boolean} [releaseDamping]\n * @property {EasingParam} [releaseEase]\n * @property {Boolean|DraggableCursorParams|((draggable: Draggable) => Boolean|DraggableCursorParams)} [cursor]\n * @property {Callback<Draggable>} [onGrab]\n * @property {Callback<Draggable>} [onDrag]\n * @property {Callback<Draggable>} [onRelease]\n * @property {Callback<Draggable>} [onUpdate]\n * @property {Callback<Draggable>} [onSettle]\n * @property {Callback<Draggable>} [onSnap]\n * @property {Callback<Draggable>} [onResize]\n * @property {Callback<Draggable>} [onAfterResize]\n */\n\n// Text types //////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {Object} splitTemplateParams\n * @property {false|String} [class]\n * @property {Boolean|'hidden'|'clip'|'visible'|'scroll'|'auto'} [wrap]\n * @property {Boolean|'top'|'right'|'bottom'|'left'|'center'} [clone]\n */\n\n/**\n * @typedef {Boolean|String} SplitValue\n */\n\n/**\n * @callback SplitFunctionValue\n * @param {Node|HTMLElement} [value]\n * @return String\n */\n\n/**\n * @typedef {Object} TextSplitterParams\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [lines]\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [words]\n * @property {SplitValue|splitTemplateParams|SplitFunctionValue} [chars]\n * @property {Boolean} [accessible]\n * @property {Boolean} [includeSpaces]\n * @property {Boolean} [debug]\n */\n\n// SVG types ///////////////////////////////////////////////////////////////////\n\n/**\n * @typedef {SVGGeometryElement & {\n * setAttribute(name: 'draw', value: `${number} ${number}`): void;\n * draw: `${number} ${number}`;\n * }} DrawableSVGGeometry\n */\n\n\n// Environments\n\n// TODO: Do we need to check if we're running inside a worker ?\nconst isBrowser = typeof window !== 'undefined';\n\n/** @type {Window & {AnimeJS: Array}|null} */\nconst win = isBrowser ? /** @type {Window & {AnimeJS: Array}} */(/** @type {unknown} */(window)) : null;\n\n/** @type {Document|null} */\nconst doc = isBrowser ? document : null;\n\n// Enums\n\n/** @enum {Number} */\nconst tweenTypes = {\n OBJECT: 0,\n ATTRIBUTE: 1,\n CSS: 2,\n TRANSFORM: 3,\n CSS_VAR: 4,\n};\n\n/** @enum {Number} */\nconst valueTypes = {\n NUMBER: 0,\n UNIT: 1,\n COLOR: 2,\n COMPLEX: 3,\n};\n\n/** @enum {Number} */\nconst tickModes = {\n NONE: 0,\n AUTO: 1,\n FORCE: 2,\n};\n\n/** @enum {Number} */\nconst compositionTypes = {\n replace: 0,\n none: 1,\n blend: 2,\n};\n\n// Cache symbols\n\nconst isRegisteredTargetSymbol = Symbol();\nconst isDomSymbol = Symbol();\nconst isSvgSymbol = Symbol();\nconst transformsSymbol = Symbol();\nconst morphPointsSymbol = Symbol();\nconst proxyTargetSymbol = Symbol();\n\n// Numbers\n\nconst minValue = 1e-11;\nconst maxValue = 1e12;\nconst K = 1e3;\nconst maxFps = 120;\n\n// Strings\n\nconst emptyString = '';\nconst shortTransforms = /*#__PURE__*/ (() => {\n const map = new Map();\n map.set('x', 'translateX');\n map.set('y', 'translateY');\n map.set('z', 'translateZ');\n return map;\n})();\n\nconst validTransforms = [\n 'translateX',\n 'translateY',\n 'translateZ',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ',\n 'skew',\n 'skewX',\n 'skewY',\n 'perspective',\n 'matrix',\n 'matrix3d',\n];\n\nconst transformsFragmentStrings = /*#__PURE__*/ validTransforms.reduce((a, v) => ({...a, [v]: v + '('}), {});\n\n// Functions\n\n/** @return {void} */\nconst noop = () => {};\n\n// Regex\n\nconst hexTestRgx = /(^#([\\da-f]{3}){1,2}$)|(^#([\\da-f]{4}){1,2}$)/i;\nconst rgbExecRgx = /rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i;\nconst rgbaExecRgx = /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)\\s*\\)/i;\nconst hslExecRgx = /hsl\\(\\s*(-?\\d+|-?\\d*.\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*\\)/i;\nconst hslaExecRgx = /hsla\\(\\s*(-?\\d+|-?\\d*.\\d+)\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)%\\s*,\\s*(-?\\d+|-?\\d*.\\d+)\\s*\\)/i;\n// export const digitWithExponentRgx = /[-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g;\nconst digitWithExponentRgx = /[-+]?\\d*\\.?\\d+(?:e[-+]?\\d)?/gi;\n// export const unitsExecRgx = /^([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?)+([a-z]+|%)$/i;\nconst unitsExecRgx = /^([-+]?\\d*\\.?\\d+(?:e[-+]?\\d+)?)([a-z]+|%)$/i;\nconst lowerCaseRgx = /([a-z])([A-Z])/g;\nconst transformsExecRgx = /(\\w+)(\\([^)]+\\)+)/g; // Match inline transforms with cacl() values, returns the value wrapped in ()\nconst relativeValuesExecRgx = /(\\*=|\\+=|-=)/;\n\n\n\n\n/** @type {DefaultsParams} */\nconst defaults = {\n id: null,\n keyframes: null,\n playbackEase: null,\n playbackRate: 1,\n frameRate: maxFps,\n loop: 0,\n reversed: false,\n alternate: false,\n autoplay: true,\n duration: K,\n delay: 0,\n loopDelay: 0,\n ease: 'out(2)',\n composition: compositionTypes.replace,\n modifier: v => v,\n onBegin: noop,\n onBeforeUpdate: noop,\n onUpdate: noop,\n onLoop: noop,\n onPause: noop,\n onComplete: noop,\n onRender: noop,\n};\n\nconst scope = {\n /** @type {Scope} */\n current: null,\n /** @type {Document|DOMTarget} */\n root: doc,\n};\n\nconst globals = {\n /** @type {DefaultsParams} */\n defaults,\n /** @type {Number} */\n precision: 4,\n /** @type {Number} equals 1 in ms mode, 0.001 in s mode */\n timeScale: 1,\n /** @type {Number} */\n tickThreshold: 200,\n};\n\nconst globalVersions = { version: '4.1.3', engine: null };\n\nif (isBrowser) {\n if (!win.AnimeJS) win.AnimeJS = [];\n win.AnimeJS.push(globalVersions);\n}\n\n// Strings\n\n/**\n * @param {String} str\n * @return {String}\n */\nconst toLowerCase = str => str.replace(lowerCaseRgx, '$1-$2').toLowerCase();\n\n/**\n * Prioritize this method instead of regex when possible\n * @param {String} str\n * @param {String} sub\n * @return {Boolean}\n */\nconst stringStartsWith = (str, sub) => str.indexOf(sub) === 0;\n\n// Note: Date.now is used instead of performance.now since it is precise enough for timings calculations, performs slightly faster and works in Node.js environement.\nconst now = Date.now;\n\n// Types checkers\n\nconst isArr = Array.isArray;\n/**@param {any} a @return {a is Record<String, any>} */\nconst isObj = a => a && a.constructor === Object;\n/**@param {any} a @return {a is Number} */\nconst isNum = a => typeof a === 'number' && !isNaN(a);\n/**@param {any} a @return {a is String} */\nconst isStr = a => typeof a === 'string';\n/**@param {any} a @return {a is Function} */\nconst isFnc = a => typeof a === 'function';\n/**@param {any} a @return {a is undefined} */\nconst isUnd = a => typeof a === 'undefined';\n/**@param {any} a @return {a is null | undefined} */\nconst isNil = a => isUnd(a) || a === null;\n/**@param {any} a @return {a is SVGElement} */\nconst isSvg = a => isBrowser && a instanceof SVGElement;\n/**@param {any} a @return {Boolean} */\nconst isHex = a => hexTestRgx.test(a);\n/**@param {any} a @return {Boolean} */\nconst isRgb = a => stringStartsWith(a, 'rgb');\n/**@param {any} a @return {Boolean} */\nconst isHsl = a => stringStartsWith(a, 'hsl');\n/**@param {any} a @return {Boolean} */\nconst isCol = a => isHex(a) || isRgb(a) || isHsl(a);\n/**@param {any} a @return {Boolean} */\nconst isKey = a => !globals.defaults.hasOwnProperty(a);\n\n// Number\n\n/**\n * @param {Number|String} str\n * @return {Number}\n */\nconst parseNumber = str => isStr(str) ?\n parseFloat(/** @type {String} */(str)) :\n /** @type {Number} */(str);\n\n// Math\n\nconst pow = Math.pow;\nconst sqrt = Math.sqrt;\nconst sin = Math.sin;\nconst cos = Math.cos;\nconst abs = Math.abs;\nconst exp = Math.exp;\nconst ceil = Math.ceil;\nconst floor = Math.floor;\nconst asin = Math.asin;\nconst max = Math.max;\nconst atan2 = Math.atan2;\nconst PI = Math.PI;\nconst _round = Math.round;\n\n/**\n * @param {Number} v\n * @param {Number} min\n * @param {Number} max\n * @return {Number}\n */\nconst clamp = (v, min, max) => v < min ? min : v > max ? max : v;\n\nconst powCache = {};\n\n/**\n * @param {Number} v\n * @param {Number} decimalLength\n * @return {Number}\n */\nconst round = (v, decimalLength) => {\n if (decimalLength < 0) return v;\n if (!decimalLength) return _round(v);\n let p = powCache[decimalLength];\n if (!p) p = powCache[decimalLength] = 10 ** decimalLength;\n return _round(v * p) / p;\n};\n\n/**\n * @param {Number} v\n * @param {Number|Array<Number>} increment\n * @return {Number}\n */\nconst snap = (v, increment) => isArr(increment) ? increment.reduce((closest, cv) => (abs(cv - v) < abs(closest - v) ? cv : closest)) : increment ? _round(v / increment) * increment : v;\n\n/**\n * @param {Number} start\n * @param {Number} end\n * @param {Number} progress\n * @return {Number}\n */\nconst interpolate = (start, end, progress) => start + (end - start) * progress;\n\n/**\n * @param {Number} min\n * @param {Number} max\n * @param {Number} [decimalLength]\n * @return {Number}\n */\nconst random = (min, max, decimalLength) => { const m = 10 ** (decimalLength || 0); return floor((Math.random() * (max - min + (1 / m)) + min) * m) / m };\n\n/**\n * Adapted from https://bost.ocks.org/mike/shuffle/\n * @param {Array} items\n * @return {Array}\n */\nconst shuffle = items => {\n let m = items.length, t, i;\n while (m) { i = random(0, --m); t = items[m]; items[m] = items[i]; items[i] = t; }\n return items;\n};\n\n/**\n * @param {Number} v\n * @return {Number}\n */\nconst clampInfinity = v => v === Infinity ? maxValue : v === -Infinity ? -1e12 : v;\n\n/**\n * @param {Number} v\n * @return {Number}\n */\nconst normalizeTime = v => v <= minValue ? minValue : clampInfinity(round(v, 11));\n\n// Arrays\n\n/**\n * @template T\n * @param {T[]} a\n * @return {T[]}\n */\nconst cloneArray = a => isArr(a) ? [ ...a ] : a;\n\n// Objects\n\n/**\n * @template T\n * @template U\n * @param {T} o1\n * @param {U} o2\n * @return {T & U}\n */\nconst mergeObjects = (o1, o2) => {\n const merged = /** @type {T & U} */({ ...o1 });\n for (let p in o2) {\n const o1p = /** @type {T & U} */(o1)[p];\n merged[p] = isUnd(o1p) ? /** @type {T & U} */(o2)[p] : o1p;\n } return merged;\n};\n\n// Linked lists\n\n/**\n * @param {Object} parent\n * @param {Function} callback\n * @param {Boolean} [reverse]\n * @param {String} [prevProp]\n * @param {String} [nextProp]\n * @return {void}\n */\nconst forEachChildren = (parent, callback, reverse, prevProp = '_prev', nextProp = '_next') => {\n let next = parent._head;\n let adjustedNextProp = nextProp;\n if (reverse) {\n next = parent._tail;\n adjustedNextProp = prevProp;\n }\n while (next) {\n const currentNext = next[adjustedNextProp];\n callback(next);\n next = currentNext;\n }\n};\n\n/**\n * @param {Object} parent\n * @param {Object} child\n * @param {String} [prevProp]\n * @param {String} [nextProp]\n * @return {void}\n */\nconst removeChild = (parent, child, prevProp = '_prev', nextProp = '_next') => {\n const prev = child[prevProp];\n const next = child[nextProp];\n prev ? prev[nextProp] = next : parent._head = next;\n next ? next[prevProp] = prev : parent._tail = prev;\n child[prevProp] = null;\n child[nextProp] = null;\n};\n\n/**\n * @param {Object} parent\n * @param {Object} child\n * @param {Function} [sortMethod]\n * @param {String} prevProp\n * @param {String} nextProp\n * @return {void}\n */\nconst addChild = (parent, child, sortMethod, prevProp = '_prev', nextProp = '_next') => {\n let prev = parent._tail;\n while (prev && sortMethod && sortMethod(prev, child)) prev = prev[prevProp];\n const next = prev ? prev[nextProp] : parent._head;\n prev ? prev[nextProp] = child : parent._head = child;\n next ? next[prevProp] = child : parent._tail = child;\n child[prevProp] = prev;\n child[nextProp] = next;\n};\n\n/**\n * @param {(...args: any[]) => Tickable | ((...args: any[]) => void)} constructor\n * @return {(...args: any[]) => Tickable | ((...args: any[]) => void)}\n */\nconst createRefreshable = constructor => {\n /** @type {Tickable} */\n let tracked;\n return (...args) => {\n let currentIteration, currentIterationProgress, reversed, alternate;\n if (tracked) {\n currentIteration = tracked.currentIteration;\n currentIterationProgress = tracked.iterationProgress;\n reversed = tracked.reversed;\n alternate = tracked._alternate;\n tracked.revert();\n }\n const cleanup = constructor(...args);\n if (cleanup && !isFnc(cleanup) && cleanup.revert) tracked = cleanup;\n if (!isUnd(currentIterationProgress)) {\n /** @type {Tickable} */(tracked).currentIteration = currentIteration;\n /** @type {Tickable} */(tracked).iterationProgress = (alternate ? !(currentIteration % 2) ? reversed : !reversed : reversed) ? 1 - currentIterationProgress : currentIterationProgress;\n }\n return cleanup || noop;\n }\n};\n\n/*\n * Base class to control framerate and playback rate.\n * Inherited by Engine, Timer, Animation and Timeline.\n */\nclass Clock {\n\n /** @param {Number} [initTime] */\n constructor(initTime = 0) {\n /** @type {Number} */\n this.deltaTime = 0;\n /** @type {Number} */\n this._currentTime = initTime;\n /** @type {Number} */\n this._elapsedTime = initTime;\n /** @type {Number} */\n this._startTime = initTime;\n /** @type {Number} */\n this._lastTime = initTime;\n /** @type {Number} */\n this._scheduledTime = 0;\n /** @type {Number} */\n this._frameDuration = round(K / maxFps, 0);\n /** @type {Number} */\n this._fps = maxFps;\n /** @type {Number} */\n this._speed = 1;\n /** @type {Boolean} */\n this._hasChildren = false;\n /** @type {Tickable|Tween} */\n this._head = null;\n /** @type {Tickable|Tween} */\n this._tail = null;\n }\n\n get fps() {\n return this._fps;\n }\n\n set fps(frameRate) {\n const previousFrameDuration = this._frameDuration;\n const fr = +frameRate;\n const fps = fr < minValue ? minValue : fr;\n const frameDuration = round(K / fps, 0);\n this._fps = fps;\n this._frameDuration = frameDuration;\n this._scheduledTime += frameDuration - previousFrameDuration;\n }\n\n get speed() {\n return this._speed;\n }\n\n set speed(playbackRate) {\n const pbr = +playbackRate;\n this._speed = pbr < minValue ? minValue : pbr;\n }\n\n /**\n * @param {Number} time\n * @return {tickModes}\n */\n requestTick(time) {\n const scheduledTime = this._scheduledTime;\n const elapsedTime = this._elapsedTime;\n this._elapsedTime += (time - elapsedTime);\n // If the elapsed time is lower than the scheduled time\n // this means not enough time has passed to hit one frameDuration\n // so skip that frame\n if (elapsedTime < scheduledTime) return tickModes.NONE;\n const frameDuration = this._frameDuration;\n const frameDelta = elapsedTime - scheduledTime;\n // Ensures that _scheduledTime progresses in steps of at least 1 frameDuration.\n // Skips ahead if the actual elapsed time is higher.\n this._scheduledTime += frameDelta < frameDuration ? frameDuration : frameDelta;\n return tickModes.AUTO;\n }\n\n /**\n * @param {Number} time\n * @return {Number}\n */\n computeDeltaTime(time) {\n const delta = time - this._lastTime;\n this.deltaTime = delta;\n this._lastTime = time;\n return delta;\n }\n\n}\n\n\n\n\n/**\n * @param {Tickable} tickable\n * @param {Number} time\n * @param {Number} muteCallbacks\n * @param {Number} internalRender\n * @param {tickModes} tickMode\n * @return {Number}\n */\nconst render = (tickable, time, muteCallbacks, internalRender, tickMode) => {\n\n const parent = tickable.parent;\n const duration = tickable.duration;\n const completed = tickable.completed;\n const iterationDuration = tickable.iterationDuration;\n const iterationCount = tickable.iterationCount;\n const _currentIteration = tickable._currentIteration;\n const _loopDelay = tickable._loopDelay;\n const _reversed = tickable._reversed;\n const _alternate = tickable._alternate;\n const _hasChildren = tickable._hasChildren;\n const tickableDelay = tickable._delay;\n const tickablePrevAbsoluteTime = tickable._currentTime; // TODO: rename ._currentTime to ._absoluteCurrentTime\n\n const tickableEndTime = tickableDelay + iterationDuration;\n const tickableAbsoluteTime = time - tickableDelay;\n const tickablePrevTime = clamp(tickablePrevAbsoluteTime, -tickableDelay, duration);\n const tickableCurrentTime = clamp(tickableAbsoluteTime, -tickableDelay, duration);\n const deltaTime = tickableAbsoluteTime - tickablePrevAbsoluteTime;\n const isCurrentTimeAboveZero = tickableCurrentTime > 0;\n const isCurrentTimeEqualOrAboveDuration = tickableCurrentTime >= duration;\n const isSetter = duration <= minValue;\n const forcedTick = tickMode === tickModes.FORCE;\n\n let isOdd = 0;\n let iterationElapsedTime = tickableAbsoluteTime;\n // Render checks\n // Used to also check if the children have rendered in order to trigger the onRender callback on the parent timer\n let hasRendered = 0;\n\n // Execute the \"expensive\" iterations calculations only when necessary\n if (iterationCount > 1) {\n // bitwise NOT operator seems to be generally faster than Math.floor() across browsers\n const currentIteration = ~~(tickableCurrentTime / (iterationDuration + (isCurrentTimeEqualOrAboveDuration ? 0 : _loopDelay)));\n tickable._currentIteration = clamp(currentIteration, 0, iterationCount);\n // Prevent the iteration count to go above the max iterations when reaching the end of the animation\n if (isCurrentTimeEqualOrAboveDuration) tickable._currentIteration--;\n isOdd = tickable._currentIteration % 2;\n iterationElapsedTime = tickableCurrentTime % (iterationDuration + _loopDelay) || 0;\n }\n\n // Checks if exactly one of _reversed and (_alternate && isOdd) is true\n const isReversed = _reversed ^ (_alternate && isOdd);\n const _ease = /** @type {Renderable} */(tickable)._ease;\n let iterationTime = isCurrentTimeEqualOrAboveDuration ? isReversed ? 0 : duration : isReversed ? iterationDuration - iterationElapsedTime : iterationElapsedTime;\n if (_ease) iterationTime = iterationDuration * _ease(iterationTime / iterationDuration) || 0;\n const isRunningBackwards = (parent ? parent.backwards : tickableAbsoluteTime < tickablePrevAbsoluteTime) ? !isReversed : !!isReversed;\n\n tickable._currentTime = tickableAbsoluteTime;\n tickable._iterationTime = iterationTime;\n tickable.backwards = isRunningBackwards;\n\n if (isCurrentTimeAboveZero && !tickable.began) {\n tickable.began = true;\n if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {\n tickable.onBegin(/** @type {CallbackArgument} */(tickable));\n }\n } else if (tickableAbsoluteTime <= 0) {\n tickable.began = false;\n }\n\n // Only triggers onLoop for tickable without children, otherwise call the the onLoop callback in the tick function\n // Make sure to trigger the onLoop before rendering to allow .refresh() to pickup the current values\n if (!muteCallbacks && !_hasChildren && isCurrentTimeAboveZero && tickable._currentIteration !== _currentIteration) {\n tickable.onLoop(/** @type {CallbackArgument} */(tickable));\n }\n\n if (\n forcedTick ||\n tickMode === tickModes.AUTO && (\n time >= tickableDelay && time <= tickableEndTime || // Normal render\n time <= tickableDelay && tickablePrevTime > tickableDelay || // Playhead is before the animation start time so make sure the animation is at its initial state\n time >= tickableEndTime && tickablePrevTime !== duration // Playhead is after the animation end time so make sure the animation is at its end state\n ) ||\n iterationTime >= tickableEndTime && tickablePrevTime !== duration ||\n iterationTime <= tickableDelay && tickablePrevTime > 0 ||\n time <= tickablePrevTime && tickablePrevTime === duration && completed || // Force a render if a seek occurs on an completed animation\n isCurrentTimeEqualOrAboveDuration && !completed && isSetter // This prevents 0 duration tickables to be skipped\n ) {\n\n if (isCurrentTimeAboveZero) {\n // Trigger onUpdate callback before rendering\n tickable.computeDeltaTime(tickablePrevTime);\n if (!muteCallbacks) tickable.onBeforeUpdate(/** @type {CallbackArgument} */(tickable));\n }\n\n // Start tweens rendering\n if (!_hasChildren) {\n\n // Time has jumped more than globals.tickThreshold so consider this tick manual\n const forcedRender = forcedTick || (isRunningBackwards ? deltaTime * -1 : deltaTime) >= globals.tickThreshold;\n const absoluteTime = tickable._offset + (parent ? parent._offset : 0) + tickableDelay + iterationTime;\n\n // Only Animation can have tweens, Timer returns undefined\n let tween = /** @type {Tween} */(/** @type {JSAnimation} */(tickable)._head);\n let tweenTarget;\n let tweenStyle;\n let tweenTargetTransforms;\n let tweenTargetTransformsProperties;\n let tweenTransformsNeedUpdate = 0;\n\n while (tween) {\n\n const tweenComposition = tween._composition;\n const tweenCurrentTime = tween._currentTime;\n const tweenChangeDuration = tween._changeDuration;\n const tweenAbsEndTime = tween._absoluteStartTime + tween._changeDuration;\n const tweenNextRep = tween._nextRep;\n const tweenPrevRep = tween._prevRep;\n const tweenHasComposition = tweenComposition !== compositionTypes.none;\n\n if ((forcedRender || (\n (tweenCurrentTime !== tweenChangeDuration || absoluteTime <= tweenAbsEndTime + (tweenNextRep ? tweenNextRep._delay : 0)) &&\n (tweenCurrentTime !== 0 || absoluteTime >= tween._absoluteStartTime)\n )) && (!tweenHasComposition || (\n !tween._isOverridden &&\n (!tween._isOverlapped || absoluteTime <= tweenAbsEndTime) &&\n (!tweenNextRep || (tweenNextRep._isOverridden || absoluteTime <= tweenNextRep._absoluteStartTime)) &&\n (!tweenPrevRep || (tweenPrevRep._isOverridden || (absoluteTime >= (tweenPrevRep._absoluteStartTime + tweenPrevRep._changeDuration) + tween._delay)))\n ))\n ) {\n\n const tweenNewTime = tween._currentTime = clamp(iterationTime - tween._startTime, 0, tweenChangeDuration);\n const tweenProgress = tween._ease(tweenNewTime / tween._updateDuration);\n const tweenModifier = tween._modifier;\n const tweenValueType = tween._valueType;\n const tweenType = tween._tweenType;\n const tweenIsObject = tweenType === tweenTypes.OBJECT;\n const tweenIsNumber = tweenValueType === valueTypes.NUMBER;\n // Only round the in-between frames values if the final value is a string\n const tweenPrecision = (tweenIsNumber && tweenIsObject) || tweenProgress === 0 || tweenProgress === 1 ? -1 : globals.precision;\n\n // Recompose tween value\n /** @type {String|Number} */\n let value;\n /** @type {Number} */\n let number;\n\n if (tweenIsNumber) {\n value = number = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision )));\n } else if (tweenValueType === valueTypes.UNIT) {\n // Rounding the values speed up string composition\n number = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision)));\n value = `${number}${tween._unit}`;\n } else if (tweenValueType === valueTypes.COLOR) {\n const fn = tween._fromNumbers;\n const tn = tween._toNumbers;\n const r = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[0], tn[0], tweenProgress))), 0, 255), 0);\n const g = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[1], tn[1], tweenProgress))), 0, 255), 0);\n const b = round(clamp(/** @type {Number} */(tweenModifier(interpolate(fn[2], tn[2], tweenProgress))), 0, 255), 0);\n const a = clamp(/** @type {Number} */(tweenModifier(round(interpolate(fn[3], tn[3], tweenProgress), tweenPrecision))), 0, 1);\n value = `rgba(${r},${g},${b},${a})`;\n if (tweenHasComposition) {\n const ns = tween._numbers;\n ns[0] = r;\n ns[1] = g;\n ns[2] = b;\n ns[3] = a;\n }\n } else if (tweenValueType === valueTypes.COMPLEX) {\n value = tween._strings[0];\n for (let j = 0, l = tween._toNumbers.length; j < l; j++) {\n const n = /** @type {Number} */(tweenModifier(round(interpolate(tween._fromNumbers[j], tween._toNumbers[j], tweenProgress), tweenPrecision)));\n const s = tween._strings[j + 1];\n value += `${s ? n + s : n}`;\n if (tweenHasComposition) {\n tween._numbers[j] = n;\n }\n }\n }\n\n // For additive tweens and Animatables\n if (tweenHasComposition) {\n tween._number = number;\n }\n\n if (!internalRender && tweenComposition !== compositionTypes.blend) {\n\n const tweenProperty = tween.property;\n tweenTarget = tween.target;\n\n if (tweenIsObject) {\n tweenTarget[tweenProperty] = value;\n } else if (tweenType === tweenTypes.ATTRIBUTE) {\n /** @type {DOMTarget} */(tweenTarget).setAttribute(tweenProperty, /** @type {String} */(value));\n } else {\n tweenStyle = /** @type {DOMTarget} */(tweenTarget).style;\n if (tweenType === tweenTypes.TRANSFORM) {\n if (tweenTarget !== tweenTargetTransforms) {\n tweenTargetTransforms = tweenTarget;\n // NOTE: Referencing the cachedTransforms in the tween property directly can be a little bit faster but appears to increase memory usage.\n tweenTargetTransformsProperties = tweenTarget[transformsSymbol];\n }\n tweenTargetTransformsProperties[tweenProperty] = value;\n tweenTransformsNeedUpdate = 1;\n } else if (tweenType === tweenTypes.CSS) {\n tweenStyle[tweenProperty] = value;\n } else if (tweenType === tweenTypes.CSS_VAR) {\n tweenStyle.setProperty(tweenProperty,/** @type {String} */(value));\n }\n }\n\n if (isCurrentTimeAboveZero) hasRendered = 1;\n\n } else {\n // Used for composing timeline tweens without having to do a real render\n tween._value = value;\n }\n\n }\n\n // NOTE: Possible improvement: Use translate(x,y) / translate3d(x,y,z) syntax\n // to reduce memory usage on string composition\n if (tweenTransformsNeedUpdate && tween._renderTransforms) {\n let str = emptyString;\n for (let key in tweenTargetTransformsProperties) {\n str += `${transformsFragmentStrings[key]}${tweenTargetTransformsProperties[key]}) `;\n }\n tweenStyle.transform = str;\n tweenTransformsNeedUpdate = 0;\n }\n\n tween = tween._next;\n }\n\n if (!muteCallbacks && hasRendered) {\n /** @type {JSAnimation} */(tickable).onRender(/** @type {JSAnimation} */(tickable));\n }\n }\n\n if (!muteCallbacks && isCurrentTimeAboveZero) {\n tickable.onUpdate(/** @type {CallbackArgument} */(tickable));\n }\n\n }\n\n // End tweens rendering\n\n // Handle setters on timeline differently and allow re-trigering the onComplete callback when seeking backwards\n if (parent && isSetter) {\n if (!muteCallbacks && (\n (parent.began && !isRunningBackwards && tickableAbsoluteTime >= duration && !completed) ||\n (isRunningBackwards && tickableAbsoluteTime <= minValue && completed)\n )) {\n tickable.onComplete(/** @type {CallbackArgument} */(tickable));\n tickable.completed = !isRunningBackwards;\n }\n // If currentTime is both above 0 and at least equals to duration, handles normal onComplete or infinite loops\n } else if (isCurrentTimeAboveZero && isCurrentTimeEqualOrAboveDuration) {\n if (iterationCount === Infinity) {\n // Offset the tickable _startTime with its duration to reset _currentTime to 0 and continue the infinite timer\n tickable._startTime += tickable.duration;\n } else if (tickable._currentIteration >= iterationCount - 1) {\n // By setting paused to true, we tell the engine loop to not render this tickable and removes it from the list on the next tick\n tickable.paused = true;\n if (!completed && !_hasChildren) {\n // If the tickable has children, triggers onComplete() only when all children have completed in the tick function\n tickable.completed = true;\n if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {\n tickable.onComplete(/** @type {CallbackArgument} */(tickable));\n tickable._resolve(/** @type {CallbackArgument} */(tickable));\n }\n }\n }\n // Otherwise set the completed flag to false\n } else {\n tickable.completed = false;\n }\n\n // NOTE: hasRendered * direction (negative for backwards) this way we can remove the tickable.backwards property completly ?\n return hasRendered;\n};\n\n/**\n * @param {Tickable} tickable\n * @param {Number} time\n * @param {Number} muteCallbacks\n * @param {Number} internalRender\n * @param {Number} tickMode\n * @return {void}\n */\nconst tick = (tickable, time, muteCallbacks, internalRender, tickMode) => {\n const _currentIteration = tickable._currentIteration;\n render(tickable, time, muteCallbacks, internalRender, tickMode);\n if (tickable._hasChildren) {\n const tl = /** @type {Timeline} */(tickable);\n const tlIsRunningBackwards = tl.backwards;\n const tlChildrenTime = internalRender ? time : tl._iterationTime;\n const tlCildrenTickTime = now();\n\n let tlChildrenHasRendered = 0;\n let tlChildrenHaveCompleted = true;\n\n // If the timeline has looped forward, we need to manually triggers children skipped callbacks\n if (!internalRender && tl._currentIteration !== _currentIteration) {\n const tlIterationDuration = tl.iterationDuration;\n forEachChildren(tl, (/** @type {JSAnimation} */child) => {\n if (!tlIsRunningBackwards) {\n // Force an internal render to trigger the callbacks if the child has not completed on loop\n if (!child.completed && !child.backwards && child._currentTime < child.iterationDuration) {\n render(child, tlIterationDuration, muteCallbacks, 1, tickModes.FORCE);\n }\n // Reset their began and completed flags to allow retrigering callbacks on the next iteration\n child.began = false;\n child.completed = false;\n } else {\n const childDuration = child.duration;\n const childStartTime = child._offset + child._delay;\n const childEndTime = childStartTime + childDuration;\n // Triggers the onComplete callback on reverse for children on the edges of the timeline\n if (!muteCallbacks && childDuration <= minValue && (!childStartTime || childEndTime === tlIterationDuration)) {\n child.onComplete(child);\n }\n }\n });\n if (!muteCallbacks) tl.onLoop(/** @type {CallbackArgument} */(tl));\n }\n\n forEachChildren(tl, (/** @type {JSAnimation} */child) => {\n const childTime = round((tlChildrenTime - child._offset) * child._speed, 12); // Rounding is needed when using seconds\n const childTickMode = child._fps < tl._fps ? child.requestTick(tlCildrenTickTime) : tickMode;\n tlChildrenHasRendered += render(child, childTime, muteCallbacks, internalRender, childTickMode);\n if (!child.completed && tlChildrenHaveCompleted) tlChildrenHaveCompleted = false;\n }, tlIsRunningBackwards);\n\n // Renders on timeline are triggered by its children so it needs to be set after rendering the children\n if (!muteCallbacks && tlChildrenHasRendered) tl.onRender(/** @type {CallbackArgument} */(tl));\n\n // Triggers the timeline onComplete() once all chindren all completed and the current time has reached the end\n if ((tlChildrenHaveCompleted || tlIsRunningBackwards) && tl._currentTime >= tl.duration) {\n // Make sure the paused flag is false in case it has been skipped in the render function\n tl.paused = true;\n if (!tl.completed) {\n tl.completed = true;\n if (!muteCallbacks) {\n tl.onComplete(/** @type {CallbackArgument} */(tl));\n tl._resolve(/** @type {CallbackArgument} */(tl));\n }\n }\n }\n }\n};\n\n\n\n\nconst additive = {\n animation: null,\n update: noop,\n};\n\n/**\n * @typedef AdditiveAnimation\n * @property {Number} duration\n * @property {Number} _offset\n * @property {Number} _delay\n * @property {Tween} _head\n * @property {Tween} _tail\n */\n\n/**\n * @param {TweenAdditiveLookups} lookups\n * @return {AdditiveAnimation}\n */\nconst addAdditiveAnimation = lookups => {\n let animation = additive.animation;\n if (!animation) {\n animation = {\n duration: minValue,\n computeDeltaTime: noop,\n _offset: 0,\n _delay: 0,\n _head: null,\n _tail: null,\n };\n additive.animation = animation;\n additive.update = () => {\n lookups.forEach(propertyAnimation => {\n for (let propertyName in propertyAnimation) {\n const tweens = propertyAnimation[propertyName];\n const lookupTween = tweens._head;\n if (lookupTween) {\n const valueType = lookupTween._valueType;\n const additiveValues = valueType === valueTypes.COMPLEX || valueType === valueTypes.COLOR ? cloneArray(lookupTween._fromNumbers) : null;\n let additiveValue = lookupTween._fromNumber;\n let tween = tweens._tail;\n while (tween && tween !== lookupTween) {\n if (additiveValues) {\n for (let i = 0, l = tween._numbers.length; i < l; i++) additiveValues[i] += tween._numbers[i];\n } else {\n additiveValue += tween._number;\n }\n tween = tween._prevAdd;\n }\n lookupTween._toNumber = additiveValue;\n lookupTween._toNumbers = additiveValues;\n }\n }\n });\n // TODO: Avoid polymorphism here, idealy the additive animation should be a regular animation with a higher priority in the render loop\n render(animation, 1, 1, 0, tickModes.FORCE);\n };\n }\n return animation;\n};\n\nconst engineTickMethod = /*#__PURE__*/ (() => isBrowser ? requestAnimationFrame : setImmediate)();\nconst engineCancelMethod = /*#__PURE__*/ (() => isBrowser ? cancelAnimationFrame : clearImmediate)();\n\nclass Engine extends Clock {\n\n /** @param {Number} [initTime] */\n constructor(initTime) {\n super(initTime);\n this.useDefaultMainLoop = true;\n this.pauseOnDocumentHidden = true;\n /** @type {DefaultsParams} */\n this.defaults = defaults;\n // this.paused = isBrowser && doc.hidden ? true : false;\n this.paused = true;\n /** @type {Number|NodeJS.Immediate} */\n this.reqId = 0;\n }\n\n update() {\n const time = this._currentTime = now();\n if (this.requestTick(time)) {\n this.computeDeltaTime(time);\n const engineSpeed = this._speed;\n const engineFps = this._fps;\n let activeTickable = /** @type {Tickable} */(this._head);\n while (activeTickable) {\n const nextTickable = activeTickable._next;\n if (!activeTickable.paused) {\n tick(\n activeTickable,\n (time - activeTickable._startTime) * activeTickable._speed * engineSpeed,\n 0, // !muteCallbacks\n 0, // !internalRender\n activeTickable._fps < engineFps ? activeTickable.requestTick(time) : tickModes.AUTO\n );\n } else {\n removeChild(this, activeTickable);\n this._hasChildren = !!this._tail;\n activeTickable._running = false;\n if (activeTickable.completed && !activeTickable._cancelled) {\n activeTickable.cancel();\n }\n }\n activeTickable = nextTickable;\n }\n additive.update();\n }\n }\n\n wake() {\n if (this.useDefaultMainLoop && !this.reqId) {\n // Imediatly request a tick to update engine._elapsedTime and get accurate offsetPosition calculation in timer.js\n this.requestTick(now());\n this.reqId = engineTickMethod(tickEngine);\n }\n return this;\n }\n\n pause() {\n if (!this.reqId) return;\n this.paused = true;\n return killEngine();\n }\n\n resume() {\n if (!this.paused) return;\n this.paused = false;\n forEachChildren(this, (/** @type {Tickable} */child) => child.resetTime());\n return this.wake();\n }\n\n // Getter and setter for speed\n get speed() {\n return this._speed * (globals.timeScale === 1 ? 1 : K);\n }\n\n set speed(playbackRate) {\n this._speed = playbackRate * globals.timeScale;\n forEachChildren(this, (/** @type {Tickable} */child) => child.speed = child._speed);\n }\n\n // Getter and setter for timeUnit\n get timeUnit() {\n return globals.timeScale === 1 ? 'ms' : 's';\n };\n\n set timeUnit(unit) {\n const secondsScale = 0.001;\n const isSecond = unit === 's';\n const newScale = isSecond ? secondsScale : 1;\n if (globals.timeScale !== newScale) {\n globals.timeScale = newScale;\n globals.tickThreshold = 200 * newScale;\n const scaleFactor = isSecond ? secondsScale : K;\n /** @type {Number} */\n (this.defaults.duration) *= scaleFactor;\n this._speed *= scaleFactor;\n }\n }\n\n // Getter and setter for precision\n get precision() {\n return globals.precision;\n }\n\n set precision(precision) {\n globals.precision = precision;\n }\n\n}\nconst engine = /*#__PURE__*/(() => {\n const engine = new Engine(now());\n if (isBrowser) {\n globalVersions.engine = engine;\n doc.addEventListener('visibilitychange', () => {\n if (!engine.pauseOnDocumentHidden) return;\n doc.hidden ? engine.pause() : engine.resume();\n });\n }\n return engine;\n})();\n\n\nconst tickEngine = () => {\n if (engine._head) {\n engine.reqId = engineTickMethod(tickEngine);\n engine.update();\n } else {\n engine.reqId = 0;\n }\n};\n\nconst killEngine = () => {\n engineCancelMethod(/** @type {NodeJS.Immediate & Number} */(engine.reqId));\n engine.reqId = 0;\n return engine;\n};\n\n\n\n\n/**\n * @param {DOMTarget} target\n * @param {String} propName\n * @param {Object} animationInlineStyles\n * @return {String}\n */\nconst parseInlineTransforms = (target, propName, animationInlineStyles) => {\n const inlineTransforms = target.style.transform;\n let inlinedStylesPropertyValue;\n if (inlineTransforms) {\n const cachedTransforms = target[transformsSymbol];\n let t; while (t = transformsExecRgx.exec(inlineTransforms)) {\n const inlinePropertyName = t[1];\n // const inlinePropertyValue = t[2];\n const inlinePropertyValue = t[2].slice(1, -1);\n cachedTransforms[inlinePropertyName] = inlinePropertyValue;\n if (inlinePropertyName === propName) {\n inlinedStylesPropertyValue = inlinePropertyValue;\n // Store the new parsed inline styles if animationInlineStyles is provided\n if (animationInlineStyles) {\n animationInlineStyles[propName] = inlinePropertyValue;\n }\n }\n }\n }\n return inlineTransforms && !isUnd(inlinedStylesPropertyValue) ? inlinedStylesPropertyValue :\n stringStartsWith(propName, 'scale') ? '1' :\n stringStartsWith(propName, 'rotate') || stringStartsWith(propName, 'skew') ? '0deg' : '0px';\n};\n\n\n\n\n/**\n * @param {DOMTargetsParam|TargetsParam} v\n * @return {NodeList|HTMLCollection}\n */\nfunction getNodeList(v) {\n const n = isStr(v) ? scope.root.querySelectorAll(v) : v;\n if (n instanceof NodeList || n instanceof HTMLCollection) return n;\n}\n\n/**\n * @overload\n * @param {DOMTargetsParam} targets\n * @return {DOMTargetsArray}\n *\n * @overload\n * @param {JSTargetsParam} targets\n * @return {JSTargetsArray}\n *\n * @overload\n * @param {TargetsParam} targets\n * @return {TargetsArray}\n *\n * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets\n */\nfunction parseTargets(targets) {\n if (isNil(targets)) return /** @type {TargetsArray} */([]);\n if (!isBrowser) return /** @type {JSTargetsArray} */(isArr(targets) && targets.flat(Infinity) || [targets]);\n if (isArr(targets)) {\n const flattened = targets.flat(Infinity);\n /** @type {TargetsArray} */\n const parsed = [];\n for (let i = 0, l = flattened.length; i < l; i++) {\n const item = flattened[i];\n if (!isNil(item)) {\n const nodeList = getNodeList(item);\n if (nodeList) {\n for (let j = 0, jl = nodeList.length; j < jl; j++) {\n const subItem = nodeList[j];\n if (!isNil(subItem)) {\n let isDuplicate = false;\n for (let k = 0, kl = parsed.length; k < kl; k++) {\n if (parsed[k] === subItem) {\n isDuplicate = true;\n break;\n }\n }\n if (!isDuplicate) {\n parsed.push(subItem);\n }\n }\n }\n } else {\n let isDuplicate = false;\n for (let j = 0, jl = parsed.length; j < jl; j++) {\n if (parsed[j] === item) {\n isDuplicate = true;\n break;\n }\n }\n if (!isDuplicate) {\n parsed.push(item);\n }\n }\n }\n }\n return parsed;\n }\n const nodeList = getNodeList(targets);\n if (nodeList) return /** @type {DOMTargetsArray} */(Array.from(nodeList));\n return /** @type {TargetsArray} */([targets]);\n}\n\n/**\n * @overload\n * @param {DOMTargetsParam} targets\n * @return {DOMTargetsArray}\n *\n * @overload\n * @param {JSTargetsParam} targets\n * @return {JSTargetsArray}\n *\n * @overload\n * @param {TargetsParam} targets\n * @return {TargetsArray}\n *\n * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets\n */\nfunction registerTargets(targets) {\n const parsedTargetsArray = parseTargets(targets);\n const parsedTargetsLength = parsedTargetsArray.length;\n if (parsedTargetsLength) {\n for (let i = 0; i < parsedTargetsLength; i++) {\n const target = parsedTargetsArray[i];\n if (!target[isRegisteredTargetSymbol]) {\n target[isRegisteredTargetSymbol] = true;\n const isSvgType = isSvg(target);\n const isDom = /** @type {DOMTarget} */(target).nodeType || isSvgType;\n if (isDom) {\n target[isDomSymbol] = true;\n target[isSvgSymbol] = isSvgType;\n target[transformsSymbol] = {};\n }\n }\n }\n }\n return parsedTargetsArray;\n}\n\n\n\n\n/**\n * @param {TargetsParam} path\n * @return {SVGGeometryElement|undefined}\n */\nconst getPath = path => {\n const parsedTargets = parseTargets(path);\n const $parsedSvg = /** @type {SVGGeometryElement} */(parsedTargets[0]);\n if (!$parsedSvg || !isSvg($parsedSvg)) return;\n return $parsedSvg;\n};\n\n/**\n * @param {TargetsParam} path2\n * @param {Number} [precision]\n * @return {FunctionValue}\n */\nconst morphTo = (path2, precision = .33) => ($path1) => {\n const $path2 = /** @type {SVGGeometryElement} */(getPath(path2));\n if (!$path2) return;\n const isPath = $path1.tagName === 'path';\n const separator = isPath ? ' ' : ',';\n const previousPoints = $path1[morphPointsSymbol];\n if (previousPoints) $path1.setAttribute(isPath ? 'd' : 'points', previousPoints);\n\n let v1 = '', v2 = '';\n\n if (!precision) {\n v1 = $path1.getAttribute(isPath ? 'd' : 'points');\n v2 = $path2.getAttribute(isPath ? 'd' : 'points');\n } else {\n const length1 = /** @type {SVGGeometryElement} */($path1).getTotalLength();\n const length2 = $path2.getTotalLength();\n const maxPoints = Math.max(Math.ceil(length1 * precision), Math.ceil(length2 * precision));\n for (let i = 0; i < maxPoints; i++) {\n const t = i / (maxPoints - 1);\n const pointOnPath1 = /** @type {SVGGeometryElement} */($path1).getPointAtLength(length1 * t);\n const pointOnPath2 = $path2.getPointAtLength(length2 * t);\n const prefix = isPath ? (i === 0 ? 'M' : 'L') : '';\n v1 += prefix + round(pointOnPath1.x, 3) + separator + pointOnPath1.y + ' ';\n v2 += prefix + round(pointOnPath2.x, 3) + separator + pointOnPath2.y + ' ';\n }\n }\n\n $path1[morphPointsSymbol] = v2;\n\n return [v1, v2];\n};\n\n/**\n * @param {SVGGeometryElement} [$el]\n * @return {Number}\n */\nconst getScaleFactor = $el => {\n let scaleFactor = 1;\n if ($el && $el.getCTM) {\n const ctm = $el.getCTM();\n if (ctm) {\n const scaleX = sqrt(ctm.a * ctm.a + ctm.b * ctm.b);\n const scaleY = sqrt(ctm.c * ctm.c + ctm.d * ctm.d);\n scaleFactor = (scaleX + scaleY) / 2;\n }\n }\n return scaleFactor;\n};\n\n/**\n * Creates a proxy that wraps an SVGGeometryElement and adds drawing functionality.\n * @param {SVGGeometryElement} $el - The SVG element to transform into a drawable\n * @param {number} start - Starting position (0-1)\n * @param {number} end - Ending position (0-1)\n * @return {DrawableSVGGeometry} - Returns a proxy that preserves the original element's type with additional 'draw' attribute functionality\n */\nconst createDrawableProxy = ($el, start, end) => {\n const pathLength = K;\n const computedStyles = getComputedStyle($el);\n const strokeLineCap = computedStyles.strokeLinecap;\n // @ts-ignore\n const $scalled = computedStyles.vectorEffect === 'non-scaling-stroke' ? $el : null;\n let currentCap = strokeLineCap;\n\n const proxy = new Proxy($el, {\n get(target, property) {\n const value = target[property];\n if (property === proxyTargetSymbol) return target;\n if (property === 'setAttribute') {\n return (...args) => {\n if (args[0] === 'draw') {\n const value = args[1];\n const values = value.split(' ');\n const v1 = +values[0];\n const v2 = +values[1];\n // TOTO: Benchmark if performing two slices is more performant than one split\n // const spaceIndex = value.indexOf(' ');\n // const v1 = round(+value.slice(0, spaceIndex), precision);\n // const v2 = round(+value.slice(spaceIndex + 1), precision);\n const scaleFactor = getScaleFactor($scalled);\n const os = v1 * -1e3 * scaleFactor;\n const d1 = (v2 * pathLength * scaleFactor) + os;\n const d2 = (pathLength * scaleFactor +\n ((v1 === 0 && v2 === 1) || (v1 === 1 && v2 === 0) ? 0 : 10 * scaleFactor) - d1);\n if (strokeLineCap !== 'butt') {\n const newCap = v1 === v2 ? 'butt' : strokeLineCap;\n if (currentCap !== newCap) {\n target.style.strokeLinecap = `${newCap}`;\n currentCap = newCap;\n }\n }\n target.setAttribute('stroke-dashoffset', `${os}`);\n target.setAttribute('stroke-dasharray', `${d1} ${d2}`);\n }\n return Reflect.apply(value, target, args);\n };\n }\n\n if (isFnc(value)) {\n return (...args) => Reflect.apply(value, target, args);\n } else {\n return value;\n }\n }\n });\n\n if ($el.getAttribute('pathLength') !== `${pathLength}`) {\n $el.setAttribute('pathLength', `${pathLength}`);\n proxy.setAttribute('draw', `${start} ${end}`);\n }\n\n return /** @type {DrawableSVGGeometry} */(proxy);\n};\n\n/**\n * Creates drawable proxies for multiple SVG elements.\n * @param {TargetsParam} selector - CSS selector, SVG element, or array of elements and selectors\n * @param {number} [start=0] - Starting position (0-1)\n * @param {number} [end=0] - Ending position (0-1)\n * @return {Array<DrawableSVGGeometry>} - Array of proxied elements with drawing functionality\n */\nconst createDrawable = (selector, start = 0, end = 0) => {\n const els = parseTargets(selector);\n return els.map($el => createDrawableProxy(\n /** @type {SVGGeometryElement} */($el),\n start,\n end\n ));\n};\n\n// Motion path animation\n\n/**\n * @param {SVGGeometryElement} $path\n * @param {Number} progress\n * @param {Number}lookup\n * @return {DOMPoint}\n */\nconst getPathPoint = ($path, progress, lookup = 0) => {\n return $path.getPointAtLength(progress + lookup >= 1 ? progress + lookup : 0);\n};\n\n/**\n * @param {SVGGeometryElement} $path\n * @param {String} pathProperty\n * @return {FunctionValue}\n */\nconst getPathProgess = ($path, pathProperty) => {\n return $el => {\n const totalLength = +($path.getTotalLength());\n const inSvg = $el[isSvgSymbol];\n const ctm = $path.getCTM();\n /** @type {TweenObjectValue} */\n return {\n from: 0,\n to: totalLength,\n /** @type {TweenModifier} */\n modifier: progress => {\n if (pathProperty === 'a') {\n const p0 = getPathPoint($path, progress, -1);\n const p1 = getPathPoint($path, progress, 1);\n return atan2(p1.y - p0.y, p1.x - p0.x) * 180 / PI;\n } else {\n const p = getPathPoint($path, progress, 0);\n return pathProperty === 'x' ?\n inSvg || !ctm ? p.x : p.x * ctm.a + p.y * ctm.c + ctm.e :\n inSvg || !ctm ? p.y : p.x * ctm.b + p.y * ctm.d + ctm.f\n }\n }\n }\n }\n};\n\n/**\n * @param {TargetsParam} path\n */\nconst createMotionPath = path => {\n const $path = getPath(path);\n if (!$path) return;\n return {\n translateX: getPathProgess($path, 'x'),\n translateY: getPathProgess($path, 'y'),\n rotate: getPathProgess($path, 'a'),\n }\n};\n\n// Check for valid SVG attribute\n\nconst cssReservedProperties = ['opacity', 'rotate', 'overflow', 'color'];\n\n/**\n * @param {Target} el\n * @param {String} propertyName\n * @return {Boolean}\n */\nconst isValidSVGAttribute = (el, propertyName) => {\n // Return early and use CSS opacity animation instead (already better default values (opacity: 1 instead of 0)) and rotate should be considered a transform\n if (cssReservedProperties.includes(propertyName)) return false;\n if (el.getAttribute(propertyName) || propertyName in el) {\n if (propertyName === 'scale') { // Scale\n const elParentNode = /** @type {SVGGeometryElement} */(/** @type {DOMTarget} */(el).parentNode);\n // Only consider scale as a valid SVG attribute on filter element\n return elParentNode && elParentNode.tagName === 'filter';\n }\n return true;\n }\n};\n\nconst svg = {\n morphTo,\n createMotionPath,\n createDrawable,\n};\n\n\n\n\n/**\n * RGB / RGBA Color value string -> RGBA values array\n * @param {String} rgbValue\n * @return {ColorArray}\n */\nconst rgbToRgba = rgbValue => {\n const rgba = rgbExecRgx.exec(rgbValue) || rgbaExecRgx.exec(rgbValue);\n const a = !isUnd(rgba[4]) ? +rgba[4] : 1;\n return [\n +rgba[1],\n +rgba[2],\n +rgba[3],\n a\n ]\n};\n\n/**\n * HEX3 / HEX3A / HEX6 / HEX6A Color value string -> RGBA values array\n * @param {String} hexValue\n * @return {ColorArray}\n */\nconst hexToRgba = hexValue => {\n const hexLength = hexValue.length;\n const isShort = hexLength === 4 || hexLength === 5;\n return [\n +('0x' + hexValue[1] + hexValue[isShort ? 1 : 2]),\n +('0x' + hexValue[isShort ? 2 : 3] + hexValue[isShort ? 2 : 4]),\n +('0x' + hexValue[isShort ? 3 : 5] + hexValue[isShort ? 3 : 6]),\n ((hexLength === 5 || hexLength === 9) ? +(+('0x' + hexValue[isShort ? 4 : 7] + hexValue[isShort ? 4 : 8]) / 255).toFixed(3) : 1)\n ]\n};\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nconst hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t :\n t < 1 / 2 ? q :\n t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 :\n p;\n};\n\n/**\n * HSL / HSLA Color value string -> RGBA values array\n * @param {String} hslValue\n * @return {ColorArray}\n */\nconst hslToRgba = hslValue => {\n const hsla = hslExecRgx.exec(hslValue) || hslaExecRgx.exec(hslValue);\n const h = +hsla[1] / 360;\n const s = +hsla[2] / 100;\n const l = +hsla[3] / 100;\n const a = !isUnd(hsla[4]) ? +hsla[4] : 1;\n let r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < .5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = round(hue2rgb(p, q, h + 1 / 3) * 255, 0);\n g = round(hue2rgb(p, q, h) * 255, 0);\n b = round(hue2rgb(p, q, h - 1 / 3) * 255, 0);\n }\n return [r, g, b, a];\n};\n\n/**\n * All in one color converter that converts a color string value into an array of RGBA values\n * @param {String} colorString\n * @return {ColorArray}\n */\nconst convertColorStringValuesToRgbaArray = colorString => {\n return isRgb(colorString) ? rgbToRgba(colorString) :\n isHex(colorString) ? hexToRgba(colorString) :\n isHsl(colorString) ? hslToRgba(colorString) :\n [0, 0, 0, 1];\n};\n\n\n\n\n/**\n * @template T, D\n * @param {T|undefined} targetValue\n * @param {D} defaultValue\n * @return {T|D}\n */\nconst setValue = (targetValue, defaultValue) => {\n return isUnd(targetValue) ? defaultValue : targetValue;\n};\n\n/**\n * @param {TweenPropValue} value\n * @param {Target} target\n * @param {Number} index\n * @param {Number} total\n * @param {Object} [store]\n * @return {any}\n */\nconst getFunctionValue = (value, target, index, total, store) => {\n if (isFnc(value)) {\n const func = () => {\n const computed = /** @type {Function} */(value)(target, index, total);\n // Fallback to 0 if the function returns undefined / NaN / null / false / 0\n return !isNaN(+computed) ? +computed : computed || 0;\n };\n if (store) {\n store.func = func;\n }\n return func();\n } else {\n return value;\n }\n};\n\n/**\n * @param {Target} target\n * @param {String} prop\n * @return {tweenTypes}\n */\nconst getTweenType = (target, prop) => {\n return !target[isDomSymbol] ? tweenTypes.OBJECT :\n // Handle SVG attributes\n target[isSvgSymbol] && isValidSVGAttribute(target, prop) ? tweenTypes.ATTRIBUTE :\n // Handle CSS Transform properties differently than CSS to allow individual animations\n validTransforms.includes(prop) || shortTransforms.get(prop) ? tweenTypes.TRANSFORM :\n // CSS variables\n stringStartsWith(prop, '--') ? tweenTypes.CSS_VAR :\n // All other CSS properties\n prop in /** @type {DOMTarget} */(target).style ? tweenTypes.CSS :\n // Handle other DOM Attributes\n prop in target ? tweenTypes.OBJECT :\n tweenTypes.ATTRIBUTE;\n};\n\n/**\n * @param {DOMTarget} target\n * @param {String} propName\n * @param {Object} animationInlineStyles\n * @return {String}\n */\nconst getCSSValue = (target, propName, animationInlineStyles) => {\n const inlineStyles = target.style[propName];\n if (inlineStyles && animationInlineStyles) {\n animationInlineStyles[propName] = inlineStyles;\n }\n const value = inlineStyles || getComputedStyle(target[proxyTargetSymbol] || target).getPropertyValue(propName);\n return value === 'auto' ? '0' : value;\n};\n\n/**\n * @param {Target} target\n * @param {String} propName\n * @param {tweenTypes} [tweenType]\n * @param {Object|void} [animationInlineStyles]\n * @return {String|Number}\n */\nconst getOriginalAnimatableValue = (target, propName, tweenType, animationInlineStyles) => {\n const type = !isUnd(tweenType) ? tweenType : getTweenType(target, propName);\n return type === tweenTypes.OBJECT ? target[propName] || 0 :\n type === tweenTypes.ATTRIBUTE ? /** @type {DOMTarget} */(target).getAttribute(propName) :\n type === tweenTypes.TRANSFORM ? parseInlineTransforms(/** @type {DOMTarget} */(target), propName, animationInlineStyles) :\n type === tweenTypes.CSS_VAR ? getCSSValue(/** @type {DOMTarget} */(target), propName, animationInlineStyles).trimStart() :\n getCSSValue(/** @type {DOMTarget} */(target), propName, animationInlineStyles);\n};\n\n/**\n * @param {Number} x\n * @param {Number} y\n * @param {String} operator\n * @return {Number}\n */\nconst getRelativeValue = (x, y, operator) => {\n return operator === '-' ? x - y :\n operator === '+' ? x + y :\n x * y;\n};\n\n/** @return {TweenDecomposedValue} */\nconst createDecomposedValueTargetObject = () => {\n return {\n /** @type {valueTypes} */\n t: valueTypes.NUMBER,\n n: 0,\n u: null,\n o: null,\n d: null,\n s: null,\n }\n};\n\n/**\n * @param {String|Number} rawValue\n * @param {TweenDecomposedValue} targetObject\n * @return {TweenDecomposedValue}\n */\nconst decomposeRawValue = (rawValue, targetObject) => {\n /** @type {valueTypes} */\n targetObject.t = valueTypes.NUMBER;\n targetObject.n = 0;\n targetObject.u = null;\n targetObject.o = null;\n targetObject.d = null;\n targetObject.s = null;\n if (!rawValue) return targetObject;\n const num = +rawValue;\n if (!isNaN(num)) {\n // It's a number\n targetObject.n = num;\n return targetObject;\n } else {\n // let str = /** @type {String} */(rawValue).trim();\n let str = /** @type {String} */(rawValue);\n // Parsing operators (+=, -=, *=) manually is much faster than using regex here\n if (str[1] === '=') {\n targetObject.o = str[0];\n str = str.slice(2);\n }\n // Skip exec regex if the value type is complex or color to avoid long regex backtracking\n const unitMatch = str.includes(' ') ? false : unitsExecRgx.exec(str);\n if (unitMatch) {\n // Has a number and a unit\n targetObject.t = valueTypes.UNIT;\n targetObject.n = +unitMatch[1];\n targetObject.u = unitMatch[2];\n return targetObject;\n } else if (targetObject.o) {\n // Has an operator (+=, -=, *=)\n targetObject.n = +str;\n return targetObject;\n } else if (isCol(str)) {\n // Is a color\n targetObject.t = valueTypes.COLOR;\n targetObject.d = convertColorStringValuesToRgbaArray(str);\n return targetObject;\n } else {\n // Is a more complex string (generally svg coords, calc() or filters CSS values)\n const matchedNumbers = str.match(digitWithExponentRgx);\n targetObject.t = valueTypes.COMPLEX;\n targetObject.d = matchedNumbers ? matchedNumbers.map(Number) : [];\n targetObject.s = str.split(digitWithExponentRgx) || [];\n return targetObject;\n }\n }\n};\n\n/**\n * @param {Tween} tween\n * @param {TweenDecomposedValue} targetObject\n * @return {TweenDecomposedValue}\n */\nconst decomposeTweenValue = (tween, targetObject) => {\n targetObject.t = tween._valueType;\n targetObject.n = tween._toNumber;\n targetObject.u = tween._unit;\n targetObject.o = null;\n targetObject.d = cloneArray(tween._toNumbers);\n targetObject.s = cloneArray(tween._strings);\n return targetObject;\n};\n\nconst decomposedOriginalValue = createDecomposedValueTargetObject();\n\n\n\n\nconst lookups = {\n /** @type {TweenReplaceLookups} */\n _rep: new WeakMap(),\n /** @type {TweenAdditiveLookups} */\n _add: new Map(),\n};\n\n/**\n * @param {Target} target\n * @param {String} property\n * @param {String} lookup\n * @return {TweenPropertySiblings}\n */\nconst getTweenSiblings = (target, property, lookup = '_rep') => {\n const lookupMap = lookups[lookup];\n let targetLookup = lookupMap.get(target);\n if (!targetLookup) {\n targetLookup = {};\n lookupMap.set(target, targetLookup);\n }\n return targetLookup[property] ? targetLookup[property] : targetLookup[property] = {\n _head: null,\n _tail: null,\n }\n};\n\n/**\n * @param {Tween} p\n * @param {Tween} c\n * @return {Number|Boolean}\n */\nconst addTweenSortMethod = (p, c) => {\n return p._isOverridden || p._absoluteStartTime > c._absoluteStartTime;\n};\n\n/**\n * @param {Tween} tween\n */\nconst overrideTween = tween => {\n tween._isOverlapped = 1;\n tween._isOverridden = 1;\n tween._changeDuration = minValue;\n tween._currentTime = minValue;\n};\n\n/**\n * @param {Tween} tween\n * @param {TweenPropertySiblings} siblings\n * @return {Tween}\n */\nconst composeTween = (tween, siblings) => {\n\n const tweenCompositionType = tween._composition;\n\n // Handle replaced tweens\n\n if (tweenCompositionType === compositionTypes.replace) {\n\n const tweenAbsStartTime = tween._absoluteStartTime;\n\n addChild(siblings, tween, addTweenSortMethod, '_prevRep', '_nextRep');\n\n const prevSibling = tween._prevRep;\n\n // Update the previous siblings for composition replace tweens\n\n if (prevSibling) {\n\n const prevParent = prevSibling.parent;\n const prevAbsEndTime = prevSibling._absoluteStartTime + prevSibling._changeDuration;\n\n // Handle looped animations tween\n\n if (\n // Check if the previous tween is from a different animation\n tween.parent.id !== prevParent.id &&\n // Check if the animation has loops\n prevParent.iterationCount> 1 &&\n // Check if _absoluteChangeEndTime of last loop overlaps the current tween\n prevAbsEndTime + (prevParent.duration - prevParent.iterationDuration) > tweenAbsStartTime\n ) {\n\n // TODO: Find a way to only override the iterations overlapping with the tween\n overrideTween(prevSibling);\n\n let prevPrevSibling = prevSibling._prevRep;\n\n // If the tween was part of a set of keyframes, override its siblings\n while (prevPrevSibling && prevPrevSibling.parent.id === prevParent.id) {\n overrideTween(prevPrevSibling);\n prevPrevSibling = prevPrevSibling._prevRep;\n }\n\n }\n\n const absoluteUpdateStartTime = tweenAbsStartTime - tween._delay;\n\n if (prevAbsEndTime > absoluteUpdateStartTime) {\n\n const prevChangeStartTime = prevSibling._startTime;\n const prevTLOffset = prevAbsEndTime - (prevChangeStartTime + prevSibling._updateDuration);\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const updatedPrevChangeDuration = round(absoluteUpdateStartTime - prevTLOffset - prevChangeStartTime, 12);\n\n prevSibling._changeDuration = updatedPrevChangeDuration;\n prevSibling._currentTime = updatedPrevChangeDuration;\n prevSibling._isOverlapped = 1;\n\n // Override the previous tween if its new _changeDuration is lower than minValue\n // TODO: See if it's even neceseeary to test against minValue, checking for 0 might be enough\n if (updatedPrevChangeDuration < minValue) {\n overrideTween(prevSibling);\n }\n }\n\n // Pause (and cancel) the parent if it only contains overlapped tweens\n\n let pausePrevParentAnimation = true;\n\n forEachChildren(prevParent, (/** @type Tween */t) => {\n if (!t._isOverlapped) pausePrevParentAnimation = false;\n });\n\n if (pausePrevParentAnimation) {\n const prevParentTL = prevParent.parent;\n if (prevParentTL) {\n let pausePrevParentTL = true;\n forEachChildren(prevParentTL, (/** @type JSAnimation */a) => {\n if (a !== prevParent) {\n forEachChildren(a, (/** @type Tween */t) => {\n if (!t._isOverlapped) pausePrevParentTL = false;\n });\n }\n });\n if (pausePrevParentTL) {\n prevParentTL.cancel();\n }\n } else {\n prevParent.cancel();\n // Previously, calling .cancel() on a timeline child would affect the render order of other children\n // Worked around this by marking it as .completed and using .pause() for safe removal in the engine loop\n // This is no longer needed since timeline tween composition is now handled separately\n // Keeping this here for reference\n // prevParent.completed = true;\n // prevParent.pause();\n }\n }\n\n }\n\n // let nextSibling = tween._nextRep;\n\n // // All the next siblings are automatically overridden\n\n // if (nextSibling && nextSibling._absoluteStartTime >= tweenAbsStartTime) {\n // while (nextSibling) {\n // overrideTween(nextSibling);\n // nextSibling = nextSibling._nextRep;\n // }\n // }\n\n // if (nextSibling && nextSibling._absoluteStartTime < tweenAbsStartTime) {\n // while (nextSibling) {\n // overrideTween(nextSibling);\n // console.log(tween.id, nextSibling.id);\n // nextSibling = nextSibling._nextRep;\n // }\n // }\n\n // Handle additive tweens composition\n\n } else if (tweenCompositionType === compositionTypes.blend) {\n\n const additiveTweenSiblings = getTweenSiblings(tween.target, tween.property, '_add');\n const additiveAnimation = addAdditiveAnimation(lookups._add);\n\n let lookupTween = additiveTweenSiblings._head;\n\n if (!lookupTween) {\n lookupTween = { ...tween };\n lookupTween._composition = compositionTypes.replace;\n lookupTween._updateDuration = minValue;\n lookupTween._startTime = 0;\n lookupTween._numbers = cloneArray(tween._fromNumbers);\n lookupTween._number = 0;\n lookupTween._next = null;\n lookupTween._prev = null;\n addChild(additiveTweenSiblings, lookupTween);\n addChild(additiveAnimation, lookupTween);\n }\n\n // Convert the values of TO to FROM and set TO to 0\n\n const toNumber = tween._toNumber;\n tween._fromNumber = lookupTween._fromNumber - toNumber;\n tween._toNumber = 0;\n tween._numbers = cloneArray(tween._fromNumbers);\n tween._number = 0;\n lookupTween._fromNumber = toNumber;\n\n if (tween._toNumbers) {\n const toNumbers = cloneArray(tween._toNumbers);\n if (toNumbers) {\n toNumbers.forEach((value, i) => {\n tween._fromNumbers[i] = lookupTween._fromNumbers[i] - value;\n tween._toNumbers[i] = 0;\n });\n }\n lookupTween._fromNumbers = toNumbers;\n }\n\n addChild(additiveTweenSiblings, tween, null, '_prevAdd', '_nextAdd');\n\n }\n\n return tween;\n\n};\n\n/**\n * @param {Tween} tween\n * @return {Tween}\n */\nconst removeTweenSliblings = tween => {\n const tweenComposition = tween._composition;\n if (tweenComposition !== compositionTypes.none) {\n const tweenTarget = tween.target;\n const tweenProperty = tween.property;\n const replaceTweensLookup = lookups._rep;\n const replaceTargetProps = replaceTweensLookup.get(tweenTarget);\n const tweenReplaceSiblings = replaceTargetProps[tweenProperty];\n removeChild(tweenReplaceSiblings, tween, '_prevRep', '_nextRep');\n if (tweenComposition === compositionTypes.blend) {\n const addTweensLookup = lookups._add;\n const addTargetProps = addTweensLookup.get(tweenTarget);\n if (!addTargetProps) return;\n const additiveTweenSiblings = addTargetProps[tweenProperty];\n const additiveAnimation = additive.animation;\n removeChild(additiveTweenSiblings, tween, '_prevAdd', '_nextAdd');\n // If only one tween is left in the additive lookup, it's the tween lookup\n const lookupTween = additiveTweenSiblings._head;\n if (lookupTween && lookupTween === additiveTweenSiblings._tail) {\n removeChild(additiveTweenSiblings, lookupTween, '_prevAdd', '_nextAdd');\n removeChild(additiveAnimation, lookupTween);\n let shouldClean = true;\n for (let prop in addTargetProps) {\n if (addTargetProps[prop]._head) {\n shouldClean = false;\n break;\n }\n }\n if (shouldClean) {\n addTweensLookup.delete(tweenTarget);\n }\n }\n }\n }\n return tween;\n};\n\n\n\n\n/**\n * @param {Timer} timer\n * @return {Timer}\n */\nconst resetTimerProperties = timer => {\n timer.paused = true;\n timer.began = false;\n timer.completed = false;\n return timer;\n};\n\n/**\n * @param {Timer} timer\n * @return {Timer}\n */\nconst reviveTimer = timer => {\n if (!timer._cancelled) return timer;\n if (timer._hasChildren) {\n forEachChildren(timer, reviveTimer);\n } else {\n forEachChildren(timer, (/** @type {Tween} tween*/tween) => {\n if (tween._composition !== compositionTypes.none) {\n composeTween(tween, getTweenSiblings(tween.target, tween.property));\n }\n });\n }\n timer._cancelled = 0;\n return timer;\n};\n\nlet timerId = 0;\n\n/**\n * Base class used to create Timers, Animations and Timelines\n */\nclass Timer extends Clock {\n /**\n * @param {TimerParams} [parameters]\n * @param {Timeline} [parent]\n * @param {Number} [parentPosition]\n */\n constructor(parameters = {}, parent = null, parentPosition = 0) {\n\n super(0);\n\n const {\n id,\n delay,\n duration,\n reversed,\n alternate,\n loop,\n loopDelay,\n autoplay,\n frameRate,\n playbackRate,\n onComplete,\n onLoop,\n onPause,\n onBegin,\n onBeforeUpdate,\n onUpdate,\n } = parameters;\n\n if (scope.current) scope.current.register(this);\n\n const timerInitTime = parent ? 0 : engine._elapsedTime;\n const timerDefaults = parent ? parent.defaults : globals.defaults;\n const timerDelay = /** @type {Number} */(isFnc(delay) || isUnd(delay) ? timerDefaults.delay : +delay);\n const timerDuration = isFnc(duration) || isUnd(duration) ? Infinity : +duration;\n const timerLoop = setValue(loop, timerDefaults.loop);\n const timerLoopDelay = setValue(loopDelay, timerDefaults.loopDelay);\n const timerIterationCount = timerLoop === true ||\n timerLoop === Infinity ||\n /** @type {Number} */(timerLoop) < 0 ? Infinity :\n /** @type {Number} */(timerLoop) + 1;\n\n\n let offsetPosition = 0;\n\n if (parent) {\n offsetPosition = parentPosition;\n } else {\n // Make sure to tick the engine once if not currently running to get up to date engine._elapsedTime\n // to avoid big gaps with the following offsetPosition calculation\n if (!engine.reqId) engine.requestTick(now());\n // Make sure to scale the offset position with globals.timeScale to properly handle seconds unit\n offsetPosition = (engine._elapsedTime - engine._startTime) * globals.timeScale;\n }\n\n // Timer's parameters\n this.id = !isUnd(id) ? id : ++timerId;\n /** @type {Timeline} */\n this.parent = parent;\n // Total duration of the timer\n this.duration = clampInfinity(((timerDuration + timerLoopDelay) * timerIterationCount) - timerLoopDelay) || minValue;\n /** @type {Boolean} */\n this.backwards = false;\n /** @type {Boolean} */\n this.paused = true;\n /** @type {Boolean} */\n this.began = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Callback<this>} */\n this.onBegin = onBegin || timerDefaults.onBegin;\n /** @type {Callback<this>} */\n this.onBeforeUpdate = onBeforeUpdate || timerDefaults.onBeforeUpdate;\n /** @type {Callback<this>} */\n this.onUpdate = onUpdate || timerDefaults.onUpdate;\n /** @type {Callback<this>} */\n this.onLoop = onLoop || timerDefaults.onLoop;\n /** @type {Callback<this>} */\n this.onPause = onPause || timerDefaults.onPause;\n /** @type {Callback<this>} */\n this.onComplete = onComplete || timerDefaults.onComplete;\n /** @type {Number} */\n this.iterationDuration = timerDuration; // Duration of one loop\n /** @type {Number} */\n this.iterationCount = timerIterationCount; // Number of loops\n /** @type {Boolean|ScrollObserver} */\n this._autoplay = parent ? false : setValue(autoplay, timerDefaults.autoplay);\n /** @type {Number} */\n this._offset = offsetPosition;\n /** @type {Number} */\n this._delay = timerDelay;\n /** @type {Number} */\n this._loopDelay = timerLoopDelay;\n /** @type {Number} */\n this._iterationTime = 0;\n /** @type {Number} */\n this._currentIteration = 0; // Current loop index\n /** @type {Function} */\n this._resolve = noop; // Used by .then()\n /** @type {Boolean} */\n this._running = false;\n /** @type {Number} */\n this._reversed = +setValue(reversed, timerDefaults.reversed);\n /** @type {Number} */\n this._reverse = this._reversed;\n /** @type {Number} */\n this._cancelled = 0;\n /** @type {Boolean} */\n this._alternate = setValue(alternate, timerDefaults.alternate);\n /** @type {Renderable} */\n this._prev = null;\n /** @type {Renderable} */\n this._next = null;\n\n // Clock's parameters\n /** @type {Number} */\n this._elapsedTime = timerInitTime;\n /** @type {Number} */\n this._startTime = timerInitTime;\n /** @type {Number} */\n this._lastTime = timerInitTime;\n /** @type {Number} */\n this._fps = setValue(frameRate, timerDefaults.frameRate);\n /** @type {Number} */\n this._speed = setValue(playbackRate, timerDefaults.playbackRate);\n }\n\n get cancelled() {\n return !!this._cancelled;\n }\n\n /** @param {Boolean} cancelled */\n set cancelled(cancelled) {\n cancelled ? this.cancel() : this.reset(1).play();\n }\n\n get currentTime() {\n return clamp(round(this._currentTime, globals.precision), -this._delay, this.duration);\n }\n\n /** @param {Number} time */\n set currentTime(time) {\n const paused = this.paused;\n // Pausing the timer is necessary to avoid time jumps on a running instance\n this.pause().seek(+time);\n if (!paused) this.resume();\n }\n\n get iterationCurrentTime() {\n return round(this._iterationTime, globals.precision);\n }\n\n /** @param {Number} time */\n set iterationCurrentTime(time) {\n this.currentTime = (this.iterationDuration * this._currentIteration) + time;\n }\n\n get progress() {\n return clamp(round(this._currentTime / this.duration, 10), 0, 1);\n }\n\n /** @param {Number} progress */\n set progress(progress) {\n this.currentTime = this.duration * progress;\n }\n\n get iterationProgress() {\n return clamp(round(this._iterationTime / this.iterationDuration, 10), 0, 1);\n }\n\n /** @param {Number} progress */\n set iterationProgress(progress) {\n const iterationDuration = this.iterationDuration;\n this.currentTime = (iterationDuration * this._currentIteration) + (iterationDuration * progress);\n }\n\n get currentIteration() {\n return this._currentIteration;\n }\n\n /** @param {Number} iterationCount */\n set currentIteration(iterationCount) {\n this.currentTime = (this.iterationDuration * clamp(+iterationCount, 0, this.iterationCount - 1));\n }\n\n get reversed() {\n return !!this._reversed;\n }\n\n /** @param {Boolean} reverse */\n set reversed(reverse) {\n reverse ? this.reverse() : this.play();\n }\n\n get speed() {\n return super.speed;\n }\n\n /** @param {Number} playbackRate */\n set speed(playbackRate) {\n super.speed = playbackRate;\n this.resetTime();\n }\n\n /**\n * @param {Number} internalRender\n * @return {this}\n */\n reset(internalRender = 0) {\n // If cancelled, revive the timer before rendering in order to have propertly composed tweens siblings\n reviveTimer(this);\n if (this._reversed && !this._reverse) this.reversed = false;\n // Rendering before updating the completed flag to prevent skips and to make sure the properties are not overridden\n // Setting the iterationTime at the end to force the rendering to happend backwards, otherwise calling .reset() on Timelines might not render children in the right order\n // NOTE: This is only required for Timelines and might be better to move to the Timeline class?\n this._iterationTime = this.iterationDuration;\n // Set tickMode to tickModes.FORCE to force rendering\n tick(this, 0, 1, internalRender, tickModes.FORCE);\n // Reset timer properties after revive / render to make sure the props are not updated again\n resetTimerProperties(this);\n // Also reset children properties\n if (this._hasChildren) {\n forEachChildren(this, resetTimerProperties);\n }\n return this;\n }\n\n /**\n * @param {Number} internalRender\n * @return {this}\n */\n init(internalRender = 0) {\n this.fps = this._fps;\n this.speed = this._speed;\n // Manually calling .init() on timelines should render all children intial state\n // Forces all children to render once then render to 0 when reseted\n if (!internalRender && this._hasChildren) {\n tick(this, this.duration, 1, internalRender, tickModes.FORCE);\n }\n this.reset(internalRender);\n // Make sure to set autoplay to false to child timers so it doesn't attempt to autoplay / link\n const autoplay = this._autoplay;\n if (autoplay === true) {\n this.resume();\n } else if (autoplay && !isUnd(/** @type {ScrollObserver} */(autoplay).linked)) {\n /** @type {ScrollObserver} */(autoplay).link(this);\n }\n return this;\n }\n\n /** @return {this} */\n resetTime() {\n const timeScale = 1 / (this._speed * engine._speed);\n // TODO: See if we can safely use engine._elapsedTime here\n // if (!engine.reqId) engine.requestTick(now())\n // this._startTime = engine._elapsedTime - (this._currentTime + this._delay) * timeScale;\n this._startTime = now() - (this._currentTime + this._delay) * timeScale;\n return this;\n }\n\n /** @return {this} */\n pause() {\n if (this.paused) return this;\n this.paused = true;\n this.onPause(this);\n return this;\n }\n\n /** @return {this} */\n resume() {\n if (!this.paused) return this;\n this.paused = false;\n // We can safely imediatly render a timer that has no duration and no children\n if (this.duration <= minValue && !this._hasChildren) {\n tick(this, minValue, 0, 0, tickModes.FORCE);\n } else {\n if (!this._running) {\n addChild(engine, this);\n engine._hasChildren = true;\n this._running = true;\n }\n this.resetTime();\n // Forces the timer to advance by at least one frame when the next tick occurs\n this._startTime -= 12;\n engine.wake();\n }\n return this;\n }\n\n /** @return {this} */\n restart() {\n return this.reset(0).resume();\n }\n\n /**\n * @param {Number} time\n * @param {Boolean|Number} [muteCallbacks]\n * @param {Boolean|Number} [internalRender]\n * @return {this}\n */\n seek(time, muteCallbacks = 0, internalRender = 0) {\n // Recompose the tween siblings in case the timer has been cancelled\n reviveTimer(this);\n // If you seek a completed animation, otherwise the next play will starts at 0\n this.completed = false;\n const isPaused = this.paused;\n this.paused = true;\n // timer, time, muteCallbacks, internalRender, tickMode\n tick(this, time + this._delay, ~~muteCallbacks, ~~internalRender, tickModes.AUTO);\n return isPaused ? this : this.resume();\n }\n\n /** @return {this} */\n alternate() {\n const reversed = this._reversed;\n const count = this.iterationCount;\n const duration = this.iterationDuration;\n // Calculate the maximum iterations possible given the iteration duration\n const iterations = count === Infinity ? floor(maxValue / duration) : count;\n this._reversed = +(this._alternate && !(iterations % 2) ? reversed : !reversed);\n if (count === Infinity) {\n // Handle infinite loops to loop on themself\n this.iterationProgress = this._reversed ? 1 - this.iterationProgress : this.iterationProgress;\n } else {\n this.seek((duration * iterations) - this._currentTime);\n }\n this.resetTime();\n return this;\n }\n\n /** @return {this} */\n play() {\n if (this._reversed) this.alternate();\n return this.resume();\n }\n\n /** @return {this} */\n reverse() {\n if (!this._reversed) this.alternate();\n return this.resume();\n }\n\n // TODO: Move all the animation / tweens / children related code to Animation / Timeline\n\n /** @return {this} */\n cancel() {\n if (this._hasChildren) {\n forEachChildren(this, (/** @type {Renderable} */child) => child.cancel(), true);\n } else {\n forEachChildren(this, removeTweenSliblings);\n }\n this._cancelled = 1;\n // Pausing the timer removes it from the engine\n return this.pause();\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n const normlizedDuration = normalizeTime(newDuration);\n if (currentDuration === normlizedDuration) return this;\n const timeScale = newDuration / currentDuration;\n const isSetter = newDuration <= minValue;\n this.duration = isSetter ? minValue : normlizedDuration;\n this.iterationDuration = isSetter ? minValue : normalizeTime(this.iterationDuration * timeScale);\n this._offset *= timeScale;\n this._delay *= timeScale;\n this._loopDelay *= timeScale;\n return this;\n }\n\n /**\n * Cancels the timer by seeking it back to 0 and reverting the attached scroller if necessary\n * @return {this}\n */\n revert() {\n tick(this, 0, 1, 0, tickModes.AUTO);\n const ap = /** @type {ScrollObserver} */(this._autoplay);\n if (ap && ap.linked && ap.linked === this) ap.revert();\n return this.cancel();\n }\n\n /**\n * Imediatly completes the timer, cancels it and triggers the onComplete callback\n * @return {this}\n */\n complete() {\n return this.seek(this.duration).cancel();\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback = noop) {\n const then = this.then;\n const onResolve = () => {\n // this.then = null prevents infinite recursion if returned by an async function\n // https://github.com/juliangarnierorg/anime-beta/issues/26\n this.then = null;\n callback(this);\n this.then = then;\n this._resolve = noop;\n };\n return new Promise(r => {\n this._resolve = () => r(onResolve());\n // Make sure to resolve imediatly if the timer has already completed\n if (this.completed) this._resolve();\n return this;\n });\n }\n\n}\n\n/**\n * @param {TimerParams} [parameters]\n * @return {Timer}\n */\nconst createTimer = parameters => new Timer(parameters, null, 0).init();\n\n\n\n\n/** @type {EasingFunction} */\nconst none = t => t;\n\n// Cubic Bezier solver adapted from https://github.com/gre/bezier-ease © Gaëtan Renaudeau\n\n/**\n * @param {Number} aT\n * @param {Number} aA1\n * @param {Number} aA2\n * @return {Number}\n */\nconst calcBezier = (aT, aA1, aA2) => (((1 - 3 * aA2 + 3 * aA1) * aT + (3 * aA2 - 6 * aA1)) * aT + (3 * aA1)) * aT;\n\n/**\n * @param {Number} aX\n * @param {Number} mX1\n * @param {Number} mX2\n * @return {Number}\n */\nconst binarySubdivide = (aX, mX1, mX2) => {\n let aA = 0, aB = 1, currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (abs(currentX) > .0000001 && ++i < 100);\n return currentT;\n};\n\n/**\n * @param {Number} [mX1] The x coordinate of the first point\n * @param {Number} [mY1] The y coordinate of the first point\n * @param {Number} [mX2] The x coordinate of the second point\n * @param {Number} [mY2] The y coordinate of the second point\n * @return {EasingFunction}\n */\n\nconst cubicBezier = (mX1 = 0.5, mY1 = 0.0, mX2 = 0.5, mY2 = 1.0) => (mX1 === mY1 && mX2 === mY2) ? none :\n t => t === 0 || t === 1 ? t :\n calcBezier(binarySubdivide(t, mX1, mX2), mY1, mY2);\n\n/**\n * Steps ease implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n * Only covers 'end' and 'start' jumpterms\n * @param {Number} steps\n * @param {Boolean} [fromStart]\n * @return {EasingFunction}\n */\nconst steps = (steps = 10, fromStart) => {\n const roundMethod = fromStart ? ceil : floor;\n return t => roundMethod(clamp(t, 0, 1) * steps) * (1 / steps);\n};\n\n/**\n * Without parameters, the linear function creates a non-eased transition.\n * Parameters, if used, creates a piecewise linear easing by interpolating linearly between the specified points.\n * @param {...(String|Number)} args - Points\n * @return {EasingFunction}\n */\nconst linear = (...args) => {\n const argsLength = args.length;\n if (!argsLength) return none;\n const totalPoints = argsLength - 1;\n const firstArg = args[0];\n const lastArg = args[totalPoints];\n const xPoints = [0];\n const yPoints = [parseNumber(firstArg)];\n for (let i = 1; i < totalPoints; i++) {\n const arg = args[i];\n const splitValue = isStr(arg) ?\n /** @type {String} */(arg).trim().split(' ') :\n [arg];\n const value = splitValue[0];\n const percent = splitValue[1];\n xPoints.push(!isUnd(percent) ? parseNumber(percent) / 100 : i / totalPoints);\n yPoints.push(parseNumber(value));\n }\n yPoints.push(parseNumber(lastArg));\n xPoints.push(1);\n return function easeLinear(t) {\n for (let i = 1, l = xPoints.length; i < l; i++) {\n const currentX = xPoints[i];\n if (t <= currentX) {\n const prevX = xPoints[i - 1];\n const prevY = yPoints[i - 1];\n return prevY + (yPoints[i] - prevY) * (t - prevX) / (currentX - prevX);\n }\n }\n return yPoints[yPoints.length - 1];\n }\n};\n\n/**\n * Generate random steps\n * @param {Number} [length] - The number of steps\n * @param {Number} [randomness] - How strong the randomness is\n * @return {EasingFunction}\n */\nconst irregular = (length = 10, randomness = 1) => {\n const values = [0];\n const total = length - 1;\n for (let i = 1; i < total; i++) {\n const previousValue = values[i - 1];\n const spacing = i / total;\n const segmentEnd = (i + 1) / total;\n const randomVariation = spacing + (segmentEnd - spacing) * Math.random();\n // Mix the even spacing and random variation based on the randomness parameter\n const randomValue = spacing * (1 - randomness) + randomVariation * randomness;\n values.push(clamp(randomValue, previousValue, 1));\n }\n values.push(1);\n return linear(...values);\n};\n\n// Easing functions adapted from http://www.robertpenner.com/ease © Robert Penner\n\n/**\n * @callback PowerEasing\n * @param {Number|String} [power=1.675]\n * @return {EasingFunction}\n */\n\n/**\n * @callback BackEasing\n * @param {Number|String} [overshoot=1.70158]\n * @return {EasingFunction}\n */\n\n/**\n * @callback ElasticEasing\n * @param {Number|String} [amplitude=1]\n * @param {Number|String} [period=.3]\n * @return {EasingFunction}\n */\n\n/**\n * @callback EaseFactory\n * @param {Number|String} [paramA]\n * @param {Number|String} [paramB]\n * @return {EasingFunction|Number}\n */\n\n/** @typedef {PowerEasing|BackEasing|ElasticEasing} EasesFactory */\n\nconst halfPI = PI / 2;\nconst doublePI = PI * 2;\n/** @type {PowerEasing} */\nconst easeInPower = (p = 1.68) => t => pow(t, +p);\n\n/** @type {Record<String, EasesFactory|EasingFunction>} */\nconst easeInFunctions = {\n [emptyString]: easeInPower,\n Quad: easeInPower(2),\n Cubic: easeInPower(3),\n Quart: easeInPower(4),\n Quint: easeInPower(5),\n /** @type {EasingFunction} */\n Sine: t => 1 - cos(t * halfPI),\n /** @type {EasingFunction} */\n Circ: t => 1 - sqrt(1 - t * t),\n /** @type {EasingFunction} */\n Expo: t => t ? pow(2, 10 * t - 10) : 0,\n /** @type {EasingFunction} */\n Bounce: t => {\n let pow2, b = 4;\n while (t < ((pow2 = pow(2, --b)) - 1) / 11);\n return 1 / pow(4, 3 - b) - 7.5625 * pow((pow2 * 3 - 2) / 22 - t, 2);\n },\n /** @type {BackEasing} */\n Back: (overshoot = 1.70158) => t => (+overshoot + 1) * t * t * t - +overshoot * t * t,\n /** @type {ElasticEasing} */\n Elastic: (amplitude = 1, period = .3) => {\n const a = clamp(+amplitude, 1, 10);\n const p = clamp(+period, minValue, 2);\n const s = (p / doublePI) * asin(1 / a);\n const e = doublePI / p;\n return t => t === 0 || t === 1 ? t : -a * pow(2, -10 * (1 - t)) * sin(((1 - t) - s) * e);\n }\n};\n\n/**\n * @callback EaseType\n * @param {EasingFunction} Ease\n * @return {EasingFunction}\n */\n\n/** @type {Record<String, EaseType>} */\nconst easeTypes = {\n in: easeIn => t => easeIn(t),\n out: easeIn => t => 1 - easeIn(1 - t),\n inOut: easeIn => t => t < .5 ? easeIn(t * 2) / 2 : 1 - easeIn(t * -2 + 2) / 2,\n outIn: easeIn => t => t < .5 ? (1 - easeIn(1 - t * 2)) / 2 : (easeIn(t * 2 - 1) + 1) / 2,\n};\n\n/**\n * @param {String} string\n * @param {Record<String, EasesFactory|EasingFunction>} easesFunctions\n * @param {Object} easesLookups\n * @return {EasingFunction}\n */\nconst parseEaseString = (string, easesFunctions, easesLookups) => {\n if (easesLookups[string]) return easesLookups[string];\n if (string.indexOf('(') <= -1) {\n const hasParams = easeTypes[string] || string.includes('Back') || string.includes('Elastic');\n const parsedFn = /** @type {EasingFunction} */(hasParams ? /** @type {EasesFactory} */(easesFunctions[string])() : easesFunctions[string]);\n return parsedFn ? easesLookups[string] = parsedFn : none;\n } else {\n const split = string.slice(0, -1).split('(');\n const parsedFn = /** @type {EasesFactory} */(easesFunctions[split[0]]);\n return parsedFn ? easesLookups[string] = parsedFn(...split[1].split(',')) : none;\n }\n};\n\n/**\n * @typedef {Object} EasesFunctions\n * @property {typeof linear} linear\n * @property {typeof irregular} irregular\n * @property {typeof steps} steps\n * @property {typeof cubicBezier} cubicBezier\n * @property {PowerEasing} in\n * @property {PowerEasing} out\n * @property {PowerEasing} inOut\n * @property {PowerEasing} outIn\n * @property {EasingFunction} inQuad\n * @property {EasingFunction} outQuad\n * @property {EasingFunction} inOutQuad\n * @property {EasingFunction} outInQuad\n * @property {EasingFunction} inCubic\n * @property {EasingFunction} outCubic\n * @property {EasingFunction} inOutCubic\n * @property {EasingFunction} outInCubic\n * @property {EasingFunction} inQuart\n * @property {EasingFunction} outQuart\n * @property {EasingFunction} inOutQuart\n * @property {EasingFunction} outInQuart\n * @property {EasingFunction} inQuint\n * @property {EasingFunction} outQuint\n * @property {EasingFunction} inOutQuint\n * @property {EasingFunction} outInQuint\n * @property {EasingFunction} inSine\n * @property {EasingFunction} outSine\n * @property {EasingFunction} inOutSine\n * @property {EasingFunction} outInSine\n * @property {EasingFunction} inCirc\n * @property {EasingFunction} outCirc\n * @property {EasingFunction} inOutCirc\n * @property {EasingFunction} outInCirc\n * @property {EasingFunction} inExpo\n * @property {EasingFunction} outExpo\n * @property {EasingFunction} inOutExpo\n * @property {EasingFunction} outInExpo\n * @property {EasingFunction} inBounce\n * @property {EasingFunction} outBounce\n * @property {EasingFunction} inOutBounce\n * @property {EasingFunction} outInBounce\n * @property {BackEasing} inBack\n * @property {BackEasing} outBack\n * @property {BackEasing} inOutBack\n * @property {BackEasing} outInBack\n * @property {ElasticEasing} inElastic\n * @property {ElasticEasing} outElastic\n * @property {ElasticEasing} inOutElastic\n * @property {ElasticEasing} outInElastic\n */\n\nconst eases = (/*#__PURE__*/ (() => {\n const list = { linear, irregular, steps, cubicBezier };\n for (let type in easeTypes) {\n for (let name in easeInFunctions) {\n const easeIn = easeInFunctions[name];\n const easeType = easeTypes[type];\n list[type + name] = /** @type {EasesFactory|EasingFunction} */(\n name === emptyString || name === 'Back' || name === 'Elastic' ?\n (a, b) => easeType(/** @type {EasesFactory} */(easeIn)(a, b)) :\n easeType(/** @type {EasingFunction} */(easeIn))\n );\n }\n }\n return /** @type {EasesFunctions} */(list);\n})());\n\n/** @type {Record<String, EasingFunction>} */\nconst JSEasesLookups = { linear: none };\n\n/**\n * @param {EasingParam} ease\n * @return {EasingFunction}\n */\nconst parseEasings = ease => isFnc(ease) ? ease :\n isStr(ease) ? parseEaseString(/** @type {String} */(ease), eases, JSEasesLookups) :\n none;\n\n\n\n\nconst propertyNamesCache = {};\n\n/**\n * @param {String} propertyName\n * @param {Target} target\n * @param {tweenTypes} tweenType\n * @return {String}\n */\nconst sanitizePropertyName = (propertyName, target, tweenType) => {\n if (tweenType === tweenTypes.TRANSFORM) {\n const t = shortTransforms.get(propertyName);\n return t ? t : propertyName;\n } else if (\n tweenType === tweenTypes.CSS ||\n // Handle special cases where properties like \"strokeDashoffset\" needs to be set as \"stroke-dashoffset\"\n // but properties like \"baseFrequency\" should stay in lowerCamelCase\n (tweenType === tweenTypes.ATTRIBUTE && (isSvg(target) && propertyName in /** @type {DOMTarget} */(target).style))\n ) {\n const cachedPropertyName = propertyNamesCache[propertyName];\n if (cachedPropertyName) {\n return cachedPropertyName;\n } else {\n const lowerCaseName = propertyName ? toLowerCase(propertyName) : propertyName;\n propertyNamesCache[propertyName] = lowerCaseName;\n return lowerCaseName;\n }\n } else {\n return propertyName;\n }\n};\n\n\n\n\nconst angleUnitsMap = { 'deg': 1, 'rad': 180 / PI, 'turn': 360 };\nconst convertedValuesCache = {};\n\n/**\n * @param {DOMTarget} el\n * @param {TweenDecomposedValue} decomposedValue\n * @param {String} unit\n * @param {Boolean} [force]\n * @return {TweenDecomposedValue}\n */\nconst convertValueUnit = (el, decomposedValue, unit, force = false) => {\n const currentUnit = decomposedValue.u;\n const currentNumber = decomposedValue.n;\n if (decomposedValue.t === valueTypes.UNIT && currentUnit === unit) { // TODO: Check if checking against the same unit string is necessary\n return decomposedValue;\n }\n const cachedKey = currentNumber + currentUnit + unit;\n const cached = convertedValuesCache[cachedKey];\n if (!isUnd(cached) && !force) {\n decomposedValue.n = cached;\n } else {\n let convertedValue;\n if (currentUnit in angleUnitsMap) {\n convertedValue = currentNumber * angleUnitsMap[currentUnit] / angleUnitsMap[unit];\n } else {\n const baseline = 100;\n const tempEl = /** @type {DOMTarget} */(el.cloneNode());\n const parentNode = el.parentNode;\n const parentEl = (parentNode && (parentNode !== doc)) ? parentNode : doc.body;\n parentEl.appendChild(tempEl);\n const elStyle = tempEl.style;\n elStyle.width = baseline + currentUnit;\n const currentUnitWidth = /** @type {HTMLElement} */(tempEl).offsetWidth || baseline;\n elStyle.width = baseline + unit;\n const newUnitWidth = /** @type {HTMLElement} */(tempEl).offsetWidth || baseline;\n const factor = currentUnitWidth / newUnitWidth;\n parentEl.removeChild(tempEl);\n convertedValue = factor * currentNumber;\n }\n decomposedValue.n = convertedValue;\n convertedValuesCache[cachedKey] = convertedValue;\n }\n decomposedValue.t === valueTypes.UNIT;\n decomposedValue.u = unit;\n return decomposedValue;\n};\n\n\n\n\n/**\n * @template {Renderable} T\n * @param {T} renderable\n * @return {T}\n */\nconst cleanInlineStyles = renderable => {\n // Allow cleanInlineStyles() to be called on timelines\n if (renderable._hasChildren) {\n forEachChildren(renderable, cleanInlineStyles, true);\n } else {\n const animation = /** @type {JSAnimation} */(renderable);\n animation.pause();\n forEachChildren(animation, (/** @type {Tween} */tween) => {\n const tweenProperty = tween.property;\n const tweenTarget = tween.target;\n if (tweenTarget[isDomSymbol]) {\n const targetStyle = /** @type {DOMTarget} */(tweenTarget).style;\n const originalInlinedValue = animation._inlineStyles[tweenProperty];\n if (tween._tweenType === tweenTypes.TRANSFORM) {\n const cachedTransforms = tweenTarget[transformsSymbol];\n if (isUnd(originalInlinedValue) || originalInlinedValue === emptyString) {\n delete cachedTransforms[tweenProperty];\n } else {\n cachedTransforms[tweenProperty] = originalInlinedValue;\n }\n if (tween._renderTransforms) {\n if (!Object.keys(cachedTransforms).length) {\n targetStyle.removeProperty('transform');\n } else {\n let str = emptyString;\n for (let key in cachedTransforms) {\n str += transformsFragmentStrings[key] + cachedTransforms[key] + ') ';\n }\n targetStyle.transform = str;\n }\n }\n } else {\n if (isUnd(originalInlinedValue) || originalInlinedValue === emptyString) {\n targetStyle.removeProperty(tweenProperty);\n } else {\n targetStyle[tweenProperty] = originalInlinedValue;\n }\n }\n if (animation._tail === tween) {\n animation.targets.forEach(t => {\n if (t.getAttribute && t.getAttribute('style') === emptyString) {\n t.removeAttribute('style');\n } });\n }\n }\n });\n }\n return renderable;\n};\n\n// Defines decomposed values target objects only once and mutate their properties later to avoid GC\n// TODO: Maybe move the objects creation to values.js and use the decompose function to create the base object\nconst fromTargetObject = createDecomposedValueTargetObject();\nconst toTargetObject = createDecomposedValueTargetObject();\nconst toFunctionStore = { func: null };\nconst keyframesTargetArray = [null];\nconst fastSetValuesArray = [null, null];\n/** @type {TweenKeyValue} */\nconst keyObjectTarget = { to: null };\n\nlet tweenId = 0;\nlet keyframes;\n/** @type {TweenParamsOptions & TweenValues} */\nlet key;\n\n/**\n * @param {DurationKeyframes | PercentageKeyframes} keyframes\n * @param {AnimationParams} parameters\n * @return {AnimationParams}\n */\nconst generateKeyframes = (keyframes, parameters) => {\n /** @type {AnimationParams} */\n const properties = {};\n if (isArr(keyframes)) {\n const propertyNames = [].concat(.../** @type {DurationKeyframes} */(keyframes).map(key => Object.keys(key))).filter(isKey);\n for (let i = 0, l = propertyNames.length; i < l; i++) {\n const propName = propertyNames[i];\n const propArray = /** @type {DurationKeyframes} */(keyframes).map(key => {\n /** @type {TweenKeyValue} */\n const newKey = {};\n for (let p in key) {\n const keyValue = /** @type {TweenPropValue} */(key[p]);\n if (isKey(p)) {\n if (p === propName) {\n newKey.to = keyValue;\n }\n } else {\n newKey[p] = keyValue;\n }\n }\n return newKey;\n });\n properties[propName] = /** @type {ArraySyntaxValue} */(propArray);\n }\n\n } else {\n const totalDuration = /** @type {Number} */(setValue(parameters.duration, globals.defaults.duration));\n const keys = Object.keys(keyframes)\n .map(key => { return {o: parseFloat(key) / 100, p: keyframes[key]} })\n .sort((a, b) => a.o - b.o);\n keys.forEach(key => {\n const offset = key.o;\n const prop = key.p;\n for (let name in prop) {\n if (isKey(name)) {\n let propArray = /** @type {Array} */(properties[name]);\n if (!propArray) propArray = properties[name] = [];\n const duration = offset * totalDuration;\n let length = propArray.length;\n let prevKey = propArray[length - 1];\n const keyObj = { to: prop[name] };\n let durProgress = 0;\n for (let i = 0; i < length; i++) {\n durProgress += propArray[i].duration;\n }\n if (length === 1) {\n keyObj.from = prevKey.to;\n }\n if (prop.ease) {\n keyObj.ease = prop.ease;\n }\n keyObj.duration = duration - (length ? durProgress : 0);\n propArray.push(keyObj);\n }\n }\n return key;\n });\n\n for (let name in properties) {\n const propArray = /** @type {Array} */(properties[name]);\n let prevEase;\n // let durProgress = 0\n for (let i = 0, l = propArray.length; i < l; i++) {\n const prop = propArray[i];\n // Emulate WAPPI easing parameter position\n const currentEase = prop.ease;\n prop.ease = prevEase ? prevEase : undefined;\n prevEase = currentEase;\n // durProgress += prop.duration;\n // if (i === l - 1 && durProgress !== totalDuration) {\n // propArray.push({ from: prop.to, ease: prop.ease, duration: totalDuration - durProgress })\n // }\n }\n if (!propArray[0].duration) {\n propArray.shift();\n }\n }\n\n }\n\n return properties;\n};\n\nclass JSAnimation extends Timer {\n /**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @param {Timeline} [parent]\n * @param {Number} [parentPosition]\n * @param {Boolean} [fastSet=false]\n * @param {Number} [index=0]\n * @param {Number} [length=0]\n */\n constructor(\n targets,\n parameters,\n parent,\n parentPosition,\n fastSet = false,\n index = 0,\n length = 0\n ) {\n\n super(/** @type {TimerParams&AnimationParams} */(parameters), parent, parentPosition);\n\n const parsedTargets = registerTargets(targets);\n const targetsLength = parsedTargets.length;\n\n // If the parameters object contains a \"keyframes\" property, convert all the keyframes values to regular properties\n\n const kfParams = /** @type {AnimationParams} */(parameters).keyframes;\n const params = /** @type {AnimationParams} */(kfParams ? mergeObjects(generateKeyframes(/** @type {DurationKeyframes} */(kfParams), parameters), parameters) : parameters);\n\n const {\n delay,\n duration,\n ease,\n playbackEase,\n modifier,\n composition,\n onRender,\n } = params;\n\n const animDefaults = parent ? parent.defaults : globals.defaults;\n const animaPlaybackEase = setValue(playbackEase, animDefaults.playbackEase);\n const animEase = animaPlaybackEase ? parseEasings(animaPlaybackEase) : null;\n const hasSpring = !isUnd(ease) && !isUnd(/** @type {Spring} */(ease).ease);\n const tEasing = hasSpring ? /** @type {Spring} */(ease).ease : setValue(ease, animEase ? 'linear' : animDefaults.ease);\n const tDuration = hasSpring ? /** @type {Spring} */(ease).duration : setValue(duration, animDefaults.duration);\n const tDelay = setValue(delay, animDefaults.delay);\n const tModifier = modifier || animDefaults.modifier;\n // If no composition is defined and the targets length is high (>= 1000) set the composition to 'none' (0) for faster tween creation\n const tComposition = isUnd(composition) && targetsLength >= K ? compositionTypes.none : !isUnd(composition) ? composition : animDefaults.composition;\n // TODO: Do not create an empty object until we know the animation will generate inline styles\n const animInlineStyles = {};\n // const absoluteOffsetTime = this._offset;\n const absoluteOffsetTime = this._offset + (parent ? parent._offset : 0);\n\n let iterationDuration = NaN;\n let iterationDelay = NaN;\n let animationAnimationLength = 0;\n let shouldTriggerRender = 0;\n\n for (let targetIndex = 0; targetIndex < targetsLength; targetIndex++) {\n\n const target = parsedTargets[targetIndex];\n const ti = index || targetIndex;\n const tl = length || targetsLength;\n\n let lastTransformGroupIndex = NaN;\n let lastTransformGroupLength = NaN;\n\n for (let p in params) {\n\n if (isKey(p)) {\n\n const tweenType = getTweenType(target, p);\n\n const propName = sanitizePropertyName(p, target, tweenType);\n\n let propValue = params[p];\n\n const isPropValueArray = isArr(propValue);\n\n if (fastSet && !isPropValueArray) {\n fastSetValuesArray[0] = propValue;\n fastSetValuesArray[1] = propValue;\n propValue = fastSetValuesArray;\n }\n\n // TODO: Allow nested keyframes inside ObjectValue value (prop: { to: [.5, 1, .75, 2, 3] })\n // Normalize property values to valid keyframe syntax:\n // [x, y] to [{to: [x, y]}] or {to: x} to [{to: x}] or keep keys syntax [{}, {}, {}...]\n // const keyframes = isArr(propValue) ? propValue.length === 2 && !isObj(propValue[0]) ? [{ to: propValue }] : propValue : [propValue];\n if (isPropValueArray) {\n const arrayLength = /** @type {Array} */(propValue).length;\n const isNotObjectValue = !isObj(propValue[0]);\n // Convert [x, y] to [{to: [x, y]}]\n if (arrayLength === 2 && isNotObjectValue) {\n keyObjectTarget.to = /** @type {TweenParamValue} */(/** @type {unknown} */(propValue));\n keyframesTargetArray[0] = keyObjectTarget;\n keyframes = keyframesTargetArray;\n // Convert [x, y, z] to [[x, y], z]\n } else if (arrayLength > 2 && isNotObjectValue) {\n keyframes = [];\n /** @type {Array.<Number>} */(propValue).forEach((v, i) => {\n if (!i) {\n fastSetValuesArray[0] = v;\n } else if (i === 1) {\n fastSetValuesArray[1] = v;\n keyframes.push(fastSetValuesArray);\n } else {\n keyframes.push(v);\n }\n });\n } else {\n keyframes = /** @type {Array.<TweenKeyValue>} */(propValue);\n }\n } else {\n keyframesTargetArray[0] = propValue;\n keyframes = keyframesTargetArray;\n }\n\n let siblings = null;\n let prevTween = null;\n let firstTweenChangeStartTime = NaN;\n let lastTweenChangeEndTime = 0;\n let tweenIndex = 0;\n\n for (let l = keyframes.length; tweenIndex < l; tweenIndex++) {\n\n const keyframe = keyframes[tweenIndex];\n\n if (isObj(keyframe)) {\n key = keyframe;\n } else {\n keyObjectTarget.to = /** @type {TweenParamValue} */(keyframe);\n key = keyObjectTarget;\n }\n\n toFunctionStore.func = null;\n\n const computedToValue = getFunctionValue(key.to, target, ti, tl, toFunctionStore);\n\n let tweenToValue;\n // Allows function based values to return an object syntax value ({to: v})\n if (isObj(computedToValue) && !isUnd(computedToValue.to)) {\n key = computedToValue;\n tweenToValue = computedToValue.to;\n } else {\n tweenToValue = computedToValue;\n }\n const tweenFromValue = getFunctionValue(key.from, target, ti, tl);\n const keyEasing = key.ease;\n const hasSpring = !isUnd(keyEasing) && !isUnd(/** @type {Spring} */(keyEasing).ease);\n // Easing are treated differently and don't accept function based value to prevent having to pass a function wrapper that returns an other function all the time\n const tweenEasing = hasSpring ? /** @type {Spring} */(keyEasing).ease : keyEasing || tEasing;\n // Calculate default individual keyframe duration by dividing the tl of keyframes\n const tweenDuration = hasSpring ? /** @type {Spring} */(keyEasing).duration : getFunctionValue(setValue(key.duration, (l > 1 ? getFunctionValue(tDuration, target, ti, tl) / l : tDuration)), target, ti, tl);\n // Default delay value should only be applied to the first tween\n const tweenDelay = getFunctionValue(setValue(key.delay, (!tweenIndex ? tDelay : 0)), target, ti, tl);\n const computedComposition = getFunctionValue(setValue(key.composition, tComposition), target, ti, tl);\n const tweenComposition = isNum(computedComposition) ? computedComposition : compositionTypes[computedComposition];\n // Modifiers are treated differently and don't accept function based value to prevent having to pass a function wrapper\n const tweenModifier = key.modifier || tModifier;\n const hasFromvalue = !isUnd(tweenFromValue);\n const hasToValue = !isUnd(tweenToValue);\n const isFromToArray = isArr(tweenToValue);\n const isFromToValue = isFromToArray || (hasFromvalue && hasToValue);\n const tweenStartTime = prevTween ? lastTweenChangeEndTime + tweenDelay : tweenDelay;\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const absoluteStartTime = round(absoluteOffsetTime + tweenStartTime, 12);\n\n // Force a onRender callback if the animation contains at least one from value and autoplay is set to false\n if (!shouldTriggerRender && (hasFromvalue || isFromToArray)) shouldTriggerRender = 1;\n\n let prevSibling = prevTween;\n\n if (tweenComposition !== compositionTypes.none) {\n if (!siblings) siblings = getTweenSiblings(target, propName);\n let nextSibling = siblings._head;\n // Iterate trough all the next siblings until we find a sibling with an equal or inferior start time\n while (nextSibling && !nextSibling._isOverridden && nextSibling._absoluteStartTime <= absoluteStartTime) {\n prevSibling = nextSibling;\n nextSibling = nextSibling._nextRep;\n // Overrides all the next siblings if the next sibling starts at the same time of after as the new tween start time\n if (nextSibling && nextSibling._absoluteStartTime >= absoluteStartTime) {\n while (nextSibling) {\n overrideTween(nextSibling);\n // This will ends both the current while loop and the upper one once all the next sibllings have been overriden\n nextSibling = nextSibling._nextRep;\n }\n }\n }\n }\n\n // Decompose values\n if (isFromToValue) {\n decomposeRawValue(isFromToArray ? getFunctionValue(tweenToValue[0], target, ti, tl) : tweenFromValue, fromTargetObject);\n decomposeRawValue(isFromToArray ? getFunctionValue(tweenToValue[1], target, ti, tl, toFunctionStore) : tweenToValue, toTargetObject);\n if (fromTargetObject.t === valueTypes.NUMBER) {\n if (prevSibling) {\n if (prevSibling._valueType === valueTypes.UNIT) {\n fromTargetObject.t = valueTypes.UNIT;\n fromTargetObject.u = prevSibling._unit;\n }\n } else {\n decomposeRawValue(\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles),\n decomposedOriginalValue\n );\n if (decomposedOriginalValue.t === valueTypes.UNIT) {\n fromTargetObject.t = valueTypes.UNIT;\n fromTargetObject.u = decomposedOriginalValue.u;\n }\n }\n }\n } else {\n if (hasToValue) {\n decomposeRawValue(tweenToValue, toTargetObject);\n } else {\n if (prevTween) {\n decomposeTweenValue(prevTween, toTargetObject);\n } else {\n // No need to get and parse the original value if the tween is part of a timeline and has a previous sibling part of the same timeline\n decomposeRawValue(parent && prevSibling && prevSibling.parent.parent === parent ? prevSibling._value :\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles), toTargetObject);\n }\n }\n if (hasFromvalue) {\n decomposeRawValue(tweenFromValue, fromTargetObject);\n } else {\n if (prevTween) {\n decomposeTweenValue(prevTween, fromTargetObject);\n } else {\n decomposeRawValue(parent && prevSibling && prevSibling.parent.parent === parent ? prevSibling._value :\n // No need to get and parse the original value if the tween is part of a timeline and has a previous sibling part of the same timeline\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles), fromTargetObject);\n }\n }\n }\n\n // Apply operators\n if (fromTargetObject.o) {\n fromTargetObject.n = getRelativeValue(\n !prevSibling ? decomposeRawValue(\n getOriginalAnimatableValue(target, propName, tweenType, animInlineStyles),\n decomposedOriginalValue\n ).n : prevSibling._toNumber,\n fromTargetObject.n,\n fromTargetObject.o\n );\n }\n\n if (toTargetObject.o) {\n toTargetObject.n = getRelativeValue(fromTargetObject.n, toTargetObject.n, toTargetObject.o);\n }\n\n // Values omogenisation in cases of type difference between \"from\" and \"to\"\n if (fromTargetObject.t !== toTargetObject.t) {\n if (fromTargetObject.t === valueTypes.COMPLEX || toTargetObject.t === valueTypes.COMPLEX) {\n const complexValue = fromTargetObject.t === valueTypes.COMPLEX ? fromTargetObject : toTargetObject;\n const notComplexValue = fromTargetObject.t === valueTypes.COMPLEX ? toTargetObject : fromTargetObject;\n notComplexValue.t = valueTypes.COMPLEX;\n notComplexValue.s = cloneArray(complexValue.s);\n notComplexValue.d = complexValue.d.map(() => notComplexValue.n);\n } else if (fromTargetObject.t === valueTypes.UNIT || toTargetObject.t === valueTypes.UNIT) {\n const unitValue = fromTargetObject.t === valueTypes.UNIT ? fromTargetObject : toTargetObject;\n const notUnitValue = fromTargetObject.t === valueTypes.UNIT ? toTargetObject : fromTargetObject;\n notUnitValue.t = valueTypes.UNIT;\n notUnitValue.u = unitValue.u;\n } else if (fromTargetObject.t === valueTypes.COLOR || toTargetObject.t === valueTypes.COLOR) {\n const colorValue = fromTargetObject.t === valueTypes.COLOR ? fromTargetObject : toTargetObject;\n const notColorValue = fromTargetObject.t === valueTypes.COLOR ? toTargetObject : fromTargetObject;\n notColorValue.t = valueTypes.COLOR;\n notColorValue.s = colorValue.s;\n notColorValue.d = [0, 0, 0, 1];\n }\n }\n\n // Unit conversion\n if (fromTargetObject.u !== toTargetObject.u) {\n let valueToConvert = toTargetObject.u ? fromTargetObject : toTargetObject;\n valueToConvert = convertValueUnit(/** @type {DOMTarget} */(target), valueToConvert, toTargetObject.u ? toTargetObject.u : fromTargetObject.u, false);\n // TODO:\n // convertValueUnit(target, to.u ? from : to, to.u ? to.u : from.u);\n }\n\n // Fill in non existing complex values\n if (toTargetObject.d && fromTargetObject.d && (toTargetObject.d.length !== fromTargetObject.d.length)) {\n const longestValue = fromTargetObject.d.length > toTargetObject.d.length ? fromTargetObject : toTargetObject;\n const shortestValue = longestValue === fromTargetObject ? toTargetObject : fromTargetObject;\n // TODO: Check if n should be used instead of 0 for default complex values\n shortestValue.d = longestValue.d.map((_, i) => isUnd(shortestValue.d[i]) ? 0 : shortestValue.d[i]);\n shortestValue.s = cloneArray(longestValue.s);\n }\n\n // Tween factory\n\n // Rounding is necessary here to minimize floating point errors when working in seconds\n const tweenUpdateDuration = round(+tweenDuration || minValue, 12);\n\n /** @type {Tween} */\n const tween = {\n parent: this,\n id: tweenId++,\n property: propName,\n target: target,\n _value: null,\n _func: toFunctionStore.func,\n _ease: parseEasings(tweenEasing),\n _fromNumbers: cloneArray(fromTargetObject.d),\n _toNumbers: cloneArray(toTargetObject.d),\n _strings: cloneArray(toTargetObject.s),\n _fromNumber: fromTargetObject.n,\n _toNumber: toTargetObject.n,\n _numbers: cloneArray(fromTargetObject.d), // For additive tween and animatables\n _number: fromTargetObject.n, // For additive tween and animatables\n _unit: toTargetObject.u,\n _modifier: tweenModifier,\n _currentTime: 0,\n _startTime: tweenStartTime,\n _delay: +tweenDelay,\n _updateDuration: tweenUpdateDuration,\n _changeDuration: tweenUpdateDuration,\n _absoluteStartTime: absoluteStartTime,\n // NOTE: Investigate bit packing to stores ENUM / BOOL\n _tweenType: tweenType,\n _valueType: toTargetObject.t,\n _composition: tweenComposition,\n _isOverlapped: 0,\n _isOverridden: 0,\n _renderTransforms: 0,\n _prevRep: null, // For replaced tween\n _nextRep: null, // For replaced tween\n _prevAdd: null, // For additive tween\n _nextAdd: null, // For additive tween\n _prev: null,\n _next: null,\n };\n\n if (tweenComposition !== compositionTypes.none) {\n composeTween(tween, siblings);\n }\n\n if (isNaN(firstTweenChangeStartTime)) {\n firstTweenChangeStartTime = tween._startTime;\n }\n // Rounding is necessary here to minimize floating point errors when working in seconds\n lastTweenChangeEndTime = round(tweenStartTime + tweenUpdateDuration, 12);\n prevTween = tween;\n animationAnimationLength++;\n\n addChild(this, tween);\n\n }\n\n // Update animation timings with the added tweens properties\n\n if (isNaN(iterationDelay) || firstTweenChangeStartTime < iterationDelay) {\n iterationDelay = firstTweenChangeStartTime;\n }\n\n if (isNaN(iterationDuration) || lastTweenChangeEndTime > iterationDuration) {\n iterationDuration = lastTweenChangeEndTime;\n }\n\n // TODO: Find a way to inline tween._renderTransforms = 1 here\n if (tweenType === tweenTypes.TRANSFORM) {\n lastTransformGroupIndex = animationAnimationLength - tweenIndex;\n lastTransformGroupLength = animationAnimationLength;\n }\n\n }\n\n }\n\n // Set _renderTransforms to last transform property to correctly render the transforms list\n if (!isNaN(lastTransformGroupIndex)) {\n let i = 0;\n forEachChildren(this, (/** @type {Tween} */tween) => {\n if (i >= lastTransformGroupIndex && i < lastTransformGroupLength) {\n tween._renderTransforms = 1;\n if (tween._composition === compositionTypes.blend) {\n forEachChildren(additive.animation, (/** @type {Tween} */additiveTween) => {\n if (additiveTween.id === tween.id) {\n additiveTween._renderTransforms = 1;\n }\n });\n }\n }\n i++;\n });\n }\n\n }\n\n if (!targetsLength) {\n console.warn(`No target found. Make sure the element you're trying to animate is accessible before creating your animation.`);\n }\n\n if (iterationDelay) {\n forEachChildren(this, (/** @type {Tween} */tween) => {\n // If (startTime - delay) equals 0, this means the tween is at the begining of the animation so we need to trim the delay too\n if (!(tween._startTime - tween._delay)) {\n tween._delay -= iterationDelay;\n }\n tween._startTime -= iterationDelay;\n });\n iterationDuration -= iterationDelay;\n } else {\n iterationDelay = 0;\n }\n\n // Prevents iterationDuration to be NaN if no valid animatable props have been provided\n // Prevents _iterationCount to be NaN if no valid animatable props have been provided\n if (!iterationDuration) {\n iterationDuration = minValue;\n this.iterationCount = 0;\n }\n /** @type {TargetsArray} */\n this.targets = parsedTargets;\n /** @type {Number} */\n this.duration = iterationDuration === minValue ? minValue : clampInfinity(((iterationDuration + this._loopDelay) * this.iterationCount) - this._loopDelay) || minValue;\n /** @type {Callback<this>} */\n this.onRender = onRender || animDefaults.onRender;\n /** @type {EasingFunction} */\n this._ease = animEase;\n /** @type {Number} */\n this._delay = iterationDelay;\n // NOTE: I'm keeping delay values separated from offsets in timelines because delays can override previous tweens and it could be confusing to debug a timeline with overridden tweens and no associated visible delays.\n // this._delay = parent ? 0 : iterationDelay;\n // this._offset += parent ? iterationDelay : 0;\n /** @type {Number} */\n this.iterationDuration = iterationDuration;\n /** @type {{}} */\n this._inlineStyles = animInlineStyles;\n\n if (!this._autoplay && shouldTriggerRender) this.onRender(this);\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n if (currentDuration === normalizeTime(newDuration)) return this;\n const timeScale = newDuration / currentDuration;\n // NOTE: Find a better way to handle the stretch of an animation after stretch = 0\n forEachChildren(this, (/** @type {Tween} */tween) => {\n // Rounding is necessary here to minimize floating point errors\n tween._updateDuration = normalizeTime(tween._updateDuration * timeScale);\n tween._changeDuration = normalizeTime(tween._changeDuration * timeScale);\n tween._currentTime *= timeScale;\n tween._startTime *= timeScale;\n tween._absoluteStartTime *= timeScale;\n });\n return super.stretch(newDuration);\n }\n\n /**\n * @return {this}\n */\n refresh() {\n forEachChildren(this, (/** @type {Tween} */tween) => {\n const tweenFunc = tween._func;\n if (tweenFunc) {\n const ogValue = getOriginalAnimatableValue(tween.target, tween.property, tween._tweenType);\n decomposeRawValue(ogValue, decomposedOriginalValue);\n decomposeRawValue(tweenFunc(), toTargetObject);\n tween._fromNumbers = cloneArray(decomposedOriginalValue.d);\n tween._fromNumber = decomposedOriginalValue.n;\n tween._toNumbers = cloneArray(toTargetObject.d);\n tween._strings = cloneArray(toTargetObject.s);\n // Make sure to apply relative operators https://github.com/juliangarnier/anime/issues/1025\n tween._toNumber = toTargetObject.o ? getRelativeValue(decomposedOriginalValue.n, toTargetObject.n, toTargetObject.o) : toTargetObject.n;\n }\n });\n return this;\n }\n\n /**\n * Cancel the animation and revert all the values affected by this animation to their original state\n * @return {this}\n */\n revert() {\n super.revert();\n return cleanInlineStyles(this);\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback) {\n return super.then(callback);\n }\n\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @return {JSAnimation}\n */\nconst animate = (targets, parameters) => new JSAnimation(targets, parameters, null, 0, false).init();\n\n\n\n\n/**\n * Converts an easing function into a valid CSS linear() timing function string\n * @param {EasingFunction} fn\n * @param {number} [samples=100]\n * @returns {string} CSS linear() timing function\n */\nconst easingToLinear = (fn, samples = 100) => {\n const points = [];\n for (let i = 0; i <= samples; i++) points.push(fn(i / samples));\n return `linear(${points.join(', ')})`;\n};\n\nconst WAAPIEasesLookups = {\n in: 'ease-in',\n out: 'ease-out',\n inOut: 'ease-in-out',\n};\n\nconst WAAPIeases = /*#__PURE__*/(() => {\n const list = {};\n for (let type in easeTypes) list[type] = (/** @type {String|Number} */p) => easeTypes[type](easeInPower(p));\n return /** @type {Record<String, EasingFunction>} */(list);\n})();\n\n/**\n * @param {EasingParam} ease\n * @return {String}\n */\nconst parseWAAPIEasing = (ease) => {\n let parsedEase = WAAPIEasesLookups[ease];\n if (parsedEase) return parsedEase;\n parsedEase = 'linear';\n if (isStr(ease)) {\n if (\n stringStartsWith(ease, 'linear') ||\n stringStartsWith(ease, 'cubic-') ||\n stringStartsWith(ease, 'steps') ||\n stringStartsWith(ease, 'ease')\n ) {\n parsedEase = ease;\n } else if (stringStartsWith(ease, 'cubicB')) {\n parsedEase = toLowerCase(ease);\n } else {\n const parsed = parseEaseString(ease, WAAPIeases, WAAPIEasesLookups);\n if (isFnc(parsed)) parsedEase = parsed === none ? 'linear' : easingToLinear(parsed);\n }\n WAAPIEasesLookups[ease] = parsedEase;\n } else if (isFnc(ease)) {\n const easing = easingToLinear(ease);\n if (easing) parsedEase = easing;\n } else if (/** @type {Spring} */(ease).ease) {\n parsedEase = easingToLinear(/** @type {Spring} */(ease).ease);\n }\n return parsedEase;\n};\n\nconst transformsShorthands = ['x', 'y', 'z'];\nconst commonDefaultPXProperties = [\n 'perspective',\n 'width',\n 'height',\n 'margin',\n 'padding',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'borderWidth',\n 'fontSize',\n 'borderRadius',\n ...transformsShorthands\n];\n\nconst validIndividualTransforms = /*#__PURE__*/ (() => [...transformsShorthands, ...validTransforms.filter(t => ['X', 'Y', 'Z'].some(axis => t.endsWith(axis)))])();\n\nlet transformsPropertiesRegistered = null;\n\nconst WAAPIAnimationsLookups = {\n _head: null,\n _tail: null,\n};\n\n/**\n * @param {DOMTarget} $el\n * @param {String} [property]\n * @param {WAAPIAnimation} [parent]\n */\nconst removeWAAPIAnimation = ($el, property, parent) => {\n let nextLookup = WAAPIAnimationsLookups._head;\n while (nextLookup) {\n const next = nextLookup._next;\n const matchTarget = nextLookup.$el === $el;\n const matchProperty = !property || nextLookup.property === property;\n const matchParent = !parent || nextLookup.parent === parent;\n if (matchTarget && matchProperty && matchParent) {\n const anim = nextLookup.animation;\n try { anim.commitStyles(); } catch {} anim.cancel();\n removeChild(WAAPIAnimationsLookups, nextLookup);\n const lookupParent = nextLookup.parent;\n if (lookupParent) {\n lookupParent._completed++;\n if (lookupParent.animations.length === lookupParent._completed) {\n lookupParent.completed = true;\n if (!lookupParent.muteCallbacks) {\n lookupParent.paused = true;\n lookupParent.onComplete(lookupParent);\n lookupParent._resolve(lookupParent);\n }\n }\n }\n }\n nextLookup = next;\n }\n};\n\n/**\n * @param {WAAPIAnimation} parent\n * @param {DOMTarget} $el\n * @param {String} property\n * @param {PropertyIndexedKeyframes} keyframes\n * @param {KeyframeAnimationOptions} params\n * @retun {Animation}\n */\nconst addWAAPIAnimation = (parent, $el, property, keyframes, params) => {\n const animation = $el.animate(keyframes, params);\n const animTotalDuration = params.delay + (+params.duration * params.iterations);\n animation.playbackRate = parent._speed;\n if (parent.paused) animation.pause();\n if (parent.duration < animTotalDuration) {\n parent.duration = animTotalDuration;\n parent.controlAnimation = animation;\n }\n parent.animations.push(animation);\n removeWAAPIAnimation($el, property);\n addChild(WAAPIAnimationsLookups, { parent, animation, $el, property, _next: null, _prev: null });\n const handleRemove = () => { removeWAAPIAnimation($el, property, parent); };\n animation.onremove = handleRemove;\n animation.onfinish = handleRemove;\n return animation;\n};\n\n/**\n * @param {String} propName\n * @param {WAAPIKeyframeValue} value\n * @param {DOMTarget} $el\n * @param {Number} i\n * @param {Number} targetsLength\n * @return {String}\n */\nconst normalizeTweenValue = (propName, value, $el, i, targetsLength) => {\n let v = getFunctionValue(/** @type {any} */(value), $el, i, targetsLength);\n if (!isNum(v)) return v;\n if (commonDefaultPXProperties.includes(propName) || stringStartsWith(propName, 'translate')) return `${v}px`;\n if (stringStartsWith(propName, 'rotate') || stringStartsWith(propName, 'skew')) return `${v}deg`;\n return `${v}`;\n};\n\n/**\n * @param {DOMTarget} $el\n * @param {String} propName\n * @param {WAAPIKeyframeValue} from\n * @param {WAAPIKeyframeValue} to\n * @param {Number} i\n * @param {Number} targetsLength\n * @return {WAAPITweenValue}\n */\nconst parseIndividualTweenValue = ($el, propName, from, to, i, targetsLength) => {\n /** @type {WAAPITweenValue} */\n let tweenValue = '0';\n const computedTo = !isUnd(to) ? normalizeTweenValue(propName, to, $el, i, targetsLength) : getComputedStyle($el)[propName];\n if (!isUnd(from)) {\n const computedFrom = normalizeTweenValue(propName, from, $el, i, targetsLength);\n tweenValue = [computedFrom, computedTo];\n } else {\n tweenValue = isArr(to) ? to.map((/** @type {any} */v) => normalizeTweenValue(propName, v, $el, i, targetsLength)) : computedTo;\n }\n return tweenValue;\n};\n\nclass WAAPIAnimation {\n/**\n * @param {DOMTargetsParam} targets\n * @param {WAAPIAnimationParams} params\n */\n constructor(targets, params) {\n\n if (scope.current) scope.current.register(this);\n\n // Skip the registration and fallback to no animation in case CSS.registerProperty is not supported\n if (isNil(transformsPropertiesRegistered)) {\n if (isBrowser && (isUnd(CSS) || !Object.hasOwnProperty.call(CSS, 'registerProperty'))) {\n transformsPropertiesRegistered = false;\n } else {\n validTransforms.forEach(t => {\n const isSkew = stringStartsWith(t, 'skew');\n const isScale = stringStartsWith(t, 'scale');\n const isRotate = stringStartsWith(t, 'rotate');\n const isTranslate = stringStartsWith(t, 'translate');\n const isAngle = isRotate || isSkew;\n const syntax = isAngle ? '<angle>' : isScale ? \"<number>\" : isTranslate ? \"<length-percentage>\" : \"*\";\n try {\n CSS.registerProperty({\n name: '--' + t,\n syntax,\n inherits: false,\n initialValue: isTranslate ? '0px' : isAngle ? '0deg' : isScale ? '1' : '0',\n });\n } catch {} });\n transformsPropertiesRegistered = true;\n }\n }\n\n const parsedTargets = registerTargets(targets);\n const targetsLength = parsedTargets.length;\n\n if (!targetsLength) {\n console.warn(`No target found. Make sure the element you're trying to animate is accessible before creating your animation.`);\n }\n\n const ease = setValue(params.ease, parseWAAPIEasing(globals.defaults.ease));\n const spring = /** @type {Spring} */(ease).ease && ease;\n const autoplay = setValue(params.autoplay, globals.defaults.autoplay);\n const scroll = autoplay && /** @type {ScrollObserver} */(autoplay).link ? autoplay : false;\n const alternate = params.alternate && /** @type {Boolean} */(params.alternate) === true;\n const reversed = params.reversed && /** @type {Boolean} */(params.reversed) === true;\n const loop = setValue(params.loop, globals.defaults.loop);\n const iterations = /** @type {Number} */((loop === true || loop === Infinity) ? Infinity : isNum(loop) ? loop + 1 : 1);\n /** @type {PlaybackDirection} */\n const direction = alternate ? reversed ? 'alternate-reverse' : 'alternate' : reversed ? 'reverse' : 'normal';\n /** @type {FillMode} */\n const fill = 'forwards';\n /** @type {String} */\n const easing = parseWAAPIEasing(ease);\n const timeScale = (globals.timeScale === 1 ? 1 : K);\n\n /** @type {DOMTargetsArray}] */\n this.targets = parsedTargets;\n /** @type {Array<globalThis.Animation>}] */\n this.animations = [];\n /** @type {globalThis.Animation}] */\n this.controlAnimation = null;\n /** @type {Callback<this>} */\n this.onComplete = params.onComplete || noop;\n /** @type {Number} */\n this.duration = 0;\n /** @type {Boolean} */\n this.muteCallbacks = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Boolean} */\n this.paused = !autoplay || scroll !== false;\n /** @type {Boolean} */\n this.reversed = reversed;\n /** @type {Boolean|ScrollObserver} */\n this.autoplay = autoplay;\n /** @type {Number} */\n this._speed = setValue(params.playbackRate, globals.defaults.playbackRate);\n /** @type {Function} */\n this._resolve = noop; // Used by .then()\n /** @type {Number} */\n this._completed = 0;\n /** @type {Array<Object>}] */\n this._inlineStyles = parsedTargets.map($el => $el.getAttribute('style'));\n\n parsedTargets.forEach(($el, i) => {\n\n const cachedTransforms = $el[transformsSymbol];\n\n const hasIndividualTransforms = validIndividualTransforms.some(t => params.hasOwnProperty(t));\n\n /** @type {Number} */\n const duration = (spring ? /** @type {Spring} */(spring).duration : getFunctionValue(setValue(params.duration, globals.defaults.duration), $el, i, targetsLength)) * timeScale;\n /** @type {Number} */\n const delay = getFunctionValue(setValue(params.delay, globals.defaults.delay), $el, i, targetsLength) * timeScale;\n /** @type {CompositeOperation} */\n const composite = /** @type {CompositeOperation} */(setValue(params.composition, 'replace'));\n\n for (let name in params) {\n if (!isKey(name)) continue;\n /** @type {PropertyIndexedKeyframes} */\n const keyframes = {};\n /** @type {KeyframeAnimationOptions} */\n const tweenParams = { iterations, direction, fill, easing, duration, delay, composite };\n const propertyValue = params[name];\n const individualTransformProperty = hasIndividualTransforms ? validTransforms.includes(name) ? name : shortTransforms.get(name) : false;\n let parsedPropertyValue;\n if (isObj(propertyValue)) {\n const tweenOptions = /** @type {WAAPITweenOptions} */(propertyValue);\n const tweenOptionsEase = setValue(tweenOptions.ease, ease);\n const tweenOptionsSpring = /** @type {Spring} */(tweenOptionsEase).ease && tweenOptionsEase;\n const to = /** @type {WAAPITweenOptions} */(tweenOptions).to;\n const from = /** @type {WAAPITweenOptions} */(tweenOptions).from;\n /** @type {Number} */\n tweenParams.duration = (tweenOptionsSpring ? /** @type {Spring} */(tweenOptionsSpring).duration : getFunctionValue(setValue(tweenOptions.duration, duration), $el, i, targetsLength)) * timeScale;\n /** @type {Number} */\n tweenParams.delay = getFunctionValue(setValue(tweenOptions.delay, delay), $el, i, targetsLength) * timeScale;\n /** @type {CompositeOperation} */\n tweenParams.composite = /** @type {CompositeOperation} */(setValue(tweenOptions.composition, composite));\n /** @type {String} */\n tweenParams.easing = parseWAAPIEasing(tweenOptionsEase);\n parsedPropertyValue = parseIndividualTweenValue($el, name, from, to, i, targetsLength);\n if (individualTransformProperty) {\n keyframes[`--${individualTransformProperty}`] = parsedPropertyValue;\n cachedTransforms[individualTransformProperty] = parsedPropertyValue;\n } else {\n keyframes[name] = parseIndividualTweenValue($el, name, from, to, i, targetsLength);\n }\n addWAAPIAnimation(this, $el, name, keyframes, tweenParams);\n if (!isUnd(from)) {\n if (!individualTransformProperty) {\n $el.style[name] = keyframes[name][0];\n } else {\n const key = `--${individualTransformProperty}`;\n $el.style.setProperty(key, keyframes[key][0]);\n }\n }\n } else {\n parsedPropertyValue = isArr(propertyValue) ?\n propertyValue.map((/** @type {any} */v) => normalizeTweenValue(name, v, $el, i, targetsLength)) :\n normalizeTweenValue(name, /** @type {any} */(propertyValue), $el, i, targetsLength);\n if (individualTransformProperty) {\n keyframes[`--${individualTransformProperty}`] = parsedPropertyValue;\n cachedTransforms[individualTransformProperty] = parsedPropertyValue;\n } else {\n keyframes[name] = parsedPropertyValue;\n }\n addWAAPIAnimation(this, $el, name, keyframes, tweenParams);\n }\n }\n if (hasIndividualTransforms) {\n let transforms = emptyString;\n for (let t in cachedTransforms) {\n transforms += `${transformsFragmentStrings[t]}var(--${t})) `;\n }\n $el.style.transform = transforms;\n }\n });\n\n if (scroll) {\n /** @type {ScrollObserver} */(this.autoplay).link(this);\n }\n }\n\n /**\n * @callback forEachCallback\n * @param {globalThis.Animation} animation\n */\n\n /**\n * @param {forEachCallback|String} callback\n * @return {this}\n */\n forEach(callback) {\n const cb = isStr(callback) ? (/** @type {globalThis.Animation} */a) => a[callback]() : callback;\n this.animations.forEach(cb);\n return this;\n }\n\n get speed() {\n return this._speed;\n }\n\n /** @param {Number} speed */\n set speed(speed) {\n this._speed = +speed;\n this.forEach(anim => anim.playbackRate = speed);\n }\n\n get currentTime() {\n const controlAnimation = this.controlAnimation;\n const timeScale = globals.timeScale;\n return this.completed ? this.duration : controlAnimation ? +controlAnimation.currentTime * (timeScale === 1 ? 1 : timeScale) : 0;\n }\n\n /** @param {Number} time */\n set currentTime(time) {\n const t = time * (globals.timeScale === 1 ? 1 : K);\n this.forEach(anim => {\n // Make sure the animation playState is not 'paused' in order to properly trigger an onfinish callback.\n // The \"paused\" play state supersedes the \"finished\" play state; if the animation is both paused and finished, the \"paused\" state is the one that will be reported.\n // https://developer.mozilla.org/en-US/docs/Web/API/Animation/finish_event\n if (t >= this.duration) anim.play();\n anim.currentTime = t;\n });\n }\n\n get progress() {\n return this.currentTime / this.duration;\n }\n\n /** @param {Number} progress */\n set progress(progress) {\n this.forEach(anim => anim.currentTime = progress * this.duration || 0);\n }\n\n resume() {\n if (!this.paused) return this;\n this.paused = false;\n // TODO: Store the current time, and seek back to the last position\n return this.forEach('play');\n }\n\n pause() {\n if (this.paused) return this;\n this.paused = true;\n return this.forEach('pause');\n }\n\n alternate() {\n this.reversed = !this.reversed;\n this.forEach('reverse');\n if (this.paused) this.forEach('pause');\n return this;\n }\n\n play() {\n if (this.reversed) this.alternate();\n return this.resume();\n }\n\n reverse() {\n if (!this.reversed) this.alternate();\n return this.resume();\n }\n\n /**\n * @param {Number} time\n * @param {Boolean} muteCallbacks\n */\n seek(time, muteCallbacks = false) {\n if (muteCallbacks) this.muteCallbacks = true;\n if (time < this.duration) this.completed = false;\n this.currentTime = time;\n this.muteCallbacks = false;\n if (this.paused) this.pause();\n return this;\n }\n\n restart() {\n this.completed = false;\n return this.seek(0, true).resume();\n }\n\n commitStyles() {\n return this.forEach('commitStyles');\n }\n\n complete() {\n return this.seek(this.duration);\n }\n\n cancel() {\n this.forEach('cancel');\n return this.pause();\n }\n\n revert() {\n this.cancel();\n this.targets.forEach(($el, i) => $el.setAttribute('style', this._inlineStyles[i]) );\n return this;\n }\n\n /**\n * @param {WAAPICallback} [callback]\n * @return {Promise}\n */\n then(callback = noop) {\n const then = this.then;\n const onResolve = () => {\n this.then = null;\n callback(this);\n this.then = then;\n this._resolve = noop;\n };\n return new Promise(r => {\n this._resolve = () => r(onResolve());\n if (this.completed) this._resolve();\n return this;\n });\n }\n}\n\nconst waapi = {\n/**\n * @param {DOMTargetsParam} targets\n * @param {WAAPIAnimationParams} params\n * @return {WAAPIAnimation}\n */\n animate: (targets, params) => new WAAPIAnimation(targets, params),\n convertEase: easingToLinear\n};\n\n\n\n\n/**\n * @param {Callback<Timer>} [callback]\n * @return {Timer}\n */\nconst sync = (callback = noop) => {\n return new Timer({ duration: 1 * globals.timeScale, onComplete: callback }, null, 0).resume();\n};\n\n/**\n * @overload\n * @param {DOMTargetSelector} targetSelector\n * @param {String} propName\n * @return {String}\n *\n * @overload\n * @param {JSTargetsParam} targetSelector\n * @param {String} propName\n * @return {Number|String}\n *\n * @overload\n * @param {DOMTargetsParam} targetSelector\n * @param {String} propName\n * @param {String} unit\n * @return {String}\n *\n * @overload\n * @param {TargetsParam} targetSelector\n * @param {String} propName\n * @param {Boolean} unit\n * @return {Number}\n *\n * @param {TargetsParam} targetSelector\n * @param {String} propName\n * @param {String|Boolean} [unit]\n */\nfunction getTargetValue(targetSelector, propName, unit) {\n const targets = registerTargets(targetSelector);\n if (!targets.length) return;\n const [ target ] = targets;\n const tweenType = getTweenType(target, propName);\n const normalizePropName = sanitizePropertyName(propName, target, tweenType);\n let originalValue = getOriginalAnimatableValue(target, normalizePropName);\n if (isUnd(unit)) {\n return originalValue;\n } else {\n decomposeRawValue(originalValue, decomposedOriginalValue);\n if (decomposedOriginalValue.t === valueTypes.NUMBER || decomposedOriginalValue.t === valueTypes.UNIT) {\n if (unit === false) {\n return decomposedOriginalValue.n;\n } else {\n const convertedValue = convertValueUnit(/** @type {DOMTarget} */(target), decomposedOriginalValue, /** @type {String} */(unit), false);\n return `${round(convertedValue.n, globals.precision)}${convertedValue.u}`;\n }\n }\n }\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @return {JSAnimation}\n */\nconst setTargetValues = (targets, parameters) => {\n if (isUnd(parameters)) return;\n parameters.duration = minValue;\n // Do not overrides currently active tweens by default\n parameters.composition = setValue(parameters.composition, compositionTypes.none);\n // Skip init() and force rendering by playing the animation\n return new JSAnimation(targets, parameters, null, 0, true).resume();\n};\n\n/**\n * @param {TargetsArray} targetsArray\n * @param {JSAnimation} animation\n * @param {String} [propertyName]\n * @return {Boolean}\n */\nconst removeTargetsFromAnimation = (targetsArray, animation, propertyName) => {\n let tweensMatchesTargets = false;\n forEachChildren(animation, (/**@type {Tween} */tween) => {\n const tweenTarget = tween.target;\n if (targetsArray.includes(tweenTarget)) {\n const tweenName = tween.property;\n const tweenType = tween._tweenType;\n const normalizePropName = sanitizePropertyName(propertyName, tweenTarget, tweenType);\n if (!normalizePropName || normalizePropName && normalizePropName === tweenName) {\n // Make sure to flag the previous CSS transform tween to renderTransform\n if (tween.parent._tail === tween &&\n tween._tweenType === tweenTypes.TRANSFORM &&\n tween._prev &&\n tween._prev._tweenType === tweenTypes.TRANSFORM\n ) {\n tween._prev._renderTransforms = 1;\n }\n // Removes the tween from the selected animation\n removeChild(animation, tween);\n // Detach the tween from its siblings to make sure blended tweens are correctlly removed\n removeTweenSliblings(tween);\n tweensMatchesTargets = true;\n }\n }\n }, true);\n return tweensMatchesTargets;\n};\n\n/**\n * @param {TargetsParam} targets\n * @param {Renderable|WAAPIAnimation} [renderable]\n * @param {String} [propertyName]\n * @return {TargetsArray}\n */\nconst remove = (targets, renderable, propertyName) => {\n const targetsArray = parseTargets(targets);\n const parent = /** @type {Renderable|typeof engine} **/(renderable ? renderable : engine);\n const waapiAnimation = renderable && /** @type {WAAPIAnimation} */(renderable).controlAnimation && /** @type {WAAPIAnimation} */(renderable);\n for (let i = 0, l = targetsArray.length; i < l; i++) {\n const $el = /** @type {DOMTarget} */(targetsArray[i]);\n removeWAAPIAnimation($el, propertyName, waapiAnimation);\n }\n let removeMatches;\n if (parent._hasChildren) {\n let iterationDuration = 0;\n forEachChildren(parent, (/** @type {Renderable} */child) => {\n if (!child._hasChildren) {\n removeMatches = removeTargetsFromAnimation(targetsArray, /** @type {JSAnimation} */(child), propertyName);\n // Remove the child from its parent if no tweens and no children left after the removal\n if (removeMatches && !child._head) {\n child.cancel();\n removeChild(parent, child);\n } else {\n // Calculate the new iterationDuration value to handle onComplete with last child in render()\n const childTLOffset = child._offset + child._delay;\n const childDur = childTLOffset + child.duration;\n if (childDur > iterationDuration) {\n iterationDuration = childDur;\n }\n }\n }\n // Make sure to also remove engine's children targets\n // NOTE: Avoid recursion?\n if (child._head) {\n remove(targets, child, propertyName);\n } else {\n child._hasChildren = false;\n }\n }, true);\n // Update iterationDuration value to handle onComplete with last child in render()\n if (!isUnd(/** @type {Renderable} */(parent).iterationDuration)) {\n /** @type {Renderable} */(parent).iterationDuration = iterationDuration;\n }\n } else {\n removeMatches = removeTargetsFromAnimation(\n targetsArray,\n /** @type {JSAnimation} */(parent),\n propertyName\n );\n }\n\n if (removeMatches && !parent._head) {\n parent._hasChildren = false;\n // Cancel the parent if there are no tweens and no children left after the removal\n // We have to check if the .cancel() method exist to handle cases where the parent is the engine itself\n if (/** @type {Renderable} */(parent).cancel) /** @type {Renderable} */(parent).cancel();\n }\n\n return targetsArray;\n};\n\n/**\n * @param {(...args: any[]) => Tickable} constructor\n * @return {(...args: any[]) => Tickable}\n */\nconst keepTime = createRefreshable;\n\n/**\n * @param {String|Array} items\n * @return {any}\n */\nconst randomPick = items => items[random(0, items.length - 1)];\n\n/**\n * @param {Number|String} v\n * @param {Number} decimalLength\n * @return {String}\n */\nconst roundPad = (v, decimalLength) => (+v).toFixed(decimalLength);\n\n/**\n * @param {Number} v\n * @param {Number} totalLength\n * @param {String} padString\n * @return {String}\n */\nconst padStart = (v, totalLength, padString) => `${v}`.padStart(totalLength, padString);\n\n/**\n * @param {Number} v\n * @param {Number} totalLength\n * @param {String} padString\n * @return {String}\n */\nconst padEnd = (v, totalLength, padString) => `${v}`.padEnd(totalLength, padString);\n\n/**\n * @param {Number} v\n * @param {Number} min\n * @param {Number} max\n * @return {Number}\n */\nconst wrap = (v, min, max) => (((v - min) % (max - min) + (max - min)) % (max - min)) + min;\n\n/**\n * @param {Number} value\n * @param {Number} inLow\n * @param {Number} inHigh\n * @param {Number} outLow\n * @param {Number} outHigh\n * @return {Number}\n */\nconst mapRange = (value, inLow, inHigh, outLow, outHigh) => outLow + ((value - inLow) / (inHigh - inLow)) * (outHigh - outLow);\n\n/**\n * @param {Number} degrees\n * @return {Number}\n */\nconst degToRad = degrees => degrees * PI / 180;\n\n/**\n * @param {Number} radians\n * @return {Number}\n */\nconst radToDeg = radians => radians * 180 / PI;\n\n/**\n * https://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\n * @param {Number} start\n * @param {Number} end\n * @param {Number} amount\n * @param {Renderable|Boolean} [renderable]\n * @return {Number}\n */\nconst lerp = (start, end, amount, renderable) => {\n let dt = K / globals.defaults.frameRate;\n if (renderable !== false) {\n const ticker = /** @type Renderable */\n (renderable) ||\n (engine._hasChildren && engine);\n if (ticker && ticker.deltaTime) {\n dt = ticker.deltaTime;\n }\n }\n const t = 1 - Math.exp(-amount * dt * .1);\n return !amount ? start : amount === 1 ? end : (1 - t) * start + t * end;\n};\n\n// Chain-able utilities\n\n/**\n * @callback UtilityFunction\n * @param {...*} args\n * @return {Number|String}\n *\n * @param {UtilityFunction} fn\n * @param {Number} [last=0]\n * @return {function(...(Number|String)): function(Number|String): (Number|String)}\n */\nconst curry = (fn, last = 0) => (...args) => last ? v => fn(...args, v) : v => fn(v, ...args);\n\n/**\n * @param {Function} fn\n * @return {function(...(Number|String))}\n */\nconst chain = fn => {\n return (...args) => {\n const result = fn(...args);\n return new Proxy(noop, {\n apply: (_, __, [v]) => result(v),\n get: (_, prop) => chain(/**@param {...Number|String} nextArgs */(...nextArgs) => {\n const nextResult = utils[prop](...nextArgs);\n return (/**@type {Number|String} */v) => nextResult(result(v));\n })\n });\n }\n};\n\n/**\n * @param {UtilityFunction} fn\n * @param {Number} [right]\n * @return {function(...(Number|String)): UtilityFunction}\n */\nconst makeChainable = (fn, right = 0) => (...args) => (args.length < fn.length ? chain(curry(fn, right)) : fn)(...args);\n\n/**\n * @callback ChainedUtilsResult\n * @param {Number} value\n * @return {Number}\n *\n * @typedef {Object} ChainableUtils\n * @property {ChainedClamp} clamp\n * @property {ChainedRound} round\n * @property {ChainedSnap} snap\n * @property {ChainedWrap} wrap\n * @property {ChainedInterpolate} interpolate\n * @property {ChainedMapRange} mapRange\n * @property {ChainedRoundPad} roundPad\n * @property {ChainedPadStart} padStart\n * @property {ChainedPadEnd} padEnd\n * @property {ChainedDegToRad} degToRad\n * @property {ChainedRadToDeg} radToDeg\n *\n * @typedef {ChainableUtils & ChainedUtilsResult} ChainableUtil\n *\n * @callback ChainedClamp\n * @param {Number} min\n * @param {Number} max\n * @return {ChainableUtil}\n *\n * @callback ChainedRound\n * @param {Number} decimalLength\n * @return {ChainableUtil}\n *\n * @callback ChainedSnap\n * @param {Number} increment\n * @return {ChainableUtil}\n *\n * @callback ChainedWrap\n * @param {Number} min\n * @param {Number} max\n * @return {ChainableUtil}\n *\n * @callback ChainedInterpolate\n * @param {Number} start\n * @param {Number} end\n * @return {ChainableUtil}\n *\n * @callback ChainedMapRange\n * @param {Number} inLow\n * @param {Number} inHigh\n * @param {Number} outLow\n * @param {Number} outHigh\n * @return {ChainableUtil}\n *\n * @callback ChainedRoundPad\n * @param {Number} decimalLength\n * @return {ChainableUtil}\n *\n * @callback ChainedPadStart\n * @param {Number} totalLength\n * @param {String} padString\n * @return {ChainableUtil}\n *\n * @callback ChainedPadEnd\n * @param {Number} totalLength\n * @param {String} padString\n * @return {ChainableUtil}\n *\n * @callback ChainedDegToRad\n * @return {ChainableUtil}\n *\n * @callback ChainedRadToDeg\n * @return {ChainableUtil}\n */\n\nconst utils = {\n $: registerTargets,\n get: getTargetValue,\n set: setTargetValues,\n remove,\n cleanInlineStyles,\n random,\n randomPick,\n shuffle,\n lerp,\n sync,\n keepTime,\n clamp: /** @type {typeof clamp & ChainedClamp} */(makeChainable(clamp)),\n round: /** @type {typeof round & ChainedRound} */(makeChainable(round)),\n snap: /** @type {typeof snap & ChainedSnap} */(makeChainable(snap)),\n wrap: /** @type {typeof wrap & ChainedWrap} */(makeChainable(wrap)),\n interpolate: /** @type {typeof interpolate & ChainedInterpolate} */(makeChainable(interpolate, 1)),\n mapRange: /** @type {typeof mapRange & ChainedMapRange} */(makeChainable(mapRange)),\n roundPad: /** @type {typeof roundPad & ChainedRoundPad} */(makeChainable(roundPad)),\n padStart: /** @type {typeof padStart & ChainedPadStart} */(makeChainable(padStart)),\n padEnd: /** @type {typeof padEnd & ChainedPadEnd} */(makeChainable(padEnd)),\n degToRad: /** @type {typeof degToRad & ChainedDegToRad} */(makeChainable(degToRad)),\n radToDeg: /** @type {typeof radToDeg & ChainedRadToDeg} */(makeChainable(radToDeg)),\n};\n\n\n\n\n/**\n * Timeline's children offsets positions parser\n * @param {Timeline} timeline\n * @param {String} timePosition\n * @return {Number}\n */\nconst getPrevChildOffset = (timeline, timePosition) => {\n if (stringStartsWith(timePosition, '<')) {\n const goToPrevAnimationOffset = timePosition[1] === '<';\n const prevAnimation = /** @type {Tickable} */(timeline._tail);\n const prevOffset = prevAnimation ? prevAnimation._offset + prevAnimation._delay : 0;\n return goToPrevAnimationOffset ? prevOffset : prevOffset + prevAnimation.duration;\n }\n};\n\n/**\n * @param {Timeline} timeline\n * @param {TimelinePosition} [timePosition]\n * @return {Number}\n */\nconst parseTimelinePosition = (timeline, timePosition) => {\n let tlDuration = timeline.iterationDuration;\n if (tlDuration === minValue) tlDuration = 0;\n if (isUnd(timePosition)) return tlDuration;\n if (isNum(+timePosition)) return +timePosition;\n const timePosStr = /** @type {String} */(timePosition);\n const tlLabels = timeline ? timeline.labels : null;\n const hasLabels = !isNil(tlLabels);\n const prevOffset = getPrevChildOffset(timeline, timePosStr);\n const hasSibling = !isUnd(prevOffset);\n const matchedRelativeOperator = relativeValuesExecRgx.exec(timePosStr);\n if (matchedRelativeOperator) {\n const fullOperator = matchedRelativeOperator[0];\n const split = timePosStr.split(fullOperator);\n const labelOffset = hasLabels && split[0] ? tlLabels[split[0]] : tlDuration;\n const parsedOffset = hasSibling ? prevOffset : hasLabels ? labelOffset : tlDuration;\n const parsedNumericalOffset = +split[1];\n return getRelativeValue(parsedOffset, parsedNumericalOffset, fullOperator[0]);\n } else {\n return hasSibling ? prevOffset :\n hasLabels ? !isUnd(tlLabels[timePosStr]) ? tlLabels[timePosStr] :\n tlDuration : tlDuration;\n }\n};\n\n/**\n * @param {Timeline} tl\n * @return {Number}\n */\nfunction getTimelineTotalDuration(tl) {\n return clampInfinity(((tl.iterationDuration + tl._loopDelay) * tl.iterationCount) - tl._loopDelay) || minValue;\n}\n\n/**\n * @overload\n * @param {TimerParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @return {Timeline}\n *\n * @overload\n * @param {AnimationParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @param {TargetsParam} targets\n * @param {Number} [index]\n * @param {Number} [length]\n * @return {Timeline}\n *\n * @param {TimerParams|AnimationParams} childParams\n * @param {Timeline} tl\n * @param {Number} timePosition\n * @param {TargetsParam} [targets]\n * @param {Number} [index]\n * @param {Number} [length]\n */\nfunction addTlChild(childParams, tl, timePosition, targets, index, length) {\n const isSetter = isNum(childParams.duration) && /** @type {Number} */(childParams.duration) <= minValue;\n // Offset the tl position with -minValue for 0 duration animations or .set() calls in order to align their end value with the defined position\n const adjustedPosition = isSetter ? timePosition - minValue : timePosition;\n tick(tl, adjustedPosition, 1, 1, tickModes.AUTO);\n const tlChild = targets ?\n new JSAnimation(targets,/** @type {AnimationParams} */(childParams), tl, adjustedPosition, false, index, length) :\n new Timer(/** @type {TimerParams} */(childParams), tl, adjustedPosition);\n tlChild.init(1);\n // TODO: Might be better to insert at a position relative to startTime?\n addChild(tl, tlChild);\n forEachChildren(tl, (/** @type {Renderable} */child) => {\n const childTLOffset = child._offset + child._delay;\n const childDur = childTLOffset + child.duration;\n if (childDur > tl.iterationDuration) tl.iterationDuration = childDur;\n });\n tl.duration = getTimelineTotalDuration(tl);\n return tl;\n}\n\nclass Timeline extends Timer {\n\n /**\n * @param {TimelineParams} [parameters]\n */\n constructor(parameters = {}) {\n super(/** @type {TimerParams&TimelineParams} */(parameters), null, 0);\n /** @type {Number} */\n this.duration = 0; // TL duration starts at 0 and grows when adding children\n /** @type {Record<String, Number>} */\n this.labels = {};\n const defaultsParams = parameters.defaults;\n const globalDefaults = globals.defaults;\n /** @type {DefaultsParams} */\n this.defaults = defaultsParams ? mergeObjects(defaultsParams, globalDefaults) : globalDefaults;\n /** @type {Callback<this>} */\n this.onRender = parameters.onRender || globalDefaults.onRender;\n const tlPlaybackEase = setValue(parameters.playbackEase, globalDefaults.playbackEase);\n this._ease = tlPlaybackEase ? parseEasings(tlPlaybackEase) : null;\n /** @type {Number} */\n this.iterationDuration = 0;\n }\n\n /**\n * @overload\n * @param {TargetsParam} a1\n * @param {AnimationParams} a2\n * @param {TimelinePosition|StaggerFunction<Number|String>} [a3]\n * @return {this}\n *\n * @overload\n * @param {TimerParams} a1\n * @param {TimelinePosition} [a2]\n * @return {this}\n *\n * @param {TargetsParam|TimerParams} a1\n * @param {TimelinePosition|AnimationParams} a2\n * @param {TimelinePosition|StaggerFunction<Number|String>} [a3]\n */\n add(a1, a2, a3) {\n const isAnim = isObj(a2);\n const isTimer = isObj(a1);\n if (isAnim || isTimer) {\n this._hasChildren = true;\n if (isAnim) {\n const childParams = /** @type {AnimationParams} */(a2);\n // Check for function for children stagger positions\n if (isFnc(a3)) {\n const staggeredPosition = a3;\n const parsedTargetsArray = parseTargets(/** @type {TargetsParam} */(a1));\n // Store initial duration before adding new children that will change the duration\n const tlDuration = this.duration;\n // Store initial _iterationDuration before adding new children that will change the duration\n const tlIterationDuration = this.iterationDuration;\n // Store the original id in order to add specific indexes to the new animations ids\n const id = childParams.id;\n let i = 0;\n /** @type {Number} */\n const parsedLength = (parsedTargetsArray.length);\n parsedTargetsArray.forEach((/** @type {Target} */target) => {\n // Create a new parameter object for each staggered children\n const staggeredChildParams = { ...childParams };\n // Reset the duration of the timeline iteration before each stagger to prevent wrong start value calculation\n this.duration = tlDuration;\n this.iterationDuration = tlIterationDuration;\n if (!isUnd(id)) staggeredChildParams.id = id + '-' + i;\n addTlChild(\n staggeredChildParams,\n this,\n parseTimelinePosition(this, staggeredPosition(target, i, parsedLength, this)),\n target,\n i,\n parsedLength\n );\n i++;\n });\n } else {\n addTlChild(\n childParams,\n this,\n parseTimelinePosition(this, a3),\n /** @type {TargetsParam} */(a1),\n );\n }\n } else {\n // It's a Timer\n addTlChild(\n /** @type TimerParams */(a1),\n this,\n parseTimelinePosition(this,a2),\n );\n }\n return this.init(1); // 1 = internalRender\n }\n }\n\n /**\n * @overload\n * @param {Tickable} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @overload\n * @param {globalThis.Animation} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @overload\n * @param {WAAPIAnimation} [synced]\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n * @param {Tickable|WAAPIAnimation|globalThis.Animation} [synced]\n * @param {TimelinePosition} [position]\n */\n sync(synced, position) {\n if (isUnd(synced) || synced && isUnd(synced.pause)) return this;\n synced.pause();\n const duration = +(/** @type {globalThis.Animation} */(synced).effect ? /** @type {globalThis.Animation} */(synced).effect.getTiming().duration : /** @type {Tickable} */(synced).duration);\n return this.add(synced, { currentTime: [0, duration], duration, ease: 'linear' }, position);\n }\n\n /**\n * @param {TargetsParam} targets\n * @param {AnimationParams} parameters\n * @param {TimelinePosition} [position]\n * @return {this}\n */\n set(targets, parameters, position) {\n if (isUnd(parameters)) return this;\n parameters.duration = minValue;\n parameters.composition = compositionTypes.replace;\n return this.add(targets, parameters, position);\n }\n\n /**\n * @param {Callback<Timer>} callback\n * @param {TimelinePosition} [position]\n * @return {this}\n */\n call(callback, position) {\n if (isUnd(callback) || callback && !isFnc(callback)) return this;\n return this.add({ duration: 0, onComplete: () => callback(this) }, position);\n }\n\n /**\n * @param {String} labelName\n * @param {TimelinePosition} [position]\n * @return {this}\n *\n */\n label(labelName, position) {\n if (isUnd(labelName) || labelName && !isStr(labelName)) return this;\n this.labels[labelName] = parseTimelinePosition(this, position);\n return this;\n }\n\n /**\n * @param {TargetsParam} targets\n * @param {String} [propertyName]\n * @return {this}\n */\n remove(targets, propertyName) {\n remove(targets, this, propertyName);\n return this;\n }\n\n /**\n * @param {Number} newDuration\n * @return {this}\n */\n stretch(newDuration) {\n const currentDuration = this.duration;\n if (currentDuration === normalizeTime(newDuration)) return this;\n const timeScale = newDuration / currentDuration;\n const labels = this.labels;\n forEachChildren(this, (/** @type {JSAnimation} */child) => child.stretch(child.duration * timeScale));\n for (let labelName in labels) labels[labelName] *= timeScale;\n return super.stretch(newDuration);\n }\n\n /**\n * @return {this}\n */\n refresh() {\n forEachChildren(this, (/** @type {JSAnimation} */child) => {\n if (child.refresh) child.refresh();\n });\n return this;\n }\n\n /**\n * @return {this}\n */\n revert() {\n super.revert();\n forEachChildren(this, (/** @type {JSAnimation} */child) => child.revert, true);\n return cleanInlineStyles(this);\n }\n\n /**\n * @param {Callback<this>} [callback]\n * @return {Promise}\n */\n then(callback) {\n return super.then(callback);\n }\n}\n\n/**\n * @param {TimelineParams} [parameters]\n * @return {Timeline}\n */\nconst createTimeline = parameters => new Timeline(parameters).init();\n\n\n\n\nclass Animatable {\n /**\n * @param {TargetsParam} targets\n * @param {AnimatableParams} parameters\n */\n constructor(targets, parameters) {\n if (scope.current) scope.current.register(this);\n const beginHandler = () => {\n if (this.callbacks.completed) this.callbacks.reset();\n this.callbacks.play();\n };\n const pauseHandler = () => {\n if (this.callbacks.completed) return;\n let paused = true;\n for (let name in this.animations) {\n const anim = this.animations[name];\n if (!anim.paused && paused) {\n paused = false;\n break;\n }\n }\n if (paused) {\n this.callbacks.complete();\n }\n };\n /** @type {AnimationParams} */\n const globalParams = {\n onBegin: beginHandler,\n onComplete: pauseHandler,\n onPause: pauseHandler,\n };\n /** @type {AnimationParams} */\n const callbacksAnimationParams = { v: 1, autoplay: false };\n const properties = {};\n this.targets = [];\n this.animations = {};\n /** @type {JSAnimation|null} */\n this.callbacks = null;\n if (isUnd(targets) || isUnd(parameters)) return;\n for (let propName in parameters) {\n const paramValue = parameters[propName];\n if (isKey(propName)) {\n properties[propName] = paramValue;\n } else if (stringStartsWith(propName, 'on')) {\n callbacksAnimationParams[propName] = paramValue;\n } else {\n globalParams[propName] = paramValue;\n }\n }\n this.callbacks = new JSAnimation({ v: 0 }, callbacksAnimationParams);\n for (let propName in properties) {\n const propValue = properties[propName];\n const isObjValue = isObj(propValue);\n /** @type {TweenParamsOptions} */\n let propParams = {};\n let to = '+=0';\n if (isObjValue) {\n const unit = propValue.unit;\n if (isStr(unit)) to += unit;\n } else {\n propParams.duration = propValue;\n }\n propParams[propName] = isObjValue ? mergeObjects({ to }, propValue) : to;\n const animParams = mergeObjects(globalParams, propParams);\n animParams.composition = compositionTypes.replace;\n animParams.autoplay = false;\n const animation = this.animations[propName] = new JSAnimation(targets, animParams, null, 0, false).init();\n if (!this.targets.length) this.targets.push(...animation.targets);\n /** @type {AnimatableProperty} */\n this[propName] = (to, duration, ease) => {\n const tween = /** @type {Tween} */(animation._head);\n if (isUnd(to) && tween) {\n const numbers = tween._numbers;\n if (numbers && numbers.length) {\n return numbers;\n } else {\n return tween._modifier(tween._number);\n }\n } else {\n forEachChildren(animation, (/** @type {Tween} */tween) => {\n if (isArr(to)) {\n for (let i = 0, l = /** @type {Array} */(to).length; i < l; i++) {\n if (!isUnd(tween._numbers[i])) {\n tween._fromNumbers[i] = /** @type {Number} */(tween._modifier(tween._numbers[i]));\n tween._toNumbers[i] = to[i];\n }\n }\n } else {\n tween._fromNumber = /** @type {Number} */(tween._modifier(tween._number));\n tween._toNumber = /** @type {Number} */(to);\n }\n if (!isUnd(ease)) tween._ease = parseEasings(ease);\n tween._currentTime = 0;\n });\n if (!isUnd(duration)) animation.stretch(duration);\n animation.reset(1).resume();\n return this;\n }\n };\n }\n }\n\n revert() {\n for (let propName in this.animations) {\n this[propName] = noop;\n this.animations[propName].revert();\n }\n this.animations = {};\n this.targets.length = 0;\n if (this.callbacks) this.callbacks.revert();\n return this;\n }\n}\n\n/**\n * @param {TargetsParam} targets\n * @param {AnimatableParams} parameters\n * @return {AnimatableObject}\n */\nconst createAnimatable = (targets, parameters) => /** @type {AnimatableObject} */ (new Animatable(targets, parameters));\n\n\n\n\n/*\n * Spring ease solver adapted from https://webkit.org/demos/spring/spring.js\n * Webkit Copyright © 2016 Apple Inc\n */\n\nconst maxSpringParamValue = K * 10;\n\n/**\n * @typedef {Object} SpringParams\n * @property {Number} [mass=1] - Mass, default 1\n * @property {Number} [stiffness=100] - Stiffness, default 100\n * @property {Number} [damping=10] - Damping, default 10\n * @property {Number} [velocity=0] - Initial velocity, default 0\n */\nclass Spring {\n /**\n * @param {SpringParams} [parameters]\n */\n constructor(parameters = {}) {\n this.timeStep = .02; // Interval fed to the solver to calculate duration\n this.restThreshold = .0005; // Values below this threshold are considered resting position\n this.restDuration = 200; // Duration in ms used to check if the spring is resting after reaching restThreshold\n this.maxDuration = 60000; // The maximum allowed spring duration in ms (default 1 min)\n this.maxRestSteps = this.restDuration / this.timeStep / K; // How many steps allowed after reaching restThreshold before stopping the duration calculation\n this.maxIterations = this.maxDuration / this.timeStep / K; // Calculate the maximum iterations allowed based on maxDuration\n this.m = clamp(setValue(parameters.mass, 1), 0, maxSpringParamValue);\n this.s = clamp(setValue(parameters.stiffness, 100), 1, maxSpringParamValue);\n this.d = clamp(setValue(parameters.damping, 10), .1, maxSpringParamValue);\n this.v = clamp(setValue(parameters.velocity, 0), -1e4, maxSpringParamValue);\n this.w0 = 0;\n this.zeta = 0;\n this.wd = 0;\n this.b = 0;\n this.solverDuration = 0;\n this.duration = 0;\n this.compute();\n /** @type {EasingFunction} */\n this.ease = t => t === 0 || t === 1 ? t : this.solve(t * this.solverDuration);\n }\n\n /** @type {EasingFunction} */\n solve(time) {\n const { zeta, w0, wd, b } = this;\n let t = time;\n if (zeta < 1) {\n t = exp(-t * zeta * w0) * (1 * cos(wd * t) + b * sin(wd * t));\n } else {\n t = (1 + b * t) * exp(-t * w0);\n }\n return 1 - t;\n }\n\n compute() {\n const { maxRestSteps, maxIterations, restThreshold, timeStep, m, d, s, v } = this;\n const w0 = this.w0 = clamp(sqrt(s / m), minValue, K);\n const zeta = this.zeta = d / (2 * sqrt(s * m));\n const wd = this.wd = zeta < 1 ? w0 * sqrt(1 - zeta * zeta) : 0;\n this.b = zeta < 1 ? (zeta * w0 + -v) / wd : -v + w0;\n let solverTime = 0;\n let restSteps = 0;\n let iterations = 0;\n while (restSteps < maxRestSteps && iterations < maxIterations) {\n if (abs(1 - this.solve(solverTime)) < restThreshold) {\n restSteps++;\n } else {\n restSteps = 0;\n }\n this.solverDuration = solverTime;\n solverTime += timeStep;\n iterations++;\n }\n this.duration = round(this.solverDuration * K, 0) * globals.timeScale;\n }\n\n get mass() {\n return this.m;\n }\n\n set mass(v) {\n this.m = clamp(setValue(v, 1), 0, maxSpringParamValue);\n this.compute();\n }\n\n get stiffness() {\n return this.s;\n }\n\n set stiffness(v) {\n this.s = clamp(setValue(v, 100), 1, maxSpringParamValue);\n this.compute();\n }\n\n get damping() {\n return this.d;\n }\n\n set damping(v) {\n this.d = clamp(setValue(v, 10), .1, maxSpringParamValue);\n this.compute();\n }\n\n get velocity() {\n return this.v;\n }\n\n set velocity(v) {\n this.v = clamp(setValue(v, 0), -1e4, maxSpringParamValue);\n this.compute();\n }\n}\n\n/**\n * @param {SpringParams} [parameters]\n * @returns {Spring}\n */\nconst createSpring = (parameters) => new Spring(parameters);\n\n\n\n\n/**\n * @param {Event} e\n */\nconst preventDefault = e => {\n if (e.cancelable) e.preventDefault();\n};\n\nclass DOMProxy {\n /** @param {Object} el */\n constructor(el) {\n this.el = el;\n this.zIndex = 0;\n this.parentElement = null;\n this.classList = {\n add: noop,\n remove: noop,\n };\n }\n\n get x() { return this.el.x || 0 };\n set x(v) { this.el.x = v; };\n\n get y() { return this.el.y || 0 };\n set y(v) { this.el.y = v; };\n\n get width() { return this.el.width || 0 };\n set width(v) { this.el.width = v; };\n\n get height() { return this.el.height || 0 };\n set height(v) { this.el.height = v; };\n\n getBoundingClientRect() {\n return {\n top: this.y,\n right: this.x,\n bottom: this.y + this.height,\n left: this.x + this.width,\n }\n }\n}\n\nclass Transforms {\n /**\n * @param {DOMTarget|DOMProxy} $el\n */\n constructor($el) {\n this.$el = $el;\n this.inlineTransforms = [];\n this.point = new DOMPoint();\n this.inversedMatrix = this.getMatrix().inverse();\n }\n\n /**\n * @param {Number} x\n * @param {Number} y\n * @return {DOMPoint}\n */\n normalizePoint(x, y) {\n this.point.x = x;\n this.point.y = y;\n return this.point.matrixTransform(this.inversedMatrix);\n }\n\n /**\n * @callback TraverseParentsCallback\n * @param {DOMTarget} $el\n * @param {Number} i\n */\n\n /**\n * @param {TraverseParentsCallback} cb\n */\n traverseUp(cb) {\n let $el = /** @type {DOMTarget|Document} */(this.$el.parentElement), i = 0;\n while ($el && $el !== doc) {\n cb(/** @type {DOMTarget} */($el), i);\n $el = /** @type {DOMTarget} */($el.parentElement);\n i++;\n }\n }\n\n getMatrix() {\n const matrix = new DOMMatrix();\n this.traverseUp($el => {\n const transformValue = getComputedStyle($el).transform;\n if (transformValue) {\n const elMatrix = new DOMMatrix(transformValue);\n matrix.preMultiplySelf(elMatrix);\n }\n });\n return matrix;\n }\n\n remove() {\n this.traverseUp(($el, i) => {\n this.inlineTransforms[i] = $el.style.transform;\n $el.style.transform = 'none';\n });\n }\n\n revert() {\n this.traverseUp(($el, i) => {\n const ct = this.inlineTransforms[i];\n if (ct === '') {\n $el.style.removeProperty('transform');\n } else {\n $el.style.transform = ct;\n }\n });\n }\n}\n\n/**\n * @template {Array<Number>|DOMTargetSelector|String|Number|Boolean|Function|DraggableCursorParams} T\n * @param {T | ((draggable: Draggable) => T)} value\n * @param {Draggable} draggable\n * @return {T}\n */\nconst parseDraggableFunctionParameter = (value, draggable) => value && isFnc(value) ? /** @type {Function} */(value)(draggable) : value;\n\nlet zIndex = 0;\n\nclass Draggable {\n /**\n * @param {TargetsParam} target\n * @param {DraggableParams} [parameters]\n */\n constructor(target, parameters = {}) {\n if (!target) return;\n if (scope.current) scope.current.register(this);\n const paramX = parameters.x;\n const paramY = parameters.y;\n const trigger = parameters.trigger;\n const modifier = parameters.modifier;\n const ease = parameters.releaseEase;\n const customEase = ease && parseEasings(ease);\n const hasSpring = !isUnd(ease) && !isUnd(/** @type {Spring} */(ease).ease);\n const xProp = /** @type {String} */(isObj(paramX) && !isUnd(/** @type {Object} */(paramX).mapTo) ? /** @type {Object} */(paramX).mapTo : 'translateX');\n const yProp = /** @type {String} */(isObj(paramY) && !isUnd(/** @type {Object} */(paramY).mapTo) ? /** @type {Object} */(paramY).mapTo : 'translateY');\n const container = parseDraggableFunctionParameter(parameters.container, this);\n this.containerArray = isArr(container) ? container : null;\n this.$container = /** @type {HTMLElement} */(container && !this.containerArray ? parseTargets(/** @type {DOMTarget} */(container))[0] : doc.body);\n this.useWin = this.$container === doc.body;\n /** @type {Window | HTMLElement} */\n this.$scrollContainer = this.useWin ? win : this.$container;\n this.$target = /** @type {HTMLElement} */(isObj(target) ? new DOMProxy(target) : parseTargets(target)[0]);\n this.$trigger = /** @type {HTMLElement} */(parseTargets(trigger ? trigger : target)[0]);\n this.fixed = getTargetValue(this.$target, 'position') === 'fixed';\n // Refreshable parameters\n this.isFinePointer = true;\n /** @type {[Number, Number, Number, Number]} */\n this.containerPadding = [0, 0, 0, 0];\n /** @type {Number} */\n this.containerFriction = 0;\n /** @type {Number} */\n this.releaseContainerFriction = 0;\n /** @type {Number|Array<Number>} */\n this.snapX = 0;\n /** @type {Number|Array<Number>} */\n this.snapY = 0;\n /** @type {Number} */\n this.scrollSpeed = 0;\n /** @type {Number} */\n this.scrollThreshold = 0;\n /** @type {Number} */\n this.dragSpeed = 0;\n /** @type {Number} */\n this.maxVelocity = 0;\n /** @type {Number} */\n this.minVelocity = 0;\n /** @type {Number} */\n this.velocityMultiplier = 0;\n /** @type {Boolean|DraggableCursorParams} */\n this.cursor = false;\n /** @type {Spring} */\n this.releaseXSpring = hasSpring ? /** @type {Spring} */(ease) : createSpring({\n mass: setValue(parameters.releaseMass, 1),\n stiffness: setValue(parameters.releaseStiffness, 80),\n damping: setValue(parameters.releaseDamping, 20),\n });\n /** @type {Spring} */\n this.releaseYSpring = hasSpring ? /** @type {Spring} */(ease) : createSpring({\n mass: setValue(parameters.releaseMass, 1),\n stiffness: setValue(parameters.releaseStiffness, 80),\n damping: setValue(parameters.releaseDamping, 20),\n });\n /** @type {EasingFunction} */\n this.releaseEase = customEase || eases.outQuint;\n /** @type {Boolean} */\n this.hasReleaseSpring = hasSpring;\n /** @type {Callback<this>} */\n this.onGrab = parameters.onGrab || noop;\n /** @type {Callback<this>} */\n this.onDrag = parameters.onDrag || noop;\n /** @type {Callback<this>} */\n this.onRelease = parameters.onRelease || noop;\n /** @type {Callback<this>} */\n this.onUpdate = parameters.onUpdate || noop;\n /** @type {Callback<this>} */\n this.onSettle = parameters.onSettle || noop;\n /** @type {Callback<this>} */\n this.onSnap = parameters.onSnap || noop;\n /** @type {Callback<this>} */\n this.onResize = parameters.onResize || noop;\n /** @type {Callback<this>} */\n this.onAfterResize = parameters.onAfterResize || noop;\n /** @type {[Number, Number]} */\n this.disabled = [0, 0];\n /** @type {AnimatableParams} */\n const animatableParams = {};\n if (modifier) animatableParams.modifier = modifier;\n if (isUnd(paramX) || paramX === true) {\n animatableParams[xProp] = 0;\n } else if (isObj(paramX)) {\n const paramXObject = /** @type {DraggableAxisParam} */(paramX);\n const animatableXParams = {};\n if (paramXObject.modifier) animatableXParams.modifier = paramXObject.modifier;\n if (paramXObject.composition) animatableXParams.composition = paramXObject.composition;\n animatableParams[xProp] = animatableXParams;\n } else if (paramX === false) {\n animatableParams[xProp] = 0;\n this.disabled[0] = 1;\n }\n if (isUnd(paramY) || paramY === true) {\n animatableParams[yProp] = 0;\n } else if (isObj(paramY)) {\n const paramYObject = /** @type {DraggableAxisParam} */(paramY);\n const animatableYParams = {};\n if (paramYObject.modifier) animatableYParams.modifier = paramYObject.modifier;\n if (paramYObject.composition) animatableYParams.composition = paramYObject.composition;\n animatableParams[yProp] = animatableYParams;\n } else if (paramY === false) {\n animatableParams[yProp] = 0;\n this.disabled[1] = 1;\n }\n /** @type {AnimatableObject} */\n this.animate = /** @type {AnimatableObject} */(new Animatable(this.$target, animatableParams));\n // Internal props\n this.xProp = xProp;\n this.yProp = yProp;\n this.destX = 0;\n this.destY = 0;\n this.deltaX = 0;\n this.deltaY = 0;\n this.scroll = {x: 0, y: 0};\n /** @type {[Number, Number, Number, Number]} */\n this.coords = [this.x, this.y, 0, 0]; // x, y, temp x, temp y\n /** @type {[Number, Number]} */\n this.snapped = [0, 0]; // x, y\n /** @type {[Number, Number, Number, Number, Number, Number, Number, Number]} */\n this.pointer = [0, 0, 0, 0, 0, 0, 0, 0]; // x1, y1, x2, y2, temp x1, temp y1, temp x2, temp y2\n /** @type {[Number, Number]} */\n this.scrollView = [0, 0]; // w, h\n /** @type {[Number, Number, Number, Number]} */\n this.dragArea = [0, 0, 0, 0]; // x, y, w, h\n /** @type {[Number, Number, Number, Number]} */\n this.containerBounds = [-1e12, maxValue, maxValue, -1e12]; // t, r, b, l\n /** @type {[Number, Number, Number, Number]} */\n this.scrollBounds = [0, 0, 0, 0]; // t, r, b, l\n /** @type {[Number, Number, Number, Number]} */\n this.targetBounds = [0, 0, 0, 0]; // t, r, b, l\n /** @type {[Number, Number]} */\n this.window = [0, 0]; // w, h\n /** @type {[Number, Number, Number]} */\n this.velocityStack = [0, 0, 0];\n /** @type {Number} */\n this.velocityStackIndex = 0;\n /** @type {Number} */\n this.velocityTime = now();\n /** @type {Number} */\n this.velocity = 0;\n /** @type {Number} */\n this.angle = 0;\n /** @type {JSAnimation} */\n this.cursorStyles = null;\n /** @type {JSAnimation} */\n this.triggerStyles = null;\n /** @type {JSAnimation} */\n this.bodyStyles = null;\n /** @type {JSAnimation} */\n this.targetStyles = null;\n /** @type {JSAnimation} */\n this.touchActionStyles = null;\n this.transforms = new Transforms(this.$target);\n this.overshootCoords = { x: 0, y: 0 };\n this.overshootTicker = new Timer({\n autoplay: false,\n onUpdate: () => {\n this.updated = true;\n this.manual = true;\n // Use a duration of 1 to prevent the animatable from completing immediately to prevent issues with onSettle()\n // https://github.com/juliangarnier/anime/issues/1045\n if (!this.disabled[0]) this.animate[this.xProp](this.overshootCoords.x, 1);\n if (!this.disabled[1]) this.animate[this.yProp](this.overshootCoords.y, 1);\n },\n onComplete: () => {\n this.manual = false;\n if (!this.disabled[0]) this.animate[this.xProp](this.overshootCoords.x, 0);\n if (!this.disabled[1]) this.animate[this.yProp](this.overshootCoords.y, 0);\n },\n }, null, 0).init();\n this.updateTicker = new Timer({ autoplay: false, onUpdate: () => this.update() }, null,0,).init();\n this.contained = !isUnd(container);\n this.manual = false;\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.enabled = false;\n this.initialized = false;\n this.activeProp = this.disabled[1] ? xProp : yProp;\n this.animate.callbacks.onRender = () => {\n const hasUpdated = this.updated;\n const hasMoved = this.grabbed && hasUpdated;\n const hasReleased = !hasMoved && this.released;\n const x = this.x;\n const y = this.y;\n const dx = x - this.coords[2];\n const dy = y - this.coords[3];\n this.deltaX = dx;\n this.deltaY = dy;\n this.coords[2] = x;\n this.coords[3] = y;\n // Check if dx or dy are not 0 to check if the draggable has actually moved\n // https://github.com/juliangarnier/anime/issues/1032\n if (hasUpdated && (dx || dy)) {\n this.onUpdate(this);\n }\n if (!hasReleased) {\n this.updated = false;\n } else {\n this.computeVelocity(dx, dy);\n this.angle = atan2(dy, dx);\n }\n };\n this.animate.callbacks.onComplete = () => {\n if ((!this.grabbed && this.released)) {\n // Set released to false before calling onSettle to avoid recursion\n this.released = false;\n }\n if (!this.manual) {\n this.deltaX = 0;\n this.deltaY = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.onSettle(this);\n }\n };\n this.resizeTicker = new Timer({\n autoplay: false,\n duration: 150 * globals.timeScale,\n onComplete: () => {\n this.onResize(this);\n this.refresh();\n this.onAfterResize(this);\n },\n }).init();\n this.parameters = parameters;\n this.resizeObserver = new ResizeObserver(() => {\n if (this.initialized) {\n this.resizeTicker.restart();\n } else {\n this.initialized = true;\n }\n });\n this.enable();\n this.refresh();\n this.resizeObserver.observe(this.$container);\n if (!isObj(target)) this.resizeObserver.observe(this.$target);\n }\n\n /**\n * @param {Number} dx\n * @param {Number} dy\n * @return {Number}\n */\n computeVelocity(dx, dy) {\n const prevTime = this.velocityTime;\n const curTime = now();\n const elapsed = curTime - prevTime;\n if (elapsed < 17) return this.velocity;\n this.velocityTime = curTime;\n const velocityStack = this.velocityStack;\n const vMul = this.velocityMultiplier;\n const minV = this.minVelocity;\n const maxV = this.maxVelocity;\n const vi = this.velocityStackIndex;\n velocityStack[vi] = round(clamp((sqrt(dx * dx + dy * dy) / elapsed) * vMul, minV, maxV), 5);\n const velocity = max(velocityStack[0], velocityStack[1], velocityStack[2]);\n this.velocity = velocity;\n this.velocityStackIndex = (vi + 1) % 3;\n return velocity;\n }\n\n /**\n * @param {Number} x\n * @param {Boolean} [muteUpdateCallback]\n * @return {this}\n */\n setX(x, muteUpdateCallback = false) {\n if (this.disabled[0]) return;\n const v = round(x, 5);\n this.overshootTicker.pause();\n this.manual = true;\n this.updated = !muteUpdateCallback;\n this.destX = v;\n this.snapped[0] = snap(v, this.snapX);\n this.animate[this.xProp](v, 0);\n this.manual = false;\n return this;\n }\n\n /**\n * @param {Number} y\n * @param {Boolean} [muteUpdateCallback]\n * @return {this}\n */\n setY(y, muteUpdateCallback = false) {\n if (this.disabled[1]) return;\n const v = round(y, 5);\n this.overshootTicker.pause();\n this.manual = true;\n this.updated = !muteUpdateCallback;\n this.destY = v;\n this.snapped[1] = snap(v, this.snapY);\n this.animate[this.yProp](v, 0);\n this.manual = false;\n return this;\n }\n\n get x() {\n return round(/** @type {Number} */(this.animate[this.xProp]()), globals.precision);\n }\n\n set x(x) {\n this.setX(x, false);\n }\n\n get y() {\n return round(/** @type {Number} */(this.animate[this.yProp]()), globals.precision);\n }\n\n set y(y) {\n this.setY(y, false);\n }\n\n get progressX() {\n return mapRange(this.x, this.containerBounds[3], this.containerBounds[1], 0, 1);\n }\n\n set progressX(x) {\n this.setX(mapRange(x, 0, 1, this.containerBounds[3], this.containerBounds[1]), false);\n }\n\n get progressY() {\n return mapRange(this.y, this.containerBounds[0], this.containerBounds[2], 0, 1);\n }\n\n set progressY(y) {\n this.setY(mapRange(y, 0, 1, this.containerBounds[0], this.containerBounds[2]), false);\n }\n\n updateScrollCoords() {\n const sx = round(this.useWin ? win.scrollX : this.$container.scrollLeft, 0);\n const sy = round(this.useWin ? win.scrollY : this.$container.scrollTop, 0);\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const threshold = this.scrollThreshold;\n this.scroll.x = sx;\n this.scroll.y = sy;\n this.scrollBounds[0] = sy - this.targetBounds[0] + cpt - threshold;\n this.scrollBounds[1] = sx - this.targetBounds[1] - cpr + threshold;\n this.scrollBounds[2] = sy - this.targetBounds[2] - cpb + threshold;\n this.scrollBounds[3] = sx - this.targetBounds[3] + cpl - threshold;\n }\n\n updateBoundingValues() {\n const $container = this.$container;\n // Return early if no $container defined to prevents error when reading scrollWidth / scrollHeight\n // https://github.com/juliangarnier/anime/issues/1064\n if (!$container) return;\n const cx = this.x;\n const cy = this.y;\n const cx2 = this.coords[2];\n const cy2 = this.coords[3];\n // Prevents interfering with the scroll area in cases the target is outside of the container\n // Make sure the temp coords are also adjuset to prevents wrong delta calculation on updates\n this.coords[2] = 0;\n this.coords[3] = 0;\n this.setX(0, true);\n this.setY(0, true);\n this.transforms.remove();\n const iw = this.window[0] = win.innerWidth;\n const ih = this.window[1] = win.innerHeight;\n const uw = this.useWin;\n const sw = $container.scrollWidth;\n const sh = $container.scrollHeight;\n const fx = this.fixed;\n const transformContainerRect = $container.getBoundingClientRect();\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n this.dragArea[0] = uw ? 0 : transformContainerRect.left;\n this.dragArea[1] = uw ? 0 : transformContainerRect.top;\n this.scrollView[0] = uw ? clamp(sw, iw, sw) : sw;\n this.scrollView[1] = uw ? clamp(sh, ih, sh) : sh;\n this.updateScrollCoords();\n const { width, height, left, top, right, bottom } = $container.getBoundingClientRect();\n this.dragArea[2] = round(uw ? clamp(width, iw, iw) : width, 0);\n this.dragArea[3] = round(uw ? clamp(height, ih, ih) : height, 0);\n const containerOverflow = getTargetValue($container, 'overflow');\n const visibleOverflow = containerOverflow === 'visible';\n const hiddenOverflow = containerOverflow === 'hidden';\n this.canScroll = fx ? false :\n this.contained &&\n (($container === doc.body && visibleOverflow) || (!hiddenOverflow && !visibleOverflow)) &&\n (sw > this.dragArea[2] + cpl - cpr || sh > this.dragArea[3] + cpt - cpb) &&\n (!this.containerArray || (this.containerArray && !isArr(this.containerArray)));\n if (this.contained) {\n const sx = this.scroll.x;\n const sy = this.scroll.y;\n const canScroll = this.canScroll;\n const targetRect = this.$target.getBoundingClientRect();\n const hiddenLeft = canScroll ? uw ? 0 : $container.scrollLeft : 0;\n const hiddenTop = canScroll ? uw ? 0 : $container.scrollTop : 0;\n const hiddenRight = canScroll ? this.scrollView[0] - hiddenLeft - width : 0;\n const hiddenBottom = canScroll ? this.scrollView[1] - hiddenTop - height : 0;\n this.targetBounds[0] = round((targetRect.top + sy) - (uw ? 0 : top), 0);\n this.targetBounds[1] = round((targetRect.right + sx) - (uw ? iw : right), 0);\n this.targetBounds[2] = round((targetRect.bottom + sy) - (uw ? ih : bottom), 0);\n this.targetBounds[3] = round((targetRect.left + sx) - (uw ? 0 : left), 0);\n if (this.containerArray) {\n this.containerBounds[0] = this.containerArray[0] + cpt;\n this.containerBounds[1] = this.containerArray[1] - cpr;\n this.containerBounds[2] = this.containerArray[2] - cpb;\n this.containerBounds[3] = this.containerArray[3] + cpl;\n } else {\n this.containerBounds[0] = -round(targetRect.top - (fx ? clamp(top, 0, ih) : top) + hiddenTop - cpt, 0);\n this.containerBounds[1] = -round(targetRect.right - (fx ? clamp(right, 0, iw) : right) - hiddenRight + cpr, 0);\n this.containerBounds[2] = -round(targetRect.bottom - (fx ? clamp(bottom, 0, ih) : bottom) - hiddenBottom + cpb, 0);\n this.containerBounds[3] = -round(targetRect.left - (fx ? clamp(left, 0, iw) : left) + hiddenLeft - cpl, 0);\n }\n }\n this.transforms.revert();\n // Restore coordinates\n this.coords[2] = cx2;\n this.coords[3] = cy2;\n this.setX(cx, true);\n this.setY(cy, true);\n }\n\n /**\n * @param {Array} bounds\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\n isOutOfBounds(bounds, x, y) {\n // Returns 0 if not OB, 1 if x is OB, 2 if y is OB, 3 if both x and y are OB\n if (!this.contained) return 0;\n const [ bt, br, bb, bl ] = bounds;\n const [ dx, dy ] = this.disabled;\n const obx = !dx && x < bl || !dx && x > br;\n const oby = !dy && y < bt || !dy && y > bb;\n return obx && !oby ? 1 : !obx && oby ? 2 : obx && oby ? 3 : 0;\n }\n\n refresh() {\n const params = this.parameters;\n const paramX = params.x;\n const paramY = params.y;\n const container = parseDraggableFunctionParameter(params.container, this);\n const cp = parseDraggableFunctionParameter(params.containerPadding, this) || 0;\n const containerPadding = /** @type {[Number, Number, Number, Number]} */(isArr(cp) ? cp : [cp, cp, cp, cp]);\n const cx = this.x;\n const cy = this.y;\n const parsedCursorStyles = parseDraggableFunctionParameter(params.cursor, this);\n const cursorStyles = { onHover: 'grab', onGrab: 'grabbing' };\n if (parsedCursorStyles) {\n const { onHover, onGrab } = /** @type {DraggableCursorParams} */(parsedCursorStyles);\n if (onHover) cursorStyles.onHover = onHover;\n if (onGrab) cursorStyles.onGrab = onGrab;\n }\n this.containerArray = isArr(container) ? container : null;\n this.$container = /** @type {HTMLElement} */(container && !this.containerArray ? parseTargets(/** @type {DOMTarget} */(container))[0] : doc.body);\n this.useWin = this.$container === doc.body;\n /** @type {Window | HTMLElement} */\n this.$scrollContainer = this.useWin ? win : this.$container;\n this.isFinePointer = matchMedia('(pointer:fine)').matches;\n this.containerPadding = setValue(containerPadding, [0, 0, 0, 0]);\n this.containerFriction = clamp(setValue(parseDraggableFunctionParameter(params.containerFriction, this), .8), 0, 1);\n this.releaseContainerFriction = clamp(setValue(parseDraggableFunctionParameter(params.releaseContainerFriction, this), this.containerFriction), 0, 1);\n this.snapX = parseDraggableFunctionParameter(isObj(paramX) && !isUnd(paramX.snap) ? paramX.snap : params.snap, this);\n this.snapY = parseDraggableFunctionParameter(isObj(paramY) && !isUnd(paramY.snap) ? paramY.snap : params.snap, this);\n this.scrollSpeed = setValue(parseDraggableFunctionParameter(params.scrollSpeed, this), 1.5);\n this.scrollThreshold = setValue(parseDraggableFunctionParameter(params.scrollThreshold, this), 20);\n this.dragSpeed = setValue(parseDraggableFunctionParameter(params.dragSpeed, this), 1);\n this.minVelocity = setValue(parseDraggableFunctionParameter(params.minVelocity, this), 0);\n this.maxVelocity = setValue(parseDraggableFunctionParameter(params.maxVelocity, this), 50);\n this.velocityMultiplier = setValue(parseDraggableFunctionParameter(params.velocityMultiplier, this), 1);\n this.cursor = parsedCursorStyles === false ? false : cursorStyles;\n this.updateBoundingValues();\n\n // const ob = this.isOutOfBounds(this.containerBounds, this.x, this.y);\n // if (ob === 1 || ob === 3) this.progressX = px;\n // if (ob === 2 || ob === 3) this.progressY = py;\n\n // if (this.initialized && this.contained) {\n // if (this.progressX !== px) this.progressX = px;\n // if (this.progressY !== py) this.progressY = py;\n // }\n\n const [ bt, br, bb, bl ] = this.containerBounds;\n this.setX(clamp(cx, bl, br), true);\n this.setY(clamp(cy, bt, bb), true);\n }\n\n update() {\n this.updateScrollCoords();\n if (this.canScroll) {\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const [ sw, sh ] = this.scrollView;\n const daw = this.dragArea[2];\n const dah = this.dragArea[3];\n const csx = this.scroll.x;\n const csy = this.scroll.y;\n const nsw = this.$container.scrollWidth;\n const nsh = this.$container.scrollHeight;\n const csw = this.useWin ? clamp(nsw, this.window[0], nsw) : nsw;\n const csh = this.useWin ? clamp(nsh, this.window[1], nsh) : nsh;\n const swd = sw - csw;\n const shd = sh - csh;\n // Handle cases where the scrollarea dimensions changes during drag\n if (this.dragged && swd > 0) {\n this.coords[0] -= swd;\n this.scrollView[0] = csw;\n }\n if (this.dragged && shd > 0) {\n this.coords[1] -= shd;\n this.scrollView[1] = csh;\n }\n // Handle autoscroll when target is at the edges of the scroll bounds\n const s = this.scrollSpeed * 10;\n const threshold = this.scrollThreshold;\n const [ x, y ] = this.coords;\n const [ st, sr, sb, sl ] = this.scrollBounds;\n const t = round(clamp((y - st + cpt) / threshold, -1, 0) * s, 0);\n const r = round(clamp((x - sr - cpr) / threshold, 0, 1) * s, 0);\n const b = round(clamp((y - sb - cpb) / threshold, 0, 1) * s, 0);\n const l = round(clamp((x - sl + cpl) / threshold, -1, 0) * s, 0);\n if (t || b || l || r) {\n const [nx, ny] = this.disabled;\n let scrollX = csx;\n let scrollY = csy;\n if (!nx) {\n scrollX = round(clamp(csx + (l || r), 0, sw - daw), 0);\n this.coords[0] -= csx - scrollX;\n }\n if (!ny) {\n scrollY = round(clamp(csy + (t || b), 0, sh - dah), 0);\n this.coords[1] -= csy - scrollY;\n }\n // Note: Safari mobile requires to use different scroll methods depending if using the window or not\n if (this.useWin) {\n this.$scrollContainer.scrollBy(-(csx - scrollX), -(csy - scrollY));\n } else {\n this.$scrollContainer.scrollTo(scrollX, scrollY);\n }\n }\n }\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const [ px1, py1, px2, py2, px3, py3 ] = this.pointer;\n this.coords[0] += (px1 - px3) * this.dragSpeed;\n this.coords[1] += (py1 - py3) * this.dragSpeed;\n this.pointer[4] = px1;\n this.pointer[5] = py1;\n const [ cx, cy ] = this.coords;\n const [ sx, sy ] = this.snapped;\n const cf = (1 - this.containerFriction) * this.dragSpeed;\n this.setX(cx > cr ? cr + (cx - cr) * cf : cx < cl ? cl + (cx - cl) * cf : cx, false);\n this.setY(cy > cb ? cb + (cy - cb) * cf : cy < ct ? ct + (cy - ct) * cf : cy, false);\n this.computeVelocity(px1 - px3, py1 - py3);\n this.angle = atan2(py1 - py2, px1 - px2);\n const [ nsx, nsy ] = this.snapped;\n if (nsx !== sx && this.snapX || nsy !== sy && this.snapY) {\n this.onSnap(this);\n }\n }\n\n stop() {\n this.updateTicker.pause();\n this.overshootTicker.pause();\n // Pauses the in bounds onRelease animations\n for (let prop in this.animate.animations) this.animate.animations[prop].pause();\n remove(this, null, 'x');\n remove(this, null, 'y');\n remove(this, null, 'progressX');\n remove(this, null, 'progressY');\n remove(this.scroll); // Removes any active animations on the container scroll\n remove(this.overshootCoords); // Removes active overshoot animations\n return this;\n }\n\n /**\n * @param {Number} [duration]\n * @param {Number} [gap]\n * @param {EasingParam} [ease]\n * @return {this}\n */\n scrollInView(duration, gap = 0, ease = eases.inOutQuad) {\n this.updateScrollCoords();\n const x = this.destX;\n const y = this.destY;\n const scroll = this.scroll;\n const scrollBounds = this.scrollBounds;\n const canScroll = this.canScroll;\n if (!this.containerArray && this.isOutOfBounds(scrollBounds, x, y)) {\n const [ st, sr, sb, sl ] = scrollBounds;\n const t = round(clamp(y - st, -1e12, 0), 0);\n const r = round(clamp(x - sr, 0, maxValue), 0);\n const b = round(clamp(y - sb, 0, maxValue), 0);\n const l = round(clamp(x - sl, -1e12, 0), 0);\n new JSAnimation(scroll, {\n x: round(scroll.x + (l ? l - gap : r ? r + gap : 0), 0),\n y: round(scroll.y + (t ? t - gap : b ? b + gap : 0), 0),\n duration: isUnd(duration) ? 350 * globals.timeScale : duration,\n ease,\n onUpdate: () => {\n this.canScroll = false;\n this.$scrollContainer.scrollTo(scroll.x, scroll.y);\n }\n }).init().then(() => {\n this.canScroll = canScroll;\n });\n }\n return this;\n }\n\n handleHover() {\n if (this.isFinePointer && this.cursor && !this.cursorStyles) {\n this.cursorStyles = setTargetValues(this.$trigger, {\n cursor: /** @type {DraggableCursorParams} */(this.cursor).onHover\n });\n }\n }\n\n /**\n * @param {Number} [duration]\n * @param {Number} [gap]\n * @param {EasingParam} [ease]\n * @return {this}\n */\n animateInView(duration, gap = 0, ease = eases.inOutQuad) {\n this.stop();\n this.updateBoundingValues();\n const x = this.x;\n const y = this.y;\n const [ cpt, cpr, cpb, cpl ] = this.containerPadding;\n const bt = this.scroll.y - this.targetBounds[0] + cpt + gap;\n const br = this.scroll.x - this.targetBounds[1] - cpr - gap;\n const bb = this.scroll.y - this.targetBounds[2] - cpb - gap;\n const bl = this.scroll.x - this.targetBounds[3] + cpl + gap;\n const ob = this.isOutOfBounds([bt, br, bb, bl], x, y);\n if (ob) {\n const [ disabledX, disabledY ] = this.disabled;\n const destX = clamp(snap(x, this.snapX), bl, br);\n const destY = clamp(snap(y, this.snapY), bt, bb);\n const dur = isUnd(duration) ? 350 * globals.timeScale : duration;\n if (!disabledX && (ob === 1 || ob === 3)) this.animate[this.xProp](destX, dur, ease);\n if (!disabledY && (ob === 2 || ob === 3)) this.animate[this.yProp](destY, dur, ease);\n }\n return this;\n }\n\n /**\n * @param {MouseEvent|TouchEvent} e\n */\n handleDown(e) {\n const $eTarget = /** @type {HTMLElement} */(e.target);\n if (this.grabbed || /** @type {HTMLInputElement} */($eTarget).type === 'range') return;\n\n e.stopPropagation();\n\n this.grabbed = true;\n this.released = false;\n this.stop();\n this.updateBoundingValues();\n const touches = /** @type {TouchEvent} */(e).changedTouches;\n const eventX = touches ? touches[0].clientX : /** @type {MouseEvent} */(e).clientX;\n const eventY = touches ? touches[0].clientY : /** @type {MouseEvent} */(e).clientY;\n const { x, y } = this.transforms.normalizePoint(eventX, eventY);\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const cf = (1 - this.containerFriction) * this.dragSpeed;\n const cx = this.x;\n const cy = this.y;\n this.coords[0] = this.coords[2] = !cf ? cx : cx > cr ? cr + (cx - cr) / cf : cx < cl ? cl + (cx - cl) / cf : cx;\n this.coords[1] = this.coords[3] = !cf ? cy : cy > cb ? cb + (cy - cb) / cf : cy < ct ? ct + (cy - ct) / cf : cy;\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.pointer[2] = x;\n this.pointer[3] = y;\n this.pointer[4] = x;\n this.pointer[5] = y;\n this.pointer[6] = x;\n this.pointer[7] = y;\n this.deltaX = 0;\n this.deltaY = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.angle = 0;\n if (this.targetStyles) {\n this.targetStyles.revert();\n this.targetStyles = null;\n }\n const z = /** @type {Number} */(getTargetValue(this.$target, 'zIndex', false));\n zIndex = (z > zIndex ? z : zIndex) + 1;\n this.targetStyles = setTargetValues(this.$target, { zIndex });\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n if (this.cursorStyles) {\n this.cursorStyles.revert();\n this.cursorStyles = null;\n }\n if (this.isFinePointer && this.cursor) {\n this.bodyStyles = setTargetValues(doc.body, {\n cursor: /** @type {DraggableCursorParams} */(this.cursor).onGrab\n });\n }\n this.scrollInView(100, 0, eases.out(3));\n this.onGrab(this);\n\n doc.addEventListener('touchmove', this);\n doc.addEventListener('touchend', this);\n doc.addEventListener('touchcancel', this);\n doc.addEventListener('mousemove', this);\n doc.addEventListener('mouseup', this);\n doc.addEventListener('selectstart', this);\n }\n\n /**\n * @param {MouseEvent|TouchEvent} e\n */\n handleMove(e) {\n if (!this.grabbed) return;\n const touches = /** @type {TouchEvent} */(e).changedTouches;\n const eventX = touches ? touches[0].clientX : /** @type {MouseEvent} */(e).clientX;\n const eventY = touches ? touches[0].clientY : /** @type {MouseEvent} */(e).clientY;\n const { x, y } = this.transforms.normalizePoint(eventX, eventY);\n const movedX = x - this.pointer[6];\n const movedY = y - this.pointer[7];\n\n let $parent = /** @type {HTMLElement} */(e.target);\n let isAtTop = false;\n let isAtBottom = false;\n let canTouchScroll = false;\n\n while (touches && $parent && $parent !== this.$trigger) {\n const overflowY = getTargetValue($parent, 'overflow-y');\n if (overflowY !== 'hidden' && overflowY !== 'visible') {\n const { scrollTop, scrollHeight, clientHeight } = $parent;\n if (scrollHeight > clientHeight) {\n canTouchScroll = true;\n isAtTop = scrollTop <= 3;\n isAtBottom = scrollTop >= (scrollHeight - clientHeight) - 3;\n break;\n }\n }\n $parent = /** @type {HTMLElement} */($parent.parentNode);\n }\n\n if (canTouchScroll && ((!isAtTop && !isAtBottom) || (isAtTop && movedY < 0) || (isAtBottom && movedY > 0))) {\n\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.pointer[2] = x;\n this.pointer[3] = y;\n this.pointer[4] = x;\n this.pointer[5] = y;\n this.pointer[6] = x;\n this.pointer[7] = y;\n\n } else {\n\n preventDefault(e);\n\n // Needed to prevents click on handleUp\n if (!this.triggerStyles) this.triggerStyles = setTargetValues(this.$trigger, { pointerEvents: 'none' });\n // Needed to prevent page scroll while dragging on touch devvice\n this.$trigger.addEventListener('touchstart', preventDefault, { passive: false });\n this.$trigger.addEventListener('touchmove', preventDefault, { passive: false });\n this.$trigger.addEventListener('touchend', preventDefault);\n\n\n if ((!this.disabled[0] && abs(movedX) > 3) || (!this.disabled[1] && abs(movedY) > 3)) {\n\n this.updateTicker.resume();\n this.pointer[2] = this.pointer[0];\n this.pointer[3] = this.pointer[1];\n this.pointer[0] = x;\n this.pointer[1] = y;\n this.dragged = true;\n this.released = false;\n this.onDrag(this);\n }\n }\n }\n\n handleUp() {\n\n if (!this.grabbed) return;\n\n this.updateTicker.pause();\n\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n\n if (this.bodyStyles) {\n this.bodyStyles.revert();\n this.bodyStyles = null;\n }\n\n const [ disabledX, disabledY ] = this.disabled;\n const [ px1, py1, px2, py2, px3, py3 ] = this.pointer;\n const [ ct, cr, cb, cl ] = this.containerBounds;\n const [ sx, sy ] = this.snapped;\n const springX = this.releaseXSpring;\n const springY = this.releaseYSpring;\n const releaseEase = this.releaseEase;\n const hasReleaseSpring = this.hasReleaseSpring;\n const overshootCoords = this.overshootCoords;\n const cx = this.x;\n const cy = this.y;\n const pv = this.computeVelocity(px1 - px3, py1 - py3);\n const pa = this.angle = atan2(py1 - py2, px1 - px2);\n const ds = pv * 150;\n const cf = (1 - this.releaseContainerFriction) * this.dragSpeed;\n const nx = cx + (cos(pa) * ds);\n const ny = cy + (sin(pa) * ds);\n const bx = nx > cr ? cr + (nx - cr) * cf : nx < cl ? cl + (nx - cl) * cf : nx;\n const by = ny > cb ? cb + (ny - cb) * cf : ny < ct ? ct + (ny - ct) * cf : ny;\n const dx = this.destX = clamp(round(snap(bx, this.snapX), 5), cl, cr);\n const dy = this.destY = clamp(round(snap(by, this.snapY), 5), ct, cb);\n const ob = this.isOutOfBounds(this.containerBounds, nx, ny);\n\n let durationX = 0;\n let durationY = 0;\n let easeX = releaseEase;\n let easeY = releaseEase;\n let longestReleaseDuration = 0;\n\n overshootCoords.x = cx;\n overshootCoords.y = cy;\n\n if (!disabledX) {\n const directionX = dx === cr ? cx > cr ? -1 : 1 : cx < cl ? -1 : 1;\n const distanceX = round(cx - dx, 0);\n springX.velocity = disabledY && hasReleaseSpring ? distanceX ? (ds * directionX) / abs(distanceX) : 0 : pv;\n const { ease, duration, restDuration } = springX;\n durationX = cx === dx ? 0 : hasReleaseSpring ? duration : duration - (restDuration * globals.timeScale);\n if (hasReleaseSpring) easeX = ease;\n if (durationX > longestReleaseDuration) longestReleaseDuration = durationX;\n }\n\n if (!disabledY) {\n const directionY = dy === cb ? cy > cb ? -1 : 1 : cy < ct ? -1 : 1;\n const distanceY = round(cy - dy, 0);\n springY.velocity = disabledX && hasReleaseSpring ? distanceY ? (ds * directionY) / abs(distanceY) : 0 : pv;\n const { ease, duration, restDuration } = springY;\n durationY = cy === dy ? 0 : hasReleaseSpring ? duration : duration - (restDuration * globals.timeScale);\n if (hasReleaseSpring) easeY = ease;\n if (durationY > longestReleaseDuration) longestReleaseDuration = durationY;\n }\n\n if (!hasReleaseSpring && ob && cf && (durationX || durationY)) {\n\n const composition = compositionTypes.blend;\n\n new JSAnimation(overshootCoords, {\n x: { to: bx, duration: durationX * .65 },\n y: { to: by, duration: durationY * .65 },\n ease: releaseEase,\n composition,\n }).init();\n\n new JSAnimation(overshootCoords, {\n x: { to: dx, duration: durationX },\n y: { to: dy, duration: durationY },\n ease: releaseEase,\n composition,\n }).init();\n\n this.overshootTicker.stretch(max(durationX, durationY)).restart();\n\n } else {\n\n if (!disabledX) this.animate[this.xProp](dx, durationX, easeX);\n if (!disabledY) this.animate[this.yProp](dy, durationY, easeY);\n\n }\n\n this.scrollInView(longestReleaseDuration, this.scrollThreshold, releaseEase);\n\n let hasSnapped = false;\n\n if (dx !== sx) {\n this.snapped[0] = dx;\n if (this.snapX) hasSnapped = true;\n }\n\n if (dy !== sy && this.snapY) {\n this.snapped[1] = dy;\n if (this.snapY) hasSnapped = true;\n }\n\n if (hasSnapped) this.onSnap(this);\n\n this.grabbed = false;\n this.dragged = false;\n this.updated = true;\n this.released = true;\n\n // It's important to trigger the callback after the release animations to be able to cancel them\n this.onRelease(this);\n\n this.$trigger.removeEventListener('touchstart', preventDefault);\n this.$trigger.removeEventListener('touchmove', preventDefault);\n this.$trigger.removeEventListener('touchend', preventDefault);\n\n doc.removeEventListener('touchmove', this);\n doc.removeEventListener('touchend', this);\n doc.removeEventListener('touchcancel', this);\n doc.removeEventListener('mousemove', this);\n doc.removeEventListener('mouseup', this);\n doc.removeEventListener('selectstart', this);\n }\n\n reset() {\n this.stop();\n this.resizeTicker.pause();\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.setX(0, true);\n this.setY(0, true);\n this.coords[0] = 0;\n this.coords[1] = 0;\n this.pointer[0] = 0;\n this.pointer[1] = 0;\n this.pointer[2] = 0;\n this.pointer[3] = 0;\n this.pointer[4] = 0;\n this.pointer[5] = 0;\n this.pointer[6] = 0;\n this.pointer[7] = 0;\n this.velocity = 0;\n this.velocityStack[0] = 0;\n this.velocityStack[1] = 0;\n this.velocityStack[2] = 0;\n this.velocityStackIndex = 0;\n this.angle = 0;\n return this;\n }\n\n enable() {\n if (!this.enabled) {\n this.enabled = true;\n this.$target.classList.remove('is-disabled');\n this.touchActionStyles = setTargetValues(this.$trigger, {\n touchAction: this.disabled[0] ? 'pan-x' : this.disabled[1] ? 'pan-y' : 'none'\n });\n this.$trigger.addEventListener('touchstart', this, { passive: true });\n this.$trigger.addEventListener('mousedown', this, { passive: true });\n this.$trigger.addEventListener('mouseenter', this);\n }\n return this;\n }\n\n disable() {\n this.enabled = false;\n this.grabbed = false;\n this.dragged = false;\n this.updated = false;\n this.released = false;\n this.canScroll = false;\n this.touchActionStyles.revert();\n if (this.cursorStyles) {\n this.cursorStyles.revert();\n this.cursorStyles = null;\n }\n if (this.triggerStyles) {\n this.triggerStyles.revert();\n this.triggerStyles = null;\n }\n if (this.bodyStyles) {\n this.bodyStyles.revert();\n this.bodyStyles = null;\n }\n if (this.targetStyles) {\n this.targetStyles.revert();\n this.targetStyles = null;\n }\n this.$target.classList.add('is-disabled');\n this.$trigger.removeEventListener('touchstart', this);\n this.$trigger.removeEventListener('mousedown', this);\n this.$trigger.removeEventListener('mouseenter', this);\n doc.removeEventListener('touchmove', this);\n doc.removeEventListener('touchend', this);\n doc.removeEventListener('touchcancel', this);\n doc.removeEventListener('mousemove', this);\n doc.removeEventListener('mouseup', this);\n doc.removeEventListener('selectstart', this);\n return this;\n }\n\n revert() {\n this.reset();\n this.disable();\n this.$target.classList.remove('is-disabled');\n this.updateTicker.revert();\n this.overshootTicker.revert();\n this.resizeTicker.revert();\n this.animate.revert();\n this.resizeObserver.disconnect();\n return this;\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'mousedown':\n this.handleDown(/** @type {MouseEvent} */(e));\n break;\n case 'touchstart':\n this.handleDown(/** @type {TouchEvent} */(e));\n break;\n case 'mousemove':\n this.handleMove(/** @type {MouseEvent} */(e));\n break;\n case 'touchmove':\n this.handleMove(/** @type {TouchEvent} */(e));\n break;\n case 'mouseup':\n this.handleUp();\n break;\n case 'touchend':\n this.handleUp();\n break;\n case 'touchcancel':\n this.handleUp();\n break;\n case 'mouseenter':\n this.handleHover();\n break;\n case 'selectstart':\n preventDefault(e);\n break;\n }\n }\n}\n\n/**\n * @param {TargetsParam} target\n * @param {DraggableParams} [parameters]\n * @return {Draggable}\n */\nconst createDraggable = (target, parameters) => new Draggable(target, parameters);\n\n\n\n\nclass Scope {\n /** @param {ScopeParams} [parameters] */\n constructor(parameters = {}) {\n if (scope.current) scope.current.register(this);\n const rootParam = parameters.root;\n /** @type {Document|DOMTarget} */\n let root = doc;\n if (rootParam) {\n root = /** @type {ReactRef} */(rootParam).current ||\n /** @type {AngularRef} */(rootParam).nativeElement ||\n parseTargets(/** @type {DOMTargetSelector} */(rootParam))[0] ||\n doc;\n }\n const scopeDefaults = parameters.defaults;\n const globalDefault = globals.defaults;\n const mediaQueries = parameters.mediaQueries;\n /** @type {DefaultsParams} */\n this.defaults = scopeDefaults ? mergeObjects(scopeDefaults, globalDefault) : globalDefault;\n /** @type {Document|DOMTarget} */\n this.root = root;\n /** @type {Array<ScopeConstructorCallback>} */\n this.constructors = [];\n /** @type {Array<ScopeCleanupCallback>} */\n this.revertConstructors = [];\n /** @type {Array<Revertible>} */\n this.revertibles = [];\n /** @type {Array<ScopeConstructorCallback | ((scope: this) => Tickable)>} */\n this.constructorsOnce = [];\n /** @type {Array<ScopeCleanupCallback>} */\n this.revertConstructorsOnce = [];\n /** @type {Array<Revertible>} */\n this.revertiblesOnce = [];\n /** @type {Boolean} */\n this.once = false;\n /** @type {Number} */\n this.onceIndex = 0;\n /** @type {Record<String, ScopeMethod>} */\n this.methods = {};\n /** @type {Record<String, Boolean>} */\n this.matches = {};\n /** @type {Record<String, MediaQueryList>} */\n this.mediaQueryLists = {};\n /** @type {Record<String, any>} */\n this.data = {};\n if (mediaQueries) {\n for (let mq in mediaQueries) {\n const _mq = win.matchMedia(mediaQueries[mq]);\n this.mediaQueryLists[mq] = _mq;\n _mq.addEventListener('change', this);\n }\n }\n }\n\n /**\n * @param {Revertible} revertible\n */\n register(revertible) {\n const store = this.once ? this.revertiblesOnce : this.revertibles;\n store.push(revertible);\n }\n\n /**\n * @template T\n * @param {ScopedCallback<T>} cb\n * @return {T}\n */\n execute(cb) {\n let activeScope = scope.current;\n let activeRoot = scope.root;\n let activeDefaults = globals.defaults;\n scope.current = this;\n scope.root = this.root;\n globals.defaults = this.defaults;\n const mqs = this.mediaQueryLists;\n for (let mq in mqs) this.matches[mq] = mqs[mq].matches;\n const returned = cb(this);\n scope.current = activeScope;\n scope.root = activeRoot;\n globals.defaults = activeDefaults;\n return returned;\n }\n\n /**\n * @return {this}\n */\n refresh() {\n this.onceIndex = 0;\n this.execute(() => {\n let i = this.revertibles.length;\n let y = this.revertConstructors.length;\n while (i--) this.revertibles[i].revert();\n while (y--) this.revertConstructors[y](this);\n this.revertibles.length = 0;\n this.revertConstructors.length = 0;\n this.constructors.forEach((/** @type {ScopeConstructorCallback} */constructor) => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructors.push(revertConstructor);\n }\n });\n });\n return this;\n }\n\n /**\n * @overload\n * @param {String} a1\n * @param {ScopeMethod} a2\n * @return {this}\n *\n * @overload\n * @param {ScopeConstructorCallback} a1\n * @return {this}\n *\n * @param {String|ScopeConstructorCallback} a1\n * @param {ScopeMethod} [a2]\n */\n add(a1, a2) {\n this.once = false;\n if (isFnc(a1)) {\n const constructor = /** @type {ScopeConstructorCallback} */(a1);\n this.constructors.push(constructor);\n this.execute(() => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructors.push(revertConstructor);\n }\n });\n } else {\n this.methods[/** @type {String} */(a1)] = (/** @type {any} */...args) => this.execute(() => a2(...args));\n }\n return this;\n }\n\n /**\n * @param {ScopeConstructorCallback} scopeConstructorCallback\n * @return {this}\n */\n addOnce(scopeConstructorCallback) {\n this.once = true;\n if (isFnc(scopeConstructorCallback)) {\n const currentIndex = this.onceIndex++;\n const tracked = this.constructorsOnce[currentIndex];\n if (tracked) return this;\n const constructor = /** @type {ScopeConstructorCallback} */(scopeConstructorCallback);\n this.constructorsOnce[currentIndex] = constructor;\n this.execute(() => {\n const revertConstructor = constructor(this);\n if (isFnc(revertConstructor)) {\n this.revertConstructorsOnce.push(revertConstructor);\n }\n });\n }\n return this;\n }\n\n /**\n * @param {(scope: this) => Tickable} cb\n * @return {Tickable}\n */\n keepTime(cb) {\n this.once = true;\n const currentIndex = this.onceIndex++;\n const tracked = /** @type {(scope: this) => Tickable} */(this.constructorsOnce[currentIndex]);\n if (isFnc(tracked)) return tracked(this);\n const constructor = /** @type {(scope: this) => Tickable} */(createRefreshable(cb));\n this.constructorsOnce[currentIndex] = constructor;\n let trackedTickable;\n this.execute(() => {\n trackedTickable = constructor(this);\n });\n return trackedTickable;\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'change':\n this.refresh();\n break;\n }\n }\n\n revert() {\n const revertibles = this.revertibles;\n const revertConstructors = this.revertConstructors;\n const revertiblesOnce = this.revertiblesOnce;\n const revertConstructorsOnce = this.revertConstructorsOnce;\n const mqs = this.mediaQueryLists;\n let i = revertibles.length;\n let j = revertConstructors.length;\n let k = revertiblesOnce.length;\n let l = revertConstructorsOnce.length;\n while (i--) revertibles[i].revert();\n while (j--) revertConstructors[j](this);\n while (k--) revertiblesOnce[k].revert();\n while (l--) revertConstructorsOnce[l](this);\n for (let mq in mqs) mqs[mq].removeEventListener('change', this);\n revertibles.length = 0;\n revertConstructors.length = 0;\n this.constructors.length = 0;\n revertiblesOnce.length = 0;\n revertConstructorsOnce.length = 0;\n this.constructorsOnce.length = 0;\n this.onceIndex = 0;\n this.matches = {};\n this.methods = {};\n this.mediaQueryLists = {};\n this.data = {};\n }\n}\n\n/**\n * @param {ScopeParams} [params]\n * @return {Scope}\n */\nconst createScope = params => new Scope(params);\n\n/**\n * @return {Number}\n */\nconst getMaxViewHeight = () => {\n const $el = doc.createElement('div');\n doc.body.appendChild($el);\n $el.style.height = '100lvh';\n const height = $el.offsetHeight;\n doc.body.removeChild($el);\n return height;\n};\n\n/**\n * @template {ScrollThresholdValue|String|Number|Boolean|Function|Object} T\n * @param {T | ((observer: ScrollObserver) => T)} value\n * @param {ScrollObserver} scroller\n * @return {T}\n */\nconst parseScrollObserverFunctionParameter = (value, scroller) => value && isFnc(value) ? /** @type {Function} */(value)(scroller) : value;\n\nconst scrollContainers = new Map();\n\nclass ScrollContainer {\n /**\n * @param {HTMLElement} $el\n */\n constructor($el) {\n /** @type {HTMLElement} */\n this.element = $el;\n /** @type {Boolean} */\n this.useWin = this.element === doc.body;\n /** @type {Number} */\n this.winWidth = 0;\n /** @type {Number} */\n this.winHeight = 0;\n /** @type {Number} */\n this.width = 0;\n /** @type {Number} */\n this.height = 0;\n /** @type {Number} */\n this.left = 0;\n /** @type {Number} */\n this.top = 0;\n /** @type {Number} */\n this.zIndex = 0;\n /** @type {Number} */\n this.scrollX = 0;\n /** @type {Number} */\n this.scrollY = 0;\n /** @type {Number} */\n this.prevScrollX = 0;\n /** @type {Number} */\n this.prevScrollY = 0;\n /** @type {Number} */\n this.scrollWidth = 0;\n /** @type {Number} */\n this.scrollHeight = 0;\n /** @type {Number} */\n this.velocity = 0;\n /** @type {Boolean} */\n this.backwardX = false;\n /** @type {Boolean} */\n this.backwardY = false;\n /** @type {Timer} */\n this.scrollTicker = new Timer({\n autoplay: false,\n onBegin: () => this.dataTimer.resume(),\n onUpdate: () => {\n const backwards = this.backwardX || this.backwardY;\n forEachChildren(this, (/** @type {ScrollObserver} */child) => child.handleScroll(), backwards);\n },\n onComplete: () => this.dataTimer.pause()\n }).init();\n /** @type {Timer} */\n this.dataTimer = new Timer({\n autoplay: false,\n frameRate: 30,\n onUpdate: self => {\n const dt = self.deltaTime;\n const px = this.prevScrollX;\n const py = this.prevScrollY;\n const nx = this.scrollX;\n const ny = this.scrollY;\n const dx = px - nx;\n const dy = py - ny;\n this.prevScrollX = nx;\n this.prevScrollY = ny;\n if (dx) this.backwardX = px > nx;\n if (dy) this.backwardY = py > ny;\n this.velocity = round(dt > 0 ? Math.sqrt(dx * dx + dy * dy) / dt : 0, 5);\n }\n }).init();\n /** @type {Timer} */\n this.resizeTicker = new Timer({\n autoplay: false,\n duration: 250 * globals.timeScale,\n onComplete: () => {\n this.updateWindowBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n }\n }).init();\n /** @type {Timer} */\n this.wakeTicker = new Timer({\n autoplay: false,\n duration: 500 * globals.timeScale,\n onBegin: () => {\n this.scrollTicker.resume();\n },\n onComplete: () => {\n this.scrollTicker.pause();\n }\n }).init();\n /** @type {ScrollObserver} */\n this._head = null;\n /** @type {ScrollObserver} */\n this._tail = null;\n this.updateScrollCoords();\n this.updateWindowBounds();\n this.updateBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n this.resizeObserver = new ResizeObserver(() => this.resizeTicker.restart());\n this.resizeObserver.observe(this.element);\n (this.useWin ? win : this.element).addEventListener('scroll', this, false);\n }\n\n updateScrollCoords() {\n const useWin = this.useWin;\n const $el = this.element;\n this.scrollX = round(useWin ? win.scrollX : $el.scrollLeft, 0);\n this.scrollY = round(useWin ? win.scrollY : $el.scrollTop, 0);\n }\n\n updateWindowBounds() {\n this.winWidth = win.innerWidth;\n this.winHeight = getMaxViewHeight();\n }\n\n updateBounds() {\n const style = getComputedStyle(this.element);\n const $el = this.element;\n this.scrollWidth = $el.scrollWidth + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n this.scrollHeight = $el.scrollHeight + parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n this.updateWindowBounds();\n let width, height;\n if (this.useWin) {\n width = this.winWidth;\n height = this.winHeight;\n } else {\n const elRect = $el.getBoundingClientRect();\n width = $el.clientWidth;\n height = $el.clientHeight;\n this.top = elRect.top;\n this.left = elRect.left;\n }\n this.width = width;\n this.height = height;\n }\n\n refreshScrollObservers() {\n forEachChildren(this, (/** @type {ScrollObserver} */child) => {\n if (child._debug) {\n child.removeDebug();\n }\n });\n this.updateBounds();\n forEachChildren(this, (/** @type {ScrollObserver} */child) => {\n child.refresh();\n if (child._debug) {\n child.debug();\n }\n });\n }\n\n refresh() {\n this.updateWindowBounds();\n this.updateBounds();\n this.refreshScrollObservers();\n this.handleScroll();\n }\n\n handleScroll() {\n this.updateScrollCoords();\n this.wakeTicker.restart();\n }\n\n /**\n * @param {Event} e\n */\n handleEvent(e) {\n switch (e.type) {\n case 'scroll':\n this.handleScroll();\n break;\n }\n }\n\n revert() {\n this.scrollTicker.cancel();\n this.dataTimer.cancel();\n this.resizeTicker.cancel();\n this.wakeTicker.cancel();\n this.resizeObserver.disconnect();\n (this.useWin ? win : this.element).removeEventListener('scroll', this);\n scrollContainers.delete(this.element);\n }\n}\n\n/**\n * @param {TargetsParam} target\n * @return {ScrollContainer}\n */\nconst registerAndGetScrollContainer = target => {\n const $el = /** @type {HTMLElement} */(target ? parseTargets(target)[0] || doc.body : doc.body);\n let scrollContainer = scrollContainers.get($el);\n if (!scrollContainer) {\n scrollContainer = new ScrollContainer($el);\n scrollContainers.set($el, scrollContainer);\n }\n return scrollContainer;\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {Number|string} v\n * @param {Number} size\n * @param {Number} [under]\n * @param {Number} [over]\n * @return {Number}\n */\nconst convertValueToPx = ($el, v, size, under, over) => {\n const clampMin = v === 'min';\n const clampMax = v === 'max';\n const value = v === 'top' || v === 'left' || v === 'start' || clampMin ? 0 :\n v === 'bottom' || v === 'right' || v === 'end' || clampMax ? '100%' :\n v === 'center' ? '50%' :\n v;\n const { n, u } = decomposeRawValue(value, decomposedOriginalValue);\n let px = n;\n if (u === '%') {\n px = (n / 100) * size;\n } else if (u) {\n px = convertValueUnit($el, decomposedOriginalValue, 'px', true).n;\n }\n if (clampMax && under < 0) px += under;\n if (clampMin && over > 0) px += over;\n return px;\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {ScrollThresholdValue} v\n * @param {Number} size\n * @param {Number} [under]\n * @param {Number} [over]\n * @return {Number}\n */\nconst parseBoundValue = ($el, v, size, under, over) => {\n /** @type {Number} */\n let value;\n if (isStr(v)) {\n const matchedOperator = relativeValuesExecRgx.exec(/** @type {String} */(v));\n if (matchedOperator) {\n const splitter = matchedOperator[0];\n const operator = splitter[0];\n const splitted = /** @type {String} */(v).split(splitter);\n const clampMin = splitted[0] === 'min';\n const clampMax = splitted[0] === 'max';\n const valueAPx = convertValueToPx($el, splitted[0], size, under, over);\n const valueBPx = convertValueToPx($el, splitted[1], size, under, over);\n if (clampMin) {\n const min = getRelativeValue(convertValueToPx($el, 'min', size), valueBPx, operator);\n value = min < valueAPx ? valueAPx : min;\n } else if (clampMax) {\n const max = getRelativeValue(convertValueToPx($el, 'max', size), valueBPx, operator);\n value = max > valueAPx ? valueAPx : max;\n } else {\n value = getRelativeValue(valueAPx, valueBPx, operator);\n }\n } else {\n value = convertValueToPx($el, v, size, under, over);\n }\n } else {\n value = /** @type {Number} */(v);\n }\n return round(value, 0);\n};\n\n/**\n * @param {JSAnimation} linked\n * @return {HTMLElement}\n */\nconst getAnimationDomTarget = linked => {\n let $linkedTarget;\n const linkedTargets = linked.targets;\n for (let i = 0, l = linkedTargets.length; i < l; i++) {\n const target = linkedTargets[i];\n if (target[isDomSymbol]) {\n $linkedTarget = /** @type {HTMLElement} */(target);\n break;\n }\n }\n return $linkedTarget;\n};\n\nlet scrollerIndex = 0;\n\nconst debugColors$1 = ['#FF4B4B','#FF971B','#FFC730','#F9F640','#7AFF5A','#18FF74','#17E09B','#3CFFEC','#05DBE9','#33B3F1','#638CF9','#C563FE','#FF4FCF','#F93F8A'];\n\nclass ScrollObserver {\n /**\n * @param {ScrollObserverParams} parameters\n */\n constructor(parameters = {}) {\n if (scope.current) scope.current.register(this);\n const syncMode = setValue(parameters.sync, 'play pause');\n const ease = syncMode ? parseEasings(/** @type {EasingParam} */(syncMode)) : null;\n const isLinear = syncMode && (syncMode === 'linear' || syncMode === none);\n const isEase = syncMode && !(ease === none && !isLinear);\n const isSmooth = syncMode && (isNum(syncMode) || syncMode === true || isLinear);\n const isMethods = syncMode && (isStr(syncMode) && !isEase && !isSmooth);\n const syncMethods = isMethods ? /** @type {String} */(syncMode).split(' ').map(\n (/** @type {String} */m) => () => {\n const linked = this.linked;\n return linked && linked[m] ? linked[m]() : null;\n }\n ) : null;\n const biDirSync = isMethods && syncMethods.length > 2;\n /** @type {Number} */\n this.index = scrollerIndex++;\n /** @type {String|Number} */\n this.id = !isUnd(parameters.id) ? parameters.id : this.index;\n /** @type {ScrollContainer} */\n this.container = registerAndGetScrollContainer(parameters.container);\n /** @type {HTMLElement} */\n this.target = null;\n /** @type {Tickable|WAAPIAnimation} */\n this.linked = null;\n /** @type {Boolean} */\n this.repeat = null;\n /** @type {Boolean} */\n this.horizontal = null;\n /** @type {ScrollThresholdParam|ScrollThresholdValue|ScrollThresholdCallback} */\n this.enter = null;\n /** @type {ScrollThresholdParam|ScrollThresholdValue|ScrollThresholdCallback} */\n this.leave = null;\n /** @type {Boolean} */\n this.sync = isEase || isSmooth || !!syncMethods;\n /** @type {EasingFunction} */\n this.syncEase = isEase ? ease : null;\n /** @type {Number} */\n this.syncSmooth = isSmooth ? syncMode === true || isLinear ? 1 : /** @type {Number} */(syncMode) : null;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnter = syncMethods && !biDirSync && syncMethods[0] ? syncMethods[0] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeave = syncMethods && !biDirSync && syncMethods[1] ? syncMethods[1] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnterForward = syncMethods && biDirSync && syncMethods[0] ? syncMethods[0] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeaveForward = syncMethods && biDirSync && syncMethods[1] ? syncMethods[1] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncEnterBackward = syncMethods && biDirSync && syncMethods[2] ? syncMethods[2] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncLeaveBackward = syncMethods && biDirSync && syncMethods[3] ? syncMethods[3] : noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnter = parameters.onEnter || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeave = parameters.onLeave || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnterForward = parameters.onEnterForward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeaveForward = parameters.onLeaveForward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onEnterBackward = parameters.onEnterBackward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onLeaveBackward = parameters.onLeaveBackward || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onUpdate = parameters.onUpdate || noop;\n /** @type {Callback<ScrollObserver>} */\n this.onSyncComplete = parameters.onSyncComplete || noop;\n /** @type {Boolean} */\n this.reverted = false;\n /** @type {Boolean} */\n this.completed = false;\n /** @type {Boolean} */\n this.began = false;\n /** @type {Boolean} */\n this.isInView = false;\n /** @type {Boolean} */\n this.forceEnter = false;\n /** @type {Boolean} */\n this.hasEntered = false;\n // /** @type {Array.<Number>} */\n // this.offsets = [];\n /** @type {Number} */\n this.offset = 0;\n /** @type {Number} */\n this.offsetStart = 0;\n /** @type {Number} */\n this.offsetEnd = 0;\n /** @type {Number} */\n this.distance = 0;\n /** @type {Number} */\n this.prevProgress = 0;\n /** @type {Array} */\n this.thresholds = ['start', 'end', 'end', 'start'];\n /** @type {[Number, Number, Number, Number]} */\n this.coords = [0, 0, 0, 0];\n /** @type {JSAnimation} */\n this.debugStyles = null;\n /** @type {HTMLElement} */\n this.$debug = null;\n /** @type {ScrollObserverParams} */\n this._params = parameters;\n /** @type {Boolean} */\n this._debug = setValue(parameters.debug, false);\n /** @type {ScrollObserver} */\n this._next = null;\n /** @type {ScrollObserver} */\n this._prev = null;\n addChild(this.container, this);\n // Wait for the next frame to add to the container in order to handle calls to link()\n sync(() => {\n if (this.reverted) return;\n if (!this.target) {\n const target = /** @type {HTMLElement} */(parseTargets(parameters.target)[0]);\n this.target = target || doc.body;\n this.refresh();\n }\n if (this._debug) this.debug();\n });\n }\n\n /**\n * @param {Tickable|WAAPIAnimation} linked\n */\n link(linked) {\n if (linked) {\n // Make sure to pause the linked object in case it's added later\n linked.pause();\n this.linked = linked;\n // Try to use a target of the linked object if no target parameters specified\n if (!this._params.target) {\n /** @type {HTMLElement} */\n let $linkedTarget;\n if (!isUnd(/** @type {JSAnimation} */(linked).targets)) {\n $linkedTarget = getAnimationDomTarget(/** @type {JSAnimation} */(linked));\n } else {\n forEachChildren(/** @type {Timeline} */(linked), (/** @type {JSAnimation} */child) => {\n if (child.targets && !$linkedTarget) {\n $linkedTarget = getAnimationDomTarget(/** @type {JSAnimation} */(child));\n }\n });\n }\n // Fallback to body if no target found\n this.target = $linkedTarget || doc.body;\n this.refresh();\n }\n }\n return this;\n }\n\n get velocity() {\n return this.container.velocity;\n }\n\n get backward() {\n return this.horizontal ? this.container.backwardX : this.container.backwardY;\n }\n\n get scroll() {\n return this.horizontal ? this.container.scrollX : this.container.scrollY;\n }\n\n get progress() {\n const p = (this.scroll - this.offsetStart) / this.distance;\n return p === Infinity || isNaN(p) ? 0 : round(clamp(p, 0, 1), 6);\n }\n\n refresh() {\n this.reverted = false;\n const params = this._params;\n this.repeat = setValue(parseScrollObserverFunctionParameter(params.repeat, this), true);\n this.horizontal = setValue(parseScrollObserverFunctionParameter(params.axis, this), 'y') === 'x';\n this.enter = setValue(parseScrollObserverFunctionParameter(params.enter, this), 'end start');\n this.leave = setValue(parseScrollObserverFunctionParameter(params.leave, this), 'start end');\n this.updateBounds();\n this.handleScroll();\n return this;\n }\n\n removeDebug() {\n if (this.$debug) {\n this.$debug.parentNode.removeChild(this.$debug);\n this.$debug = null;\n }\n if (this.debugStyles) {\n this.debugStyles.revert();\n this.$debug = null;\n }\n return this;\n }\n\n debug() {\n this.removeDebug();\n const container = this.container;\n const isHori = this.horizontal;\n const $existingDebug = container.element.querySelector(':scope > .animejs-onscroll-debug');\n const $debug = doc.createElement('div');\n const $thresholds = doc.createElement('div');\n const $triggers = doc.createElement('div');\n const color = debugColors$1[this.index % debugColors$1.length];\n const useWin = container.useWin;\n const containerWidth = useWin ? container.winWidth : container.width;\n const containerHeight = useWin ? container.winHeight : container.height;\n const scrollWidth = container.scrollWidth;\n const scrollHeight = container.scrollHeight;\n const size = this.container.width > 360 ? 320 : 260;\n const offLeft = isHori ? 0 : 10;\n const offTop = isHori ? 10 : 0;\n const half = isHori ? 24 : size / 2;\n const labelHeight = isHori ? half : 15;\n const labelWidth = isHori ? 60 : half;\n const labelSize = isHori ? labelWidth : labelHeight;\n const repeat = isHori ? 'repeat-x' : 'repeat-y';\n /**\n * @param {Number} v\n * @return {String}\n */\n const gradientOffset = v => isHori ? '0px '+(v)+'px' : (v)+'px'+' 2px';\n /**\n * @param {String} c\n * @return {String}\n */\n const lineCSS = (c) => `linear-gradient(${isHori ? 90 : 0}deg, ${c} 2px, transparent 1px)`;\n /**\n * @param {String} p\n * @param {Number} l\n * @param {Number} t\n * @param {Number} w\n * @param {Number} h\n * @return {String}\n */\n const baseCSS = (p, l, t, w, h) => `position:${p};left:${l}px;top:${t}px;width:${w}px;height:${h}px;`;\n $debug.style.cssText = `${baseCSS('absolute', offLeft, offTop, isHori ? scrollWidth : size, isHori ? size : scrollHeight)}\n pointer-events: none;\n z-index: ${this.container.zIndex++};\n display: flex;\n flex-direction: ${isHori ? 'column' : 'row'};\n filter: drop-shadow(0px 1px 0px rgba(0,0,0,.75));\n `;\n $thresholds.style.cssText = `${baseCSS('sticky', 0, 0, isHori ? containerWidth : half, isHori ? half : containerHeight)}`;\n if (!$existingDebug) {\n $thresholds.style.cssText += `background:\n ${lineCSS('#FFFF')}${gradientOffset(half-10)} / ${isHori ? '100px 100px' : '100px 100px'} ${repeat},\n ${lineCSS('#FFF8')}${gradientOffset(half-10)} / ${isHori ? '10px 10px' : '10px 10px'} ${repeat};\n `;\n }\n $triggers.style.cssText = `${baseCSS('relative', 0, 0, isHori ? scrollWidth : half, isHori ? half : scrollHeight)}`;\n if (!$existingDebug) {\n $triggers.style.cssText += `background:\n ${lineCSS('#FFFF')}${gradientOffset(0)} / ${isHori ? '100px 10px' : '10px 100px'} ${repeat},\n ${lineCSS('#FFF8')}${gradientOffset(0)} / ${isHori ? '10px 0px' : '0px 10px'} ${repeat};\n `;\n }\n const labels = [' enter: ', ' leave: '];\n this.coords.forEach((v, i) => {\n const isView = i > 1;\n const value = (isView ? 0 : this.offset) + v;\n const isTail = i % 2;\n const isFirst = value < labelSize;\n const isOver = value > (isView ? isHori ? containerWidth : containerHeight : isHori ? scrollWidth : scrollHeight) - labelSize;\n const isFlip = (isView ? isTail && !isFirst : !isTail && !isFirst) || isOver;\n const $label = doc.createElement('div');\n const $text = doc.createElement('div');\n const dirProp = isHori ? isFlip ? 'right' : 'left' : isFlip ? 'bottom' : 'top';\n const flipOffset = isFlip ? (isHori ? labelWidth : labelHeight) + (!isView ? isHori ? -1 : -2 : isHori ? -1 : isOver ? 0 : -2) : !isView ? isHori ? 1 : 0 : isHori ? 1 : 0;\n // $text.innerHTML = `${!isView ? '' : labels[isTail] + ' '}${this.id}: ${this.thresholds[i]} ${isView ? '' : labels[isTail]}`;\n $text.innerHTML = `${this.id}${labels[isTail]}${this.thresholds[i]}`;\n $label.style.cssText = `${baseCSS('absolute', 0, 0, labelWidth, labelHeight)}\n display: flex;\n flex-direction: ${isHori ? 'column' : 'row'};\n justify-content: flex-${isView ? 'start' : 'end'};\n align-items: flex-${isFlip ? 'end' : 'start'};\n border-${dirProp}: 2px ${isTail ? 'solid' : 'solid'} ${color};\n `;\n $text.style.cssText = `\n overflow: hidden;\n max-width: ${(size / 2) - 10}px;\n height: ${labelHeight};\n margin-${isHori ? isFlip ? 'right' : 'left' : isFlip ? 'bottom' : 'top'}: -2px;\n padding: 1px;\n font-family: ui-monospace, monospace;\n font-size: 10px;\n letter-spacing: -.025em;\n line-height: 9px;\n font-weight: 600;\n text-align: ${isHori && isFlip || !isHori && !isView ? 'right' : 'left'};\n white-space: pre;\n text-overflow: ellipsis;\n color: ${isTail ? color : 'rgba(0,0,0,.75)'};\n background-color: ${isTail ? 'rgba(0,0,0,.65)' : color};\n border: 2px solid ${isTail ? color : 'transparent'};\n border-${isHori ? isFlip ? 'top-left' : 'top-right' : isFlip ? 'top-left' : 'bottom-left'}-radius: 5px;\n border-${isHori ? isFlip ? 'bottom-left' : 'bottom-right' : isFlip ? 'top-right' : 'bottom-right'}-radius: 5px;\n `;\n $label.appendChild($text);\n let position = value - flipOffset + (isHori ? 1 : 0);\n $label.style[isHori ? 'left' : 'top'] = `${position}px`;\n // $label.style[isHori ? 'left' : 'top'] = value - flipOffset + (!isFlip && isFirst && !isView ? 1 : isFlip ? 0 : -2) + 'px';\n (isView ? $thresholds : $triggers).appendChild($label);\n });\n\n $debug.appendChild($thresholds);\n $debug.appendChild($triggers);\n container.element.appendChild($debug);\n\n if (!$existingDebug) $debug.classList.add('animejs-onscroll-debug');\n this.$debug = $debug;\n const containerPosition = getTargetValue(container.element, 'position');\n if (containerPosition === 'static') {\n this.debugStyles = setTargetValues(container.element, { position: 'relative '});\n }\n\n }\n\n updateBounds() {\n if (this._debug) {\n this.removeDebug();\n }\n let stickys;\n const $target = this.target;\n const container = this.container;\n const isHori = this.horizontal;\n const linked = this.linked;\n let linkedTime;\n let $el = $target;\n // let offsetX = 0;\n // let offsetY = 0;\n // let $offsetParent = $el;\n /** @type {Element} */\n if (linked) {\n linkedTime = linked.currentTime;\n linked.seek(0, true);\n }\n /* Old implementation to get offset and targetSize before fixing https://github.com/juliangarnier/anime/issues/1021\n // const isContainerStatic = getTargetValue(container.element, 'position') === 'static' ? setTargetValues(container.element, { position: 'relative '}) : false;\n // while ($el && $el !== container.element && $el !== doc.body) {\n // const isSticky = getTargetValue($el, 'position') === 'sticky' ?\n // setTargetValues($el, { position: 'static' }) :\n // false;\n // if ($el === $offsetParent) {\n // offsetX += $el.offsetLeft || 0;\n // offsetY += $el.offsetTop || 0;\n // $offsetParent = $el.offsetParent;\n // }\n // $el = /** @type {HTMLElement} */($el.parentElement);\n // if (isSticky) {\n // if (!stickys) stickys = [];\n // stickys.push(isSticky);\n // }\n // }\n // if (isContainerStatic) isContainerStatic.revert();\n // const offset = isHori ? offsetX : offsetY;\n // const targetSize = isHori ? $target.offsetWidth : $target.offsetHeight;\n\n while ($el && $el !== container.element && $el !== doc.body) {\n const isSticky = getTargetValue($el, 'position') === 'sticky' ? setTargetValues($el, { position: 'static' }) : false;\n $el = $el.parentElement;\n if (isSticky) {\n if (!stickys) stickys = [];\n stickys.push(isSticky);\n }\n }\n const rect = $target.getBoundingClientRect();\n const offset = isHori ? rect.left + container.scrollX - container.left : rect.top + container.scrollY - container.top;\n const targetSize = isHori ? rect.width : rect.height;\n const containerSize = isHori ? container.width : container.height;\n const scrollSize = isHori ? container.scrollWidth : container.scrollHeight;\n const maxScroll = scrollSize - containerSize;\n const enter = this.enter;\n const leave = this.leave;\n\n /** @type {ScrollThresholdValue} */\n let enterTarget = 'start';\n /** @type {ScrollThresholdValue} */\n let leaveTarget = 'end';\n /** @type {ScrollThresholdValue} */\n let enterContainer = 'end';\n /** @type {ScrollThresholdValue} */\n let leaveContainer = 'start';\n\n if (isStr(enter)) {\n const splitted = /** @type {String} */(enter).split(' ');\n enterContainer = splitted[0];\n enterTarget = splitted.length > 1 ? splitted[1] : enterTarget;\n } else if (isObj(enter)) {\n const e = /** @type {ScrollThresholdParam} */(enter);\n if (!isUnd(e.container)) enterContainer = e.container;\n if (!isUnd(e.target)) enterTarget = e.target;\n } else if (isNum(enter)) {\n enterContainer = /** @type {Number} */(enter);\n }\n\n if (isStr(leave)) {\n const splitted = /** @type {String} */(leave).split(' ');\n leaveContainer = splitted[0];\n leaveTarget = splitted.length > 1 ? splitted[1] : leaveTarget;\n } else if (isObj(leave)) {\n const t = /** @type {ScrollThresholdParam} */(leave);\n if (!isUnd(t.container)) leaveContainer = t.container;\n if (!isUnd(t.target)) leaveTarget = t.target;\n } else if (isNum(leave)) {\n leaveContainer = /** @type {Number} */(leave);\n }\n\n const parsedEnterTarget = parseBoundValue($target, enterTarget, targetSize);\n const parsedLeaveTarget = parseBoundValue($target, leaveTarget, targetSize);\n const under = (parsedEnterTarget + offset) - containerSize;\n const over = (parsedLeaveTarget + offset) - maxScroll;\n const parsedEnterContainer = parseBoundValue($target, enterContainer, containerSize, under, over);\n const parsedLeaveContainer = parseBoundValue($target, leaveContainer, containerSize, under, over);\n const offsetStart = parsedEnterTarget + offset - parsedEnterContainer;\n const offsetEnd = parsedLeaveTarget + offset - parsedLeaveContainer;\n const scrollDelta = offsetEnd - offsetStart;\n // this.offsets[0] = offsetX;\n // this.offsets[1] = offsetY;\n this.offset = offset;\n this.offsetStart = offsetStart;\n this.offsetEnd = offsetEnd;\n this.distance = scrollDelta <= 0 ? 0 : scrollDelta;\n this.thresholds = [enterTarget, leaveTarget, enterContainer, leaveContainer];\n this.coords = [parsedEnterTarget, parsedLeaveTarget, parsedEnterContainer, parsedLeaveContainer];\n if (stickys) {\n stickys.forEach(sticky => sticky.revert());\n }\n if (linked) {\n linked.seek(linkedTime, true);\n }\n if (this._debug) {\n this.debug();\n }\n }\n\n handleScroll() {\n const linked = this.linked;\n const sync = this.sync;\n const syncEase = this.syncEase;\n const syncSmooth = this.syncSmooth;\n const shouldSeek = linked && (syncEase || syncSmooth);\n const isHori = this.horizontal;\n const container = this.container;\n const scroll = this.scroll;\n const isBefore = scroll <= this.offsetStart;\n const isAfter = scroll >= this.offsetEnd;\n const isInView = !isBefore && !isAfter;\n const isOnTheEdge = scroll === this.offsetStart || scroll === this.offsetEnd;\n const forceEnter = !this.hasEntered && isOnTheEdge;\n const $debug = this._debug && this.$debug;\n let hasUpdated = false;\n let syncCompleted = false;\n let p = this.progress;\n\n if (isBefore && this.began) {\n this.began = false;\n }\n\n if (p > 0 && !this.began) {\n this.began = true;\n }\n\n if (shouldSeek) {\n const lp = linked.progress;\n if (syncSmooth && isNum(syncSmooth)) {\n if (/** @type {Number} */(syncSmooth) < 1) {\n const step = 0.0001;\n const snap = lp < p && p === 1 ? step : lp > p && !p ? -1e-4 : 0;\n p = round(lerp(lp, p, interpolate(.01, .2, /** @type {Number} */(syncSmooth)), false) + snap, 6);\n }\n } else if (syncEase) {\n p = syncEase(p);\n }\n hasUpdated = p !== this.prevProgress;\n syncCompleted = lp === 1;\n if (hasUpdated && !syncCompleted && (syncSmooth && lp)) {\n container.wakeTicker.restart();\n }\n }\n\n if ($debug) {\n const sticky = isHori ? container.scrollY : container.scrollX;\n $debug.style[isHori ? 'top' : 'left'] = sticky + 10 + 'px';\n }\n\n // Trigger enter callbacks if already in view or when entering the view\n if ((isInView && !this.isInView) || (forceEnter && !this.forceEnter && !this.hasEntered)) {\n if (isInView) this.isInView = true;\n if (!this.forceEnter || !this.hasEntered) {\n if ($debug && isInView) $debug.style.zIndex = `${this.container.zIndex++}`;\n this.onSyncEnter(this);\n this.onEnter(this);\n if (this.backward) {\n this.onSyncEnterBackward(this);\n this.onEnterBackward(this);\n } else {\n this.onSyncEnterForward(this);\n this.onEnterForward(this);\n }\n this.hasEntered = true;\n if (forceEnter) this.forceEnter = true;\n } else if (isInView) {\n this.forceEnter = false;\n }\n }\n\n if (isInView || !isInView && this.isInView) {\n hasUpdated = true;\n }\n\n if (hasUpdated) {\n if (shouldSeek) linked.seek(linked.duration * p);\n this.onUpdate(this);\n }\n\n if (!isInView && this.isInView) {\n this.isInView = false;\n this.onSyncLeave(this);\n this.onLeave(this);\n if (this.backward) {\n this.onSyncLeaveBackward(this);\n this.onLeaveBackward(this);\n } else {\n this.onSyncLeaveForward(this);\n this.onLeaveForward(this);\n }\n if (sync && !syncSmooth) {\n syncCompleted = true;\n }\n }\n\n if (p >= 1 && this.began && !this.completed && (sync && syncCompleted || !sync)) {\n if (sync) {\n this.onSyncComplete(this);\n }\n this.completed = true;\n if ((!this.repeat && !linked) || (!this.repeat && linked && linked.completed)) {\n this.revert();\n }\n }\n\n if (p < 1 && this.completed) {\n this.completed = false;\n }\n\n this.prevProgress = p;\n }\n\n revert() {\n if (this.reverted) return;\n const container = this.container;\n removeChild(container, this);\n if (!container._head) {\n container.revert();\n }\n if (this._debug) {\n this.removeDebug();\n }\n this.reverted = true;\n return this;\n }\n\n}\n\n/**\n * @param {ScrollObserverParams} [parameters={}]\n * @return {ScrollObserver}\n */\nconst onScroll = (parameters = {}) => new ScrollObserver(parameters);\n\n\n\n\nconst segmenter = (typeof Intl !== 'undefined') && Intl.Segmenter;\nconst valueRgx = /\\{value\\}/g;\nconst indexRgx = /\\{i\\}/g;\nconst whiteSpaceGroupRgx = /(\\s+)/;\nconst whiteSpaceRgx = /^\\s+$/;\nconst lineType = 'line';\nconst wordType = 'word';\nconst charType = 'char';\nconst dataLine = `data-line`;\n\n/**\n * @typedef {Object} Segment\n * @property {String} segment\n * @property {Boolean} [isWordLike]\n */\n\n/**\n * @typedef {Object} Segmenter\n * @property {function(String): Iterable<Segment>} segment\n */\n\n/** @type {Segmenter} */\nlet wordSegmenter = null;\n/** @type {Segmenter} */\nlet graphemeSegmenter = null;\nlet $splitTemplate = null;\n\n/**\n * @param {Segment} seg\n * @return {Boolean}\n */\nconst isSegmentWordLike = seg => {\n return seg.isWordLike ||\n seg.segment === ' ' || // Consider spaces as words first, then handle them diffrently later\n isNum(+seg.segment); // Safari doesn't considers numbers as words\n};\n\n/**\n * @param {HTMLElement} $el\n */\nconst setAriaHidden = $el => $el.setAttribute('aria-hidden', 'true');\n\n/**\n * @param {DOMTarget} $el\n * @param {String} type\n * @return {Array<HTMLElement>}\n */\nconst getAllTopLevelElements = ($el, type) => [.../** @type {*} */($el.querySelectorAll(`[data-${type}]:not([data-${type}] [data-${type}])`))];\n\nconst debugColors = { line: '#00D672', word: '#FF4B4B', char: '#5A87FF' };\n\n/**\n * @param {HTMLElement} $el\n */\nconst filterEmptyElements = $el => {\n if (!$el.childElementCount && !$el.textContent.trim()) {\n const $parent = $el.parentElement;\n $el.remove();\n if ($parent) filterEmptyElements($parent);\n }\n};\n\n/**\n * @param {HTMLElement} $el\n * @param {Number} lineIndex\n * @param {Set<HTMLElement>} bin\n * @returns {Set<HTMLElement>}\n */\nconst filterLineElements = ($el, lineIndex, bin) => {\n const dataLineAttr = $el.getAttribute(dataLine);\n if (dataLineAttr !== null && +dataLineAttr !== lineIndex || $el.tagName === 'BR') bin.add($el);\n let i = $el.childElementCount;\n while (i--) filterLineElements(/** @type {HTMLElement} */($el.children[i]), lineIndex, bin);\n return bin;\n};\n\n/**\n * @param {'line'|'word'|'char'} type\n * @param {splitTemplateParams} params\n * @return {String}\n */\nconst generateTemplate = (type, params = {}) => {\n let template = ``;\n const classString = isStr(params.class) ? ` class=\"${params.class}\"` : '';\n const cloneType = setValue(params.clone, false);\n const wrapType = setValue(params.wrap, false);\n const overflow = wrapType ? wrapType === true ? 'clip' : wrapType : cloneType ? 'clip' : false;\n if (wrapType) template += `<span${overflow ? ` style=\"overflow:${overflow};\"` : ''}>`;\n template += `<span${classString}${cloneType ? ` style=\"position:relative;\"` : ''} data-${type}=\"{i}\">`;\n if (cloneType) {\n const left = cloneType === 'left' ? '-100%' : cloneType === 'right' ? '100%' : '0';\n const top = cloneType === 'top' ? '-100%' : cloneType === 'bottom' ? '100%' : '0';\n template += `<span>{value}</span>`;\n template += `<span inert style=\"position:absolute;top:${top};left:${left};white-space:nowrap;\">{value}</span>`;\n } else {\n template += `{value}`;\n }\n template += `</span>`;\n if (wrapType) template += `</span>`;\n return template;\n};\n\n/**\n * @param {String|SplitFunctionValue} htmlTemplate\n * @param {Array<HTMLElement>} store\n * @param {Node|HTMLElement} node\n * @param {DocumentFragment} $parentFragment\n * @param {'line'|'word'|'char'} type\n * @param {Boolean} debug\n * @param {Number} lineIndex\n * @param {Number} [wordIndex]\n * @param {Number} [charIndex]\n * @return {HTMLElement}\n */\nconst processHTMLTemplate = (htmlTemplate, store, node, $parentFragment, type, debug, lineIndex, wordIndex, charIndex) => {\n const isLine = type === lineType;\n const isChar = type === charType;\n const className = `_${type}_`;\n const template = isFnc(htmlTemplate) ? htmlTemplate(node) : htmlTemplate;\n const displayStyle = isLine ? 'block' : 'inline-block';\n $splitTemplate.innerHTML = template\n .replace(valueRgx, `<i class=\"${className}\"></i>`)\n .replace(indexRgx, `${isChar ? charIndex : isLine ? lineIndex : wordIndex}`);\n const $content = $splitTemplate.content;\n const $highestParent = /** @type {HTMLElement} */($content.firstElementChild);\n const $split = /** @type {HTMLElement} */($content.querySelector(`[data-${type}]`)) || $highestParent;\n const $replacables = /** @type {NodeListOf<HTMLElement>} */($content.querySelectorAll(`i.${className}`));\n const replacablesLength = $replacables.length;\n if (replacablesLength) {\n $highestParent.style.display = displayStyle;\n $split.style.display = displayStyle;\n $split.setAttribute(dataLine, `${lineIndex}`);\n if (!isLine) {\n $split.setAttribute('data-word', `${wordIndex}`);\n if (isChar) $split.setAttribute('data-char', `${charIndex}`);\n }\n let i = replacablesLength;\n while (i--) {\n const $replace = $replacables[i];\n const $closestParent = $replace.parentElement;\n $closestParent.style.display = displayStyle;\n if (isLine) {\n $closestParent.innerHTML = /** @type {HTMLElement} */(node).innerHTML;\n } else {\n $closestParent.replaceChild(node.cloneNode(true), $replace);\n }\n }\n store.push($split);\n $parentFragment.appendChild($content);\n } else {\n console.warn(`The expression \"{value}\" is missing from the provided template.`);\n }\n if (debug) $highestParent.style.outline = `1px dotted ${debugColors[type]}`;\n return $highestParent;\n};\n\n/**\n * A class that splits text into words and wraps them in span elements while preserving the original HTML structure.\n * @class\n */\nclass TextSplitter {\n /**\n * @param {HTMLElement|NodeList|String|Array<HTMLElement>} target\n * @param {TextSplitterParams} [parameters]\n */\n constructor(target, parameters = {}) {\n // Only init segmenters when needed\n if (!wordSegmenter) wordSegmenter = segmenter ? new segmenter([], { granularity: wordType }) : {\n segment: (text) => {\n const segments = [];\n const words = text.split(whiteSpaceGroupRgx);\n for (let i = 0, l = words.length; i < l; i++) {\n const segment = words[i];\n segments.push({\n segment,\n isWordLike: !whiteSpaceRgx.test(segment), // Consider non-whitespace as word-like\n });\n }\n return segments;\n }\n };\n if (!graphemeSegmenter) graphemeSegmenter = segmenter ? new segmenter([], { granularity: 'grapheme' }) : {\n segment: text => [...text].map(char => ({ segment: char }))\n };\n if (!$splitTemplate && isBrowser) $splitTemplate = doc.createElement('template');\n if (scope.current) scope.current.register(this);\n const { words, chars, lines, accessible, includeSpaces, debug } = parameters;\n const $target = /** @type {HTMLElement} */((target = isArr(target) ? target[0] : target) && /** @type {Node} */(target).nodeType ? target : (getNodeList(target) || [])[0]);\n const lineParams = lines === true ? {} : lines;\n const wordParams = words === true || isUnd(words) ? {} : words;\n const charParams = chars === true ? {} : chars;\n this.debug = setValue(debug, false);\n this.includeSpaces = setValue(includeSpaces, false);\n this.accessible = setValue(accessible, true);\n this.linesOnly = lineParams && (!wordParams && !charParams);\n /** @type {String|false|SplitFunctionValue} */\n this.lineTemplate = isObj(lineParams) ? generateTemplate(lineType, /** @type {splitTemplateParams} */(lineParams)) : lineParams;\n /** @type {String|false|SplitFunctionValue} */\n this.wordTemplate = isObj(wordParams) || this.linesOnly ? generateTemplate(wordType, /** @type {splitTemplateParams} */(wordParams)) : wordParams;\n /** @type {String|false|SplitFunctionValue} */\n this.charTemplate = isObj(charParams) ? generateTemplate(charType, /** @type {splitTemplateParams} */(charParams)) : charParams;\n this.$target = $target;\n this.html = $target && $target.innerHTML;\n this.lines = [];\n this.words = [];\n this.chars = [];\n this.effects = [];\n this.effectsCleanups = [];\n this.cache = null;\n this.ready = false;\n this.width = 0;\n this.resizeTimeout = null;\n const handleSplit = () => this.html && (lineParams || wordParams || charParams) && this.split();\n // Make sure this is declared before calling handleSplit() in case revert() is called inside an effect callback\n this.resizeObserver = new ResizeObserver(() => {\n // Use a setTimeout instead of a Timer for better tree shaking\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n const currentWidth = /** @type {HTMLElement} */($target).offsetWidth;\n if (currentWidth === this.width) return;\n this.width = currentWidth;\n handleSplit();\n }, 150);\n });\n // Only declare the font ready promise when splitting by lines and not alreay split\n if (this.lineTemplate && !this.ready) {\n doc.fonts.ready.then(handleSplit);\n } else {\n handleSplit();\n }\n $target ? this.resizeObserver.observe($target) : console.warn('No Text Splitter target found.');\n }\n\n /**\n * @param {(...args: any[]) => Tickable | (() => void)} effect\n * @return this\n */\n addEffect(effect) {\n if (!isFnc(effect)) return console.warn('Effect must return a function.');\n const refreshableEffect = createRefreshable(effect);\n this.effects.push(refreshableEffect);\n if (this.ready) this.effectsCleanups[this.effects.length - 1] = refreshableEffect(this);\n return this;\n }\n\n revert() {\n clearTimeout(this.resizeTimeout);\n this.lines.length = this.words.length = this.chars.length = 0;\n this.resizeObserver.disconnect();\n // Make sure to revert the effects after disconnecting the resizeObserver to avoid triggering it in the process\n this.effectsCleanups.forEach(cleanup => isFnc(cleanup) ? cleanup(this) : cleanup.revert && cleanup.revert());\n this.$target.innerHTML = this.html;\n return this;\n }\n\n /**\n * Recursively processes a node and its children\n * @param {Node} node\n */\n splitNode(node) {\n const wordTemplate = this.wordTemplate;\n const charTemplate = this.charTemplate;\n const includeSpaces = this.includeSpaces;\n const debug = this.debug;\n const nodeType = node.nodeType;\n if (nodeType === 3) {\n const nodeText = node.nodeValue;\n // If the nodeText is only whitespace, leave it as is\n if (nodeText.trim()) {\n const tempWords = [];\n const words = this.words;\n const chars = this.chars;\n const wordSegments = wordSegmenter.segment(nodeText);\n const $wordsFragment = doc.createDocumentFragment();\n let prevSeg = null;\n for (const wordSegment of wordSegments) {\n const segment = wordSegment.segment;\n const isWordLike = isSegmentWordLike(wordSegment);\n // Determine if this segment should be a new word, first segment always becomes a new word\n if (!prevSeg || (isWordLike && (prevSeg && (isSegmentWordLike(prevSeg))))) {\n tempWords.push(segment);\n } else {\n // Only concatenate if both current and previous are non-word-like and don't contain spaces\n const lastWordIndex = tempWords.length - 1;\n const lastWord = tempWords[lastWordIndex];\n if (!lastWord.includes(' ') && !segment.includes(' ')) {\n tempWords[lastWordIndex] += segment;\n } else {\n tempWords.push(segment);\n }\n }\n prevSeg = wordSegment;\n }\n\n for (let i = 0, l = tempWords.length; i < l; i++) {\n const word = tempWords[i];\n if (!word.trim()) {\n // Preserve whitespace only if includeSpaces is false and if the current space is not the first node\n if (i && includeSpaces) continue;\n $wordsFragment.appendChild(doc.createTextNode(word));\n } else {\n const nextWord = tempWords[i + 1];\n const hasWordFollowingSpace = includeSpaces && nextWord && !nextWord.trim();\n const wordToProcess = word;\n const charSegments = charTemplate ? graphemeSegmenter.segment(wordToProcess) : null;\n const $charsFragment = charTemplate ? doc.createDocumentFragment() : doc.createTextNode(hasWordFollowingSpace ? word + '\\xa0' : word);\n if (charTemplate) {\n const charSegmentsArray = [...charSegments];\n for (let j = 0, jl = charSegmentsArray.length; j < jl; j++) {\n const charSegment = charSegmentsArray[j];\n const isLastChar = j === jl - 1;\n // If this is the last character and includeSpaces is true with a following space, append the space\n const charText = isLastChar && hasWordFollowingSpace ? charSegment.segment + '\\xa0' : charSegment.segment;\n const $charNode = doc.createTextNode(charText);\n processHTMLTemplate(charTemplate, chars, $charNode, /** @type {DocumentFragment} */($charsFragment), charType, debug, -1, words.length, chars.length);\n }\n }\n if (wordTemplate) {\n processHTMLTemplate(wordTemplate, words, $charsFragment, $wordsFragment, wordType, debug, -1, words.length, chars.length);\n // Chars elements must be re-parsed in the split() method if both words and chars are parsed\n } else if (charTemplate) {\n $wordsFragment.appendChild($charsFragment);\n } else {\n $wordsFragment.appendChild(doc.createTextNode(word));\n }\n // Skip the next iteration if we included a space\n if (hasWordFollowingSpace) i++;\n }\n }\n node.parentNode.replaceChild($wordsFragment, node);\n }\n } else if (nodeType === 1) {\n // Converting to an array is necessary to work around childNodes pottential mutation\n const childNodes = /** @type {Array<Node>} */([.../** @type {*} */(node.childNodes)]);\n for (let i = 0, l = childNodes.length; i < l; i++) this.splitNode(childNodes[i]);\n }\n }\n\n /**\n * @param {Boolean} clearCache\n * @return {this}\n */\n split(clearCache = false) {\n const $el = this.$target;\n const isCached = !!this.cache && !clearCache;\n const lineTemplate = this.lineTemplate;\n const wordTemplate = this.wordTemplate;\n const charTemplate = this.charTemplate;\n const fontsReady = doc.fonts.status !== 'loading';\n const canSplitLines = lineTemplate && fontsReady;\n this.ready = !lineTemplate || fontsReady;\n if (canSplitLines || clearCache) {\n // No need to revert effects animations here since it's already taken care by the refreshable\n this.effectsCleanups.forEach(cleanup => isFnc(cleanup) && cleanup(this));\n }\n if (!isCached) {\n if (clearCache) {\n $el.innerHTML = this.html;\n this.words.length = this.chars.length = 0;\n }\n this.splitNode($el);\n this.cache = $el.innerHTML;\n }\n if (canSplitLines) {\n if (isCached) $el.innerHTML = this.cache;\n this.lines.length = 0;\n if (wordTemplate) this.words = getAllTopLevelElements($el, wordType);\n }\n // Always reparse characters after a line reset or if both words and chars are activated\n if (charTemplate && (canSplitLines || wordTemplate)) {\n this.chars = getAllTopLevelElements($el, charType);\n }\n // Words are used when lines only and prioritized over chars\n const elementsArray = this.words.length ? this.words : this.chars;\n let y, linesCount = 0;\n for (let i = 0, l = elementsArray.length; i < l; i++) {\n const $el = elementsArray[i];\n const { top, height } = $el.getBoundingClientRect();\n if (y && top - y > height * .5) linesCount++;\n $el.setAttribute(dataLine, `${linesCount}`);\n const nested = $el.querySelectorAll(`[${dataLine}]`);\n let c = nested.length;\n while (c--) nested[c].setAttribute(dataLine, `${linesCount}`);\n y = top;\n }\n if (canSplitLines) {\n const linesFragment = doc.createDocumentFragment();\n const parents = new Set();\n const clones = [];\n for (let lineIndex = 0; lineIndex < linesCount + 1; lineIndex++) {\n const $clone = /** @type {HTMLElement} */($el.cloneNode(true));\n filterLineElements($clone, lineIndex, new Set()).forEach($el => {\n const $parent = $el.parentElement;\n if ($parent) parents.add($parent);\n $el.remove();\n });\n clones.push($clone);\n }\n parents.forEach(filterEmptyElements);\n for (let cloneIndex = 0, clonesLength = clones.length; cloneIndex < clonesLength; cloneIndex++) {\n processHTMLTemplate(lineTemplate, this.lines, clones[cloneIndex], linesFragment, lineType, this.debug, cloneIndex);\n }\n $el.innerHTML = '';\n $el.appendChild(linesFragment);\n if (wordTemplate) this.words = getAllTopLevelElements($el, wordType);\n if (charTemplate) this.chars = getAllTopLevelElements($el, charType);\n }\n // Remove the word wrappers and clear the words array if lines split only\n if (this.linesOnly) {\n const words = this.words;\n let w = words.length;\n while (w--) {\n const $word = words[w];\n $word.replaceWith($word.textContent);\n }\n words.length = 0;\n }\n if (this.accessible && (canSplitLines || !isCached)) {\n const $accessible = doc.createElement('span');\n // Make the accessible element visually-hidden (https://www.scottohara.me/blog/2017/04/14/inclusively-hidden.html)\n $accessible.style.cssText = `position:absolute;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);width:1px;height:1px;white-space:nowrap;`;\n // $accessible.setAttribute('tabindex', '-1');\n $accessible.innerHTML = this.html;\n $el.insertBefore($accessible, $el.firstChild);\n this.lines.forEach(setAriaHidden);\n this.words.forEach(setAriaHidden);\n this.chars.forEach(setAriaHidden);\n }\n this.width = /** @type {HTMLElement} */($el).offsetWidth;\n if (canSplitLines || clearCache) {\n this.effects.forEach((effect, i) => this.effectsCleanups[i] = effect(this));\n }\n return this;\n }\n\n refresh() {\n this.split(true);\n }\n}\n\n/**\n * @param {HTMLElement|NodeList|String|Array<HTMLElement>} target\n * @param {TextSplitterParams} [parameters]\n * @return {TextSplitter}\n */\nconst split = (target, parameters) => new TextSplitter(target, parameters);\n\nconst text = {\n split,\n};\n\n\n\n\n/**\n * @overload\n * @param {Number} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n/**\n * @overload\n * @param {String} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n/**\n * @overload\n * @param {[Number, Number]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n/**\n * @overload\n * @param {[String, String]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n/**\n * @param {Number|String|[Number, Number]|[String, String]} val The staggered value or range\n * @param {StaggerParams} [params] The stagger parameters\n * @return {StaggerFunction<Number|String>}\n */\nconst stagger = (val, params = {}) => {\n let values = [];\n let maxValue = 0;\n const from = params.from;\n const reversed = params.reversed;\n const ease = params.ease;\n const hasEasing = !isUnd(ease);\n const hasSpring = hasEasing && !isUnd(/** @type {Spring} */(ease).ease);\n const staggerEase = hasSpring ? /** @type {Spring} */(ease).ease : hasEasing ? parseEasings(ease) : null;\n const grid = params.grid;\n const axis = params.axis;\n const customTotal = params.total;\n const fromFirst = isUnd(from) || from === 0 || from === 'first';\n const fromCenter = from === 'center';\n const fromLast = from === 'last';\n const fromRandom = from === 'random';\n const isRange = isArr(val);\n const useProp = params.use;\n const val1 = isRange ? parseNumber(val[0]) : parseNumber(val);\n const val2 = isRange ? parseNumber(val[1]) : 0;\n const unitMatch = unitsExecRgx.exec((isRange ? val[1] : val) + emptyString);\n const start = params.start || 0 + (isRange ? val1 : 0);\n let fromIndex = fromFirst ? 0 : isNum(from) ? from : 0;\n return (target, i, t, tl) => {\n const [ registeredTarget ] = registerTargets(target);\n const total = isUnd(customTotal) ? t : customTotal;\n const customIndex = !isUnd(useProp) ? isFnc(useProp) ? useProp(registeredTarget, i, total) : getOriginalAnimatableValue(registeredTarget, useProp) : false;\n const staggerIndex = isNum(customIndex) || isStr(customIndex) && isNum(+customIndex) ? +customIndex : i;\n if (fromCenter) fromIndex = (total - 1) / 2;\n if (fromLast) fromIndex = total - 1;\n if (!values.length) {\n for (let index = 0; index < total; index++) {\n if (!grid) {\n values.push(abs(fromIndex - index));\n } else {\n const fromX = !fromCenter ? fromIndex % grid[0] : (grid[0] - 1) / 2;\n const fromY = !fromCenter ? floor(fromIndex / grid[0]) : (grid[1] - 1) / 2;\n const toX = index % grid[0];\n const toY = floor(index / grid[0]);\n const distanceX = fromX - toX;\n const distanceY = fromY - toY;\n let value = sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') value = -distanceX;\n if (axis === 'y') value = -distanceY;\n values.push(value);\n }\n maxValue = max(...values);\n }\n if (staggerEase) values = values.map(val => staggerEase(val / maxValue) * maxValue);\n if (reversed) values = values.map(val => axis ? (val < 0) ? val * -1 : -val : abs(maxValue - val));\n if (fromRandom) values = shuffle(values);\n }\n const spacing = isRange ? (val2 - val1) / maxValue : val1;\n const offset = tl ? parseTimelinePosition(tl, isUnd(params.start) ? tl.iterationDuration : start) : /** @type {Number} */(start);\n /** @type {String|Number} */\n let output = offset + ((spacing * round(values[staggerIndex], 2)) || 0);\n if (params.modifier) output = params.modifier(output);\n if (unitMatch) output = `${output}${unitMatch[2]}`;\n return output;\n }\n};\n\nexport { Animatable, Draggable, JSAnimation, Scope, ScrollObserver, Spring, TextSplitter, Timeline, Timer, WAAPIAnimation, animate, createAnimatable, createDraggable, createScope, createSpring, createTimeline, createTimer, eases, engine, onScroll, scrollContainers, stagger, svg, text, utils, waapi };\n","import { animate, stagger, text } from \"animejs\";\n\nexport class Animation {\n animations: {[name: string]: (el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) => void} = {};\n linkAnimations = new Map<HTMLElement, () => void>();\n\n registerAnimation(name: string, handler: (el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) => void) {\n this.animations[name] = handler;\n }\n\n runAnimation(name: string, el: HTMLElement, params: Record<string, any>, onComplete: () => void, loop: boolean) {\n const animation = this.animations[name];\n if (animation) {\n animation(el, params, onComplete, loop);\n } else {\n console.warn(`No animation registered with name: ${name}`);\n onComplete();\n }\n }\n\n addLinkAnimation(link: HTMLElement, fn: () => void) {\n this.linkAnimations.set(link, fn);\n }\n\n runLinkAnimation(link: HTMLElement) {\n const fn = this.linkAnimations.get(link);\n if (fn) {\n fn();\n }\n }\n\n constructor() {\n this.registerAnimation(\"typewriter\", function(el, params, onComplete, loop) {\n const { chars } = text.split(el, { words: false, chars: true });\n\n const fadeDuration = params.fadeDuration || 100; // ms fade-in per character\n const interval = params.interval || 100; // ms between each character appearing\n\n animate(chars, {\n opacity: [0, 1],\n easing: \"linear\",\n duration: fadeDuration,\n delay: stagger(interval, { start: params.start || 0 }),\n loop: loop,\n onComplete: onComplete\n });\n });\n\n this.registerAnimation(\"toast\", function(el, params, onComplete, loop) {\n const { words } = text.split(el, { words: true, chars: false });\n\n const fadeDuration = params.fadeDuration || 100; // ms fade-in per word\n const interval = params.interval || 200; // ms between each word appearing\n\n animate(words, {\n opacity: [0, 1],\n y: [\n { to: [\"100%\", \"0%\"] },\n ],\n easing: \"linear\",\n duration: fadeDuration,\n delay: stagger(interval, { start: params.start || 0 }),\n loop: loop,\n onComplete: onComplete\n });\n });\n }\n}","import * as animejs from \"animejs\";\n\nexport const imports = {\n animejs\n};","import { SquiffyApi, SquiffyInitOptions, Story, Section, Passage } from \"./types.js\";\nimport { TextProcessor } from \"./textProcessor.js\";\nimport { Emitter, SquiffyEventMap } from \"./events.js\";\nimport { State } from \"./state.js\";\nimport { updateStory } from \"./updater.js\";\nimport { PluginManager } from \"./pluginManager.js\";\nimport { Plugins } from \"./plugins/index.js\";\nimport { LinkHandler } from \"./linkHandler.js\";\nimport { Animation } from \"./animation.js\";\nimport { imports } from \"./import.js\";\n\nexport type { SquiffyApi } from \"./types.js\";\n\nexport const init = async (options: SquiffyInitOptions): Promise<SquiffyApi> => {\n let story: Story;\n let currentSection: Section;\n let currentSectionElement: HTMLElement;\n let currentPassageElement: HTMLElement;\n let currentBlockOutputElement: HTMLElement;\n let scrollPosition = 0;\n const emitter = new Emitter<SquiffyEventMap>();\n const transitions: (() => Promise<void>)[] = [];\n let runningTransitions = false;\n \n async function handleLink(link: HTMLElement): Promise<boolean> {\n if (runningTransitions) return false;\n const outputSection = link.closest(\".squiffy-output-section\");\n if (outputSection !== currentSectionElement) return false;\n\n if (link.classList.contains(\"disabled\")) return false;\n\n const passage = link.getAttribute(\"data-passage\");\n const section = link.getAttribute(\"data-section\");\n\n if (passage !== null) {\n disableLink(link);\n set(\"_turncount\", get(\"_turncount\") + 1);\n await processLink(link);\n if (passage) {\n currentBlockOutputElement = null;\n await showPassage(passage);\n }\n const turnPassage = \"@\" + get(\"_turncount\");\n if (currentSection.passages) {\n if (turnPassage in currentSection.passages) {\n await showPassage(turnPassage);\n }\n if (\"@last\" in currentSection.passages && get(\"_turncount\") >= (currentSection.passageCount || 0)) {\n await showPassage(\"@last\");\n }\n }\n\n emitter.emit(\"linkClick\", { linkType: \"passage\" });\n return true;\n }\n \n if (section !== null) {\n await processLink(link);\n if (section) {\n await go(section);\n }\n\n emitter.emit(\"linkClick\", { linkType: \"section\" });\n return true;\n }\n\n const [handled, type, result] = linkHandler.handleLink(link);\n \n if (handled) {\n if (result?.disableLink) {\n disableLink(link);\n }\n\n save();\n\n emitter.emit(\"linkClick\", { linkType: type });\n return true;\n }\n\n return false;\n }\n\n async function handleClick(event: Event) {\n const target = event.target as HTMLElement;\n if (target.classList.contains(\"squiffy-link\")) {\n await handleLink(target);\n }\n }\n \n function disableLink(link: Element) {\n link.classList.add(\"disabled\");\n link.setAttribute(\"tabindex\", \"-1\");\n }\n\n function enableLink(link: Element) {\n link.classList.remove(\"disabled\");\n link.removeAttribute(\"tabindex\");\n }\n \n async function begin() {\n if (!load()) {\n await go(story.start);\n }\n }\n \n async function processLink(link: HTMLElement) {\n animation.runLinkAnimation(link);\n await runTransitions();\n const settersJson = link.getAttribute(\"data-set\");\n if (settersJson) {\n const setters = JSON.parse(settersJson) as string[];\n for (const attribute of setters) {\n setAttribute(attribute);\n }\n }\n }\n \n function setAttribute(expr: string) {\n expr = expr.replace(/^(\\w*\\s*):=(.*)$/, (_, name, value) => (name + \"=\" + ui.processText(value, true)));\n const setRegex = /^([\\w]*)\\s*=\\s*(.*)$/;\n const setMatch = setRegex.exec(expr);\n if (setMatch) {\n const lhs = setMatch[1];\n let rhs = setMatch[2];\n if (isNaN(rhs as any)) {\n if (rhs.startsWith(\"@\")) rhs = get(rhs.substring(1));\n set(lhs, rhs);\n }\n else {\n set(lhs, parseFloat(rhs));\n }\n }\n else {\n const incDecRegex = /^([\\w]*)\\s*([+\\-*/])=\\s*(.*)$/;\n const incDecMatch = incDecRegex.exec(expr);\n if (incDecMatch) {\n const lhs = incDecMatch[1];\n const op = incDecMatch[2];\n let rhs = incDecMatch[3];\n if (rhs.startsWith(\"@\")) rhs = get(rhs.substring(1));\n const rhsNumeric = parseFloat(rhs);\n let value = get(lhs);\n if (value === null) value = 0;\n if (op == \"+\") {\n value += rhsNumeric;\n }\n if (op == \"-\") {\n value -= rhsNumeric;\n }\n if (op == \"*\") {\n value *= rhsNumeric;\n }\n if (op == \"/\") {\n value /= rhsNumeric;\n }\n set(lhs, value);\n }\n else {\n let value = true;\n if (expr.startsWith(\"not \")) {\n expr = expr.substring(4);\n value = false;\n }\n set(expr, value);\n }\n }\n }\n\n async function go(sectionName: string) {\n const oldCanGoBack = canGoBack();\n newSection(sectionName);\n currentSection = story.sections[sectionName];\n if (!currentSection) return;\n set(\"_section\", sectionName);\n state.setSeen(sectionName);\n const master = story.sections[\"\"];\n if (master?.clear || currentSection.clear) {\n clearScreen();\n }\n if (master) {\n await run(master, \"[[]]\");\n }\n await run(currentSection, `[[${sectionName}]]`);\n // The JS might have changed which section we're in\n if (get(\"_section\") == sectionName) {\n set(\"_turncount\", 0);\n writeUndoLog();\n save();\n }\n const newCanGoBack = canGoBack();\n if (newCanGoBack != oldCanGoBack) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: newCanGoBack });\n }\n }\n\n function runJs(index: number, extra: any = null) {\n const squiffy = {\n get: get,\n set: set,\n ui: {\n transition: addTransition,\n write: ui.write,\n scrollToEnd: ui.scrollToEnd,\n },\n story: {\n go: go,\n },\n element: outputElementContainer,\n import: imports,\n ...extra\n };\n story.js[index](squiffy, get, set);\n }\n \n async function run(section: Section, source: string) {\n if (section.attributes) {\n await processAttributes(section.attributes);\n }\n if (section.jsIndex !== undefined) {\n runJs(section.jsIndex);\n }\n\n ui.write(section.text || \"\", source);\n\n await runTransitions();\n }\n\n async function runTransitions() {\n runningTransitions = true;\n currentSectionElement.classList.add(\"links-disabled\");\n for (const transition of transitions) {\n await transition();\n }\n transitions.length = 0;\n runningTransitions = false;\n currentSectionElement.classList.remove(\"links-disabled\");\n }\n \n async function showPassage(passageName: string) {\n const oldCanGoBack = canGoBack();\n let passage = currentSection.passages && currentSection.passages[passageName];\n const masterSection = story.sections[\"\"];\n if (!passage && masterSection && masterSection.passages) passage = masterSection.passages[passageName];\n if (!passage) {\n throw `No passage named ${passageName} in the current section or master section`;\n }\n state.setSeen(passageName);\n\n const passages: Passage[] = [];\n const runFns: (() => Promise<void>)[] = [];\n\n if (masterSection && masterSection.passages) {\n const masterPassage = masterSection.passages[\"\"];\n if (masterPassage) {\n passages.push(masterPassage);\n runFns.push(() => run(masterPassage, \"[[]][]\"));\n }\n }\n\n const master = currentSection.passages && currentSection.passages[\"\"];\n if (master) {\n passages.push(master);\n runFns.push(() => run(master, `[[${get(\"_section\")}]][]`));\n }\n\n passages.push(passage);\n runFns.push(() => run(passage, `[[${get(\"_section\")}]][${passageName}]`));\n\n if (passages.some(p => p.clear)) {\n clearScreen();\n createSectionElement();\n }\n\n currentPassageElement = document.createElement(\"div\");\n currentPassageElement.classList.add(\"squiffy-output-passage\");\n currentPassageElement.setAttribute(\"data-passage\", `${passageName}`);\n\n currentSectionElement.appendChild(currentPassageElement);\n currentBlockOutputElement = null;\n\n for (const fn of runFns) {\n await fn();\n }\n\n writeUndoLog();\n save();\n const newCanGoBack = canGoBack();\n if (newCanGoBack != oldCanGoBack) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: newCanGoBack });\n }\n }\n \n async function processAttributes(attributes: string[]) {\n for (const attribute of attributes) {\n setAttribute(attribute);\n }\n }\n \n function restart() {\n state.reset();\n // TODO: This feels like the wrong way of triggering location.reload()\n // - should be a separate setting to the scroll setting.\n if (settings.scroll === \"element\" || settings.scroll === \"none\") {\n outputElement.innerHTML = \"\";\n begin();\n }\n else {\n location.reload();\n }\n }\n \n function save() {\n // TODO: Queue up all attribute changes and save them only when this is called\n set(\"_output\", outputElement.innerHTML);\n }\n \n function load() {\n const runUiJs = () => {\n if (story.uiJsIndex !== undefined) {\n runJs(story.uiJsIndex, {\n registerAnimation: animation.registerAnimation.bind(animation),\n });\n }\n };\n\n state.load();\n const output = get(\"_output\");\n if (!output) {\n runUiJs();\n return false;\n }\n\n outputElement.innerHTML = output;\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n currentBlockOutputElement = outputElement.querySelector(\".squiffy-output-block:last-child\");\n\n currentSection = story.sections[get(\"_section\")];\n runUiJs();\n pluginManager.onLoad();\n return true;\n }\n\n function newBlockOutputElement() {\n currentBlockOutputElement = document.createElement(\"div\");\n currentBlockOutputElement.classList.add(\"squiffy-output-block\");\n (currentPassageElement || currentSectionElement)?.appendChild(currentBlockOutputElement);\n }\n \n function newSection(sectionName?: string) {\n if (currentSectionElement) {\n currentSectionElement.querySelectorAll(\"input\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.value);\n el.disabled = true;\n });\n \n currentSectionElement.querySelectorAll(\"[contenteditable]\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.innerHTML);\n (el as HTMLElement).contentEditable = \"false\";\n });\n \n currentSectionElement.querySelectorAll(\"textarea\").forEach(el => {\n const attribute = el.getAttribute(\"data-attribute\") || el.id;\n if (attribute) set(attribute, el.value);\n el.disabled = true;\n });\n }\n\n currentPassageElement = null;\n createSectionElement(sectionName);\n newBlockOutputElement();\n }\n\n function createSectionElement(sectionName?: string) {\n currentSectionElement = document.createElement(\"div\");\n currentSectionElement.classList.add(\"squiffy-output-section\");\n currentSectionElement.setAttribute(\"data-section\", sectionName ?? get(\"_section\"));\n if (!sectionName) {\n currentSectionElement.setAttribute(\"data-clear\", \"true\");\n }\n outputElement.appendChild(currentSectionElement);\n }\n\n function getClearStack() {\n return outputElement.querySelector<HTMLElement>(\".squiffy-clear-stack\");\n }\n\n function clearScreen() {\n // Callers should call createSectionElement() after calling this function, so there's a place for new\n // output to go. We don't call this automatically within this function, in case we're just about to create\n // a new section anyway.\n let clearStack = getClearStack();\n if (!clearStack) {\n clearStack = document.createElement(\"div\");\n clearStack.classList.add(\"squiffy-clear-stack\");\n clearStack.style.display = \"none\";\n outputElement.prepend(clearStack);\n }\n\n const clearStackItem = document.createElement(\"div\");\n clearStack.appendChild(clearStackItem);\n\n // Move everything in the outputElement (except the clearStack itself) into the new clearStackItem\n for (const child of [...outputElement.children]) {\n if (child !== clearStack) {\n clearStackItem.appendChild(child);\n }\n }\n\n // NOTE: If we offer an option to disable the \"back\" feature, all of the above can be replaced with:\n // outputElement.innerHTML = '';\n }\n\n function unClearScreen() {\n const clearStack = getClearStack();\n for (const child of [...outputElement.children]) {\n if (child !== clearStack) {\n child.remove();\n }\n }\n\n const clearStackItem = clearStack.children[clearStack.children.length - 1];\n for (const child of [...clearStackItem.children]) {\n outputElement.appendChild(child);\n }\n clearStackItem.remove();\n }\n \n const ui = {\n write: (text: string, source: string) => {\n scrollPosition = outputElement.scrollHeight;\n\n const html = ui.processText(text, false).trim();\n\n // Previously, we skipped the rest of this if \"html\" came back as an empty string.\n // But, we _do_ always want the block to be created, in the editor at least - as the\n // author might be in the middle of an edit. When they start writing text for this\n // source (section or passage), we want it to appear in the right place.\n // TODO: What if this comes from a master section/passage though, and there's no\n // text (just a script)? Or if there's conditional text that doesn't display?\n\n if (!currentBlockOutputElement) {\n newBlockOutputElement();\n }\n\n const div = document.createElement(\"div\");\n if (source) {\n div.setAttribute(\"data-source\", source);\n }\n\n div.innerHTML = html;\n pluginManager.onWrite(div);\n currentBlockOutputElement.appendChild(div);\n ui.scrollToEnd();\n },\n clearScreen: () => {\n clearScreen();\n createSectionElement();\n },\n scrollToEnd: () => {\n if (settings.scroll === \"none\") {\n // do nothing\n }\n else if (settings.scroll === \"element\") {\n outputElement.lastElementChild.scrollIntoView({ block: \"end\", inline: \"nearest\", behavior: \"smooth\" });\n }\n else {\n let scrollTo = scrollPosition;\n const currentScrollTop = Math.max(document.body.scrollTop, document.documentElement.scrollTop);\n if (scrollTo > currentScrollTop) {\n const maxScrollTop = document.documentElement.scrollHeight - window.innerHeight;\n if (scrollTo > maxScrollTop) scrollTo = maxScrollTop;\n window.scrollTo({ top: scrollTo, behavior: \"smooth\" });\n }\n }\n },\n processText: (text: string, inline: boolean) => {\n return textProcessor.process(text, inline);\n },\n };\n\n function update(newStory: Story) {\n if (newStory.start != story.start) {\n story = newStory;\n state.reset();\n outputElement.innerHTML = \"\";\n go(story.start);\n return;\n }\n\n updateStory(story, newStory, outputElement, ui, disableLink);\n\n story = newStory;\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n }\n\n function setCurrentSectionElement() {\n // Multiple .squiffy-output-section elements may be \"last-child\" if some have been moved to the clear-stack,\n // so we want the very last one\n const allSectionElements = outputElement.querySelectorAll<HTMLElement>(\".squiffy-output-section:last-child\");\n currentSectionElement = allSectionElements[allSectionElements.length - 1];\n const sectionName = currentSectionElement.getAttribute(\"data-section\");\n currentSection = story.sections[sectionName];\n }\n\n function setCurrentPassageElement() {\n currentPassageElement = currentSectionElement.querySelector(\".squiffy-output-passage:last-child\");\n }\n\n function getHistoryCount() {\n const clearStack = getClearStack();\n const sectionPassageCount = outputElement.querySelectorAll(\".squiffy-output-section\").length\n + outputElement.querySelectorAll(\".squiffy-output-passage\").length;\n\n if (!clearStack) {\n return sectionPassageCount;\n }\n\n return sectionPassageCount + clearStack.children.length;\n }\n\n function canGoBack() {\n return getHistoryCount() > 1;\n }\n\n function goBack() {\n if (!canGoBack()) {\n return;\n }\n\n const clearStack = getClearStack();\n\n if (currentPassageElement) {\n const currentPassage = currentPassageElement.getAttribute(\"data-passage\");\n doUndo(currentPassageElement.getAttribute(\"data-undo\"));\n currentPassageElement.remove();\n\n // If there's nothing left in the outputElement except for an empty section element that\n // was created when the screen was cleared, pop the clear-stack.\n\n let hasEmptySection = false;\n let hasOtherElements = false;\n for (const child of outputElement.children) {\n if (child === clearStack) {\n continue;\n }\n if (child.getAttribute(\"data-clear\") == \"true\" && child.children.length == 0) {\n hasEmptySection = true;\n continue;\n }\n hasOtherElements = true;\n break;\n }\n\n if (hasEmptySection && !hasOtherElements) {\n unClearScreen();\n setCurrentSectionElement();\n }\n\n for (const link of currentSectionElement.querySelectorAll(\"a.squiffy-link[data-passage]\")) {\n if (link.getAttribute(\"data-passage\") == currentPassage) {\n enableLink(link);\n }\n }\n\n setCurrentPassageElement();\n }\n else {\n doUndo(currentSectionElement.getAttribute(\"data-undo\"));\n currentSectionElement.remove();\n\n // If there's nothing left in the outputElement except for the clear-stack, pop it\n let hasOtherElements = false;\n for (const child of [...outputElement.children]) {\n if (child === clearStack) {\n continue;\n }\n hasOtherElements = true;\n break;\n }\n\n if (!hasOtherElements) {\n unClearScreen();\n }\n\n setCurrentSectionElement();\n setCurrentPassageElement();\n }\n\n if (!canGoBack()) {\n emitter.emit(\"canGoBackChanged\", { canGoBack: false });\n }\n }\n\n // We create a separate div inside the passed-in element. This allows us to clear the text output, but\n // without affecting any overlays that may have been added to the container (for transitions).\n const outputElementContainer = options.element;\n const outputElement = document.createElement(\"div\");\n outputElementContainer.appendChild(outputElement);\n story = options.story;\n\n const settings = {\n scroll: options.scroll || \"body\",\n persist: (options.persist === undefined) ? true : options.persist,\n onSet: options.onSet || (() => {})\n };\n\n if (options.persist === true && !story.id) {\n console.warn(\"Persist is set to true in Squiffy runtime options, but no story id has been set. Persist will be disabled.\");\n settings.persist = false;\n }\n\n if (settings.scroll === \"element\") {\n outputElement.style.overflowY = \"auto\";\n }\n\n outputElement.addEventListener(\"click\", handleClick);\n outputElement.addEventListener(\"keypress\", async function (event) {\n if (event.key !== \"Enter\") return;\n await handleClick(event);\n });\n\n let undoLog: Record<string, any> = {};\n\n const onSet = function(attribute: string, oldValue: any) {\n if (attribute == \"_output\") return;\n if (attribute in undoLog) return;\n undoLog[attribute] = oldValue;\n };\n\n const writeUndoLog = function() {\n (currentPassageElement ?? currentSectionElement).setAttribute(\"data-undo\", JSON.stringify(undoLog));\n undoLog = {};\n };\n\n const doUndo = function(undosJson: string | null) {\n if (!undosJson) return;\n const undos = JSON.parse(undosJson) as Record<string, any>;\n if (!undos) return;\n for (const attribute of Object.keys(undos)) {\n state.setInternal(attribute, undos[attribute], false);\n }\n };\n\n const state = new State(settings.persist, story.id || \"\", settings.onSet, emitter, onSet);\n const get = state.get.bind(state);\n const set = state.set.bind(state);\n\n const textProcessor = new TextProcessor(story, state, () => currentSection);\n const linkHandler = new LinkHandler();\n\n const getSectionText = (sectionName: string) => {\n if (sectionName in story.sections) {\n return story.sections[sectionName].text || null;\n }\n return null;\n };\n\n const getPassageText = (name: string) => {\n if (currentSection.passages && name in currentSection.passages) {\n return currentSection.passages[name].text || null;\n } else if (\"passages\" in story.sections[\"\"] && story.sections[\"\"].passages && name in story.sections[\"\"].passages) {\n return story.sections[\"\"].passages![name].text || null;\n }\n return null;\n };\n\n const addTransition = (fn: () => Promise<void>) => {\n transitions.push(fn);\n };\n\n const animation = new Animation();\n\n const pluginManager = new PluginManager(outputElement, textProcessor, state, linkHandler,\n getSectionText, getPassageText, ui.processText, addTransition, animation, emitter);\n pluginManager.add(Plugins.ReplaceLabel());\n pluginManager.add(Plugins.RotateSequencePlugin());\n pluginManager.add(Plugins.RandomPlugin());\n pluginManager.add(Plugins.LivePlugin());\n pluginManager.add(Plugins.AnimatePlugin());\n\n return {\n begin: begin,\n restart: restart,\n get: get,\n set: set,\n clickLink: handleLink,\n update: update,\n goBack: goBack,\n on: (e, h) => emitter.on(e, h),\n off: (e, h) => emitter.off(e, h),\n once: (e, h) => emitter.once(e, h),\n };\n};"],"names":["L","O","G","l","E","h","s","m","xe","be","Re","C","Oe","j","se","ie","Te","F","we","Q","ye","Pe","v","U","Se","oe","$e","K","re","_e","Le","Me","ze","ae","Ae","D","W","le","Ee","ue","Ce","Ie","Be","pe","qe","ve","ce","De","He","Ze","Ge","Ne","je","Fe","q","Qe","he","de","Ue","X","Ke","N","We","I","M","Xe","ke","w","J","V","o","a","u","z","ge","fe","Je","y","e","__publicField","t","n","r","i","c","f","k","x","g","T","H","ee","te","ne","me","Z","A","Y","p","b","P","$","R","_a","S","B","_","d","Nt","jt","utils","extend","indexOf","escapeExpression","isEmpty","createFrame","blockParams","appendContextPath","escape","badChars","possible","escapeChar","chr","obj","key","toString","isFunction","value","isArray","array","len","string","object","frame","params","ids","contextPath","id","exports","errorProps","Exception","message","node","loc","line","endLineNumber","column","endColumn","tmp","idx","module","_utils","require$$0","instance","context","options","inverse","fn","data","_interopRequireDefault","_exception","require$$1","_exception2","ret","execIteration","field","index","last","newContext","iterator","it","priorKey","conditional","args","level","helpers","registerDefaultHelpers","moveHelperToHooks","_helpersBlockHelperMissing","_helpersBlockHelperMissing2","_helpersEach","_helpersEach2","_helpersHelperMissing","require$$2","_helpersHelperMissing2","_helpersIf","require$$3","_helpersIf2","_helpersLog","require$$4","_helpersLog2","_helpersLookup","require$$5","_helpersLookup2","_helpersWith","require$$6","_helpersWith2","helperName","keepHelper","props","container","original","decorators","registerDefaultDecorators","_decoratorsInline","_decoratorsInline2","logger","levelMap","method","_len","_key","createNewLookupObject_1","createNewLookupObject","sources","protoAccess","createProtoAccessControl","resultIsAllowed","resetLoggedProperties","_createNewLookupObject","_logger","_logger2","loggedProperties","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","result","protoAccessControl","propertyName","checkWhiteList","protoAccessControlForType","logUnexpecedPropertyAccessOnce","base","HandlebarsEnvironment","_helpers","_decorators","_internalProtoAccess","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","partials","name","partial","log","SafeString","wrapHelper_1","wrapHelper","helper","transformOptionsFn","wrapper","runtime","checkRevision","template","wrapProgram","resolvePartial","invokePartial","noop","_interopRequireWildcard","newObj","Utils","_base","_internalWrapHelper","compilerInfo","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateSpec","env","templateWasPrecompiledWithCompilerV7","invokePartialWrapper","extendedOptions","lines","parent","depths","current","declaredBlockParams","programWrapper","depth","param","common","initData","main","executeDecorators","mergedHelpers","wrapHelpersToPassLookupProperty","keepHelperInHelpers","prog","currentDepths","currentPartialBlock","partialBlock","passLookupPropertyOption","lookupProperty","Handlebars","$Handlebars","_handlebarsBase","_handlebarsSafeString","_handlebarsSafeString2","_handlebarsException","_handlebarsException2","_handlebarsUtils","_handlebarsRuntime","_handlebarsNoConflict","_handlebarsNoConflict2","create","hb","spec","inst","AST","path","handlebars","parser","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","program","str","hash","input","self","stack","vstack","lstack","table","yyloc","ranges","lex","token","symbol","state","action","yyval","newState","expected","errStr","lexer","ch","oldLines","past","next","pre","match","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","strip","start","end","Parser","Visitor","visitSubExpression","visitBlock","visitPartial","pair","mustache","block","_visitor","_visitor2","WhitespaceControl","doStandalone","isRoot","body","_isPrevWhitespace","isPrevWhitespace","_isNextWhitespace","isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","omitRight","omitLeft","firstInverse","lastInverse","inverseStrip","prev","sibling","multiple","SourceLocation","stripFlags","stripComment","preparePath","prepareMustache","prepareRawBlock","prepareBlock","prepareProgram","preparePartialBlock","validateClose","open","close","errorNode","source","locInfo","comment","parts","dig","part","isLiteral","escapeFlag","escaped","decorator","openRawBlock","contents","openBlock","inverseAndProgram","inverted","statements","firstLoc","lastLoc","parseWithoutProcessing","parse","_parser","_parser2","_whitespaceControl","_whitespaceControl2","Helpers","ast","compiler","Compiler","precompile","compile","_ast","_ast2","slice","other","opcode","otherOpcode","argEquals","childCompiler","guid","bodyLength","transformLiteralToPath","type","partialName","isDynamic","indent","content","sexpr","isBlock","scoped","blockParamId","number","bool","pairs","isSimple","isBlockParam","isHelper","isEligible","_name","val","blockParamIndex","blockParamChild","omitEmpty","environment","compiled","compileInput","execOptions","setupOptions","literal","intToCharMap","base64","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64Vlq","encoded","digit","vlq","aStr","aIndex","aOutParam","strLen","shift","continuation","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","urlGenerate","aParsedUrl","url","normalize","aPath","isAbsolute","up","join","aRoot","aPathUrl","aRootUrl","joined","relative","supportsNullProto","identity","toSetString","isProtoString","fromSetString","length","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","compareByGeneratedPositionsInflated","parseSourceMapInput","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","parsed","util","has","hasNativeMap","ArraySet","aArray","aAllowDuplicates","set","sStr","isDuplicate","aIdx","arraySet","generatedPositionAfter","lineA","lineB","columnA","columnB","MappingList","aCallback","aThisArg","aMapping","mappingList","base64VLQ","SourceMapGenerator","aSourceMapConsumer","generator","mapping","newMapping","sourceFile","sourceRelative","generated","aSourceFile","aSourceContent","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","aSource","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","nameIdx","sourceIdx","mappings","aSources","aSourceRoot","map","sourceMapGenerator","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","swap","ary","temp","randomIntInRange","low","high","doQuickSort","comparator","pivotIndex","pivot","quickSort","binarySearch","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","IndexedSourceMapConsumer","BasicSourceMapConsumer","aContext","aOrder","order","needle","originalLine","originalColumn","sourceMapConsumer","version","names","sourcesContent","file","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","Mapping","generatedLine","cachedSegments","originalMappings","segment","aMappings","aLineName","aColumnName","aComparator","nextMapping","sc","nullOnMissing","fileUriAbsPath","sections","lastOffset","offset","offsetLine","offsetColumn","sectionIndex","section","generatedPosition","sectionMappings","adjustedMapping","REGEX_NEWLINE","NEWLINE_CODE","isSourceNode","SourceNode","aLine","aColumn","aChunks","aGeneratedCode","aRelativePath","remainingLines","remainingLinesIndex","shiftNextLine","lineContents","getNextLine","newLine","lastGeneratedLine","lastGeneratedColumn","lastMapping","addMappingWithCode","nextLine","code","aChunk","chunk","aFn","aSep","newChildren","aPattern","aReplacement","lastChild","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","sourceNode","SourceMap","srcFile","chunks","castChunk","codeGen","CodeGen","iter","_this","entries","_codeGen","_codeGen2","Literal","JavaScriptCompiler","revision","versions","location","explicit","asObject","opcodes","_context","programs","varDeclarations","locals","aliasCount","alias","appendOnly","appendFirst","sourceSeen","bufferStart","bufferEnd","blockHelperMissing","blockName","local","falsy","strict","_this2","strictLookup","lookup","paramSize","foundDecorator","nonHelper","possibleFunctionCalls","functionLookupCode","functionCall","items","separator","helperCall","child","children","existing","programParams","expr","item","callback","prefix","createdStack","usedLiteral","top","inlineStack","entry","wrapped","inline","blockHelper","paramsInit","foundHelper","callContext","contexts","types","objectArgs","useRegister","reservedWords","compilerWords","requireTerminal","_handlebarsRuntime2","_handlebarsCompilerAst","_handlebarsCompilerAst2","_handlebarsCompilerBase","_handlebarsCompilerCompiler","_handlebarsCompilerJavascriptCompiler","_handlebarsCompilerJavascriptCompiler2","_handlebarsCompilerVisitor","_handlebarsCompilerVisitor2","_create","TextProcessor","story","currentSection","attribute","addAdditionalParameters","setters","text","passage","marked.parseInline","marked.parse","Emitter","event","handler","off","payload","err","State","persist","storyId","onSet","emitter","onSetInternal","raiseEvents","keys","sectionName","seenSections","updateStory","oldStory","newStory","outputElement","ui","disableLink","safeQuerySelector","getSectionContent","getPassageContent","updateElementTextPreservingDisabledPassageLinks","element","disabledPassages","el","link","existingSection","elements","newSection","existingPassage","newPassage","PluginManager","textProcessor","linkHandler","getSectionText","getPassageText","processText","addTransition","animation","plugin","fadeReplace","resolve","ReplaceLabel","squiffy","RotateSequencePlugin","rotateSequence","stringItems","rotation","rotate","optionsString","handleLink","isRotate","rotateResult","remaining","RandomPlugin","randomIndex","LivePlugin","sq","promises","selector","oldContent","newContent","sectionText","passageText","setQueue","AnimatePlugin","parseDataset","dataset","setupAnimations","runAnimation","currentContent","links","attrs","Plugins","LinkHandler","isBrowser","win","doc","tweenTypes","valueTypes","tickModes","compositionTypes","isRegisteredTargetSymbol","isDomSymbol","isSvgSymbol","transformsSymbol","morphPointsSymbol","proxyTargetSymbol","minValue","maxValue","maxFps","emptyString","shortTransforms","validTransforms","transformsFragmentStrings","hexTestRgx","rgbExecRgx","rgbaExecRgx","hslExecRgx","hslaExecRgx","digitWithExponentRgx","unitsExecRgx","lowerCaseRgx","transformsExecRgx","relativeValuesExecRgx","defaults","scope","globals","globalVersions","toLowerCase","stringStartsWith","sub","now","isArr","isObj","isNum","isStr","isFnc","isUnd","isNil","isSvg","isHex","isRgb","isHsl","isCol","isKey","parseNumber","pow","sqrt","sin","cos","abs","exp","ceil","floor","asin","max","atan2","PI","_round","clamp","min","powCache","round","decimalLength","snap","increment","closest","cv","interpolate","progress","random","shuffle","clampInfinity","normalizeTime","cloneArray","mergeObjects","o1","o2","merged","o1p","forEachChildren","reverse","prevProp","nextProp","adjustedNextProp","currentNext","removeChild","addChild","sortMethod","createRefreshable","constructor","tracked","currentIteration","currentIterationProgress","reversed","alternate","cleanup","Clock","initTime","frameRate","previousFrameDuration","fr","fps","frameDuration","playbackRate","pbr","time","scheduledTime","elapsedTime","frameDelta","delta","render","tickable","muteCallbacks","internalRender","tickMode","duration","completed","iterationDuration","iterationCount","_currentIteration","_loopDelay","_reversed","_alternate","_hasChildren","tickableDelay","tickablePrevAbsoluteTime","tickableEndTime","tickableAbsoluteTime","tickablePrevTime","tickableCurrentTime","deltaTime","isCurrentTimeAboveZero","isCurrentTimeEqualOrAboveDuration","isSetter","forcedTick","isOdd","iterationElapsedTime","hasRendered","isReversed","_ease","iterationTime","isRunningBackwards","forcedRender","absoluteTime","tween","tweenTarget","tweenStyle","tweenTargetTransforms","tweenTargetTransformsProperties","tweenTransformsNeedUpdate","tweenComposition","tweenCurrentTime","tweenChangeDuration","tweenAbsEndTime","tweenNextRep","tweenPrevRep","tweenHasComposition","tweenNewTime","tweenProgress","tweenModifier","tweenValueType","tweenType","tweenIsObject","tweenIsNumber","tweenPrecision","tn","ns","tweenProperty","tick","tl","tlIsRunningBackwards","tlChildrenTime","tlCildrenTickTime","tlChildrenHasRendered","tlChildrenHaveCompleted","tlIterationDuration","childDuration","childStartTime","childEndTime","childTime","childTickMode","additive","addAdditiveAnimation","lookups","propertyAnimation","tweens","lookupTween","valueType","additiveValues","additiveValue","engineTickMethod","engineCancelMethod","Engine","engineSpeed","engineFps","activeTickable","nextTickable","tickEngine","killEngine","unit","isSecond","newScale","scaleFactor","precision","engine","parseInlineTransforms","target","propName","animationInlineStyles","inlineTransforms","inlinedStylesPropertyValue","cachedTransforms","inlinePropertyName","inlinePropertyValue","getNodeList","parseTargets","targets","flattened","nodeList","jl","subItem","kl","registerTargets","parsedTargetsArray","parsedTargetsLength","isSvgType","getPath","$parsedSvg","morphTo","path2","$path1","$path2","isPath","previousPoints","v1","v2","length1","length2","maxPoints","pointOnPath1","pointOnPath2","getScaleFactor","$el","ctm","scaleX","scaleY","createDrawableProxy","pathLength","computedStyles","strokeLineCap","$scalled","currentCap","proxy","property","values","os","d1","d2","newCap","createDrawable","getPathPoint","$path","getPathProgess","pathProperty","totalLength","inSvg","p0","p1","createMotionPath","cssReservedProperties","isValidSVGAttribute","elParentNode","svg","rgbToRgba","rgbValue","rgba","hexToRgba","hexValue","hexLength","isShort","hue2rgb","hslToRgba","hslValue","hsla","convertColorStringValuesToRgbaArray","colorString","setValue","targetValue","defaultValue","getFunctionValue","total","store","func","computed","getTweenType","prop","getCSSValue","inlineStyles","getOriginalAnimatableValue","getRelativeValue","operator","createDecomposedValueTargetObject","decomposeRawValue","rawValue","targetObject","num","unitMatch","matchedNumbers","decomposeTweenValue","decomposedOriginalValue","getTweenSiblings","lookupMap","targetLookup","addTweenSortMethod","overrideTween","composeTween","siblings","tweenCompositionType","tweenAbsStartTime","prevSibling","prevParent","prevAbsEndTime","prevPrevSibling","absoluteUpdateStartTime","prevChangeStartTime","prevTLOffset","updatedPrevChangeDuration","pausePrevParentAnimation","prevParentTL","pausePrevParentTL","additiveTweenSiblings","additiveAnimation","toNumber","toNumbers","removeTweenSliblings","tweenReplaceSiblings","addTweensLookup","addTargetProps","shouldClean","resetTimerProperties","timer","reviveTimer","timerId","Timer","parameters","parentPosition","delay","loop","loopDelay","autoplay","onComplete","onLoop","onPause","onBegin","onBeforeUpdate","onUpdate","timerInitTime","timerDefaults","timerDelay","timerDuration","timerLoop","timerLoopDelay","timerIterationCount","offsetPosition","cancelled","paused","timeScale","isPaused","count","iterations","newDuration","currentDuration","normlizedDuration","ap","then","onResolve","createTimer","none","calcBezier","aT","aA1","aA2","binarySubdivide","aX","mX1","mX2","aA","aB","currentX","currentT","cubicBezier","mY1","mY2","steps","fromStart","roundMethod","linear","argsLength","totalPoints","firstArg","lastArg","xPoints","yPoints","arg","splitValue","percent","prevX","prevY","irregular","randomness","previousValue","spacing","segmentEnd","randomVariation","randomValue","halfPI","doublePI","easeInPower","easeInFunctions","pow2","overshoot","amplitude","period","easeTypes","easeIn","parseEaseString","easesFunctions","easesLookups","parsedFn","split","eases","list","easeType","JSEasesLookups","parseEasings","ease","propertyNamesCache","sanitizePropertyName","cachedPropertyName","lowerCaseName","angleUnitsMap","convertedValuesCache","convertValueUnit","decomposedValue","force","currentUnit","currentNumber","cachedKey","cached","convertedValue","tempEl","parentNode","parentEl","elStyle","currentUnitWidth","newUnitWidth","factor","cleanInlineStyles","renderable","targetStyle","originalInlinedValue","fromTargetObject","toTargetObject","toFunctionStore","keyframesTargetArray","fastSetValuesArray","keyObjectTarget","tweenId","keyframes","generateKeyframes","properties","propertyNames","propArray","newKey","keyValue","totalDuration","prevKey","keyObj","durProgress","prevEase","currentEase","JSAnimation","fastSet","parsedTargets","targetsLength","kfParams","playbackEase","modifier","composition","onRender","animDefaults","animaPlaybackEase","animEase","hasSpring","tEasing","tDuration","tDelay","tModifier","tComposition","animInlineStyles","absoluteOffsetTime","iterationDelay","animationAnimationLength","shouldTriggerRender","targetIndex","ti","lastTransformGroupIndex","lastTransformGroupLength","propValue","isPropValueArray","arrayLength","isNotObjectValue","prevTween","firstTweenChangeStartTime","lastTweenChangeEndTime","tweenIndex","keyframe","computedToValue","tweenToValue","tweenFromValue","keyEasing","tweenEasing","tweenDuration","tweenDelay","computedComposition","hasFromvalue","hasToValue","isFromToArray","isFromToValue","tweenStartTime","absoluteStartTime","nextSibling","complexValue","notComplexValue","unitValue","notUnitValue","colorValue","notColorValue","valueToConvert","longestValue","shortestValue","tweenUpdateDuration","additiveTween","tweenFunc","ogValue","animate","easingToLinear","samples","points","WAAPIEasesLookups","WAAPIeases","parseWAAPIEasing","parsedEase","easing","transformsShorthands","commonDefaultPXProperties","validIndividualTransforms","axis","transformsPropertiesRegistered","WAAPIAnimationsLookups","removeWAAPIAnimation","nextLookup","matchTarget","matchProperty","matchParent","anim","lookupParent","addWAAPIAnimation","animTotalDuration","handleRemove","normalizeTweenValue","parseIndividualTweenValue","from","to","tweenValue","computedTo","WAAPIAnimation","isSkew","isScale","isTranslate","isAngle","syntax","spring","scroll","direction","fill","hasIndividualTransforms","composite","tweenParams","propertyValue","individualTransformProperty","parsedPropertyValue","tweenOptions","tweenOptionsEase","tweenOptionsSpring","transforms","cb","speed","controlAnimation","waapi","sync","getTargetValue","targetSelector","normalizePropName","originalValue","setTargetValues","removeTargetsFromAnimation","targetsArray","tweensMatchesTargets","tweenName","remove","waapiAnimation","removeMatches","childDur","keepTime","randomPick","roundPad","padStart","padString","padEnd","wrap","mapRange","inLow","inHigh","outLow","outHigh","degToRad","degrees","radToDeg","radians","lerp","amount","dt","ticker","curry","chain","__","nextArgs","nextResult","makeChainable","right","getPrevChildOffset","timeline","timePosition","goToPrevAnimationOffset","prevAnimation","prevOffset","parseTimelinePosition","tlDuration","timePosStr","tlLabels","hasLabels","hasSibling","matchedRelativeOperator","fullOperator","labelOffset","parsedOffset","parsedNumericalOffset","getTimelineTotalDuration","addTlChild","childParams","adjustedPosition","tlChild","Timeline","defaultsParams","globalDefaults","tlPlaybackEase","a1","a2","a3","isAnim","isTimer","staggeredPosition","parsedLength","staggeredChildParams","synced","position","labelName","labels","createTimeline","Animatable","beginHandler","pauseHandler","globalParams","callbacksAnimationParams","paramValue","isObjValue","propParams","animParams","numbers","createAnimatable","maxSpringParamValue","Spring","zeta","w0","wd","maxRestSteps","maxIterations","restThreshold","timeStep","solverTime","restSteps","createSpring","preventDefault","DOMProxy","Transforms","matrix","transformValue","elMatrix","ct","parseDraggableFunctionParameter","draggable","zIndex","Draggable","paramX","paramY","trigger","customEase","xProp","yProp","animatableParams","paramXObject","animatableXParams","paramYObject","animatableYParams","hasUpdated","hasReleased","dx","dy","prevTime","curTime","elapsed","velocityStack","vMul","minV","maxV","vi","velocity","muteUpdateCallback","sx","sy","cpt","cpr","cpb","cpl","threshold","$container","cx","cy","cx2","cy2","iw","ih","uw","sw","sh","fx","transformContainerRect","width","height","left","bottom","containerOverflow","visibleOverflow","hiddenOverflow","canScroll","targetRect","hiddenLeft","hiddenTop","hiddenRight","hiddenBottom","bounds","bt","br","bb","bl","obx","oby","cp","containerPadding","parsedCursorStyles","cursorStyles","onHover","onGrab","daw","dah","csx","csy","nsw","nsh","csw","csh","swd","shd","st","sr","sb","sl","nx","ny","scrollX","scrollY","cr","cl","px1","py1","px2","py2","px3","py3","cf","nsx","nsy","gap","scrollBounds","ob","disabledX","disabledY","destX","destY","dur","$eTarget","touches","eventX","eventY","movedX","movedY","$parent","isAtTop","isAtBottom","canTouchScroll","overflowY","scrollTop","scrollHeight","clientHeight","springX","springY","releaseEase","hasReleaseSpring","overshootCoords","pv","pa","ds","bx","by","durationX","durationY","easeX","easeY","longestReleaseDuration","directionX","distanceX","restDuration","directionY","distanceY","hasSnapped","createDraggable","Scope","rootParam","root","scopeDefaults","globalDefault","mediaQueries","mq","_mq","revertible","activeScope","activeRoot","activeDefaults","mqs","returned","revertConstructor","scopeConstructorCallback","currentIndex","trackedTickable","revertibles","revertConstructors","revertiblesOnce","revertConstructorsOnce","createScope","getMaxViewHeight","parseScrollObserverFunctionParameter","scroller","scrollContainers","ScrollContainer","backwards","px","py","useWin","style","elRect","registerAndGetScrollContainer","scrollContainer","convertValueToPx","size","under","over","clampMin","clampMax","parseBoundValue","matchedOperator","splitter","splitted","valueAPx","valueBPx","getAnimationDomTarget","linked","$linkedTarget","linkedTargets","scrollerIndex","debugColors$1","ScrollObserver","syncMode","isLinear","isEase","isSmooth","isMethods","syncMethods","biDirSync","isHori","$existingDebug","$debug","$thresholds","$triggers","color","containerWidth","containerHeight","scrollWidth","offLeft","offTop","half","labelHeight","labelWidth","labelSize","repeat","gradientOffset","lineCSS","baseCSS","isView","isTail","isFirst","isOver","isFlip","$label","$text","dirProp","flipOffset","stickys","$target","linkedTime","isSticky","rect","targetSize","containerSize","maxScroll","enter","leave","enterTarget","leaveTarget","enterContainer","leaveContainer","parsedEnterTarget","parsedLeaveTarget","parsedEnterContainer","parsedLeaveContainer","offsetStart","offsetEnd","scrollDelta","sticky","syncEase","syncSmooth","shouldSeek","isBefore","isAfter","isInView","isOnTheEdge","forceEnter","syncCompleted","lp","onScroll","segmenter","valueRgx","indexRgx","whiteSpaceGroupRgx","whiteSpaceRgx","lineType","wordType","charType","dataLine","wordSegmenter","graphemeSegmenter","$splitTemplate","isSegmentWordLike","seg","setAriaHidden","getAllTopLevelElements","debugColors","filterEmptyElements","filterLineElements","lineIndex","bin","dataLineAttr","generateTemplate","classString","cloneType","wrapType","overflow","processHTMLTemplate","htmlTemplate","$parentFragment","debug","wordIndex","charIndex","isLine","isChar","className","displayStyle","$content","$highestParent","$split","$replacables","replacablesLength","$replace","$closestParent","TextSplitter","segments","words","char","chars","accessible","includeSpaces","lineParams","wordParams","charParams","handleSplit","currentWidth","effect","refreshableEffect","wordTemplate","charTemplate","nodeType","nodeText","tempWords","wordSegments","$wordsFragment","prevSeg","wordSegment","isWordLike","lastWordIndex","word","nextWord","hasWordFollowingSpace","wordToProcess","charSegments","$charsFragment","charSegmentsArray","charSegment","charText","$charNode","childNodes","clearCache","isCached","lineTemplate","fontsReady","canSplitLines","elementsArray","linesCount","nested","linesFragment","parents","clones","$clone","cloneIndex","clonesLength","$word","$accessible","stagger","hasEasing","staggerEase","grid","customTotal","fromFirst","fromCenter","fromLast","fromRandom","isRange","useProp","val1","val2","fromIndex","registeredTarget","customIndex","staggerIndex","fromX","fromY","toX","toY","output","Animation","fadeDuration","interval","imports","animejs","init","currentSectionElement","currentPassageElement","currentBlockOutputElement","scrollPosition","transitions","runningTransitions","get","processLink","showPassage","turnPassage","go","handled","save","handleClick","enableLink","begin","load","runTransitions","settersJson","setAttribute","setMatch","lhs","rhs","incDecMatch","op","rhsNumeric","oldCanGoBack","canGoBack","master","clearScreen","run","writeUndoLog","newCanGoBack","runJs","extra","outputElementContainer","processAttributes","transition","passageName","masterSection","passages","runFns","masterPassage","createSectionElement","attributes","restart","settings","runUiJs","setCurrentSectionElement","setCurrentPassageElement","pluginManager","newBlockOutputElement","getClearStack","clearStack","clearStackItem","unClearScreen","html","div","scrollTo","currentScrollTop","maxScrollTop","update","allSectionElements","getHistoryCount","sectionPassageCount","goBack","currentPassage","doUndo","hasEmptySection","hasOtherElements","undoLog","oldValue","undosJson","undos"],"mappings":"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AAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,I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IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAE,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAG,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG;AAAA,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","x_google_ignoreList":[0,1,2,3,4,5,6,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,56]}
|