{"version":3,"file":"index.cjs","sources":["../../../constants/lib/builder-constants.ts","../../../util/lib/object-utils.ts","../../../../../node_modules/.pnpm/@handlebars+parser@2.0.0/node_modules/@handlebars/parser/dist/esm/exception.js","../../../../../node_modules/.pnpm/@handlebars+parser@2.0.0/node_modules/@handlebars/parser/dist/esm/parser.js","../../../../../node_modules/.pnpm/simple-html-tokenizer@0.5.11/node_modules/simple-html-tokenizer/dist/es6/index.js","../../../syntax/lib/source/loc/kinds.ts","../../../syntax/lib/v2/objects/constants.ts","../../lib/passes/1-normalization/visitors/constants.ts"],"sourcesContent":["/// Builder ///\n\nexport type BUILDER_LITERAL = 0;\nexport const BUILDER_LITERAL: BUILDER_LITERAL = 0;\n\nexport type BUILDER_COMMENT = 1;\nexport const BUILDER_COMMENT: BUILDER_COMMENT = 1;\n\nexport type BUILDER_APPEND = 2;\nexport const BUILDER_APPEND: BUILDER_APPEND = 2;\n\nexport type BUILDER_MODIFIER = 3;\nexport const BUILDER_MODIFIER: BUILDER_MODIFIER = 3;\n\nexport type BUILDER_DYNAMIC_COMPONENT = 4;\nexport const BUILDER_DYNAMIC_COMPONENT: BUILDER_DYNAMIC_COMPONENT = 4;\n\nexport type BUILDER_GET = 5;\nexport const BUILDER_GET: BUILDER_GET = 5;\n\nexport type BUILDER_CONCAT = 6;\nexport const BUILDER_CONCAT: BUILDER_CONCAT = 6;\n\nexport type BUILDER_HAS_BLOCK = 7;\nexport const BUILDER_HAS_BLOCK: BUILDER_HAS_BLOCK = 7;\n\nexport type BUILDER_HAS_BLOCK_PARAMS = 8;\nexport const BUILDER_HAS_BLOCK_PARAMS: BUILDER_HAS_BLOCK_PARAMS = 8;\n\n/// HeadKind ///\n\nexport type BLOCK_HEAD = 'Block';\nexport const BLOCK_HEAD: BLOCK_HEAD = 'Block';\n\nexport type CALL_HEAD = 'Call';\nexport const CALL_HEAD: CALL_HEAD = 'Call';\n\nexport type ELEMENT_HEAD = 'Element';\nexport const ELEMENT_HEAD: ELEMENT_HEAD = 'Element';\n\nexport type APPEND_PATH_HEAD = 'AppendPath';\nexport const APPEND_PATH_HEAD: APPEND_PATH_HEAD = 'AppendPath';\n\nexport type APPEND_EXPR_HEAD = 'AppendExpr';\nexport const APPEND_EXPR_HEAD: APPEND_EXPR_HEAD = 'AppendExpr';\n\nexport type LITERAL_HEAD = 'Literal';\nexport const LITERAL_HEAD: LITERAL_HEAD = 'Literal';\n\nexport type MODIFIER_HEAD = 'Modifier';\nexport const MODIFIER_HEAD: MODIFIER_HEAD = 'Modifier';\n\nexport type DYNAMIC_COMPONENT_HEAD = 'DynamicComponent';\nexport const DYNAMIC_COMPONENT_HEAD: DYNAMIC_COMPONENT_HEAD = 'DynamicComponent';\n\nexport type COMMENT_HEAD = 'Comment';\nexport const COMMENT_HEAD: COMMENT_HEAD = 'Comment';\n\nexport type SPLAT_HEAD = 'Splat';\nexport const SPLAT_HEAD: SPLAT_HEAD = 'Splat';\n\nexport type KEYWORD_HEAD = 'Keyword';\nexport const KEYWORD_HEAD: KEYWORD_HEAD = 'Keyword';\n\nexport type HeadKind =\n  | BLOCK_HEAD\n  | CALL_HEAD\n  | ELEMENT_HEAD\n  | APPEND_PATH_HEAD\n  | APPEND_EXPR_HEAD\n  | LITERAL_HEAD\n  | MODIFIER_HEAD\n  | DYNAMIC_COMPONENT_HEAD\n  | COMMENT_HEAD\n  | SPLAT_HEAD\n  | KEYWORD_HEAD;\n\n/// VariableKind ///\n\nexport type LOCAL_VAR = 'Local';\nexport const LOCAL_VAR: LOCAL_VAR = 'Local';\n\nexport type FREE_VAR = 'Free';\nexport const FREE_VAR: FREE_VAR = 'Free';\n\nexport type ARG_VAR = 'Arg';\nexport const ARG_VAR: ARG_VAR = 'Arg';\n\nexport type BLOCK_VAR = 'Block';\nexport const BLOCK_VAR: BLOCK_VAR = 'Block';\n\nexport type THIS_VAR = 'This';\nexport const THIS_VAR: THIS_VAR = 'This';\n\nexport type VariableKind = LOCAL_VAR | FREE_VAR | ARG_VAR | BLOCK_VAR | THIS_VAR;\n\n/// ExpressionKind ///\n\nexport type LITERAL_EXPR = 'Literal';\nexport const LITERAL_EXPR: LITERAL_EXPR = 'Literal';\n\nexport type CALL_EXPR = 'Call';\nexport const CALL_EXPR: CALL_EXPR = 'Call';\n\nexport type GET_PATH_EXPR = 'GetPath';\nexport const GET_PATH_EXPR: GET_PATH_EXPR = 'GetPath';\n\nexport type GET_VAR_EXPR = 'GetVar';\nexport const GET_VAR_EXPR: GET_VAR_EXPR = 'GetVar';\n\nexport type CONCAT_EXPR = 'Concat';\nexport const CONCAT_EXPR: CONCAT_EXPR = 'Concat';\n\nexport type HAS_BLOCK_EXPR = 'HasBlock';\nexport const HAS_BLOCK_EXPR: HAS_BLOCK_EXPR = 'HasBlock';\n\nexport type HAS_BLOCK_PARAMS_EXPR = 'HasBlockParams';\nexport const HAS_BLOCK_PARAMS_EXPR: HAS_BLOCK_PARAMS_EXPR = 'HasBlockParams';\n\nexport type ExpressionKind =\n  | LITERAL_EXPR\n  | CALL_EXPR\n  | GET_PATH_EXPR\n  | GET_VAR_EXPR\n  | CONCAT_EXPR\n  | HAS_BLOCK_EXPR\n  | HAS_BLOCK_PARAMS_EXPR;\n","export const assign = Object.assign;\n\nexport function values<T>(obj: { [s: string]: T }): T[] {\n  return Object.values(obj);\n}\n\nexport type ObjectEntry<D extends object> = { [P in keyof D]: [P, D[P]] }[keyof D];\n\nexport function entries<D extends object>(dict: D): ObjectEntry<D>[] {\n  return Object.entries(dict) as ObjectEntry<D>[];\n}\n\nexport function keys<T extends object>(obj: T): (keyof T)[] {\n  return Object.keys(obj) as (keyof T)[];\n}\n","var errorProps = [\n    'description',\n    'fileName',\n    'lineNumber',\n    'endLineNumber',\n    'message',\n    'name',\n    'number',\n    'stack'\n];\nfunction Exception(message, node) {\n    var loc = node && node.loc, line, endLineNumber, column, endColumn;\n    if (loc) {\n        line = loc.start.line;\n        endLineNumber = loc.end.line;\n        column = loc.start.column;\n        endColumn = loc.end.column;\n        message += ' - ' + line + ':' + column;\n    }\n    var tmp = Error.prototype.constructor.call(this, message);\n    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n    for (var idx = 0; idx < errorProps.length; idx++) {\n        this[errorProps[idx]] = tmp[errorProps[idx]];\n    }\n    /* istanbul ignore else */\n    if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, Exception);\n    }\n    try {\n        if (loc) {\n            this.lineNumber = line;\n            this.endLineNumber = endLineNumber;\n            // Work around issue under safari where we can't directly set the column value\n            /* istanbul ignore next */\n            if (Object.defineProperty) {\n                Object.defineProperty(this, 'column', {\n                    value: column,\n                    enumerable: true\n                });\n                Object.defineProperty(this, 'endColumn', {\n                    value: endColumn,\n                    enumerable: true\n                });\n            }\n            else {\n                this.column = column;\n                this.endColumn = endColumn;\n            }\n        }\n    }\n    catch (nop) {\n        /* Ignore if the browser is very particular */\n    }\n}\nException.prototype = new Error();\nexport default Exception;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFNLFVBQVUsR0FBRztJQUNqQixhQUFhO0lBQ2IsVUFBVTtJQUNWLFlBQVk7SUFDWixlQUFlO0lBQ2YsU0FBUztJQUNULE1BQU07SUFDTixRQUFRO0lBQ1IsT0FBTztDQUNSLENBQUM7QUFFRixTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSTtJQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFDeEIsSUFBSSxFQUNKLGFBQWEsRUFDYixNQUFNLEVBQ04sU0FBUyxDQUFDO0lBRVosSUFBSSxHQUFHLEVBQUU7UUFDUCxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdEIsYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMxQixTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFM0IsT0FBTyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUN4QztJQUVELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFMUQsbUdBQW1HO0lBQ25HLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDOUM7SUFFRCwwQkFBMEI7SUFDMUIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDM0IsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxQztJQUVELElBQUk7UUFDRixJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBRW5DLDhFQUE4RTtZQUM5RSwwQkFBMEI7WUFDMUIsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO2dCQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ3BDLEtBQUssRUFBRSxNQUFNO29CQUNiLFVBQVUsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO29CQUN2QyxLQUFLLEVBQUUsU0FBUztvQkFDaEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzthQUM1QjtTQUNGO0tBQ0Y7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLDhDQUE4QztLQUMvQztBQUNILENBQUM7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFbEMsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlcnJvclByb3BzID0gW1xuICAnZGVzY3JpcHRpb24nLFxuICAnZmlsZU5hbWUnLFxuICAnbGluZU51bWJlcicsXG4gICdlbmRMaW5lTnVtYmVyJyxcbiAgJ21lc3NhZ2UnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhY2snXG5dO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICBsZXQgbG9jID0gbm9kZSAmJiBub2RlLmxvYyxcbiAgICBsaW5lLFxuICAgIGVuZExpbmVOdW1iZXIsXG4gICAgY29sdW1uLFxuICAgIGVuZENvbHVtbjtcblxuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcbiAgICBlbmRDb2x1bW4gPSBsb2MuZW5kLmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgbGV0IHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgICB0aGlzLmVuZExpbmVOdW1iZXIgPSBlbmRMaW5lTnVtYmVyO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmRDb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZENvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function () {\n    var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v)\n        ; return o; }, $V0 = [2, 44], $V1 = [1, 20], $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], $V3 = [1, 35], $V4 = [1, 38], $V5 = [1, 30], $V6 = [1, 31], $V7 = [1, 32], $V8 = [1, 33], $V9 = [1, 34], $Va = [1, 37], $Vb = [14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], $Vc = [14, 15, 19, 29, 34, 44, 47, 48, 52, 56, 60], $Vd = [15, 18], $Ve = [14, 15, 19, 29, 34, 47, 48, 52, 56, 60], $Vf = [33, 64, 71, 79, 80, 81, 82, 83, 84], $Vg = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84], $Vh = [1, 51], $Vi = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84, 86], $Vj = [2, 43], $Vk = [55, 64, 71, 79, 80, 81, 82, 83, 84], $Vl = [1, 58], $Vm = [1, 59], $Vn = [1, 66], $Vo = [33, 64, 71, 74, 79, 80, 81, 82, 83, 84], $Vp = [23, 64, 71, 79, 80, 81, 82, 83, 84], $Vq = [1, 76], $Vr = [64, 67, 71, 79, 80, 81, 82, 83, 84], $Vs = [33, 74], $Vt = [23, 33, 55, 67, 71, 74], $Vu = [1, 106], $Vv = [1, 118], $Vw = [71, 76];\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, \"expr\": 49, \"mustache_repetition0\": 50, \"mustache_option0\": 51, \"OPEN_UNESCAPED\": 52, \"mustache_repetition1\": 53, \"mustache_option1\": 54, \"CLOSE_UNESCAPED\": 55, \"OPEN_PARTIAL\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"sexpr\": 63, \"OPEN_SEXPR\": 64, \"sexpr_repetition0\": 65, \"sexpr_option0\": 66, \"CLOSE_SEXPR\": 67, \"hash\": 68, \"hash_repetition_plus0\": 69, \"hashSegment\": 70, \"ID\": 71, \"EQUALS\": 72, \"blockParams\": 73, \"OPEN_BLOCK_PARAMS\": 74, \"blockParams_repetition_plus0\": 75, \"CLOSE_BLOCK_PARAMS\": 76, \"path\": 77, \"dataName\": 78, \"STRING\": 79, \"NUMBER\": 80, \"BOOLEAN\": 81, \"UNDEFINED\": 82, \"NULL\": 83, \"DATA\": 84, \"pathSegments\": 85, \"SEP\": 86, \"$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\", 52: \"OPEN_UNESCAPED\", 55: \"CLOSE_UNESCAPED\", 56: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 64: \"OPEN_SEXPR\", 67: \"CLOSE_SEXPR\", 71: \"ID\", 72: \"EQUALS\", 74: \"OPEN_BLOCK_PARAMS\", 76: \"CLOSE_BLOCK_PARAMS\", 79: \"STRING\", 80: \"NUMBER\", 81: \"BOOLEAN\", 82: \"UNDEFINED\", 83: \"NULL\", 84: \"DATA\", 86: \"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], [49, 1], [49, 1], [63, 5], [68, 1], [70, 3], [73, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [78, 2], [77, 1], [85, 3], [85, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [50, 0], [50, 2], [51, 0], [51, 1], [53, 0], [53, 2], [54, 0], [54, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [65, 0], [65, 2], [66, 0], [66, 1], [69, 1], [69, 2], [75, 1], [75, 2]],\n        performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n            /* this == yyval */\n            var $0 = $$.length - 1;\n            switch (yystate) {\n                case 1:\n                    return $$[$0 - 1];\n                    break;\n                case 2:\n                    this.$ = yy.prepareProgram($$[$0]);\n                    break;\n                case 3:\n                case 4:\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 20:\n                case 27:\n                case 28:\n                case 33:\n                case 34:\n                    this.$ = $$[$0];\n                    break;\n                case 9:\n                    this.$ = {\n                        type: 'CommentStatement',\n                        value: yy.stripComment($$[$0]),\n                        strip: yy.stripFlags($$[$0], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 10:\n                    this.$ = {\n                        type: 'ContentStatement',\n                        original: $$[$0],\n                        value: $$[$0],\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 11:\n                    this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 12:\n                    this.$ = { 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                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._$), program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n                    program.chained = true;\n                    this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n                    break;\n                case 21:\n                    this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n                    break;\n                case 22:\n                case 23:\n                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n                    break;\n                case 24:\n                    this.$ = {\n                        type: 'PartialStatement',\n                        name: $$[$0 - 3],\n                        params: $$[$0 - 2],\n                        hash: $$[$0 - 1],\n                        indent: '',\n                        strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 25:\n                    this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 26:\n                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$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                    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 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.$ = yy.preparePath(true, $$[$0], this._$);\n                    break;\n                case 41:\n                    this.$ = yy.preparePath(false, $$[$0], this._$);\n                    break;\n                case 42:\n                    $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });\n                    this.$ = $$[$0 - 2];\n                    break;\n                case 43:\n                    this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n                    break;\n                case 44:\n                case 46:\n                case 48:\n                case 56:\n                case 62:\n                case 68:\n                case 76:\n                case 80:\n                case 84:\n                case 88:\n                case 92:\n                    this.$ = [];\n                    break;\n                case 45:\n                case 47:\n                case 49:\n                case 57:\n                case 63:\n                case 69:\n                case 77:\n                case 81:\n                case 85:\n                case 89:\n                case 93:\n                case 97:\n                case 99:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 96:\n                case 98:\n                    this.$ = [$$[$0]];\n                    break;\n            }\n        },\n        table: [o([5, 14, 15, 19, 29, 34, 48, 52, 56, 60], $V0, { 3: 1, 4: 2, 6: 3 }), { 1: [3] }, { 5: [1, 4] }, o([5, 39, 44, 47], [2, 2], { 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 24: 15, 27: 16, 16: 17, 59: 19, 14: [1, 12], 15: $V1, 19: [1, 23], 29: [1, 21], 34: [1, 22], 48: [1, 13], 52: [1, 14], 56: [1, 18], 60: [1, 24] }), { 1: [2, 1] }, o($V2, [2, 45]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), { 20: 26, 49: 25, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 20: 26, 49: 39, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vb, $V0, { 6: 3, 4: 40 }), o($Vc, $V0, { 6: 3, 4: 41 }), o($Vd, [2, 46], { 17: 42 }), { 20: 26, 49: 43, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Ve, $V0, { 6: 3, 4: 44 }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], [2, 10]), { 20: 45, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 20: 46, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 20: 47, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 20: 26, 49: 48, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vf, [2, 76], { 50: 49 }), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 33]), o($Vg, [2, 34]), o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($Vg, [2, 39]), { 20: 26, 49: 50, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vg, [2, 41], { 86: $Vh }), { 71: $V4, 85: 52 }, o($Vi, $Vj), o($Vk, [2, 80], { 53: 53 }), { 25: 54, 38: 56, 39: $Vl, 43: 57, 44: $Vm, 45: 55, 47: [2, 52] }, { 28: 60, 43: 61, 44: $Vm, 47: [2, 54] }, { 13: 63, 15: $V1, 18: [1, 62] }, o($Vf, [2, 84], { 57: 64 }), { 26: 65, 47: $Vn }, o($Vo, [2, 56], { 30: 67 }), o($Vo, [2, 62], { 35: 68 }), o($Vp, [2, 48], { 21: 69 }), o($Vf, [2, 88], { 61: 70 }), { 20: 26, 33: [2, 78], 49: 72, 51: 71, 63: 27, 64: $V3, 68: 73, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vr, [2, 92], { 65: 77 }), { 71: [1, 78] }, o($Vg, [2, 40], { 86: $Vh }), { 20: 26, 49: 80, 54: 79, 55: [2, 82], 63: 27, 64: $V3, 68: 81, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 26: 82, 47: $Vn }, { 47: [2, 53] }, o($Vb, $V0, { 6: 3, 4: 83 }), { 47: [2, 20] }, { 20: 84, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Ve, $V0, { 6: 3, 4: 85 }), { 26: 86, 47: $Vn }, { 47: [2, 55] }, o($V2, [2, 11]), o($Vd, [2, 47]), { 20: 26, 33: [2, 86], 49: 88, 58: 87, 63: 27, 64: $V3, 68: 89, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($V2, [2, 25]), { 20: 90, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vs, [2, 58], { 20: 26, 63: 27, 77: 28, 78: 29, 85: 36, 69: 74, 70: 75, 31: 91, 49: 92, 68: 93, 64: $V3, 71: $Vq, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va }), o($Vs, [2, 64], { 20: 26, 63: 27, 77: 28, 78: 29, 85: 36, 69: 74, 70: 75, 36: 94, 49: 95, 68: 96, 64: $V3, 71: $Vq, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va }), { 20: 26, 22: 97, 23: [2, 50], 49: 98, 63: 27, 64: $V3, 68: 99, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 20: 26, 33: [2, 90], 49: 101, 62: 100, 63: 27, 64: $V3, 68: 102, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 33: [1, 103] }, o($Vf, [2, 77]), { 33: [2, 79] }, o([23, 33, 55, 67, 74], [2, 30], { 70: 104, 71: [1, 105] }), o($Vt, [2, 96]), o($Vi, $Vj, { 72: $Vu }), { 20: 26, 49: 108, 63: 27, 64: $V3, 66: 107, 67: [2, 94], 68: 109, 69: 74, 70: 75, 71: $Vq, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, o($Vi, [2, 42]), { 55: [1, 110] }, o($Vk, [2, 81]), { 55: [2, 83] }, o($V2, [2, 13]), { 38: 56, 39: $Vl, 43: 57, 44: $Vm, 45: 112, 46: 111, 47: [2, 74] }, o($Vo, [2, 68], { 40: 113 }), { 47: [2, 18] }, o($V2, [2, 14]), { 33: [1, 114] }, o($Vf, [2, 85]), { 33: [2, 87] }, { 33: [1, 115] }, { 32: 116, 33: [2, 60], 73: 117, 74: $Vv }, o($Vo, [2, 57]), o($Vs, [2, 59]), { 33: [2, 66], 37: 119, 73: 120, 74: $Vv }, o($Vo, [2, 63]), o($Vs, [2, 65]), { 23: [1, 121] }, o($Vp, [2, 49]), { 23: [2, 51] }, { 33: [1, 122] }, o($Vf, [2, 89]), { 33: [2, 91] }, o($V2, [2, 22]), o($Vt, [2, 97]), { 72: $Vu }, { 20: 26, 49: 123, 63: 27, 64: $V3, 71: $V4, 77: 28, 78: 29, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va, 85: 36 }, { 67: [1, 124] }, o($Vr, [2, 93]), { 67: [2, 95] }, o($V2, [2, 23]), { 47: [2, 19] }, { 47: [2, 75] }, o($Vs, [2, 70], { 20: 26, 63: 27, 77: 28, 78: 29, 85: 36, 69: 74, 70: 75, 41: 125, 49: 126, 68: 127, 64: $V3, 71: $Vq, 79: $V5, 80: $V6, 81: $V7, 82: $V8, 83: $V9, 84: $Va }), o($V2, [2, 24]), o($V2, [2, 21]), { 33: [1, 128] }, { 33: [2, 61] }, { 71: [1, 130], 75: 129 }, { 33: [1, 131] }, { 33: [2, 67] }, o($Vd, [2, 12]), o($Ve, [2, 26]), o($Vt, [2, 31]), o($Vg, [2, 29]), { 33: [2, 72], 42: 132, 73: 133, 74: $Vv }, o($Vo, [2, 69]), o($Vs, [2, 71]), o($Vb, [2, 15]), { 71: [1, 135], 76: [1, 134] }, o($Vw, [2, 98]), o($Vc, [2, 16]), { 33: [1, 136] }, { 33: [2, 73] }, { 33: [2, 32] }, o($Vw, [2, 99]), o($Vb, [2, 17])],\n        defaultActions: { 4: [2, 1], 55: [2, 53], 57: [2, 20], 61: [2, 55], 73: [2, 79], 81: [2, 83], 85: [2, 18], 89: [2, 87], 99: [2, 51], 102: [2, 91], 109: [2, 95], 111: [2, 19], 112: [2, 75], 117: [2, 61], 120: [2, 67], 133: [2, 73], 134: [2, 32] },\n        parseError: function parseError(str, hash) {\n            if (hash.recoverable) {\n                this.trace(str);\n            }\n            else {\n                var error = new Error(str);\n                error.hash = hash;\n                throw error;\n            }\n        },\n        parse: function parse(input) {\n            var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n            var args = lstack.slice.call(arguments, 1);\n            var lexer = Object.create(this.lexer);\n            var sharedState = { yy: {} };\n            for (var k in this.yy) {\n                if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n                    sharedState.yy[k] = this.yy[k];\n                }\n            }\n            lexer.setInput(input, sharedState.yy);\n            sharedState.yy.lexer = lexer;\n            sharedState.yy.parser = this;\n            if (typeof lexer.yylloc == 'undefined') {\n                lexer.yylloc = {};\n            }\n            var yyloc = lexer.yylloc;\n            lstack.push(yyloc);\n            var ranges = lexer.options && lexer.options.ranges;\n            if (typeof sharedState.yy.parseError === 'function') {\n                this.parseError = sharedState.yy.parseError;\n            }\n            else {\n                this.parseError = Object.getPrototypeOf(this).parseError;\n            }\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            _token_stack: var lex = function () {\n                var token;\n                token = lexer.lex() || EOF;\n                if (typeof token !== 'number') {\n                    token = self.symbols_[token] || token;\n                }\n                return token;\n            };\n            var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n            while (true) {\n                state = stack[stack.length - 1];\n                if (this.defaultActions[state]) {\n                    action = this.defaultActions[state];\n                }\n                else {\n                    if (symbol === null || typeof symbol == 'undefined') {\n                        symbol = lex();\n                    }\n                    action = table[state] && table[state][symbol];\n                }\n                if (typeof action === 'undefined' || !action.length || !action[0]) {\n                    var errStr = '';\n                    expected = [];\n                    for (p in table[state]) {\n                        if (this.terminals_[p] && p > TERROR) {\n                            expected.push('\\'' + this.terminals_[p] + '\\'');\n                        }\n                    }\n                    if (lexer.showPosition) {\n                        errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n                    }\n                    else {\n                        errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n                    }\n                    this.parseError(errStr, {\n                        text: lexer.match,\n                        token: this.terminals_[symbol] || symbol,\n                        line: lexer.yylineno,\n                        loc: yyloc,\n                        expected: expected\n                    });\n                }\n                if (action[0] instanceof Array && action.length > 1) {\n                    throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n                }\n                switch (action[0]) {\n                    case 1:\n                        stack.push(symbol);\n                        vstack.push(lexer.yytext);\n                        lstack.push(lexer.yylloc);\n                        stack.push(action[1]);\n                        symbol = null;\n                        if (!preErrorSymbol) {\n                            yyleng = lexer.yyleng;\n                            yytext = lexer.yytext;\n                            yylineno = lexer.yylineno;\n                            yyloc = lexer.yylloc;\n                            if (recovering > 0) {\n                                recovering--;\n                            }\n                        }\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._$ = {\n                            first_line: lstack[lstack.length - (len || 1)].first_line,\n                            last_line: lstack[lstack.length - 1].last_line,\n                            first_column: lstack[lstack.length - (len || 1)].first_column,\n                            last_column: lstack[lstack.length - 1].last_column\n                        };\n                        if (ranges) {\n                            yyval._$.range = [\n                                lstack[lstack.length - (len || 1)].range[0],\n                                lstack[lstack.length - 1].range[1]\n                            ];\n                        }\n                        r = this.performAction.apply(yyval, [\n                            yytext,\n                            yyleng,\n                            yylineno,\n                            sharedState.yy,\n                            action[1],\n                            vstack,\n                            lstack\n                        ].concat(args));\n                        if (typeof r !== 'undefined') {\n                            return r;\n                        }\n                        if (len) {\n                            stack = stack.slice(0, -1 * len * 2);\n                            vstack = vstack.slice(0, -1 * len);\n                            lstack = lstack.slice(0, -1 * len);\n                        }\n                        stack.push(this.productions_[action[1]][0]);\n                        vstack.push(yyval.$);\n                        lstack.push(yyval._$);\n                        newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n                        stack.push(newState);\n                        break;\n                    case 3:\n                        return true;\n                }\n            }\n            return true;\n        } };\n    /* generated by jison-lex 0.3.4 */\n    var lexer = (function () {\n        var lexer = ({\n            EOF: 1,\n            parseError: function parseError(str, hash) {\n                if (this.yy.parser) {\n                    this.yy.parser.parseError(str, hash);\n                }\n                else {\n                    throw new Error(str);\n                }\n            },\n            // resets the lexer, sets new input\n            setInput: function (input, yy) {\n                this.yy = yy || this.yy || {};\n                this._input = input;\n                this._more = this._backtrack = this.done = false;\n                this.yylineno = this.yyleng = 0;\n                this.yytext = this.matched = this.match = '';\n                this.conditionStack = ['INITIAL'];\n                this.yylloc = {\n                    first_line: 1,\n                    first_column: 0,\n                    last_line: 1,\n                    last_column: 0\n                };\n                if (this.options.ranges) {\n                    this.yylloc.range = [0, 0];\n                }\n                this.offset = 0;\n                return this;\n            },\n            // consumes and returns one char from the input\n            input: function () {\n                var ch = this._input[0];\n                this.yytext += ch;\n                this.yyleng++;\n                this.offset++;\n                this.match += ch;\n                this.matched += ch;\n                var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n                if (lines) {\n                    this.yylineno++;\n                    this.yylloc.last_line++;\n                }\n                else {\n                    this.yylloc.last_column++;\n                }\n                if (this.options.ranges) {\n                    this.yylloc.range[1]++;\n                }\n                this._input = this._input.slice(1);\n                return ch;\n            },\n            // unshifts one char (or a string) into the input\n            unput: function (ch) {\n                var len = ch.length;\n                var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n                this._input = ch + this._input;\n                this.yytext = this.yytext.substr(0, this.yytext.length - len);\n                //this.yyleng -= len;\n                this.offset -= len;\n                var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n                this.match = this.match.substr(0, this.match.length - 1);\n                this.matched = this.matched.substr(0, this.matched.length - 1);\n                if (lines.length - 1) {\n                    this.yylineno -= lines.length - 1;\n                }\n                var r = this.yylloc.range;\n                this.yylloc = {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.yylineno + 1,\n                    first_column: this.yylloc.first_column,\n                    last_column: lines ?\n                        (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                            + oldLines[oldLines.length - lines.length].length - lines[0].length :\n                        this.yylloc.first_column - len\n                };\n                if (this.options.ranges) {\n                    this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n                }\n                this.yyleng = this.yytext.length;\n                return this;\n            },\n            // When called from action, caches matched text and appends it on next action\n            more: function () {\n                this._more = true;\n                return this;\n            },\n            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n            reject: function () {\n                if (this.options.backtrack_lexer) {\n                    this._backtrack = true;\n                }\n                else {\n                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                        text: \"\",\n                        token: null,\n                        line: this.yylineno\n                    });\n                }\n                return this;\n            },\n            // retain first n characters of the match\n            less: function (n) {\n                this.unput(this.match.slice(n));\n            },\n            // displays already matched input, i.e. for error messages\n            pastInput: function () {\n                var past = this.matched.substr(0, this.matched.length - this.match.length);\n                return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n            },\n            // displays upcoming input, i.e. for error messages\n            upcomingInput: function () {\n                var next = this.match;\n                if (next.length < 20) {\n                    next += this._input.substr(0, 20 - next.length);\n                }\n                return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n            },\n            // displays the character position where the lexing error occurred, i.e. for error messages\n            showPosition: function () {\n                var pre = this.pastInput();\n                var c = new Array(pre.length + 1).join(\"-\");\n                return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n            },\n            // test the lexed token: return FALSE when not a match, otherwise return token\n            test_match: function (match, indexed_rule) {\n                var token, lines, backup;\n                if (this.options.backtrack_lexer) {\n                    // save context\n                    backup = {\n                        yylineno: this.yylineno,\n                        yylloc: {\n                            first_line: this.yylloc.first_line,\n                            last_line: this.last_line,\n                            first_column: this.yylloc.first_column,\n                            last_column: this.yylloc.last_column\n                        },\n                        yytext: this.yytext,\n                        match: this.match,\n                        matches: this.matches,\n                        matched: this.matched,\n                        yyleng: this.yyleng,\n                        offset: this.offset,\n                        _more: this._more,\n                        _input: this._input,\n                        yy: this.yy,\n                        conditionStack: this.conditionStack.slice(0),\n                        done: this.done\n                    };\n                    if (this.options.ranges) {\n                        backup.yylloc.range = this.yylloc.range.slice(0);\n                    }\n                }\n                lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n                if (lines) {\n                    this.yylineno += lines.length;\n                }\n                this.yylloc = {\n                    first_line: this.yylloc.last_line,\n                    last_line: this.yylineno + 1,\n                    first_column: this.yylloc.last_column,\n                    last_column: lines ?\n                        lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                        this.yylloc.last_column + match[0].length\n                };\n                this.yytext += match[0];\n                this.match += match[0];\n                this.matches = match;\n                this.yyleng = this.yytext.length;\n                if (this.options.ranges) {\n                    this.yylloc.range = [this.offset, this.offset += this.yyleng];\n                }\n                this._more = false;\n                this._backtrack = false;\n                this._input = this._input.slice(match[0].length);\n                this.matched += match[0];\n                token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n                if (this.done && this._input) {\n                    this.done = false;\n                }\n                if (token) {\n                    return token;\n                }\n                else if (this._backtrack) {\n                    // recover context\n                    for (var k in backup) {\n                        this[k] = backup[k];\n                    }\n                    return false; // rule action called reject() implying the next rule should be tested instead.\n                }\n                return false;\n            },\n            // return next match in input\n            next: function () {\n                if (this.done) {\n                    return this.EOF;\n                }\n                if (!this._input) {\n                    this.done = true;\n                }\n                var token, match, tempMatch, index;\n                if (!this._more) {\n                    this.yytext = '';\n                    this.match = '';\n                }\n                var rules = this._currentRules();\n                for (var i = 0; i < rules.length; i++) {\n                    tempMatch = this._input.match(this.rules[rules[i]]);\n                    if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                        match = tempMatch;\n                        index = i;\n                        if (this.options.backtrack_lexer) {\n                            token = this.test_match(tempMatch, rules[i]);\n                            if (token !== false) {\n                                return token;\n                            }\n                            else if (this._backtrack) {\n                                match = false;\n                                continue; // rule action called reject() implying a rule MISmatch.\n                            }\n                            else {\n                                // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                                return false;\n                            }\n                        }\n                        else if (!this.options.flex) {\n                            break;\n                        }\n                    }\n                }\n                if (match) {\n                    token = this.test_match(match, rules[index]);\n                    if (token !== false) {\n                        return token;\n                    }\n                    // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                    return false;\n                }\n                if (this._input === \"\") {\n                    return this.EOF;\n                }\n                else {\n                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                        text: \"\",\n                        token: null,\n                        line: this.yylineno\n                    });\n                }\n            },\n            // return next match that has a token\n            lex: function lex() {\n                var r = this.next();\n                if (r) {\n                    return r;\n                }\n                else {\n                    return this.lex();\n                }\n            },\n            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n            begin: function begin(condition) {\n                this.conditionStack.push(condition);\n            },\n            // pop the previously active lexer condition state off the condition stack\n            popState: function popState() {\n                var n = this.conditionStack.length - 1;\n                if (n > 0) {\n                    return this.conditionStack.pop();\n                }\n                else {\n                    return this.conditionStack[0];\n                }\n            },\n            // produce the lexer rule set which is active for the currently active lexer condition state\n            _currentRules: function _currentRules() {\n                if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n                    return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n                }\n                else {\n                    return this.conditions[\"INITIAL\"].rules;\n                }\n            },\n            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n            topState: function topState(n) {\n                n = this.conditionStack.length - 1 - Math.abs(n || 0);\n                if (n >= 0) {\n                    return this.conditionStack[n];\n                }\n                else {\n                    return \"INITIAL\";\n                }\n            },\n            // alias for begin(condition)\n            pushState: function pushState(condition) {\n                this.begin(condition);\n            },\n            // return the number of states currently on the stack\n            stateStackSize: function stateStackSize() {\n                return this.conditionStack.length;\n            },\n            options: {},\n            performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n                function strip(start, end) {\n                    return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n                }\n                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                        }\n                        else if (yy_.yytext.slice(-1) === \"\\\\\") {\n                            strip(0, 1);\n                            this.begin(\"emu\");\n                        }\n                        else {\n                            this.begin(\"mu\");\n                        }\n                        if (yy_.yytext)\n                            return 15;\n                        break;\n                    case 1:\n                        return 15;\n                        break;\n                    case 2:\n                        this.popState();\n                        return 15;\n                        break;\n                    case 3:\n                        this.begin('raw');\n                        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                        }\n                        else {\n                            strip(5, 9);\n                            return 18;\n                        }\n                        break;\n                    case 5:\n                        return 15;\n                        break;\n                    case 6:\n                        this.popState();\n                        return 14;\n                        break;\n                    case 7:\n                        return 64;\n                        break;\n                    case 8:\n                        return 67;\n                        break;\n                    case 9:\n                        return 19;\n                        break;\n                    case 10:\n                        this.popState();\n                        this.begin('raw');\n                        return 23;\n                        break;\n                    case 11:\n                        return 56;\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();\n                        return 44;\n                        break;\n                    case 16:\n                        this.popState();\n                        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 52;\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                        break;\n                    case 22:\n                        this.popState();\n                        return 14;\n                        break;\n                    case 23:\n                        return 48;\n                        break;\n                    case 24:\n                        return 72;\n                        break;\n                    case 25:\n                        return 71;\n                        break;\n                    case 26:\n                        return 71;\n                        break;\n                    case 27:\n                        return 86;\n                        break;\n                    case 28: // ignore whitespace\n                        break;\n                    case 29:\n                        this.popState();\n                        return 55;\n                        break;\n                    case 30:\n                        this.popState();\n                        return 33;\n                        break;\n                    case 31:\n                        yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n                        return 79;\n                        break;\n                    case 32:\n                        yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n                        return 79;\n                        break;\n                    case 33:\n                        return 84;\n                        break;\n                    case 34:\n                        return 81;\n                        break;\n                    case 35:\n                        return 81;\n                        break;\n                    case 36:\n                        return 82;\n                        break;\n                    case 37:\n                        return 83;\n                        break;\n                    case 38:\n                        return 80;\n                        break;\n                    case 39:\n                        return 74;\n                        break;\n                    case 40:\n                        return 76;\n                        break;\n                    case 41:\n                        return 71;\n                        break;\n                    case 42:\n                        yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n                        return 71;\n                        break;\n                    case 43:\n                        return 'INVALID';\n                        break;\n                    case 44:\n                        return 5;\n                        break;\n                }\n            },\n            rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n            conditions: { \"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        });\n        return lexer;\n    })();\n    parser.lexer = lexer;\n    function Parser() {\n        this.yy = {};\n    }\n    Parser.prototype = parser;\n    parser.Parser = Parser;\n    return new Parser;\n})();\nexport default parser;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQ0FBc0M7QUFDdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUVFO0FBQ0YsSUFBSSxNQUFNLEdBQUcsQ0FBQztJQUNkLElBQUksQ0FBQyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLEtBQUksQ0FBQyxHQUFDLENBQUMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxDQUFDLENBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxD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QUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVB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LE1BQU07Z0JBQ04sS0FBSyxFQUFFLENBQUM7Z0JBQUMsS0FBSyxFQUFFO29CQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM3SCxNQUFNO2dCQUNOLEtBQUssRUFBRTtvQkFDUCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUN2RSxNQUFNO2dCQUNOLEtBQUssRUFBRTtvQkFFSCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFD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QUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUU7b0JBQ25ILEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QixNQUFNO2dCQUNOLEtBQUssRUFBRSxDQUFDO2dCQUFDLEtBQUssRUFBRTtvQkFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsQixNQUFNO2FBQ0w7UUFDRCxDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbnJJLGNBQWMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUM7UUFDak0sVUFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJO1lBQ3RDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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UUFBUSxFQUFDLHdCQUF3QixFQUFDLHlCQUF5QixFQUFDLDZCQUE2QixFQUFDLHdCQUF3QixFQUFDLHlDQUF5QyxFQUFDLGNBQWMsRUFBQyxTQUFTLEVBQUMseURBQXlELEVBQUMsd0JBQXdCLEVBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQztZQUMxL0IsVUFBVSxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDO1NBQ2xVLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNMLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFNBQVMsTUFBTTtRQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsT0FBTyxJQUFJLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBQUEsZUFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBwYXJzZXIgZ2VuZXJhdGVkIGJ5IGppc29uIDAuNC4xOCAqL1xuLypcbiAgUmV0dXJucyBhIFBhcnNlciBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG5cbiAgUGFyc2VyOiB7XG4gICAgeXk6IHt9XG4gIH1cblxuICBQYXJzZXIucHJvdG90eXBlOiB7XG4gICAgeXk6IHt9LFxuICAgIHRyYWNlOiBmdW5jdGlvbigpLFxuICAgIHN5bWJvbHNfOiB7YXNzb2NpYXRpdmUgbGlzdDogbmFtZSA9PT4gbnVtYmVyfSxcbiAgICB0ZXJtaW5hbHNfOiB7YXNzb2NpYXRpdmUgbGlzdDogbnVtYmVyID09PiBuYW1lfSxcbiAgICBwcm9kdWN0aW9uc186IFsuLi5dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpLFxuICAgIHRhYmxlOiBbLi4uXSxcbiAgICBkZWZhdWx0QWN0aW9uczogey4uLn0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24oc3RyLCBoYXNoKSxcbiAgICBwYXJzZTogZnVuY3Rpb24oaW5wdXQpLFxuXG4gICAgbGV4ZXI6IHtcbiAgICAgICAgRU9GOiAxLFxuICAgICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbihzdHIsIGhhc2gpLFxuICAgICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQpLFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSxcbiAgICAgICAgdW5wdXQ6IGZ1bmN0aW9uKHN0ciksXG4gICAgICAgIG1vcmU6IGZ1bmN0aW9uKCksXG4gICAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pLFxuICAgICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCksXG4gICAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCksXG4gICAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSxcbiAgICAgICAgdGVzdF9tYXRjaDogZnVuY3Rpb24ocmVnZXhfbWF0Y2hfYXJyYXksIHJ1bGVfaW5kZXgpLFxuICAgICAgICBuZXh0OiBmdW5jdGlvbigpLFxuICAgICAgICBsZXg6IGZ1bmN0aW9uKCksXG4gICAgICAgIGJlZ2luOiBmdW5jdGlvbihjb25kaXRpb24pLFxuICAgICAgICBwb3BTdGF0ZTogZnVuY3Rpb24oKSxcbiAgICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24oKSxcbiAgICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uKCksXG4gICAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24oY29uZGl0aW9uKSxcblxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICByYW5nZXM6IGJvb2xlYW4gICAgICAgICAgIChvcHRpb25hbDogdHJ1ZSA9PT4gdG9rZW4gbG9jYXRpb24gaW5mbyB3aWxsIGluY2x1ZGUgYSAucmFuZ2VbXSBtZW1iZXIpXG4gICAgICAgICAgICBmbGV4OiBib29sZWFuICAgICAgICAgICAgIChvcHRpb25hbDogdHJ1ZSA9PT4gZmxleC1saWtlIGxleGluZyBiZWhhdmlvdXIgd2hlcmUgdGhlIHJ1bGVzIGFyZSB0ZXN0ZWQgZXhoYXVzdGl2ZWx5IHRvIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gpXG4gICAgICAgICAgICBiYWNrdHJhY2tfbGV4ZXI6IGJvb2xlYW4gIChvcHRpb25hbDogdHJ1ZSA9PT4gbGV4ZXIgcmVnZXhlcyBhcmUgdGVzdGVkIGluIG9yZGVyIGFuZCBmb3IgZWFjaCBtYXRjaGluZyByZWdleCB0aGUgYWN0aW9uIGNvZGUgaXMgaW52b2tlZDsgdGhlIGxleGVyIHRlcm1pbmF0ZXMgdGhlIHNjYW4gd2hlbiBhIHRva2VuIGlzIHJldHVybmVkIGJ5IHRoZSBhY3Rpb24gY29kZSlcbiAgICAgICAgfSxcblxuICAgICAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbih5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCksXG4gICAgICAgIHJ1bGVzOiBbLi4uXSxcbiAgICAgICAgY29uZGl0aW9uczoge2Fzc29jaWF0aXZlIGxpc3Q6IG5hbWUgPT0+IHNldH0sXG4gICAgfVxuICB9XG5cblxuICB0b2tlbiBsb2NhdGlvbiBpbmZvIChAJCwgXyQsIGV0Yy4pOiB7XG4gICAgZmlyc3RfbGluZTogbixcbiAgICBsYXN0X2xpbmU6IG4sXG4gICAgZmlyc3RfY29sdW1uOiBuLFxuICAgIGxhc3RfY29sdW1uOiBuLFxuICAgIHJhbmdlOiBbc3RhcnRfbnVtYmVyLCBlbmRfbnVtYmVyXSAgICAgICAod2hlcmUgdGhlIG51bWJlcnMgYXJlIGluZGV4ZXMgaW50byB0aGUgaW5wdXQgc3RyaW5nLCByZWd1bGFyIHplcm8tYmFzZWQpXG4gIH1cblxuXG4gIHRoZSBwYXJzZUVycm9yIGZ1bmN0aW9uIHJlY2VpdmVzIGEgJ2hhc2gnIG9iamVjdCB3aXRoIHRoZXNlIG1lbWJlcnMgZm9yIGxleGVyIGFuZCBwYXJzZXIgZXJyb3JzOiB7XG4gICAgdGV4dDogICAgICAgIChtYXRjaGVkIHRleHQpXG4gICAgdG9rZW46ICAgICAgICh0aGUgcHJvZHVjZWQgdGVybWluYWwgdG9rZW4sIGlmIGFueSlcbiAgICBsaW5lOiAgICAgICAgKHl5bGluZW5vKVxuICB9XG4gIHdoaWxlIHBhcnNlciAoZ3JhbW1hcikgZXJyb3JzIHdpbGwgYWxzbyBwcm92aWRlIHRoZXNlIG1lbWJlcnMsIGkuZS4gcGFyc2VyIGVycm9ycyBkZWxpdmVyIGEgc3VwZXJzZXQgb2YgYXR0cmlidXRlczoge1xuICAgIGxvYzogICAgICAgICAoeXlsbG9jKVxuICAgIGV4cGVjdGVkOiAgICAoc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNldCBvZiBleHBlY3RlZCB0b2tlbnMpXG4gICAgcmVjb3ZlcmFibGU6IChib29sZWFuOiBUUlVFIHdoZW4gdGhlIHBhcnNlciBoYXMgYSBlcnJvciByZWNvdmVyeSBydWxlIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVycm9yKVxuICB9XG4qL1xudmFyIHBhcnNlciA9IChmdW5jdGlvbigpe1xudmFyIG89ZnVuY3Rpb24oayx2LG8sbCl7Zm9yKG89b3x8e30sbD1rLmxlbmd0aDtsLS07b1trW2xdXT12KTtyZXR1cm4gb30sJFYwPVsyLDQ0XSwkVjE9WzEsMjBdLCRWMj1bNSwxNCwxNSwxOSwyOSwzNCwzOSw0NCw0Nyw0OCw1Miw1Niw2MF0sJFYzPVsxLDM1XSwkVjQ9WzEsMzhdLCRWNT1bMSwzMF0sJFY2PVsxLDMxXSwkVjc9WzEsMzJdLCRWOD1bMSwzM10sJFY5PVsxLDM0XSwkVmE9WzEsMzddLCRWYj1bMTQsMTUsMTksMjksMzQsMzksNDQsNDcsNDgsNTIsNTYsNjBdLCRWYz1bMTQsMTUsMTksMjksMzQsNDQsNDcsNDgsNTIsNTYsNjBdLCRWZD1bMTUsMThdLCRWZT1bMTQsMTUsMTksMjksMzQsNDcsNDgsNTIsNTYsNjBdLCRWZj1bMzMsNjQsNzEsNzksODAsODEsODIsODMsODRdLCRWZz1bMjMsMzMsNTUsNjQsNjcsNzEsNzQsNzksODAsODEsODIsODMsODRdLCRWaD1bMSw1MV0sJFZpPVsyMywzMyw1NSw2NCw2Nyw3MSw3NCw3OSw4MCw4MSw4Miw4Myw4NCw4Nl0sJFZqPVsyLDQzXSwkVms9WzU1LDY0LDcxLDc5LDgwLDgxLDgyLDgzLDg0XSwkVmw9WzEsNThdLCRWbT1bMSw1OV0sJFZuPVsxLDY2XSwkVm89WzMzLDY0LDcxLDc0LDc5LDgwLDgxLDgyLDgzLDg0XSwkVnA9WzIzLDY0LDcxLDc5LDgwLDgxLDgyLDgzLDg0XSwkVnE9WzEsNzZdLCRWcj1bNjQsNjcsNzEsNzksODAsODEsODIsODMsODRdLCRWcz1bMzMsNzRdLCRWdD1bMjMsMzMsNTUsNjcsNzEsNzRdLCRWdT1bMSwxMDZdLCRWdj1bMSwxMThdLCRWdz1bNzEsNzZdO1xudmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UgKCkgeyB9LFxueXk6IHt9LFxuc3ltYm9sc186IHtcImVycm9yXCI6MixcInJvb3RcIjozLFwicHJvZ3JhbVwiOjQsXCJFT0ZcIjo1LFwicHJvZ3JhbV9yZXBldGl0aW9uMFwiOjYsXCJzdGF0ZW1lbnRcIjo3LFwibXVzdGFjaGVcIjo4LFwiYmxvY2tcIjo5LFwicmF3QmxvY2tcIjoxMCxcInBhcnRpYWxcIjoxMSxcInBhcnRpYWxCbG9ja1wiOjEyLFwiY29udGVudFwiOjEzLFwiQ09NTUVOVFwiOjE0LFwiQ09OVEVOVFwiOjE1LFwib3BlblJhd0Jsb2NrXCI6MTYsXCJyYXdCbG9ja19yZXBldGl0aW9uMFwiOjE3LFwiRU5EX1JBV19CTE9DS1wiOjE4LFwiT1BFTl9SQVdfQkxPQ0tcIjoxOSxcImhlbHBlck5hbWVcIjoyMCxcIm9wZW5SYXdCbG9ja19yZXBldGl0aW9uMFwiOjIxLFwib3BlblJhd0Jsb2NrX29wdGlvbjBcIjoyMixcIkNMT1NFX1JBV19CTE9DS1wiOjIzLFwib3BlbkJsb2NrXCI6MjQsXCJibG9ja19vcHRpb24wXCI6MjUsXCJjbG9zZUJsb2NrXCI6MjYsXCJvcGVuSW52ZXJzZVwiOjI3LFwiYmxvY2tfb3B0aW9uMVwiOjI4LFwiT1BFTl9CTE9DS1wiOjI5LFwib3BlbkJsb2NrX3JlcGV0aXRpb24wXCI6MzAsXCJvcGVuQmxvY2tfb3B0aW9uMFwiOjMxLFwib3BlbkJsb2NrX29wdGlvbjFcIjozMixcIkNMT1NFXCI6MzMsXCJPUEVOX0lOVkVSU0VcIjozNCxcIm9wZW5JbnZlcnNlX3JlcGV0aXRpb24wXCI6MzUsXCJvcGVuSW52ZXJzZV9vcHRpb24wXCI6MzYsXCJvcGVuSW52ZXJzZV9vcHRpb24xXCI6MzcsXCJvcGVuSW52ZXJzZUNoYWluXCI6MzgsXCJPUEVOX0lOVkVSU0VfQ0hBSU5cIjozOSxcIm9wZW5JbnZlcnNlQ2hhaW5fcmVwZXRpdGlvbjBcIjo0MCxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjQxLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24xXCI6NDIsXCJpbnZlcnNlQW5kUHJvZ3JhbVwiOjQzLFwiSU5WRVJTRVwiOjQ0LFwiaW52ZXJzZUNoYWluXCI6NDUsXCJpbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjQ2LFwiT1BFTl9FTkRCTE9DS1wiOjQ3LFwiT1BFTlwiOjQ4LFwiZXhwclwiOjQ5LFwibXVzdGFjaGVfcmVwZXRpdGlvbjBcIjo1MCxcIm11c3RhY2hlX29wdGlvbjBcIjo1MSxcIk9QRU5fVU5FU0NBUEVEXCI6NTIsXCJtdXN0YWNoZV9yZXBldGl0aW9uMVwiOjUzLFwibXVzdGFjaGVfb3B0aW9uMVwiOjU0LFwiQ0xPU0VfVU5FU0NBUEVEXCI6NTUsXCJPUEVOX1BBUlRJQUxcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInNleHByXCI6NjMsXCJPUEVOX1NFWFBSXCI6NjQsXCJzZXhwcl9yZXBldGl0aW9uMFwiOjY1LFwic2V4cHJfb3B0aW9uMFwiOjY2LFwiQ0xPU0VfU0VYUFJcIjo2NyxcImhhc2hcIjo2OCxcImhhc2hfcmVwZXRpdGlvbl9wbHVzMFwiOjY5LFwiaGFzaFNlZ21lbnRcIjo3MCxcIklEXCI6NzEsXCJFUVVBTFNcIjo3MixcImJsb2NrUGFyYW1zXCI6NzMsXCJPUEVOX0JMT0NLX1BBUkFNU1wiOjc0LFwiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMFwiOjc1LFwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCI6NzYsXCJwYXRoXCI6NzcsXCJkYXRhTmFtZVwiOjc4LFwiU1RSSU5HXCI6NzksXCJOVU1CRVJcIjo4MCxcIkJPT0xFQU5cIjo4MSxcIlVOREVGSU5FRFwiOjgyLFwiTlVMTFwiOjgzLFwiREFUQVwiOjg0LFwicGF0aFNlZ21lbnRzXCI6ODUsXCJTRVBcIjo4NixcIiRhY2NlcHRcIjowLFwiJGVuZFwiOjF9LFxudGVybWluYWxzXzogezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUyOlwiT1BFTl9VTkVTQ0FQRURcIiw1NTpcIkNMT1NFX1VORVNDQVBFRFwiLDU2OlwiT1BFTl9QQVJUSUFMXCIsNjA6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NDpcIk9QRU5fU0VYUFJcIiw2NzpcIkNMT1NFX1NFWFBSXCIsNzE6XCJJRFwiLDcyOlwiRVFVQUxTXCIsNzQ6XCJPUEVOX0JMT0NLX1BBUkFNU1wiLDc2OlwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCIsNzk6XCJTVFJJTkdcIiw4MDpcIk5VTUJFUlwiLDgxOlwiQk9PTEVBTlwiLDgyOlwiVU5ERUZJTkVEXCIsODM6XCJOVUxMXCIsODQ6XCJEQVRBXCIsODY6XCJTRVBcIn0sXG5wcm9kdWN0aW9uc186IFswLFszLDJdLFs0LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFsxMywxXSxbMTAsM10sWzE2LDVdLFs5LDRdLFs5LDRdLFsyNCw2XSxbMjcsNl0sWzM4LDZdLFs0MywyXSxbNDUsM10sWzQ1LDFdLFsyNiwzXSxbOCw1XSxbOCw1XSxbMTEsNV0sWzEyLDNdLFs1OSw1XSxbNDksMV0sWzQ5LDFdLFs2Myw1XSxbNjgsMV0sWzcwLDNdLFs3MywzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzc4LDJdLFs3NywxXSxbODUsM10sWzg1LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs1MCwwXSxbNTAsMl0sWzUxLDBdLFs1MSwxXSxbNTMsMF0sWzUzLDJdLFs1NCwwXSxbNTQsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjUsMF0sWzY1LDJdLFs2NiwwXSxbNjYsMV0sWzY5LDFdLFs2OSwyXSxbNzUsMV0sWzc1LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlIC8qIGFjdGlvblsxXSAqLywgJCQgLyogdnN0YWNrICovLCBfJCAvKiBsc3RhY2sgKi8pIHtcbi8qIHRoaXMgPT0geXl2YWwgKi9cblxudmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbnN3aXRjaCAoeXlzdGF0ZSkge1xuY2FzZSAxOlxuIHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjpcbnRoaXMuJCA9IHl5LnByZXBhcmVQcm9ncmFtKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OiBjYXNlIDg6IGNhc2UgMjA6IGNhc2UgMjc6IGNhc2UgMjg6IGNhc2UgMzM6IGNhc2UgMzQ6XG50aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgOTpcblxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdDb21tZW50U3RhdGVtZW50JyxcbiAgICAgIHZhbHVlOiB5eS5zdHJpcENvbW1lbnQoJCRbJDBdKSxcbiAgICAgIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwXSwgJCRbJDBdKSxcbiAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKVxuICAgIH07XG4gIFxuYnJlYWs7XG5jYXNlIDEwOlxuXG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTpcbnRoaXMuJCA9IHl5LnByZXBhcmVSYXdCbG9jaygkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTI6XG50aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSB9O1xuYnJlYWs7XG5jYXNlIDEzOlxudGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OlxudGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgdHJ1ZSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTU6XG50aGlzLiQgPSB7IG9wZW46ICQkWyQwLTVdLCBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxNjogY2FzZSAxNzpcbnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTg6XG50aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuXG4gICAgdmFyIGludmVyc2UgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpLFxuICAgICAgICBwcm9ncmFtID0geXkucHJlcGFyZVByb2dyYW0oW2ludmVyc2VdLCAkJFskMC0xXS5sb2MpO1xuICAgIHByb2dyYW0uY2hhaW5lZCA9IHRydWU7XG5cbiAgICB0aGlzLiQgPSB7IHN0cmlwOiAkJFskMC0yXS5zdHJpcCwgcHJvZ3JhbTogcHJvZ3JhbSwgY2hhaW46IHRydWUgfTtcbiAgXG5icmVhaztcbmNhc2UgMjE6XG50aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjogY2FzZSAyMzpcbnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG5cbiAgICB0aGlzLiQgPSB7XG4gICAgICB0eXBlOiAnUGFydGlhbFN0YXRlbWVudCcsXG4gICAgICBuYW1lOiAkJFskMC0zXSxcbiAgICAgIHBhcmFtczogJCRbJDAtMl0sXG4gICAgICBoYXNoOiAkJFskMC0xXSxcbiAgICAgIGluZGVudDogJycsXG4gICAgICBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSxcbiAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKVxuICAgIH07XG4gIFxuYnJlYWs7XG5jYXNlIDI1OlxudGhpcy4kID0geXkucHJlcGFyZVBhcnRpYWxCbG9jaygkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjY6XG50aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyOTpcblxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6XG50aGlzLiQgPSB7dHlwZTogJ0hhc2gnLCBwYWlyczogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDMxOlxudGhpcy4kID0ge3R5cGU6ICdIYXNoUGFpcicsIGtleTogeXkuaWQoJCRbJDAtMl0pLCB2YWx1ZTogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDMyOlxudGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDM1OlxudGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjpcbnRoaXMuJCA9IHt0eXBlOiAnTnVtYmVyTGl0ZXJhbCcsIHZhbHVlOiBOdW1iZXIoJCRbJDBdKSwgb3JpZ2luYWw6IE51bWJlcigkJFskMF0pLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDM3OlxudGhpcy4kID0ge3R5cGU6ICdCb29sZWFuTGl0ZXJhbCcsIHZhbHVlOiAkJFskMF0gPT09ICd0cnVlJywgb3JpZ2luYWw6ICQkWyQwXSA9PT0gJ3RydWUnLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDM4OlxudGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTpcbnRoaXMuJCA9IHt0eXBlOiAnTnVsbExpdGVyYWwnLCBvcmlnaW5hbDogbnVsbCwgdmFsdWU6IG51bGwsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgNDA6XG50aGlzLiQgPSB5eS5wcmVwYXJlUGF0aCh0cnVlLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDQxOlxudGhpcy4kID0geXkucHJlcGFyZVBhdGgoZmFsc2UsICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNDI6XG4gJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDM6XG50aGlzLiQgPSBbe3BhcnQ6IHl5LmlkKCQkWyQwXSksIG9yaWdpbmFsOiAkJFskMF19XTtcbmJyZWFrO1xuY2FzZSA0NDogY2FzZSA0NjogY2FzZSA0ODogY2FzZSA1NjogY2FzZSA2MjogY2FzZSA2ODogY2FzZSA3NjogY2FzZSA4MDogY2FzZSA4NDogY2FzZSA4ODogY2FzZSA5MjpcbnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ1OiBjYXNlIDQ3OiBjYXNlIDQ5OiBjYXNlIDU3OiBjYXNlIDYzOiBjYXNlIDY5OiBjYXNlIDc3OiBjYXNlIDgxOiBjYXNlIDg1OiBjYXNlIDg5OiBjYXNlIDkzOiBjYXNlIDk3OiBjYXNlIDk5OlxuJCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk2OiBjYXNlIDk4OlxudGhpcy4kID0gWyQkWyQwXV07XG5icmVhaztcbn1cbn0sXG50YWJsZTogW28oWzUsMTQsMTUsMTksMjksMzQsNDgsNTIsNTYsNjBdLCRWMCx7MzoxLDQ6Miw2OjN9KSx7MTpbM119LHs1OlsxLDRdfSxvKFs1LDM5LDQ0LDQ3XSxbMiwyXSx7Nzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDI0OjE1LDI3OjE2LDE2OjE3LDU5OjE5LDE0OlsxLDEyXSwxNTokVjEsMTk6WzEsMjNdLDI5OlsxLDIxXSwzNDpbMSwyMl0sNDg6WzEsMTNdLDUyOlsxLDE0XSw1NjpbMSwxOF0sNjA6WzEsMjRdfSksezE6WzIsMV19LG8oJFYyLFsyLDQ1XSksbygkVjIsWzIsM10pLG8oJFYyLFsyLDRdKSxvKCRWMixbMiw1XSksbygkVjIsWzIsNl0pLG8oJFYyLFsyLDddKSxvKCRWMixbMiw4XSksbygkVjIsWzIsOV0pLHsyMDoyNiw0OToyNSw2MzoyNyw2NDokVjMsNzE6JFY0LDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSx7MjA6MjYsNDk6MzksNjM6MjcsNjQ6JFYzLDcxOiRWNCw3NzoyOCw3ODoyOSw3OTokVjUsODA6JFY2LDgxOiRWNyw4MjokVjgsODM6JFY5LDg0OiRWYSw4NTozNn0sbygkVmIsJFYwLHs2OjMsNDo0MH0pLG8oJFZjLCRWMCx7NjozLDQ6NDF9KSxvKCRWZCxbMiw0Nl0sezE3OjQyfSksezIwOjI2LDQ5OjQzLDYzOjI3LDY0OiRWMyw3MTokVjQsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LG8oJFZlLCRWMCx7NjozLDQ6NDR9KSxvKFs1LDE0LDE1LDE4LDE5LDI5LDM0LDM5LDQ0LDQ3LDQ4LDUyLDU2LDYwXSxbMiwxMF0pLHsyMDo0NSw3MTokVjQsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LHsyMDo0Niw3MTokVjQsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LHsyMDo0Nyw3MTokVjQsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LHsyMDoyNiw0OTo0OCw2MzoyNyw2NDokVjMsNzE6JFY0LDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSxvKCRWZixbMiw3Nl0sezUwOjQ5fSksbygkVmcsWzIsMjddKSxvKCRWZyxbMiwyOF0pLG8oJFZnLFsyLDMzXSksbygkVmcsWzIsMzRdKSxvKCRWZyxbMiwzNV0pLG8oJFZnLFsyLDM2XSksbygkVmcsWzIsMzddKSxvKCRWZyxbMiwzOF0pLG8oJFZnLFsyLDM5XSksezIwOjI2LDQ5OjUwLDYzOjI3LDY0OiRWMyw3MTokVjQsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LG8oJFZnLFsyLDQxXSx7ODY6JFZofSksezcxOiRWNCw4NTo1Mn0sbygkVmksJFZqKSxvKCRWayxbMiw4MF0sezUzOjUzfSksezI1OjU0LDM4OjU2LDM5OiRWbCw0Mzo1Nyw0NDokVm0sNDU6NTUsNDc6WzIsNTJdfSx7Mjg6NjAsNDM6NjEsNDQ6JFZtLDQ3OlsyLDU0XX0sezEzOjYzLDE1OiRWMSwxODpbMSw2Ml19LG8oJFZmLFsyLDg0XSx7NTc6NjR9KSx7MjY6NjUsNDc6JFZufSxvKCRWbyxbMiw1Nl0sezMwOjY3fSksbygkVm8sWzIsNjJdLHszNTo2OH0pLG8oJFZwLFsyLDQ4XSx7MjE6Njl9KSxvKCRWZixbMiw4OF0sezYxOjcwfSksezIwOjI2LDMzOlsyLDc4XSw0OTo3Miw1MTo3MSw2MzoyNyw2NDokVjMsNjg6NzMsNjk6NzQsNzA6NzUsNzE6JFZxLDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSxvKCRWcixbMiw5Ml0sezY1Ojc3fSksezcxOlsxLDc4XX0sbygkVmcsWzIsNDBdLHs4NjokVmh9KSx7MjA6MjYsNDk6ODAsNTQ6NzksNTU6WzIsODJdLDYzOjI3LDY0OiRWMyw2ODo4MSw2OTo3NCw3MDo3NSw3MTokVnEsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LHsyNjo4Miw0NzokVm59LHs0NzpbMiw1M119LG8oJFZiLCRWMCx7NjozLDQ6ODN9KSx7NDc6WzIsMjBdfSx7MjA6ODQsNzE6JFY0LDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSxvKCRWZSwkVjAsezY6Myw0Ojg1fSksezI2Ojg2LDQ3OiRWbn0sezQ3OlsyLDU1XX0sbygkVjIsWzIsMTFdKSxvKCRWZCxbMiw0N10pLHsyMDoyNiwzMzpbMiw4Nl0sNDk6ODgsNTg6ODcsNjM6MjcsNjQ6JFYzLDY4Ojg5LDY5Ojc0LDcwOjc1LDcxOiRWcSw3NzoyOCw3ODoyOSw3OTokVjUsODA6JFY2LDgxOiRWNyw4MjokVjgsODM6JFY5LDg0OiRWYSw4NTozNn0sbygkVjIsWzIsMjVdKSx7MjA6OTAsNzE6JFY0LDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSxvKCRWcyxbMiw1OF0sezIwOjI2LDYzOjI3LDc3OjI4LDc4OjI5LDg1OjM2LDY5Ojc0LDcwOjc1LDMxOjkxLDQ5OjkyLDY4OjkzLDY0OiRWMyw3MTokVnEsNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmF9KSxvKCRWcyxbMiw2NF0sezIwOjI2LDYzOjI3LDc3OjI4LDc4OjI5LDg1OjM2LDY5Ojc0LDcwOjc1LDM2Ojk0LDQ5Ojk1LDY4Ojk2LDY0OiRWMyw3MTokVnEsNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmF9KSx7MjA6MjYsMjI6OTcsMjM6WzIsNTBdLDQ5Ojk4LDYzOjI3LDY0OiRWMyw2ODo5OSw2OTo3NCw3MDo3NSw3MTokVnEsNzc6MjgsNzg6MjksNzk6JFY1LDgwOiRWNiw4MTokVjcsODI6JFY4LDgzOiRWOSw4NDokVmEsODU6MzZ9LHsyMDoyNiwzMzpbMiw5MF0sNDk6MTAxLDYyOjEwMCw2MzoyNyw2NDokVjMsNjg6MTAyLDY5Ojc0LDcwOjc1LDcxOiRWcSw3NzoyOCw3ODoyOSw3OTokVjUsODA6JFY2LDgxOiRWNyw4MjokVjgsODM6JFY5LDg0OiRWYSw4NTozNn0sezMzOlsxLDEwM119LG8oJFZmLFsyLDc3XSksezMzOlsyLDc5XX0sbyhbMjMsMzMsNTUsNjcsNzRdLFsyLDMwXSx7NzA6MTA0LDcxOlsxLDEwNV19KSxvKCRWdCxbMiw5Nl0pLG8oJFZpLCRWaix7NzI6JFZ1fSksezIwOjI2LDQ5OjEwOCw2MzoyNyw2NDokVjMsNjY6MTA3LDY3OlsyLDk0XSw2ODoxMDksNjk6NzQsNzA6NzUsNzE6JFZxLDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSxvKCRWaSxbMiw0Ml0pLHs1NTpbMSwxMTBdfSxvKCRWayxbMiw4MV0pLHs1NTpbMiw4M119LG8oJFYyLFsyLDEzXSksezM4OjU2LDM5OiRWbCw0Mzo1Nyw0NDokVm0sNDU6MTEyLDQ2OjExMSw0NzpbMiw3NF19LG8oJFZvLFsyLDY4XSx7NDA6MTEzfSksezQ3OlsyLDE4XX0sbygkVjIsWzIsMTRdKSx7MzM6WzEsMTE0XX0sbygkVmYsWzIsODVdKSx7MzM6WzIsODddfSx7MzM6WzEsMTE1XX0sezMyOjExNiwzMzpbMiw2MF0sNzM6MTE3LDc0OiRWdn0sbygkVm8sWzIsNTddKSxvKCRWcyxbMiw1OV0pLHszMzpbMiw2Nl0sMzc6MTE5LDczOjEyMCw3NDokVnZ9LG8oJFZvLFsyLDYzXSksbygkVnMsWzIsNjVdKSx7MjM6WzEsMTIxXX0sbygkVnAsWzIsNDldKSx7MjM6WzIsNTFdfSx7MzM6WzEsMTIyXX0sbygkVmYsWzIsODldKSx7MzM6WzIsOTFdfSxvKCRWMixbMiwyMl0pLG8oJFZ0LFsyLDk3XSksezcyOiRWdX0sezIwOjI2LDQ5OjEyMyw2MzoyNyw2NDokVjMsNzE6JFY0LDc3OjI4LDc4OjI5LDc5OiRWNSw4MDokVjYsODE6JFY3LDgyOiRWOCw4MzokVjksODQ6JFZhLDg1OjM2fSx7Njc6WzEsMTI0XX0sbygkVnIsWzIsOTNdKSx7Njc6WzIsOTVdfSxvKCRWMixbMiwyM10pLHs0NzpbMiwxOV19LHs0NzpbMiw3NV19LG8oJFZzLFsyLDcwXSx7MjA6MjYsNjM6MjcsNzc6MjgsNzg6MjksODU6MzYsNjk6NzQsNzA6NzUsNDE6MTI1LDQ5OjEyNiw2ODoxMjcsNjQ6JFYzLDcxOiRWcSw3OTokVjUsODA6JFY2LDgxOiRWNyw4MjokVjgsODM6JFY5LDg0OiRWYX0pLG8oJFYyLFsyLDI0XSksbygkVjIsWzIsMjFdKSx7MzM6WzEsMTI4XX0sezMzOlsyLDYxXX0sezcxOlsxLDEzMF0sNzU6MTI5fSx7MzM6WzEsMTMxXX0sezMzOlsyLDY3XX0sbygkVmQsWzIsMTJdKSxvKCRWZSxbMiwyNl0pLG8oJFZ0LFsyLDMxXSksbygkVmcsWzIsMjldKSx7MzM6WzIsNzJdLDQyOjEzMiw3MzoxMzMsNzQ6JFZ2fSxvKCRWbyxbMiw2OV0pLG8oJFZzLFsyLDcxXSksbygkVmIsWzIsMTVdKSx7NzE6WzEsMTM1XSw3NjpbMSwxMzRdfSxvKCRWdyxbMiw5OF0pLG8oJFZjLFsyLDE2XSksezMzOlsxLDEzNl19LHszMzpbMiw3M119LHszMzpbMiwzMl19LG8oJFZ3LFsyLDk5XSksbygkVmIsWzIsMTddKV0sXG5kZWZhdWx0QWN0aW9uczogezQ6WzIsMV0sNTU6WzIsNTNdLDU3OlsyLDIwXSw2MTpbMiw1NV0sNzM6WzIsNzldLDgxOlsyLDgzXSw4NTpbMiwxOF0sODk6WzIsODddLDk5OlsyLDUxXSwxMDI6WzIsOTFdLDEwOTpbMiw5NV0sMTExOlsyLDE5XSwxMTI6WzIsNzVdLDExNzpbMiw2MV0sMTIwOlsyLDY3XSwxMzM6WzIsNzNdLDEzNDpbMiwzMl19LFxucGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvciAoc3RyLCBoYXNoKSB7XG4gICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufSxcbnBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9ICcnLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgbGV4ZXIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXhlci5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXI7XG4gICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGxleGVyLnl5bGxvYyA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXhlci55eWxsb2MgPSB7fTtcbiAgICB9XG4gICAgdmFyIHl5bG9jID0gbGV4ZXIueXlsbG9jO1xuICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICB2YXIgcmFuZ2VzID0gbGV4ZXIub3B0aW9ucyAmJiBsZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIF90b2tlbl9zdGFjazpcbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gbGV4ZXIubGV4KCkgfHwgRU9GO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9O1xuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICd1bmRlZmluZWQnIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyU3RyID0gJyc7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaCgnXFwnJyArIHRoaXMudGVybWluYWxzX1twXSArICdcXCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9ICdQYXJzZSBlcnJvciBvbiBsaW5lICcgKyAoeXlsaW5lbm8gKyAxKSArICc6XFxuJyArIGxleGVyLnNob3dQb3NpdGlvbigpICsgJ1xcbkV4cGVjdGluZyAnICsgZXhwZWN0ZWQuam9pbignLCAnKSArICcsIGdvdCBcXCcnICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAnXFwnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSAnUGFyc2UgZXJyb3Igb24gbGluZSAnICsgKHl5bGluZW5vICsgMSkgKyAnOiBVbmV4cGVjdGVkICcgKyAoc3ltYm9sID09IEVPRiA/ICdlbmQgb2YgaW5wdXQnIDogJ1xcJycgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArICdcXCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsZXhlci5tYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZTogbGV4ZXIueXlsaW5lbm8sXG4gICAgICAgICAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICcgKyBzdGF0ZSArICcsIHRva2VuOiAnICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIueXlsZW5nO1xuICAgICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIueXlsbG9jO1xuICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufX07XG4vKiBnZW5lcmF0ZWQgYnkgamlzb24tbGV4IDAuMy40ICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7XG5cbkVPRjoxLFxuXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4vLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbi8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG5cbi8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbnVucHV0OmZ1bmN0aW9uIChjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgLy90aGlzLnl5bGVuZyAtPSBsZW47XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMClcbiAgICAgICAgICAgICAgICAgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4vLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4vLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxucmVqZWN0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJyArICh0aGlzLnl5bGluZW5vICsgMSkgKyAnLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuJyArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxuXG4vLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcblxuLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nIDogJycpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcblxuLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICB9LFxuXG4vLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbnRlc3RfbWF0Y2g6ZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICAgIGJhY2t1cDtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgLy8gc2F2ZSBjb250ZXh0XG4gICAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgIC8vIHJlY292ZXIgY29udGV4dFxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBydWxlIGFjdGlvbiBjYWxsZWQgcmVqZWN0KCkgaW1wbHlpbmcgdGhlIG5leHQgcnVsZSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbi8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG5uZXh0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICAgIHRoaXMueXl0ZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBydWxlIGFjdGlvbiBjYWxsZWQgcmVqZWN0KCkgaW1wbHlpbmcgYSBydWxlIE1JU21hdGNoLlxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZTogdGhpcyBpcyBhIGxleGVyIHJ1bGUgd2hpY2ggY29uc3VtZXMgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYSB0b2tlbiAoZS5nLiB3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZTogdGhpcyBpcyBhIGxleGVyIHJ1bGUgd2hpY2ggY29uc3VtZXMgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYSB0b2tlbiAoZS5nLiB3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcgKyAodGhpcy55eWxpbmVubyArIDEpICsgJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxubGV4OmZ1bmN0aW9uIGxleCAoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcblxuLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMgKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbnRvcFN0YXRlOmZ1bmN0aW9uIHRvcFN0YXRlIChuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG5wdXNoU3RhdGU6ZnVuY3Rpb24gcHVzaFN0YXRlIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH0sXG5cbi8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG5zdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgIH0sXG5vcHRpb25zOiB7fSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSx5eV8sJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucyxZWV9TVEFSVCkge1xuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlQ7XG5zd2l0Y2goJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0LnNsaWNlKC0yKSA9PT0gXCJcXFxcXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZih5eV8ueXl0ZXh0LnNsaWNlKC0xKSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJlbXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQpIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDE6cmV0dXJuIDE1O1xuYnJlYWs7XG5jYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMzp0aGlzLmJlZ2luKCdyYXcnKTsgcmV0dXJuIDE1O1xuYnJlYWs7XG5jYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBiZSB1c2luZyBgdGhpcy50b3BTdGF0ZSgpYCBiZWxvdywgYnV0IGl0IGN1cnJlbnRseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdGhlIHNlY29uZCB0b3AgaW5zdGVhZCBvZiB0aGUgZmlyc3QgdG9wLiBPcGVuZWQgYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpc3N1ZSBhYm91dCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vemFhY2gvamlzb24vaXNzdWVzLzI5MVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdID09PSAncmF3Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCg1LCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjQ7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjc7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU2O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUyO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcxO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MTtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODY7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NTtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDc5O1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gNzk7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg0O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MTtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgyO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4MztcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc0O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NjtcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzE7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MTtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59LFxucnVsZXM6IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xceyg/PVteL10pKS8sL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sL14oPzpbXlxceDAwXSs/KD89KFxce1xce1xce1xceykpKS8sL14oPzpbXFxzXFxTXSo/LS0ofik/XFx9XFx9KS8sL14oPzpcXCgpLywvXig/OlxcKSkvLC9eKD86XFx7XFx7XFx7XFx7KS8sL14oPzpcXH1cXH1cXH1cXH0pLywvXig/Olxce1xceyh+KT8+KS8sL14oPzpcXHtcXHsofik/Iz4pLywvXig/Olxce1xceyh+KT8jXFwqPykvLC9eKD86XFx7XFx7KH4pP1xcLykvLC9eKD86XFx7XFx7KH4pP1xcXlxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcXikvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxiKS8sL14oPzpcXHtcXHsofik/XFx7KS8sL14oPzpcXHtcXHsofik/JikvLC9eKD86XFx7XFx7KH4pPyEtLSkvLC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFwqPykvLC9eKD86PSkvLC9eKD86XFwuXFwuKS8sL14oPzpcXC4oPz0oWz1+fVxcc1xcLy4pfF0pKSkvLC9eKD86W1xcLy5dKS8sL14oPzpcXHMrKS8sL14oPzpcXH0ofik/XFx9XFx9KS8sL14oPzoofik/XFx9XFx9KS8sL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywvXig/OicoXFxcXFsnXXxbXiddKSonKS8sL14oPzpAKS8sL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxccyldKSkpLywvXig/OnVuZGVmaW5lZCg/PShbfn1cXHMpXSkpKS8sL14oPzpudWxsKD89KFt+fVxccyldKSkpLywvXig/Oi0/WzAtOV0rKD86XFwuWzAtOV0rKT8oPz0oW359XFxzKV0pKSkvLC9eKD86YXNcXHMrXFx8KS8sL14oPzpcXHwpLywvXig/OihbXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89KFs9fn1cXHNcXC8uKXxdKSkpKS8sL14oPzpcXFsoXFxcXFxcXXxbXlxcXV0pKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXSxcbmNvbmRpdGlvbnM6IHtcIm11XCI6e1wicnVsZXNcIjpbNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDRdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZW11XCI6e1wicnVsZXNcIjpbMl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJjb21cIjp7XCJydWxlc1wiOls2XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcInJhd1wiOntcInJ1bGVzXCI6WzMsNCw1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcIklOSVRJQUxcIjp7XCJydWxlc1wiOlswLDEsNDRdLFwiaW5jbHVzaXZlXCI6dHJ1ZX19XG59KTtcbnJldHVybiBsZXhlcjtcbn0pKCk7XG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7XG4gIHRoaXMueXkgPSB7fTtcbn1cblBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBwYXJzZXI7XG4iXX0=","/**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\nvar namedCharRefs = {\n    Aacute: \"Á\", aacute: \"á\", Abreve: \"Ă\", abreve: \"ă\", ac: \"∾\", acd: \"∿\", acE: \"∾̳\", Acirc: \"Â\", acirc: \"â\", acute: \"´\", Acy: \"А\", acy: \"а\", AElig: \"Æ\", aelig: \"æ\", af: \"\\u2061\", Afr: \"𝔄\", afr: \"𝔞\", Agrave: \"À\", agrave: \"à\", alefsym: \"ℵ\", aleph: \"ℵ\", Alpha: \"Α\", alpha: \"α\", Amacr: \"Ā\", amacr: \"ā\", amalg: \"⨿\", amp: \"&\", AMP: \"&\", andand: \"⩕\", And: \"⩓\", and: \"∧\", andd: \"⩜\", andslope: \"⩘\", andv: \"⩚\", ang: \"∠\", ange: \"⦤\", angle: \"∠\", angmsdaa: \"⦨\", angmsdab: \"⦩\", angmsdac: \"⦪\", angmsdad: \"⦫\", angmsdae: \"⦬\", angmsdaf: \"⦭\", angmsdag: \"⦮\", angmsdah: \"⦯\", angmsd: \"∡\", angrt: \"∟\", angrtvb: \"⊾\", angrtvbd: \"⦝\", angsph: \"∢\", angst: \"Å\", angzarr: \"⍼\", Aogon: \"Ą\", aogon: \"ą\", Aopf: \"𝔸\", aopf: \"𝕒\", apacir: \"⩯\", ap: \"≈\", apE: \"⩰\", ape: \"≊\", apid: \"≋\", apos: \"'\", ApplyFunction: \"\\u2061\", approx: \"≈\", approxeq: \"≊\", Aring: \"Å\", aring: \"å\", Ascr: \"𝒜\", ascr: \"𝒶\", Assign: \"≔\", ast: \"*\", asymp: \"≈\", asympeq: \"≍\", Atilde: \"Ã\", atilde: \"ã\", Auml: \"Ä\", auml: \"ä\", awconint: \"∳\", awint: \"⨑\", backcong: \"≌\", backepsilon: \"϶\", backprime: \"‵\", backsim: \"∽\", backsimeq: \"⋍\", Backslash: \"∖\", Barv: \"⫧\", barvee: \"⊽\", barwed: \"⌅\", Barwed: \"⌆\", barwedge: \"⌅\", bbrk: \"⎵\", bbrktbrk: \"⎶\", bcong: \"≌\", Bcy: \"Б\", bcy: \"б\", bdquo: \"„\", becaus: \"∵\", because: \"∵\", Because: \"∵\", bemptyv: \"⦰\", bepsi: \"϶\", bernou: \"ℬ\", Bernoullis: \"ℬ\", Beta: \"Β\", beta: \"β\", beth: \"ℶ\", between: \"≬\", Bfr: \"𝔅\", bfr: \"𝔟\", bigcap: \"⋂\", bigcirc: \"◯\", bigcup: \"⋃\", bigodot: \"⨀\", bigoplus: \"⨁\", bigotimes: \"⨂\", bigsqcup: \"⨆\", bigstar: \"★\", bigtriangledown: \"▽\", bigtriangleup: \"△\", biguplus: \"⨄\", bigvee: \"⋁\", bigwedge: \"⋀\", bkarow: \"⤍\", blacklozenge: \"⧫\", blacksquare: \"▪\", blacktriangle: \"▴\", blacktriangledown: \"▾\", blacktriangleleft: \"◂\", blacktriangleright: \"▸\", blank: \"␣\", blk12: \"▒\", blk14: \"░\", blk34: \"▓\", block: \"█\", bne: \"=⃥\", bnequiv: \"≡⃥\", bNot: \"⫭\", bnot: \"⌐\", Bopf: \"𝔹\", bopf: \"𝕓\", bot: \"⊥\", bottom: \"⊥\", bowtie: \"⋈\", boxbox: \"⧉\", boxdl: \"┐\", boxdL: \"╕\", boxDl: \"╖\", boxDL: \"╗\", boxdr: \"┌\", boxdR: \"╒\", boxDr: \"╓\", boxDR: \"╔\", boxh: \"─\", boxH: \"═\", boxhd: \"┬\", boxHd: \"╤\", boxhD: \"╥\", boxHD: \"╦\", boxhu: \"┴\", boxHu: \"╧\", boxhU: \"╨\", boxHU: \"╩\", boxminus: \"⊟\", boxplus: \"⊞\", boxtimes: \"⊠\", boxul: \"┘\", boxuL: \"╛\", boxUl: \"╜\", boxUL: \"╝\", boxur: \"└\", boxuR: \"╘\", boxUr: \"╙\", boxUR: \"╚\", boxv: \"│\", boxV: \"║\", boxvh: \"┼\", boxvH: \"╪\", boxVh: \"╫\", boxVH: \"╬\", boxvl: \"┤\", boxvL: \"╡\", boxVl: \"╢\", boxVL: \"╣\", boxvr: \"├\", boxvR: \"╞\", boxVr: \"╟\", boxVR: \"╠\", bprime: \"‵\", breve: \"˘\", Breve: \"˘\", brvbar: \"¦\", bscr: \"𝒷\", Bscr: \"ℬ\", bsemi: \"⁏\", bsim: \"∽\", bsime: \"⋍\", bsolb: \"⧅\", bsol: \"\\\\\", bsolhsub: \"⟈\", bull: \"•\", bullet: \"•\", bump: \"≎\", bumpE: \"⪮\", bumpe: \"≏\", Bumpeq: \"≎\", bumpeq: \"≏\", Cacute: \"Ć\", cacute: \"ć\", capand: \"⩄\", capbrcup: \"⩉\", capcap: \"⩋\", cap: \"∩\", Cap: \"⋒\", capcup: \"⩇\", capdot: \"⩀\", CapitalDifferentialD: \"ⅅ\", caps: \"∩︀\", caret: \"⁁\", caron: \"ˇ\", Cayleys: \"ℭ\", ccaps: \"⩍\", Ccaron: \"Č\", ccaron: \"č\", Ccedil: \"Ç\", ccedil: \"ç\", Ccirc: \"Ĉ\", ccirc: \"ĉ\", Cconint: \"∰\", ccups: \"⩌\", ccupssm: \"⩐\", Cdot: \"Ċ\", cdot: \"ċ\", cedil: \"¸\", Cedilla: \"¸\", cemptyv: \"⦲\", cent: \"¢\", centerdot: \"·\", CenterDot: \"·\", cfr: \"𝔠\", Cfr: \"ℭ\", CHcy: \"Ч\", chcy: \"ч\", check: \"✓\", checkmark: \"✓\", Chi: \"Χ\", chi: \"χ\", circ: \"ˆ\", circeq: \"≗\", circlearrowleft: \"↺\", circlearrowright: \"↻\", circledast: \"⊛\", circledcirc: \"⊚\", circleddash: \"⊝\", CircleDot: \"⊙\", circledR: \"®\", circledS: \"Ⓢ\", CircleMinus: \"⊖\", CirclePlus: \"⊕\", CircleTimes: \"⊗\", cir: \"○\", cirE: \"⧃\", cire: \"≗\", cirfnint: \"⨐\", cirmid: \"⫯\", cirscir: \"⧂\", ClockwiseContourIntegral: \"∲\", CloseCurlyDoubleQuote: \"”\", CloseCurlyQuote: \"’\", clubs: \"♣\", clubsuit: \"♣\", colon: \":\", Colon: \"∷\", Colone: \"⩴\", colone: \"≔\", coloneq: \"≔\", comma: \",\", commat: \"@\", comp: \"∁\", compfn: \"∘\", complement: \"∁\", complexes: \"ℂ\", cong: \"≅\", congdot: \"⩭\", Congruent: \"≡\", conint: \"∮\", Conint: \"∯\", ContourIntegral: \"∮\", copf: \"𝕔\", Copf: \"ℂ\", coprod: \"∐\", Coproduct: \"∐\", copy: \"©\", COPY: \"©\", copysr: \"℗\", CounterClockwiseContourIntegral: \"∳\", crarr: \"↵\", cross: \"✗\", Cross: \"⨯\", Cscr: \"𝒞\", cscr: \"𝒸\", csub: \"⫏\", csube: \"⫑\", csup: \"⫐\", csupe: \"⫒\", ctdot: \"⋯\", cudarrl: \"⤸\", cudarrr: \"⤵\", cuepr: \"⋞\", cuesc: \"⋟\", cularr: \"↶\", cularrp: \"⤽\", cupbrcap: \"⩈\", cupcap: \"⩆\", CupCap: \"≍\", cup: \"∪\", Cup: \"⋓\", cupcup: \"⩊\", cupdot: \"⊍\", cupor: \"⩅\", cups: \"∪︀\", curarr: \"↷\", curarrm: \"⤼\", curlyeqprec: \"⋞\", curlyeqsucc: \"⋟\", curlyvee: \"⋎\", curlywedge: \"⋏\", curren: \"¤\", curvearrowleft: \"↶\", curvearrowright: \"↷\", cuvee: \"⋎\", cuwed: \"⋏\", cwconint: \"∲\", cwint: \"∱\", cylcty: \"⌭\", dagger: \"†\", Dagger: \"‡\", daleth: \"ℸ\", darr: \"↓\", Darr: \"↡\", dArr: \"⇓\", dash: \"‐\", Dashv: \"⫤\", dashv: \"⊣\", dbkarow: \"⤏\", dblac: \"˝\", Dcaron: \"Ď\", dcaron: \"ď\", Dcy: \"Д\", dcy: \"д\", ddagger: \"‡\", ddarr: \"⇊\", DD: \"ⅅ\", dd: \"ⅆ\", DDotrahd: \"⤑\", ddotseq: \"⩷\", deg: \"°\", Del: \"∇\", Delta: \"Δ\", delta: \"δ\", demptyv: \"⦱\", dfisht: \"⥿\", Dfr: \"𝔇\", dfr: \"𝔡\", dHar: \"⥥\", dharl: \"⇃\", dharr: \"⇂\", DiacriticalAcute: \"´\", DiacriticalDot: \"˙\", DiacriticalDoubleAcute: \"˝\", DiacriticalGrave: \"`\", DiacriticalTilde: \"˜\", diam: \"⋄\", diamond: \"⋄\", Diamond: \"⋄\", diamondsuit: \"♦\", diams: \"♦\", die: \"¨\", DifferentialD: \"ⅆ\", digamma: \"ϝ\", disin: \"⋲\", div: \"÷\", divide: \"÷\", divideontimes: \"⋇\", divonx: \"⋇\", DJcy: \"Ђ\", djcy: \"ђ\", dlcorn: \"⌞\", dlcrop: \"⌍\", dollar: \"$\", Dopf: \"𝔻\", dopf: \"𝕕\", Dot: \"¨\", dot: \"˙\", DotDot: \"⃜\", doteq: \"≐\", doteqdot: \"≑\", DotEqual: \"≐\", dotminus: \"∸\", dotplus: \"∔\", dotsquare: \"⊡\", doublebarwedge: \"⌆\", DoubleContourIntegral: \"∯\", DoubleDot: \"¨\", DoubleDownArrow: \"⇓\", DoubleLeftArrow: \"⇐\", DoubleLeftRightArrow: \"⇔\", DoubleLeftTee: \"⫤\", DoubleLongLeftArrow: \"⟸\", DoubleLongLeftRightArrow: \"⟺\", DoubleLongRightArrow: \"⟹\", DoubleRightArrow: \"⇒\", DoubleRightTee: \"⊨\", DoubleUpArrow: \"⇑\", DoubleUpDownArrow: \"⇕\", DoubleVerticalBar: \"∥\", DownArrowBar: \"⤓\", downarrow: \"↓\", DownArrow: \"↓\", Downarrow: \"⇓\", DownArrowUpArrow: \"⇵\", DownBreve: \"̑\", downdownarrows: \"⇊\", downharpoonleft: \"⇃\", downharpoonright: \"⇂\", DownLeftRightVector: \"⥐\", DownLeftTeeVector: \"⥞\", DownLeftVectorBar: \"⥖\", DownLeftVector: \"↽\", DownRightTeeVector: \"⥟\", DownRightVectorBar: \"⥗\", DownRightVector: \"⇁\", DownTeeArrow: \"↧\", DownTee: \"⊤\", drbkarow: \"⤐\", drcorn: \"⌟\", drcrop: \"⌌\", Dscr: \"𝒟\", dscr: \"𝒹\", DScy: \"Ѕ\", dscy: \"ѕ\", dsol: \"⧶\", Dstrok: \"Đ\", dstrok: \"đ\", dtdot: \"⋱\", dtri: \"▿\", dtrif: \"▾\", duarr: \"⇵\", duhar: \"⥯\", dwangle: \"⦦\", DZcy: \"Џ\", dzcy: \"џ\", dzigrarr: \"⟿\", Eacute: \"É\", eacute: \"é\", easter: \"⩮\", Ecaron: \"Ě\", ecaron: \"ě\", Ecirc: \"Ê\", ecirc: \"ê\", ecir: \"≖\", ecolon: \"≕\", Ecy: \"Э\", ecy: \"э\", eDDot: \"⩷\", Edot: \"Ė\", edot: \"ė\", eDot: \"≑\", ee: \"ⅇ\", efDot: \"≒\", Efr: \"𝔈\", efr: \"𝔢\", eg: \"⪚\", Egrave: \"È\", egrave: \"è\", egs: \"⪖\", egsdot: \"⪘\", el: \"⪙\", Element: \"∈\", elinters: \"⏧\", ell: \"ℓ\", els: \"⪕\", elsdot: \"⪗\", Emacr: \"Ē\", emacr: \"ē\", empty: \"∅\", emptyset: \"∅\", EmptySmallSquare: \"◻\", emptyv: \"∅\", EmptyVerySmallSquare: \"▫\", emsp13: \" \", emsp14: \" \", emsp: \" \", ENG: \"Ŋ\", eng: \"ŋ\", ensp: \" \", Eogon: \"Ę\", eogon: \"ę\", Eopf: \"𝔼\", eopf: \"𝕖\", epar: \"⋕\", eparsl: \"⧣\", eplus: \"⩱\", epsi: \"ε\", Epsilon: \"Ε\", epsilon: \"ε\", epsiv: \"ϵ\", eqcirc: \"≖\", eqcolon: \"≕\", eqsim: \"≂\", eqslantgtr: \"⪖\", eqslantless: \"⪕\", Equal: \"⩵\", equals: \"=\", EqualTilde: \"≂\", equest: \"≟\", Equilibrium: \"⇌\", equiv: \"≡\", equivDD: \"⩸\", eqvparsl: \"⧥\", erarr: \"⥱\", erDot: \"≓\", escr: \"ℯ\", Escr: \"ℰ\", esdot: \"≐\", Esim: \"⩳\", esim: \"≂\", Eta: \"Η\", eta: \"η\", ETH: \"Ð\", eth: \"ð\", Euml: \"Ë\", euml: \"ë\", euro: \"€\", excl: \"!\", exist: \"∃\", Exists: \"∃\", expectation: \"ℰ\", exponentiale: \"ⅇ\", ExponentialE: \"ⅇ\", fallingdotseq: \"≒\", Fcy: \"Ф\", fcy: \"ф\", female: \"♀\", ffilig: \"ﬃ\", fflig: \"ﬀ\", ffllig: \"ﬄ\", Ffr: \"𝔉\", ffr: \"𝔣\", filig: \"ﬁ\", FilledSmallSquare: \"◼\", FilledVerySmallSquare: \"▪\", fjlig: \"fj\", flat: \"♭\", fllig: \"ﬂ\", fltns: \"▱\", fnof: \"ƒ\", Fopf: \"𝔽\", fopf: \"𝕗\", forall: \"∀\", ForAll: \"∀\", fork: \"⋔\", forkv: \"⫙\", Fouriertrf: \"ℱ\", fpartint: \"⨍\", frac12: \"½\", frac13: \"⅓\", frac14: \"¼\", frac15: \"⅕\", frac16: \"⅙\", frac18: \"⅛\", frac23: \"⅔\", frac25: \"⅖\", frac34: \"¾\", frac35: \"⅗\", frac38: \"⅜\", frac45: \"⅘\", frac56: \"⅚\", frac58: \"⅝\", frac78: \"⅞\", frasl: \"⁄\", frown: \"⌢\", fscr: \"𝒻\", Fscr: \"ℱ\", gacute: \"ǵ\", Gamma: \"Γ\", gamma: \"γ\", Gammad: \"Ϝ\", gammad: \"ϝ\", gap: \"⪆\", Gbreve: \"Ğ\", gbreve: \"ğ\", Gcedil: \"Ģ\", Gcirc: \"Ĝ\", gcirc: \"ĝ\", Gcy: \"Г\", gcy: \"г\", Gdot: \"Ġ\", gdot: \"ġ\", ge: \"≥\", gE: \"≧\", gEl: \"⪌\", gel: \"⋛\", geq: \"≥\", geqq: \"≧\", geqslant: \"⩾\", gescc: \"⪩\", ges: \"⩾\", gesdot: \"⪀\", gesdoto: \"⪂\", gesdotol: \"⪄\", gesl: \"⋛︀\", gesles: \"⪔\", Gfr: \"𝔊\", gfr: \"𝔤\", gg: \"≫\", Gg: \"⋙\", ggg: \"⋙\", gimel: \"ℷ\", GJcy: \"Ѓ\", gjcy: \"ѓ\", gla: \"⪥\", gl: \"≷\", glE: \"⪒\", glj: \"⪤\", gnap: \"⪊\", gnapprox: \"⪊\", gne: \"⪈\", gnE: \"≩\", gneq: \"⪈\", gneqq: \"≩\", gnsim: \"⋧\", Gopf: \"𝔾\", gopf: \"𝕘\", grave: \"`\", GreaterEqual: \"≥\", GreaterEqualLess: \"⋛\", GreaterFullEqual: \"≧\", GreaterGreater: \"⪢\", GreaterLess: \"≷\", GreaterSlantEqual: \"⩾\", GreaterTilde: \"≳\", Gscr: \"𝒢\", gscr: \"ℊ\", gsim: \"≳\", gsime: \"⪎\", gsiml: \"⪐\", gtcc: \"⪧\", gtcir: \"⩺\", gt: \">\", GT: \">\", Gt: \"≫\", gtdot: \"⋗\", gtlPar: \"⦕\", gtquest: \"⩼\", gtrapprox: \"⪆\", gtrarr: \"⥸\", gtrdot: \"⋗\", gtreqless: \"⋛\", gtreqqless: \"⪌\", gtrless: \"≷\", gtrsim: \"≳\", gvertneqq: \"≩︀\", gvnE: \"≩︀\", Hacek: \"ˇ\", hairsp: \" \", half: \"½\", hamilt: \"ℋ\", HARDcy: \"Ъ\", hardcy: \"ъ\", harrcir: \"⥈\", harr: \"↔\", hArr: \"⇔\", harrw: \"↭\", Hat: \"^\", hbar: \"ℏ\", Hcirc: \"Ĥ\", hcirc: \"ĥ\", hearts: \"♥\", heartsuit: \"♥\", hellip: \"…\", hercon: \"⊹\", hfr: \"𝔥\", Hfr: \"ℌ\", HilbertSpace: \"ℋ\", hksearow: \"⤥\", hkswarow: \"⤦\", hoarr: \"⇿\", homtht: \"∻\", hookleftarrow: \"↩\", hookrightarrow: \"↪\", hopf: \"𝕙\", Hopf: \"ℍ\", horbar: \"―\", HorizontalLine: \"─\", hscr: \"𝒽\", Hscr: \"ℋ\", hslash: \"ℏ\", Hstrok: \"Ħ\", hstrok: \"ħ\", HumpDownHump: \"≎\", HumpEqual: \"≏\", hybull: \"⁃\", hyphen: \"‐\", Iacute: \"Í\", iacute: \"í\", ic: \"\\u2063\", Icirc: \"Î\", icirc: \"î\", Icy: \"И\", icy: \"и\", Idot: \"İ\", IEcy: \"Е\", iecy: \"е\", iexcl: \"¡\", iff: \"⇔\", ifr: \"𝔦\", Ifr: \"ℑ\", Igrave: \"Ì\", igrave: \"ì\", ii: \"ⅈ\", iiiint: \"⨌\", iiint: \"∭\", iinfin: \"⧜\", iiota: \"℩\", IJlig: \"Ĳ\", ijlig: \"ĳ\", Imacr: \"Ī\", imacr: \"ī\", image: \"ℑ\", ImaginaryI: \"ⅈ\", imagline: \"ℐ\", imagpart: \"ℑ\", imath: \"ı\", Im: \"ℑ\", imof: \"⊷\", imped: \"Ƶ\", Implies: \"⇒\", incare: \"℅\", in: \"∈\", infin: \"∞\", infintie: \"⧝\", inodot: \"ı\", intcal: \"⊺\", int: \"∫\", Int: \"∬\", integers: \"ℤ\", Integral: \"∫\", intercal: \"⊺\", Intersection: \"⋂\", intlarhk: \"⨗\", intprod: \"⨼\", InvisibleComma: \"\\u2063\", InvisibleTimes: \"\\u2062\", IOcy: \"Ё\", iocy: \"ё\", Iogon: \"Į\", iogon: \"į\", Iopf: \"𝕀\", iopf: \"𝕚\", Iota: \"Ι\", iota: \"ι\", iprod: \"⨼\", iquest: \"¿\", iscr: \"𝒾\", Iscr: \"ℐ\", isin: \"∈\", isindot: \"⋵\", isinE: \"⋹\", isins: \"⋴\", isinsv: \"⋳\", isinv: \"∈\", it: \"\\u2062\", Itilde: \"Ĩ\", itilde: \"ĩ\", Iukcy: \"І\", iukcy: \"і\", Iuml: \"Ï\", iuml: \"ï\", Jcirc: \"Ĵ\", jcirc: \"ĵ\", Jcy: \"Й\", jcy: \"й\", Jfr: \"𝔍\", jfr: \"𝔧\", jmath: \"ȷ\", Jopf: \"𝕁\", jopf: \"𝕛\", Jscr: \"𝒥\", jscr: \"𝒿\", Jsercy: \"Ј\", jsercy: \"ј\", Jukcy: \"Є\", jukcy: \"є\", Kappa: \"Κ\", kappa: \"κ\", kappav: \"ϰ\", Kcedil: \"Ķ\", kcedil: \"ķ\", Kcy: \"К\", kcy: \"к\", Kfr: \"𝔎\", kfr: \"𝔨\", kgreen: \"ĸ\", KHcy: \"Х\", khcy: \"х\", KJcy: \"Ќ\", kjcy: \"ќ\", Kopf: \"𝕂\", kopf: \"𝕜\", Kscr: \"𝒦\", kscr: \"𝓀\", lAarr: \"⇚\", Lacute: \"Ĺ\", lacute: \"ĺ\", laemptyv: \"⦴\", lagran: \"ℒ\", Lambda: \"Λ\", lambda: \"λ\", lang: \"⟨\", Lang: \"⟪\", langd: \"⦑\", langle: \"⟨\", lap: \"⪅\", Laplacetrf: \"ℒ\", laquo: \"«\", larrb: \"⇤\", larrbfs: \"⤟\", larr: \"←\", Larr: \"↞\", lArr: \"⇐\", larrfs: \"⤝\", larrhk: \"↩\", larrlp: \"↫\", larrpl: \"⤹\", larrsim: \"⥳\", larrtl: \"↢\", latail: \"⤙\", lAtail: \"⤛\", lat: \"⪫\", late: \"⪭\", lates: \"⪭︀\", lbarr: \"⤌\", lBarr: \"⤎\", lbbrk: \"❲\", lbrace: \"{\", lbrack: \"[\", lbrke: \"⦋\", lbrksld: \"⦏\", lbrkslu: \"⦍\", Lcaron: \"Ľ\", lcaron: \"ľ\", Lcedil: \"Ļ\", lcedil: \"ļ\", lceil: \"⌈\", lcub: \"{\", Lcy: \"Л\", lcy: \"л\", ldca: \"⤶\", ldquo: \"“\", ldquor: \"„\", ldrdhar: \"⥧\", ldrushar: \"⥋\", ldsh: \"↲\", le: \"≤\", lE: \"≦\", LeftAngleBracket: \"⟨\", LeftArrowBar: \"⇤\", leftarrow: \"←\", LeftArrow: \"←\", Leftarrow: \"⇐\", LeftArrowRightArrow: \"⇆\", leftarrowtail: \"↢\", LeftCeiling: \"⌈\", LeftDoubleBracket: \"⟦\", LeftDownTeeVector: \"⥡\", LeftDownVectorBar: \"⥙\", LeftDownVector: \"⇃\", LeftFloor: \"⌊\", leftharpoondown: \"↽\", leftharpoonup: \"↼\", leftleftarrows: \"⇇\", leftrightarrow: \"↔\", LeftRightArrow: \"↔\", Leftrightarrow: \"⇔\", leftrightarrows: \"⇆\", leftrightharpoons: \"⇋\", leftrightsquigarrow: \"↭\", LeftRightVector: \"⥎\", LeftTeeArrow: \"↤\", LeftTee: \"⊣\", LeftTeeVector: \"⥚\", leftthreetimes: \"⋋\", LeftTriangleBar: \"⧏\", LeftTriangle: \"⊲\", LeftTriangleEqual: \"⊴\", LeftUpDownVector: \"⥑\", LeftUpTeeVector: \"⥠\", LeftUpVectorBar: \"⥘\", LeftUpVector: \"↿\", LeftVectorBar: \"⥒\", LeftVector: \"↼\", lEg: \"⪋\", leg: \"⋚\", leq: \"≤\", leqq: \"≦\", leqslant: \"⩽\", lescc: \"⪨\", les: \"⩽\", lesdot: \"⩿\", lesdoto: \"⪁\", lesdotor: \"⪃\", lesg: \"⋚︀\", lesges: \"⪓\", lessapprox: \"⪅\", lessdot: \"⋖\", lesseqgtr: \"⋚\", lesseqqgtr: \"⪋\", LessEqualGreater: \"⋚\", LessFullEqual: \"≦\", LessGreater: \"≶\", lessgtr: \"≶\", LessLess: \"⪡\", lesssim: \"≲\", LessSlantEqual: \"⩽\", LessTilde: \"≲\", lfisht: \"⥼\", lfloor: \"⌊\", Lfr: \"𝔏\", lfr: \"𝔩\", lg: \"≶\", lgE: \"⪑\", lHar: \"⥢\", lhard: \"↽\", lharu: \"↼\", lharul: \"⥪\", lhblk: \"▄\", LJcy: \"Љ\", ljcy: \"љ\", llarr: \"⇇\", ll: \"≪\", Ll: \"⋘\", llcorner: \"⌞\", Lleftarrow: \"⇚\", llhard: \"⥫\", lltri: \"◺\", Lmidot: \"Ŀ\", lmidot: \"ŀ\", lmoustache: \"⎰\", lmoust: \"⎰\", lnap: \"⪉\", lnapprox: \"⪉\", lne: \"⪇\", lnE: \"≨\", lneq: \"⪇\", lneqq: \"≨\", lnsim: \"⋦\", loang: \"⟬\", loarr: \"⇽\", lobrk: \"⟦\", longleftarrow: \"⟵\", LongLeftArrow: \"⟵\", Longleftarrow: \"⟸\", longleftrightarrow: \"⟷\", LongLeftRightArrow: \"⟷\", Longleftrightarrow: \"⟺\", longmapsto: \"⟼\", longrightarrow: \"⟶\", LongRightArrow: \"⟶\", Longrightarrow: \"⟹\", looparrowleft: \"↫\", looparrowright: \"↬\", lopar: \"⦅\", Lopf: \"𝕃\", lopf: \"𝕝\", loplus: \"⨭\", lotimes: \"⨴\", lowast: \"∗\", lowbar: \"_\", LowerLeftArrow: \"↙\", LowerRightArrow: \"↘\", loz: \"◊\", lozenge: \"◊\", lozf: \"⧫\", lpar: \"(\", lparlt: \"⦓\", lrarr: \"⇆\", lrcorner: \"⌟\", lrhar: \"⇋\", lrhard: \"⥭\", lrm: \"\\u200e\", lrtri: \"⊿\", lsaquo: \"‹\", lscr: \"𝓁\", Lscr: \"ℒ\", lsh: \"↰\", Lsh: \"↰\", lsim: \"≲\", lsime: \"⪍\", lsimg: \"⪏\", lsqb: \"[\", lsquo: \"‘\", lsquor: \"‚\", Lstrok: \"Ł\", lstrok: \"ł\", ltcc: \"⪦\", ltcir: \"⩹\", lt: \"<\", LT: \"<\", Lt: \"≪\", ltdot: \"⋖\", lthree: \"⋋\", ltimes: \"⋉\", ltlarr: \"⥶\", ltquest: \"⩻\", ltri: \"◃\", ltrie: \"⊴\", ltrif: \"◂\", ltrPar: \"⦖\", lurdshar: \"⥊\", luruhar: \"⥦\", lvertneqq: \"≨︀\", lvnE: \"≨︀\", macr: \"¯\", male: \"♂\", malt: \"✠\", maltese: \"✠\", Map: \"⤅\", map: \"↦\", mapsto: \"↦\", mapstodown: \"↧\", mapstoleft: \"↤\", mapstoup: \"↥\", marker: \"▮\", mcomma: \"⨩\", Mcy: \"М\", mcy: \"м\", mdash: \"—\", mDDot: \"∺\", measuredangle: \"∡\", MediumSpace: \" \", Mellintrf: \"ℳ\", Mfr: \"𝔐\", mfr: \"𝔪\", mho: \"℧\", micro: \"µ\", midast: \"*\", midcir: \"⫰\", mid: \"∣\", middot: \"·\", minusb: \"⊟\", minus: \"−\", minusd: \"∸\", minusdu: \"⨪\", MinusPlus: \"∓\", mlcp: \"⫛\", mldr: \"…\", mnplus: \"∓\", models: \"⊧\", Mopf: \"𝕄\", mopf: \"𝕞\", mp: \"∓\", mscr: \"𝓂\", Mscr: \"ℳ\", mstpos: \"∾\", Mu: \"Μ\", mu: \"μ\", multimap: \"⊸\", mumap: \"⊸\", nabla: \"∇\", Nacute: \"Ń\", nacute: \"ń\", nang: \"∠⃒\", nap: \"≉\", napE: \"⩰̸\", napid: \"≋̸\", napos: \"ŉ\", napprox: \"≉\", natural: \"♮\", naturals: \"ℕ\", natur: \"♮\", nbsp: \" \", nbump: \"≎̸\", nbumpe: \"≏̸\", ncap: \"⩃\", Ncaron: \"Ň\", ncaron: \"ň\", Ncedil: \"Ņ\", ncedil: \"ņ\", ncong: \"≇\", ncongdot: \"⩭̸\", ncup: \"⩂\", Ncy: \"Н\", ncy: \"н\", ndash: \"–\", nearhk: \"⤤\", nearr: \"↗\", neArr: \"⇗\", nearrow: \"↗\", ne: \"≠\", nedot: \"≐̸\", NegativeMediumSpace: \"​\", NegativeThickSpace: \"​\", NegativeThinSpace: \"​\", NegativeVeryThinSpace: \"​\", nequiv: \"≢\", nesear: \"⤨\", nesim: \"≂̸\", NestedGreaterGreater: \"≫\", NestedLessLess: \"≪\", NewLine: \"\\u000a\", nexist: \"∄\", nexists: \"∄\", Nfr: \"𝔑\", nfr: \"𝔫\", ngE: \"≧̸\", nge: \"≱\", ngeq: \"≱\", ngeqq: \"≧̸\", ngeqslant: \"⩾̸\", nges: \"⩾̸\", nGg: \"⋙̸\", ngsim: \"≵\", nGt: \"≫⃒\", ngt: \"≯\", ngtr: \"≯\", nGtv: \"≫̸\", nharr: \"↮\", nhArr: \"⇎\", nhpar: \"⫲\", ni: \"∋\", nis: \"⋼\", nisd: \"⋺\", niv: \"∋\", NJcy: \"Њ\", njcy: \"њ\", nlarr: \"↚\", nlArr: \"⇍\", nldr: \"‥\", nlE: \"≦̸\", nle: \"≰\", nleftarrow: \"↚\", nLeftarrow: \"⇍\", nleftrightarrow: \"↮\", nLeftrightarrow: \"⇎\", nleq: \"≰\", nleqq: \"≦̸\", nleqslant: \"⩽̸\", nles: \"⩽̸\", nless: \"≮\", nLl: \"⋘̸\", nlsim: \"≴\", nLt: \"≪⃒\", nlt: \"≮\", nltri: \"⋪\", nltrie: \"⋬\", nLtv: \"≪̸\", nmid: \"∤\", NoBreak: \"\\u2060\", NonBreakingSpace: \" \", nopf: \"𝕟\", Nopf: \"ℕ\", Not: \"⫬\", not: \"¬\", NotCongruent: \"≢\", NotCupCap: \"≭\", NotDoubleVerticalBar: \"∦\", NotElement: \"∉\", NotEqual: \"≠\", NotEqualTilde: \"≂̸\", NotExists: \"∄\", NotGreater: \"≯\", NotGreaterEqual: \"≱\", NotGreaterFullEqual: \"≧̸\", NotGreaterGreater: \"≫̸\", NotGreaterLess: \"≹\", NotGreaterSlantEqual: \"⩾̸\", NotGreaterTilde: \"≵\", NotHumpDownHump: \"≎̸\", NotHumpEqual: \"≏̸\", notin: \"∉\", notindot: \"⋵̸\", notinE: \"⋹̸\", notinva: \"∉\", notinvb: \"⋷\", notinvc: \"⋶\", NotLeftTriangleBar: \"⧏̸\", NotLeftTriangle: \"⋪\", NotLeftTriangleEqual: \"⋬\", NotLess: \"≮\", NotLessEqual: \"≰\", NotLessGreater: \"≸\", NotLessLess: \"≪̸\", NotLessSlantEqual: \"⩽̸\", NotLessTilde: \"≴\", NotNestedGreaterGreater: \"⪢̸\", NotNestedLessLess: \"⪡̸\", notni: \"∌\", notniva: \"∌\", notnivb: \"⋾\", notnivc: \"⋽\", NotPrecedes: \"⊀\", NotPrecedesEqual: \"⪯̸\", NotPrecedesSlantEqual: \"⋠\", NotReverseElement: \"∌\", NotRightTriangleBar: \"⧐̸\", NotRightTriangle: \"⋫\", NotRightTriangleEqual: \"⋭\", NotSquareSubset: \"⊏̸\", NotSquareSubsetEqual: \"⋢\", NotSquareSuperset: \"⊐̸\", NotSquareSupersetEqual: \"⋣\", NotSubset: \"⊂⃒\", NotSubsetEqual: \"⊈\", NotSucceeds: \"⊁\", NotSucceedsEqual: \"⪰̸\", NotSucceedsSlantEqual: \"⋡\", NotSucceedsTilde: \"≿̸\", NotSuperset: \"⊃⃒\", NotSupersetEqual: \"⊉\", NotTilde: \"≁\", NotTildeEqual: \"≄\", NotTildeFullEqual: \"≇\", NotTildeTilde: \"≉\", NotVerticalBar: \"∤\", nparallel: \"∦\", npar: \"∦\", nparsl: \"⫽⃥\", npart: \"∂̸\", npolint: \"⨔\", npr: \"⊀\", nprcue: \"⋠\", nprec: \"⊀\", npreceq: \"⪯̸\", npre: \"⪯̸\", nrarrc: \"⤳̸\", nrarr: \"↛\", nrArr: \"⇏\", nrarrw: \"↝̸\", nrightarrow: \"↛\", nRightarrow: \"⇏\", nrtri: \"⋫\", nrtrie: \"⋭\", nsc: \"⊁\", nsccue: \"⋡\", nsce: \"⪰̸\", Nscr: \"𝒩\", nscr: \"𝓃\", nshortmid: \"∤\", nshortparallel: \"∦\", nsim: \"≁\", nsime: \"≄\", nsimeq: \"≄\", nsmid: \"∤\", nspar: \"∦\", nsqsube: \"⋢\", nsqsupe: \"⋣\", nsub: \"⊄\", nsubE: \"⫅̸\", nsube: \"⊈\", nsubset: \"⊂⃒\", nsubseteq: \"⊈\", nsubseteqq: \"⫅̸\", nsucc: \"⊁\", nsucceq: \"⪰̸\", nsup: \"⊅\", nsupE: \"⫆̸\", nsupe: \"⊉\", nsupset: \"⊃⃒\", nsupseteq: \"⊉\", nsupseteqq: \"⫆̸\", ntgl: \"≹\", Ntilde: \"Ñ\", ntilde: \"ñ\", ntlg: \"≸\", ntriangleleft: \"⋪\", ntrianglelefteq: \"⋬\", ntriangleright: \"⋫\", ntrianglerighteq: \"⋭\", Nu: \"Ν\", nu: \"ν\", num: \"#\", numero: \"№\", numsp: \" \", nvap: \"≍⃒\", nvdash: \"⊬\", nvDash: \"⊭\", nVdash: \"⊮\", nVDash: \"⊯\", nvge: \"≥⃒\", nvgt: \">⃒\", nvHarr: \"⤄\", nvinfin: \"⧞\", nvlArr: \"⤂\", nvle: \"≤⃒\", nvlt: \"<⃒\", nvltrie: \"⊴⃒\", nvrArr: \"⤃\", nvrtrie: \"⊵⃒\", nvsim: \"∼⃒\", nwarhk: \"⤣\", nwarr: \"↖\", nwArr: \"⇖\", nwarrow: \"↖\", nwnear: \"⤧\", Oacute: \"Ó\", oacute: \"ó\", oast: \"⊛\", Ocirc: \"Ô\", ocirc: \"ô\", ocir: \"⊚\", Ocy: \"О\", ocy: \"о\", odash: \"⊝\", Odblac: \"Ő\", odblac: \"ő\", odiv: \"⨸\", odot: \"⊙\", odsold: \"⦼\", OElig: \"Œ\", oelig: \"œ\", ofcir: \"⦿\", Ofr: \"𝔒\", ofr: \"𝔬\", ogon: \"˛\", Ograve: \"Ò\", ograve: \"ò\", ogt: \"⧁\", ohbar: \"⦵\", ohm: \"Ω\", oint: \"∮\", olarr: \"↺\", olcir: \"⦾\", olcross: \"⦻\", oline: \"‾\", olt: \"⧀\", Omacr: \"Ō\", omacr: \"ō\", Omega: \"Ω\", omega: \"ω\", Omicron: \"Ο\", omicron: \"ο\", omid: \"⦶\", ominus: \"⊖\", Oopf: \"𝕆\", oopf: \"𝕠\", opar: \"⦷\", OpenCurlyDoubleQuote: \"“\", OpenCurlyQuote: \"‘\", operp: \"⦹\", oplus: \"⊕\", orarr: \"↻\", Or: \"⩔\", or: \"∨\", ord: \"⩝\", order: \"ℴ\", orderof: \"ℴ\", ordf: \"ª\", ordm: \"º\", origof: \"⊶\", oror: \"⩖\", orslope: \"⩗\", orv: \"⩛\", oS: \"Ⓢ\", Oscr: \"𝒪\", oscr: \"ℴ\", Oslash: \"Ø\", oslash: \"ø\", osol: \"⊘\", Otilde: \"Õ\", otilde: \"õ\", otimesas: \"⨶\", Otimes: \"⨷\", otimes: \"⊗\", Ouml: \"Ö\", ouml: \"ö\", ovbar: \"⌽\", OverBar: \"‾\", OverBrace: \"⏞\", OverBracket: \"⎴\", OverParenthesis: \"⏜\", para: \"¶\", parallel: \"∥\", par: \"∥\", parsim: \"⫳\", parsl: \"⫽\", part: \"∂\", PartialD: \"∂\", Pcy: \"П\", pcy: \"п\", percnt: \"%\", period: \".\", permil: \"‰\", perp: \"⊥\", pertenk: \"‱\", Pfr: \"𝔓\", pfr: \"𝔭\", Phi: \"Φ\", phi: \"φ\", phiv: \"ϕ\", phmmat: \"ℳ\", phone: \"☎\", Pi: \"Π\", pi: \"π\", pitchfork: \"⋔\", piv: \"ϖ\", planck: \"ℏ\", planckh: \"ℎ\", plankv: \"ℏ\", plusacir: \"⨣\", plusb: \"⊞\", pluscir: \"⨢\", plus: \"+\", plusdo: \"∔\", plusdu: \"⨥\", pluse: \"⩲\", PlusMinus: \"±\", plusmn: \"±\", plussim: \"⨦\", plustwo: \"⨧\", pm: \"±\", Poincareplane: \"ℌ\", pointint: \"⨕\", popf: \"𝕡\", Popf: \"ℙ\", pound: \"£\", prap: \"⪷\", Pr: \"⪻\", pr: \"≺\", prcue: \"≼\", precapprox: \"⪷\", prec: \"≺\", preccurlyeq: \"≼\", Precedes: \"≺\", PrecedesEqual: \"⪯\", PrecedesSlantEqual: \"≼\", PrecedesTilde: \"≾\", preceq: \"⪯\", precnapprox: \"⪹\", precneqq: \"⪵\", precnsim: \"⋨\", pre: \"⪯\", prE: \"⪳\", precsim: \"≾\", prime: \"′\", Prime: \"″\", primes: \"ℙ\", prnap: \"⪹\", prnE: \"⪵\", prnsim: \"⋨\", prod: \"∏\", Product: \"∏\", profalar: \"⌮\", profline: \"⌒\", profsurf: \"⌓\", prop: \"∝\", Proportional: \"∝\", Proportion: \"∷\", propto: \"∝\", prsim: \"≾\", prurel: \"⊰\", Pscr: \"𝒫\", pscr: \"𝓅\", Psi: \"Ψ\", psi: \"ψ\", puncsp: \" \", Qfr: \"𝔔\", qfr: \"𝔮\", qint: \"⨌\", qopf: \"𝕢\", Qopf: \"ℚ\", qprime: \"⁗\", Qscr: \"𝒬\", qscr: \"𝓆\", quaternions: \"ℍ\", quatint: \"⨖\", quest: \"?\", questeq: \"≟\", quot: \"\\\"\", QUOT: \"\\\"\", rAarr: \"⇛\", race: \"∽̱\", Racute: \"Ŕ\", racute: \"ŕ\", radic: \"√\", raemptyv: \"⦳\", rang: \"⟩\", Rang: \"⟫\", rangd: \"⦒\", range: \"⦥\", rangle: \"⟩\", raquo: \"»\", rarrap: \"⥵\", rarrb: \"⇥\", rarrbfs: \"⤠\", rarrc: \"⤳\", rarr: \"→\", Rarr: \"↠\", rArr: \"⇒\", rarrfs: \"⤞\", rarrhk: \"↪\", rarrlp: \"↬\", rarrpl: \"⥅\", rarrsim: \"⥴\", Rarrtl: \"⤖\", rarrtl: \"↣\", rarrw: \"↝\", ratail: \"⤚\", rAtail: \"⤜\", ratio: \"∶\", rationals: \"ℚ\", rbarr: \"⤍\", rBarr: \"⤏\", RBarr: \"⤐\", rbbrk: \"❳\", rbrace: \"}\", rbrack: \"]\", rbrke: \"⦌\", rbrksld: \"⦎\", rbrkslu: \"⦐\", Rcaron: \"Ř\", rcaron: \"ř\", Rcedil: \"Ŗ\", rcedil: \"ŗ\", rceil: \"⌉\", rcub: \"}\", Rcy: \"Р\", rcy: \"р\", rdca: \"⤷\", rdldhar: \"⥩\", rdquo: \"”\", rdquor: \"”\", rdsh: \"↳\", real: \"ℜ\", realine: \"ℛ\", realpart: \"ℜ\", reals: \"ℝ\", Re: \"ℜ\", rect: \"▭\", reg: \"®\", REG: \"®\", ReverseElement: \"∋\", ReverseEquilibrium: \"⇋\", ReverseUpEquilibrium: \"⥯\", rfisht: \"⥽\", rfloor: \"⌋\", rfr: \"𝔯\", Rfr: \"ℜ\", rHar: \"⥤\", rhard: \"⇁\", rharu: \"⇀\", rharul: \"⥬\", Rho: \"Ρ\", rho: \"ρ\", rhov: \"ϱ\", RightAngleBracket: \"⟩\", RightArrowBar: \"⇥\", rightarrow: \"→\", RightArrow: \"→\", Rightarrow: \"⇒\", RightArrowLeftArrow: \"⇄\", rightarrowtail: \"↣\", RightCeiling: \"⌉\", RightDoubleBracket: \"⟧\", RightDownTeeVector: \"⥝\", RightDownVectorBar: \"⥕\", RightDownVector: \"⇂\", RightFloor: \"⌋\", rightharpoondown: \"⇁\", rightharpoonup: \"⇀\", rightleftarrows: \"⇄\", rightleftharpoons: \"⇌\", rightrightarrows: \"⇉\", rightsquigarrow: \"↝\", RightTeeArrow: \"↦\", RightTee: \"⊢\", RightTeeVector: \"⥛\", rightthreetimes: \"⋌\", RightTriangleBar: \"⧐\", RightTriangle: \"⊳\", RightTriangleEqual: \"⊵\", RightUpDownVector: \"⥏\", RightUpTeeVector: \"⥜\", RightUpVectorBar: \"⥔\", RightUpVector: \"↾\", RightVectorBar: \"⥓\", RightVector: \"⇀\", ring: \"˚\", risingdotseq: \"≓\", rlarr: \"⇄\", rlhar: \"⇌\", rlm: \"\\u200f\", rmoustache: \"⎱\", rmoust: \"⎱\", rnmid: \"⫮\", roang: \"⟭\", roarr: \"⇾\", robrk: \"⟧\", ropar: \"⦆\", ropf: \"𝕣\", Ropf: \"ℝ\", roplus: \"⨮\", rotimes: \"⨵\", RoundImplies: \"⥰\", rpar: \")\", rpargt: \"⦔\", rppolint: \"⨒\", rrarr: \"⇉\", Rrightarrow: \"⇛\", rsaquo: \"›\", rscr: \"𝓇\", Rscr: \"ℛ\", rsh: \"↱\", Rsh: \"↱\", rsqb: \"]\", rsquo: \"’\", rsquor: \"’\", rthree: \"⋌\", rtimes: \"⋊\", rtri: \"▹\", rtrie: \"⊵\", rtrif: \"▸\", rtriltri: \"⧎\", RuleDelayed: \"⧴\", ruluhar: \"⥨\", rx: \"℞\", Sacute: \"Ś\", sacute: \"ś\", sbquo: \"‚\", scap: \"⪸\", Scaron: \"Š\", scaron: \"š\", Sc: \"⪼\", sc: \"≻\", sccue: \"≽\", sce: \"⪰\", scE: \"⪴\", Scedil: \"Ş\", scedil: \"ş\", Scirc: \"Ŝ\", scirc: \"ŝ\", scnap: \"⪺\", scnE: \"⪶\", scnsim: \"⋩\", scpolint: \"⨓\", scsim: \"≿\", Scy: \"С\", scy: \"с\", sdotb: \"⊡\", sdot: \"⋅\", sdote: \"⩦\", searhk: \"⤥\", searr: \"↘\", seArr: \"⇘\", searrow: \"↘\", sect: \"§\", semi: \";\", seswar: \"⤩\", setminus: \"∖\", setmn: \"∖\", sext: \"✶\", Sfr: \"𝔖\", sfr: \"𝔰\", sfrown: \"⌢\", sharp: \"♯\", SHCHcy: \"Щ\", shchcy: \"щ\", SHcy: \"Ш\", shcy: \"ш\", ShortDownArrow: \"↓\", ShortLeftArrow: \"←\", shortmid: \"∣\", shortparallel: \"∥\", ShortRightArrow: \"→\", ShortUpArrow: \"↑\", shy: \"\\u00ad\", Sigma: \"Σ\", sigma: \"σ\", sigmaf: \"ς\", sigmav: \"ς\", sim: \"∼\", simdot: \"⩪\", sime: \"≃\", simeq: \"≃\", simg: \"⪞\", simgE: \"⪠\", siml: \"⪝\", simlE: \"⪟\", simne: \"≆\", simplus: \"⨤\", simrarr: \"⥲\", slarr: \"←\", SmallCircle: \"∘\", smallsetminus: \"∖\", smashp: \"⨳\", smeparsl: \"⧤\", smid: \"∣\", smile: \"⌣\", smt: \"⪪\", smte: \"⪬\", smtes: \"⪬︀\", SOFTcy: \"Ь\", softcy: \"ь\", solbar: \"⌿\", solb: \"⧄\", sol: \"/\", Sopf: \"𝕊\", sopf: \"𝕤\", spades: \"♠\", spadesuit: \"♠\", spar: \"∥\", sqcap: \"⊓\", sqcaps: \"⊓︀\", sqcup: \"⊔\", sqcups: \"⊔︀\", Sqrt: \"√\", sqsub: \"⊏\", sqsube: \"⊑\", sqsubset: \"⊏\", sqsubseteq: \"⊑\", sqsup: \"⊐\", sqsupe: \"⊒\", sqsupset: \"⊐\", sqsupseteq: \"⊒\", square: \"□\", Square: \"□\", SquareIntersection: \"⊓\", SquareSubset: \"⊏\", SquareSubsetEqual: \"⊑\", SquareSuperset: \"⊐\", SquareSupersetEqual: \"⊒\", SquareUnion: \"⊔\", squarf: \"▪\", squ: \"□\", squf: \"▪\", srarr: \"→\", Sscr: \"𝒮\", sscr: \"𝓈\", ssetmn: \"∖\", ssmile: \"⌣\", sstarf: \"⋆\", Star: \"⋆\", star: \"☆\", starf: \"★\", straightepsilon: \"ϵ\", straightphi: \"ϕ\", strns: \"¯\", sub: \"⊂\", Sub: \"⋐\", subdot: \"⪽\", subE: \"⫅\", sube: \"⊆\", subedot: \"⫃\", submult: \"⫁\", subnE: \"⫋\", subne: \"⊊\", subplus: \"⪿\", subrarr: \"⥹\", subset: \"⊂\", Subset: \"⋐\", subseteq: \"⊆\", subseteqq: \"⫅\", SubsetEqual: \"⊆\", subsetneq: \"⊊\", subsetneqq: \"⫋\", subsim: \"⫇\", subsub: \"⫕\", subsup: \"⫓\", succapprox: \"⪸\", succ: \"≻\", succcurlyeq: \"≽\", Succeeds: \"≻\", SucceedsEqual: \"⪰\", SucceedsSlantEqual: \"≽\", SucceedsTilde: \"≿\", succeq: \"⪰\", succnapprox: \"⪺\", succneqq: \"⪶\", succnsim: \"⋩\", succsim: \"≿\", SuchThat: \"∋\", sum: \"∑\", Sum: \"∑\", sung: \"♪\", sup1: \"¹\", sup2: \"²\", sup3: \"³\", sup: \"⊃\", Sup: \"⋑\", supdot: \"⪾\", supdsub: \"⫘\", supE: \"⫆\", supe: \"⊇\", supedot: \"⫄\", Superset: \"⊃\", SupersetEqual: \"⊇\", suphsol: \"⟉\", suphsub: \"⫗\", suplarr: \"⥻\", supmult: \"⫂\", supnE: \"⫌\", supne: \"⊋\", supplus: \"⫀\", supset: \"⊃\", Supset: \"⋑\", supseteq: \"⊇\", supseteqq: \"⫆\", supsetneq: \"⊋\", supsetneqq: \"⫌\", supsim: \"⫈\", supsub: \"⫔\", supsup: \"⫖\", swarhk: \"⤦\", swarr: \"↙\", swArr: \"⇙\", swarrow: \"↙\", swnwar: \"⤪\", szlig: \"ß\", Tab: \"\\u0009\", target: \"⌖\", Tau: \"Τ\", tau: \"τ\", tbrk: \"⎴\", Tcaron: \"Ť\", tcaron: \"ť\", Tcedil: \"Ţ\", tcedil: \"ţ\", Tcy: \"Т\", tcy: \"т\", tdot: \"⃛\", telrec: \"⌕\", Tfr: \"𝔗\", tfr: \"𝔱\", there4: \"∴\", therefore: \"∴\", Therefore: \"∴\", Theta: \"Θ\", theta: \"θ\", thetasym: \"ϑ\", thetav: \"ϑ\", thickapprox: \"≈\", thicksim: \"∼\", ThickSpace: \"  \", ThinSpace: \" \", thinsp: \" \", thkap: \"≈\", thksim: \"∼\", THORN: \"Þ\", thorn: \"þ\", tilde: \"˜\", Tilde: \"∼\", TildeEqual: \"≃\", TildeFullEqual: \"≅\", TildeTilde: \"≈\", timesbar: \"⨱\", timesb: \"⊠\", times: \"×\", timesd: \"⨰\", tint: \"∭\", toea: \"⤨\", topbot: \"⌶\", topcir: \"⫱\", top: \"⊤\", Topf: \"𝕋\", topf: \"𝕥\", topfork: \"⫚\", tosa: \"⤩\", tprime: \"‴\", trade: \"™\", TRADE: \"™\", triangle: \"▵\", triangledown: \"▿\", triangleleft: \"◃\", trianglelefteq: \"⊴\", triangleq: \"≜\", triangleright: \"▹\", trianglerighteq: \"⊵\", tridot: \"◬\", trie: \"≜\", triminus: \"⨺\", TripleDot: \"⃛\", triplus: \"⨹\", trisb: \"⧍\", tritime: \"⨻\", trpezium: \"⏢\", Tscr: \"𝒯\", tscr: \"𝓉\", TScy: \"Ц\", tscy: \"ц\", TSHcy: \"Ћ\", tshcy: \"ћ\", Tstrok: \"Ŧ\", tstrok: \"ŧ\", twixt: \"≬\", twoheadleftarrow: \"↞\", twoheadrightarrow: \"↠\", Uacute: \"Ú\", uacute: \"ú\", uarr: \"↑\", Uarr: \"↟\", uArr: \"⇑\", Uarrocir: \"⥉\", Ubrcy: \"Ў\", ubrcy: \"ў\", Ubreve: \"Ŭ\", ubreve: \"ŭ\", Ucirc: \"Û\", ucirc: \"û\", Ucy: \"У\", ucy: \"у\", udarr: \"⇅\", Udblac: \"Ű\", udblac: \"ű\", udhar: \"⥮\", ufisht: \"⥾\", Ufr: \"𝔘\", ufr: \"𝔲\", Ugrave: \"Ù\", ugrave: \"ù\", uHar: \"⥣\", uharl: \"↿\", uharr: \"↾\", uhblk: \"▀\", ulcorn: \"⌜\", ulcorner: \"⌜\", ulcrop: \"⌏\", ultri: \"◸\", Umacr: \"Ū\", umacr: \"ū\", uml: \"¨\", UnderBar: \"_\", UnderBrace: \"⏟\", UnderBracket: \"⎵\", UnderParenthesis: \"⏝\", Union: \"⋃\", UnionPlus: \"⊎\", Uogon: \"Ų\", uogon: \"ų\", Uopf: \"𝕌\", uopf: \"𝕦\", UpArrowBar: \"⤒\", uparrow: \"↑\", UpArrow: \"↑\", Uparrow: \"⇑\", UpArrowDownArrow: \"⇅\", updownarrow: \"↕\", UpDownArrow: \"↕\", Updownarrow: \"⇕\", UpEquilibrium: \"⥮\", upharpoonleft: \"↿\", upharpoonright: \"↾\", uplus: \"⊎\", UpperLeftArrow: \"↖\", UpperRightArrow: \"↗\", upsi: \"υ\", Upsi: \"ϒ\", upsih: \"ϒ\", Upsilon: \"Υ\", upsilon: \"υ\", UpTeeArrow: \"↥\", UpTee: \"⊥\", upuparrows: \"⇈\", urcorn: \"⌝\", urcorner: \"⌝\", urcrop: \"⌎\", Uring: \"Ů\", uring: \"ů\", urtri: \"◹\", Uscr: \"𝒰\", uscr: \"𝓊\", utdot: \"⋰\", Utilde: \"Ũ\", utilde: \"ũ\", utri: \"▵\", utrif: \"▴\", uuarr: \"⇈\", Uuml: \"Ü\", uuml: \"ü\", uwangle: \"⦧\", vangrt: \"⦜\", varepsilon: \"ϵ\", varkappa: \"ϰ\", varnothing: \"∅\", varphi: \"ϕ\", varpi: \"ϖ\", varpropto: \"∝\", varr: \"↕\", vArr: \"⇕\", varrho: \"ϱ\", varsigma: \"ς\", varsubsetneq: \"⊊︀\", varsubsetneqq: \"⫋︀\", varsupsetneq: \"⊋︀\", varsupsetneqq: \"⫌︀\", vartheta: \"ϑ\", vartriangleleft: \"⊲\", vartriangleright: \"⊳\", vBar: \"⫨\", Vbar: \"⫫\", vBarv: \"⫩\", Vcy: \"В\", vcy: \"в\", vdash: \"⊢\", vDash: \"⊨\", Vdash: \"⊩\", VDash: \"⊫\", Vdashl: \"⫦\", veebar: \"⊻\", vee: \"∨\", Vee: \"⋁\", veeeq: \"≚\", vellip: \"⋮\", verbar: \"|\", Verbar: \"‖\", vert: \"|\", Vert: \"‖\", VerticalBar: \"∣\", VerticalLine: \"|\", VerticalSeparator: \"❘\", VerticalTilde: \"≀\", VeryThinSpace: \" \", Vfr: \"𝔙\", vfr: \"𝔳\", vltri: \"⊲\", vnsub: \"⊂⃒\", vnsup: \"⊃⃒\", Vopf: \"𝕍\", vopf: \"𝕧\", vprop: \"∝\", vrtri: \"⊳\", Vscr: \"𝒱\", vscr: \"𝓋\", vsubnE: \"⫋︀\", vsubne: \"⊊︀\", vsupnE: \"⫌︀\", vsupne: \"⊋︀\", Vvdash: \"⊪\", vzigzag: \"⦚\", Wcirc: \"Ŵ\", wcirc: \"ŵ\", wedbar: \"⩟\", wedge: \"∧\", Wedge: \"⋀\", wedgeq: \"≙\", weierp: \"℘\", Wfr: \"𝔚\", wfr: \"𝔴\", Wopf: \"𝕎\", wopf: \"𝕨\", wp: \"℘\", wr: \"≀\", wreath: \"≀\", Wscr: \"𝒲\", wscr: \"𝓌\", xcap: \"⋂\", xcirc: \"◯\", xcup: \"⋃\", xdtri: \"▽\", Xfr: \"𝔛\", xfr: \"𝔵\", xharr: \"⟷\", xhArr: \"⟺\", Xi: \"Ξ\", xi: \"ξ\", xlarr: \"⟵\", xlArr: \"⟸\", xmap: \"⟼\", xnis: \"⋻\", xodot: \"⨀\", Xopf: \"𝕏\", xopf: \"𝕩\", xoplus: \"⨁\", xotime: \"⨂\", xrarr: \"⟶\", xrArr: \"⟹\", Xscr: \"𝒳\", xscr: \"𝓍\", xsqcup: \"⨆\", xuplus: \"⨄\", xutri: \"△\", xvee: \"⋁\", xwedge: \"⋀\", Yacute: \"Ý\", yacute: \"ý\", YAcy: \"Я\", yacy: \"я\", Ycirc: \"Ŷ\", ycirc: \"ŷ\", Ycy: \"Ы\", ycy: \"ы\", yen: \"¥\", Yfr: \"𝔜\", yfr: \"𝔶\", YIcy: \"Ї\", yicy: \"ї\", Yopf: \"𝕐\", yopf: \"𝕪\", Yscr: \"𝒴\", yscr: \"𝓎\", YUcy: \"Ю\", yucy: \"ю\", yuml: \"ÿ\", Yuml: \"Ÿ\", Zacute: \"Ź\", zacute: \"ź\", Zcaron: \"Ž\", zcaron: \"ž\", Zcy: \"З\", zcy: \"з\", Zdot: \"Ż\", zdot: \"ż\", zeetrf: \"ℨ\", ZeroWidthSpace: \"​\", Zeta: \"Ζ\", zeta: \"ζ\", zfr: \"𝔷\", Zfr: \"ℨ\", ZHcy: \"Ж\", zhcy: \"ж\", zigrarr: \"⇝\", zopf: \"𝕫\", Zopf: \"ℤ\", Zscr: \"𝒵\", zscr: \"𝓏\", zwj: \"\\u200d\", zwnj: \"\\u200c\"\n};\n\nvar HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\nvar CHARCODE = /^#([0-9]+)$/;\nvar NAMED = /^([A-Za-z0-9]+)$/;\nvar EntityParser = /** @class */ (function () {\n    function EntityParser(named) {\n        this.named = named;\n    }\n    EntityParser.prototype.parse = function (entity) {\n        if (!entity) {\n            return;\n        }\n        var matches = entity.match(HEXCHARCODE);\n        if (matches) {\n            return String.fromCharCode(parseInt(matches[1], 16));\n        }\n        matches = entity.match(CHARCODE);\n        if (matches) {\n            return String.fromCharCode(parseInt(matches[1], 10));\n        }\n        matches = entity.match(NAMED);\n        if (matches) {\n            return this.named[matches[1]];\n        }\n    };\n    return EntityParser;\n}());\n\nvar WSP = /[\\t\\n\\f ]/;\nvar ALPHA = /[A-Za-z]/;\nvar CRLF = /\\r\\n?/g;\nfunction isSpace(char) {\n    return WSP.test(char);\n}\nfunction isAlpha(char) {\n    return ALPHA.test(char);\n}\nfunction preprocessInput(input) {\n    return input.replace(CRLF, '\\n');\n}\n\nvar EventedTokenizer = /** @class */ (function () {\n    function EventedTokenizer(delegate, entityParser, mode) {\n        if (mode === void 0) { mode = 'precompile'; }\n        this.delegate = delegate;\n        this.entityParser = entityParser;\n        this.mode = mode;\n        this.state = \"beforeData\" /* beforeData */;\n        this.line = -1;\n        this.column = -1;\n        this.input = '';\n        this.index = -1;\n        this.tagNameBuffer = '';\n        this.states = {\n            beforeData: function () {\n                var char = this.peek();\n                if (char === '<' && !this.isIgnoredEndTag()) {\n                    this.transitionTo(\"tagOpen\" /* tagOpen */);\n                    this.markTagStart();\n                    this.consume();\n                }\n                else {\n                    if (this.mode === 'precompile' && char === '\\n') {\n                        var tag = this.tagNameBuffer.toLowerCase();\n                        if (tag === 'pre' || tag === 'textarea') {\n                            this.consume();\n                        }\n                    }\n                    this.transitionTo(\"data\" /* data */);\n                    this.delegate.beginData();\n                }\n            },\n            data: function () {\n                var char = this.peek();\n                var tag = this.tagNameBuffer;\n                if (char === '<' && !this.isIgnoredEndTag()) {\n                    this.delegate.finishData();\n                    this.transitionTo(\"tagOpen\" /* tagOpen */);\n                    this.markTagStart();\n                    this.consume();\n                }\n                else if (char === '&' && tag !== 'script' && tag !== 'style') {\n                    this.consume();\n                    this.delegate.appendToData(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToData(char);\n                }\n            },\n            tagOpen: function () {\n                var char = this.consume();\n                if (char === '!') {\n                    this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n                }\n                else if (char === '@' || char === ':' || isAlpha(char)) {\n                    this.transitionTo(\"tagName\" /* tagName */);\n                    this.tagNameBuffer = '';\n                    this.delegate.beginStartTag();\n                    this.appendToTagName(char);\n                }\n            },\n            markupDeclarationOpen: function () {\n                var char = this.consume();\n                if (char === '-' && this.peek() === '-') {\n                    this.consume();\n                    this.transitionTo(\"commentStart\" /* commentStart */);\n                    this.delegate.beginComment();\n                }\n                else {\n                    var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n                    if (maybeDoctype === 'DOCTYPE') {\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.transitionTo(\"doctype\" /* doctype */);\n                        if (this.delegate.beginDoctype)\n                            this.delegate.beginDoctype();\n                    }\n                }\n            },\n            doctype: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n                }\n            },\n            beforeDoctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else {\n                    this.transitionTo(\"doctypeName\" /* doctypeName */);\n                    if (this.delegate.appendToDoctypeName)\n                        this.delegate.appendToDoctypeName(char.toLowerCase());\n                }\n            },\n            doctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeName)\n                        this.delegate.appendToDoctypeName(char.toLowerCase());\n                }\n            },\n            afterDoctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n                    var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n                    var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n                    if (isPublic || isSystem) {\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                    }\n                    if (isPublic) {\n                        this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n                    }\n                    else if (isSystem) {\n                        this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n                    }\n                }\n            },\n            afterDoctypePublicKeyword: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n                    this.consume();\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n                    this.consume();\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.consume();\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n            },\n            doctypePublicIdentifierDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypePublicIdentifier)\n                        this.delegate.appendToDoctypePublicIdentifier(char);\n                }\n            },\n            doctypePublicIdentifierSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypePublicIdentifier)\n                        this.delegate.appendToDoctypePublicIdentifier(char);\n                }\n            },\n            afterDoctypePublicIdentifier: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n                }\n            },\n            betweenDoctypePublicAndSystemIdentifiers: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n                }\n            },\n            doctypeSystemIdentifierDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeSystemIdentifier)\n                        this.delegate.appendToDoctypeSystemIdentifier(char);\n                }\n            },\n            doctypeSystemIdentifierSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeSystemIdentifier)\n                        this.delegate.appendToDoctypeSystemIdentifier(char);\n                }\n            },\n            afterDoctypeSystemIdentifier: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n            },\n            commentStart: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData(char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            commentStartDash: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEnd\" /* commentEnd */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData('-');\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            comment: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n                }\n                else {\n                    this.delegate.appendToCommentData(char);\n                }\n            },\n            commentEndDash: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEnd\" /* commentEnd */);\n                }\n                else {\n                    this.delegate.appendToCommentData('-' + char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            commentEnd: function () {\n                var char = this.consume();\n                if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData('--' + char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            tagName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.appendToTagName(char);\n                }\n            },\n            endTagName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                    this.tagNameBuffer = '';\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                    this.tagNameBuffer = '';\n                }\n                else if (char === '>') {\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                    this.tagNameBuffer = '';\n                }\n                else {\n                    this.appendToTagName(char);\n                }\n            },\n            beforeAttributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    return;\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '=') {\n                    this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n                else {\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                }\n            },\n            attributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n                    this.consume();\n                }\n                else if (char === '/') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '=') {\n                    this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"' || char === \"'\" || char === '<') {\n                    this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n            },\n            afterAttributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    return;\n                }\n                else if (char === '/') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '=') {\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n            },\n            beforeAttributeValue: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n                    this.delegate.beginAttributeValue(true);\n                    this.consume();\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n                    this.delegate.beginAttributeValue(true);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n                    this.delegate.beginAttributeValue(false);\n                    this.consume();\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n                }\n                else if (char === '&') {\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n                }\n                else if (char === '&') {\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueUnquoted: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '&') {\n                    this.consume();\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else if (char === '>') {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            afterAttributeValueQuoted: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '>') {\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n            },\n            selfClosingStartTag: function () {\n                var char = this.peek();\n                if (char === '>') {\n                    this.consume();\n                    this.delegate.markTagAsSelfClosing();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n            },\n            endTagOpen: function () {\n                var char = this.consume();\n                if (char === '@' || char === ':' || isAlpha(char)) {\n                    this.transitionTo(\"endTagName\" /* endTagName */);\n                    this.tagNameBuffer = '';\n                    this.delegate.beginEndTag();\n                    this.appendToTagName(char);\n                }\n            }\n        };\n        this.reset();\n    }\n    EventedTokenizer.prototype.reset = function () {\n        this.transitionTo(\"beforeData\" /* beforeData */);\n        this.input = '';\n        this.tagNameBuffer = '';\n        this.index = 0;\n        this.line = 1;\n        this.column = 0;\n        this.delegate.reset();\n    };\n    EventedTokenizer.prototype.transitionTo = function (state) {\n        this.state = state;\n    };\n    EventedTokenizer.prototype.tokenize = function (input) {\n        this.reset();\n        this.tokenizePart(input);\n        this.tokenizeEOF();\n    };\n    EventedTokenizer.prototype.tokenizePart = function (input) {\n        this.input += preprocessInput(input);\n        while (this.index < this.input.length) {\n            var handler = this.states[this.state];\n            if (handler !== undefined) {\n                handler.call(this);\n            }\n            else {\n                throw new Error(\"unhandled state \" + this.state);\n            }\n        }\n    };\n    EventedTokenizer.prototype.tokenizeEOF = function () {\n        this.flushData();\n    };\n    EventedTokenizer.prototype.flushData = function () {\n        if (this.state === 'data') {\n            this.delegate.finishData();\n            this.transitionTo(\"beforeData\" /* beforeData */);\n        }\n    };\n    EventedTokenizer.prototype.peek = function () {\n        return this.input.charAt(this.index);\n    };\n    EventedTokenizer.prototype.consume = function () {\n        var char = this.peek();\n        this.index++;\n        if (char === '\\n') {\n            this.line++;\n            this.column = 0;\n        }\n        else {\n            this.column++;\n        }\n        return char;\n    };\n    EventedTokenizer.prototype.consumeCharRef = function () {\n        var endIndex = this.input.indexOf(';', this.index);\n        if (endIndex === -1) {\n            return;\n        }\n        var entity = this.input.slice(this.index, endIndex);\n        var chars = this.entityParser.parse(entity);\n        if (chars) {\n            var count = entity.length;\n            // consume the entity chars\n            while (count) {\n                this.consume();\n                count--;\n            }\n            // consume the `;`\n            this.consume();\n            return chars;\n        }\n    };\n    EventedTokenizer.prototype.markTagStart = function () {\n        this.delegate.tagOpen();\n    };\n    EventedTokenizer.prototype.appendToTagName = function (char) {\n        this.tagNameBuffer += char;\n        this.delegate.appendToTagName(char);\n    };\n    EventedTokenizer.prototype.isIgnoredEndTag = function () {\n        var tag = this.tagNameBuffer;\n        return (tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>') ||\n            (tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>') ||\n            (tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>');\n    };\n    return EventedTokenizer;\n}());\n\nvar Tokenizer = /** @class */ (function () {\n    function Tokenizer(entityParser, options) {\n        if (options === void 0) { options = {}; }\n        this.options = options;\n        this.token = null;\n        this.startLine = 1;\n        this.startColumn = 0;\n        this.tokens = [];\n        this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n        this._currentAttribute = undefined;\n    }\n    Tokenizer.prototype.tokenize = function (input) {\n        this.tokens = [];\n        this.tokenizer.tokenize(input);\n        return this.tokens;\n    };\n    Tokenizer.prototype.tokenizePart = function (input) {\n        this.tokens = [];\n        this.tokenizer.tokenizePart(input);\n        return this.tokens;\n    };\n    Tokenizer.prototype.tokenizeEOF = function () {\n        this.tokens = [];\n        this.tokenizer.tokenizeEOF();\n        return this.tokens[0];\n    };\n    Tokenizer.prototype.reset = function () {\n        this.token = null;\n        this.startLine = 1;\n        this.startColumn = 0;\n    };\n    Tokenizer.prototype.current = function () {\n        var token = this.token;\n        if (token === null) {\n            throw new Error('token was unexpectedly null');\n        }\n        if (arguments.length === 0) {\n            return token;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n            if (token.type === arguments[i]) {\n                return token;\n            }\n        }\n        throw new Error(\"token type was unexpectedly \" + token.type);\n    };\n    Tokenizer.prototype.push = function (token) {\n        this.token = token;\n        this.tokens.push(token);\n    };\n    Tokenizer.prototype.currentAttribute = function () {\n        return this._currentAttribute;\n    };\n    Tokenizer.prototype.addLocInfo = function () {\n        if (this.options.loc) {\n            this.current().loc = {\n                start: {\n                    line: this.startLine,\n                    column: this.startColumn\n                },\n                end: {\n                    line: this.tokenizer.line,\n                    column: this.tokenizer.column\n                }\n            };\n        }\n        this.startLine = this.tokenizer.line;\n        this.startColumn = this.tokenizer.column;\n    };\n    // Data\n    Tokenizer.prototype.beginDoctype = function () {\n        this.push({\n            type: \"Doctype\" /* Doctype */,\n            name: '',\n        });\n    };\n    Tokenizer.prototype.appendToDoctypeName = function (char) {\n        this.current(\"Doctype\" /* Doctype */).name += char;\n    };\n    Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n        var doctype = this.current(\"Doctype\" /* Doctype */);\n        if (doctype.publicIdentifier === undefined) {\n            doctype.publicIdentifier = char;\n        }\n        else {\n            doctype.publicIdentifier += char;\n        }\n    };\n    Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n        var doctype = this.current(\"Doctype\" /* Doctype */);\n        if (doctype.systemIdentifier === undefined) {\n            doctype.systemIdentifier = char;\n        }\n        else {\n            doctype.systemIdentifier += char;\n        }\n    };\n    Tokenizer.prototype.endDoctype = function () {\n        this.addLocInfo();\n    };\n    Tokenizer.prototype.beginData = function () {\n        this.push({\n            type: \"Chars\" /* Chars */,\n            chars: ''\n        });\n    };\n    Tokenizer.prototype.appendToData = function (char) {\n        this.current(\"Chars\" /* Chars */).chars += char;\n    };\n    Tokenizer.prototype.finishData = function () {\n        this.addLocInfo();\n    };\n    // Comment\n    Tokenizer.prototype.beginComment = function () {\n        this.push({\n            type: \"Comment\" /* Comment */,\n            chars: ''\n        });\n    };\n    Tokenizer.prototype.appendToCommentData = function (char) {\n        this.current(\"Comment\" /* Comment */).chars += char;\n    };\n    Tokenizer.prototype.finishComment = function () {\n        this.addLocInfo();\n    };\n    // Tags - basic\n    Tokenizer.prototype.tagOpen = function () { };\n    Tokenizer.prototype.beginStartTag = function () {\n        this.push({\n            type: \"StartTag\" /* StartTag */,\n            tagName: '',\n            attributes: [],\n            selfClosing: false\n        });\n    };\n    Tokenizer.prototype.beginEndTag = function () {\n        this.push({\n            type: \"EndTag\" /* EndTag */,\n            tagName: ''\n        });\n    };\n    Tokenizer.prototype.finishTag = function () {\n        this.addLocInfo();\n    };\n    Tokenizer.prototype.markTagAsSelfClosing = function () {\n        this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n    };\n    // Tags - name\n    Tokenizer.prototype.appendToTagName = function (char) {\n        this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n    };\n    // Tags - attributes\n    Tokenizer.prototype.beginAttribute = function () {\n        this._currentAttribute = ['', '', false];\n    };\n    Tokenizer.prototype.appendToAttributeName = function (char) {\n        this.currentAttribute()[0] += char;\n    };\n    Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n        this.currentAttribute()[2] = isQuoted;\n    };\n    Tokenizer.prototype.appendToAttributeValue = function (char) {\n        this.currentAttribute()[1] += char;\n    };\n    Tokenizer.prototype.finishAttributeValue = function () {\n        this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n    };\n    Tokenizer.prototype.reportSyntaxError = function (message) {\n        this.current().syntaxError = message;\n    };\n    return Tokenizer;\n}());\n\nfunction tokenize(input, options) {\n    var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n    return tokenizer.tokenize(input);\n}\n\nexport { namedCharRefs as HTML5NamedCharRefs, EntityParser, EventedTokenizer, Tokenizer, tokenize };\n//# sourceMappingURL=index.js.map","/**\n * We have already computed the character position of this offset or span.\n */\nexport type CharOffsetKind = 'CharPosition';\nexport const CHAR_OFFSET_KIND: CharOffsetKind = 'CharPosition';\n/**\n * This offset or span was instantiated with a Handlebars SourcePosition or SourceLocation. Its\n * character position will be computed on demand.\n */\nexport type HbsPositionKind = 'HbsPosition';\nexport const HBS_POSITION_KIND: HbsPositionKind = 'HbsPosition';\n/**\n * for (rare) situations where a node is created but there was no source location (e.g. the name\n * \"default\" in default blocks when the word \"default\" never appeared in source). This is used\n * by the internals when there is a legitimate reason for the internals to synthesize a node\n * with no location.\n */\nexport type InternalSyntheticKind = 'InternalsSynthetic';\nexport const INTERNAL_SYNTHETIC_KIND: InternalSyntheticKind = 'InternalsSynthetic';\n\n/**\n * For situations where a node represents zero parts of the source (for example, empty arguments).\n * In general, we attempt to assign these nodes *some* position (empty arguments can be\n * positioned immediately after the callee), but it's not always possible\n */\nexport type NonExistentKind = 'NonExistent';\nexport const NON_EXISTENT_KIND: NonExistentKind = 'NonExistent';\n\n/**\n * For situations where a source location was expected, but it didn't correspond to the node in\n * the source. This happens if a plugin creates broken locations.\n */\nexport type BrokenKind = 'Broken';\nexport const BROKEN_KIND: BrokenKind = 'Broken';\n\nexport type OffsetKind = CharOffsetKind | HbsPositionKind | InvisibleKind;\n\n/**\n * These kinds  describe spans that don't have a concrete location in the original source.\n */\nexport type InvisibleKind = BrokenKind | InternalSyntheticKind | NonExistentKind;\n\nexport function isInvisible(kind: OffsetKind): kind is InvisibleKind {\n  return kind !== CHAR_OFFSET_KIND && kind !== HBS_POSITION_KIND;\n}\n","/// FreeVarNamespace ///\n\nexport type HELPER_VAR_NS = 'Helper';\nexport const HELPER_VAR_NS: HELPER_VAR_NS = 'Helper';\nexport type MODIFIER_VAR_NS = 'Modifier';\nexport const MODIFIER_VAR_NS: MODIFIER_VAR_NS = 'Modifier';\nexport type COMPONENT_VAR_NS = 'Component';\nexport const COMPONENT_VAR_NS: COMPONENT_VAR_NS = 'Component';\n\nexport type FreeVarNamespace = HELPER_VAR_NS | MODIFIER_VAR_NS | COMPONENT_VAR_NS;\n","/// ResolutionType ///\n\nexport type VALUE_RESOLUTION = 'value';\nexport const VALUE_RESOLUTION: VALUE_RESOLUTION = 'value';\n\nexport type COMPONENT_RESOLUTION = 'component';\nexport const COMPONENT_RESOLUTION: COMPONENT_RESOLUTION = 'component';\n\nexport type HELPER_RESOLUTION = 'helper';\nexport const HELPER_RESOLUTION: HELPER_RESOLUTION = 'helper';\n\nexport type MODIFIER_RESOLUTION = 'modifier';\nexport const MODIFIER_RESOLUTION: MODIFIER_RESOLUTION = 'modifier';\n\nexport type COMPONENT_OR_HELPER_RESOLUTION = 'component or helper';\nexport const COMPONENT_OR_HELPER_RESOLUTION: COMPONENT_OR_HELPER_RESOLUTION = 'component or helper';\n\nexport type ResolutionType =\n  | VALUE_RESOLUTION\n  | COMPONENT_RESOLUTION\n  | HELPER_RESOLUTION\n  | MODIFIER_RESOLUTION\n  | COMPONENT_OR_HELPER_RESOLUTION;\n"],"names":["assign","Object"],"mappings":";;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,MAAAA,MAAAA,GAAAC,MAAAD,CAAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,IAAA,UAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[2,3,4]}