diff --git a/dist/shift-reader.js b/dist/shift-reader.js index 0c36e55f..991d9a0d 100644 --- a/dist/shift-reader.js +++ b/dist/shift-reader.js @@ -59,158 +59,172 @@ var isLeftSyntax_503 = R.whereEq({ type: LSYNTAX_491 }); var isRightSyntax_504 = R.whereEq({ type: RSYNTAX_492 }); var isLeftDelimiter_505 = R.anyPass([isLeftBracket_495, isLeftBrace_496, isLeftParen_497, isLeftSyntax_503]); var isRightDelimiter_506 = R.anyPass([isRightBracket_498, isRightBrace_499, isRightParen_500, isRightSyntax_504]); -var isMatchingDelimiters_507 = R.cond([[isLeftBracket_495, function (__548, b_549) { - return isRightBracket_498(b_549); -}], [isLeftBrace_496, function (__550, b_551) { - return isRightBrace_499(b_551); -}], [isLeftParen_497, function (__552, b_553) { - return isRightParen_500(b_553); -}], [isLeftSyntax_503, function (__554, b_555) { - return isRightSyntax_504(b_555); +var isMatchingDelimiters_507 = R.cond([[isLeftBracket_495, function (__551, b_552) { + return isRightBracket_498(b_552); +}], [isLeftBrace_496, function (__553, b_554) { + return isRightBrace_499(b_554); +}], [isLeftParen_497, function (__555, b_556) { + return isRightParen_500(b_556); +}], [isLeftSyntax_503, function (__557, b_558) { + return isRightSyntax_504(b_558); }], [R.T, R.F]]); var assignOps_508 = ["=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "&=", "|=", "^=", ","]; var binaryOps_509 = ["+", "-", "*", "/", "%", "<<", ">>", ">>>", "&", "|", "^", "&&", "||", "?", ":", "===", "==", ">=", "<=", "<", ">", "!=", "!==", "instanceof"]; var unaryOps_510 = ["++", "--", "~", "!", "delete", "void", "typeof", "yield", "throw", "new"]; -var isEmpty_511 = R.whereEq({ size: 0 }); -var isPunctuator_512 = function isPunctuator_512(s_556) { - return s_556.isPunctuator(); +var isNotFalse_511 = R.compose(R.not, R.curry(R.equals)(false)); +var isEmpty_512 = R.whereEq({ size: 0 }); +var isPunctuator_513 = function isPunctuator_513(s_559) { + return s_559.isPunctuator(); }; -var isKeyword_513 = function isKeyword_513(s_557) { - return s_557.isKeyword(); +var isKeyword_514 = function isKeyword_514(s_560) { + return s_560.isKeyword(); }; -var isDelimiter_514 = function isDelimiter_514(s_558) { - return s_558.isDelimiter(); +var isDelimiter_515 = function isDelimiter_515(s_561) { + return s_561.isDelimiter(); }; -var isParens_515 = function isParens_515(s_559) { - return s_559.isParens(); +var isParens_516 = function isParens_516(s_562) { + return s_562.isParens(); }; -var isBraces_516 = function isBraces_516(s_560) { - return s_560.isBraces(); +var isBraces_517 = function isBraces_517(s_563) { + return s_563.isBraces(); }; -var isBrackets_517 = function isBrackets_517(s_561) { - return s_561.isBrackets(); +var isBrackets_518 = function isBrackets_518(s_564) { + return s_564.isBrackets(); }; -var isIdentifier_518 = function isIdentifier_518(s_562) { - return s_562.isIdentifier(); +var isIdentifier_519 = function isIdentifier_519(s_565) { + return s_565.isIdentifier(); }; -var val_519 = function val_519(s_563) { - return s_563.val(); +var val_520 = function val_520(s_566) { + return s_566.val(); }; -var isVal_520 = R.curry(function (v_564, s_565) { - return s_565.val() === v_564; +var isVal_521 = R.curry(function (v_567, s_568) { + return s_568.val() === v_567; }); -var isDot_521 = R.allPass([isPunctuator_512, isVal_520(".")]); -var isColon_522 = R.allPass([isPunctuator_512, isVal_520(":")]); -var isFunctionKeyword_523 = R.allPass([isKeyword_513, isVal_520("function")]); -var isOperator_524 = function isOperator_524(s_566) { - return (s_566.isPunctuator() || s_566.isKeyword()) && R.any(R.equals(s_566.val()), assignOps_508.concat(binaryOps_509).concat(unaryOps_510)); +var isDot_522 = R.allPass([isPunctuator_513, isVal_521(".")]); +var isColon_523 = R.allPass([isPunctuator_513, isVal_521(":")]); +var isFunctionKeyword_524 = R.allPass([isKeyword_514, isVal_521("function")]); +var isOperator_525 = function isOperator_525(s_569) { + return (s_569.isPunctuator() || s_569.isKeyword()) && R.any(R.equals(s_569.val()), assignOps_508.concat(binaryOps_509).concat(unaryOps_510)); }; -var isNonLiteralKeyword_525 = R.allPass([isKeyword_513, function (s_567) { - return R.none(R.equals(s_567.val()), literalKeywords_494); +var isNonLiteralKeyword_526 = R.allPass([isKeyword_514, function (s_570) { + return R.none(R.equals(s_570.val()), literalKeywords_494); }]); -var isKeywordExprPrefix_526 = R.allPass([isKeyword_513, function (s_568) { - return R.any(R.equals(s_568.val()), ["instanceof", "typeof", "delete", "void", "yield", "throw", "new", "case"]); +var isKeywordExprPrefix_527 = R.allPass([isKeyword_514, function (s_571) { + return R.any(R.equals(s_571.val()), ["instanceof", "typeof", "delete", "void", "yield", "throw", "new", "case"]); }]); -var last_527 = function last_527(p_569) { - return p_569.last(); +var last_528 = function last_528(p_572) { + return p_572.last(); }; -var safeLast_528 = R.pipe(R.cond([[isEmpty_511, R.always(Nothing_490())], [R.T, R.compose(_ramdaFantasy.Maybe.of, last_527)]])); -var stuffTrue_529 = R.curry(function (p_570, b_571) { - return b_571 ? Just_489(p_570) : Nothing_490(); +var safeLast_529 = R.pipe(R.cond([[isEmpty_512, R.always(Nothing_490())], [R.T, R.compose(_ramdaFantasy.Maybe.of, last_528)]])); +var stuffTrue_530 = R.curry(function (p_573, b_574) { + return b_574 ? Just_489(p_573) : Nothing_490(); }); -var stuffFalse_530 = R.curry(function (p_572, b_573) { - return !b_573 ? Just_489(p_572) : Nothing_490(); +var stuffFalse_531 = R.curry(function (p_575, b_576) { + return !b_576 ? Just_489(p_575) : Nothing_490(); }); -var isTopColon_531 = R.pipe(safeLast_528, R.map(isColon_522), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isTopPunctuator_532 = R.pipe(safeLast_528, R.map(isPunctuator_512), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isExprReturn_533 = R.curry(function (l_574, p_575) { - var retKwd_576 = safeLast_528(p_575); - var maybeDot_577 = pop_544(p_575).chain(safeLast_528); - if (maybeDot_577.map(isDot_521).getOrElse(false)) { +var isTopColon_532 = R.pipe(safeLast_529, R.map(isColon_523), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isTopPunctuator_533 = R.pipe(safeLast_529, R.map(isPunctuator_513), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isExprReturn_534 = R.curry(function (l_577, p_578) { + var retKwd_579 = safeLast_529(p_578); + var maybeDot_580 = pop_545(p_578).chain(safeLast_529); + if (maybeDot_580.map(isDot_522).getOrElse(false)) { return true; } - return retKwd_576.map(function (s_578) { - return s_578.isKeyword() && s_578.val() === "return" && s_578.lineNumber() === l_574; + return retKwd_579.map(function (s_581) { + return s_581.isKeyword() && s_581.val() === "return" && s_581.lineNumber() === l_577; }).getOrElse(false); }); -var isTopOperator_534 = R.pipe(safeLast_528, R.map(isOperator_524), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isTopKeywordExprPrefix_535 = R.pipe(safeLast_528, R.map(isKeywordExprPrefix_526), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isExprPrefix_536 = R.curry(function (l_579, b_580) { - return R.cond([[isEmpty_511, R.always(b_580)], [isTopColon_531, R.always(b_580)], [isTopKeywordExprPrefix_535, R.T], [isTopOperator_534, R.T], [isTopPunctuator_532, R.always(b_580)], [isExprReturn_533(l_579), R.T], [R.T, R.F]]); +var isTopOperator_535 = R.pipe(safeLast_529, R.map(isOperator_525), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isTopKeywordExprPrefix_536 = R.pipe(safeLast_529, R.map(isKeywordExprPrefix_527), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isExprPrefix_537 = R.curry(function (l_582, b_583) { + return R.cond([[isEmpty_512, R.always(b_583)], [isTopColon_532, R.always(b_583)], [isTopKeywordExprPrefix_536, R.T], [isTopOperator_535, R.T], [isTopPunctuator_533, R.always(b_583)], [isExprReturn_534(l_582), R.T], [R.T, R.F]]); }); -var curly_537 = function curly_537(p_581) { - return safeLast_528(p_581).map(isBraces_516).chain(stuffTrue_529(p_581)); +var curly_538 = function curly_538(p_584) { + return safeLast_529(p_584).map(isBraces_517).chain(stuffTrue_530(p_584)); }; -var paren_538 = function paren_538(p_582) { - return safeLast_528(p_582).map(isParens_515).chain(stuffTrue_529(p_582)); +var paren_539 = function paren_539(p_585) { + return safeLast_529(p_585).map(isParens_516).chain(stuffTrue_530(p_585)); }; -var func_539 = function func_539(p_583) { - return safeLast_528(p_583).map(isFunctionKeyword_523).chain(stuffTrue_529(p_583)); +var func_540 = function func_540(p_586) { + return safeLast_529(p_586).map(isFunctionKeyword_524).chain(stuffTrue_530(p_586)); }; -var ident_540 = function ident_540(p_584) { - return safeLast_528(p_584).map(isIdentifier_518).chain(stuffTrue_529(p_584)); +var ident_541 = function ident_541(p_587) { + return safeLast_529(p_587).map(isIdentifier_519).chain(stuffTrue_530(p_587)); }; -var nonLiteralKeyword_541 = function nonLiteralKeyword_541(p_585) { - return safeLast_528(p_585).map(isNonLiteralKeyword_525).chain(stuffTrue_529(p_585)); +var nonLiteralKeyword_542 = function nonLiteralKeyword_542(p_588) { + return safeLast_529(p_588).map(isNonLiteralKeyword_526).chain(stuffTrue_530(p_588)); }; -var opt_542 = R.curry(function (a_586, b_587, p_588) { - var result_589 = R.pipeK(a_586, b_587)(_ramdaFantasy.Maybe.of(p_588)); - return _ramdaFantasy.Maybe.isJust(result_589) ? result_589 : _ramdaFantasy.Maybe.of(p_588); +var opt_543 = R.curry(function (a_589, b_590, p_591) { + var result_592 = R.pipeK(a_589, b_590)(_ramdaFantasy.Maybe.of(p_591)); + return _ramdaFantasy.Maybe.isJust(result_592) ? result_592 : _ramdaFantasy.Maybe.of(p_591); }); -var notDot_543 = R.ifElse(R.whereEq({ size: 0 }), Just_489, function (p_590) { - return safeLast_528(p_590).map(function (s_591) { - return !(s_591.isPunctuator() && s_591.val() === "."); - }).chain(stuffTrue_529(p_590)); +var notDot_544 = R.ifElse(R.whereEq({ size: 0 }), Just_489, function (p_593) { + return safeLast_529(p_593).map(function (s_594) { + return !(s_594.isPunctuator() && s_594.val() === "."); + }).chain(stuffTrue_530(p_593)); }); -var pop_544 = R.compose(Just_489, function (p_592) { - return p_592.pop(); +var pop_545 = R.compose(Just_489, function (p_595) { + return p_595.pop(); }); -var functionPrefix_545 = R.pipeK(curly_537, pop_544, paren_538, pop_544, opt_542(ident_540, pop_544), func_539); -var isRegexPrefix_546 = function isRegexPrefix_546(b_593) { - return R.anyPass([isEmpty_511, isTopPunctuator_532, R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(nonLiteralKeyword_541, pop_544, notDot_543), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(paren_538, pop_544, nonLiteralKeyword_541, pop_544, notDot_543), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_545, R.chain(function (p_594) { - return safeLast_528(p_594).map(function (s_595) { - return s_595.lineNumber(); - }).chain(function (fnLine_596) { - return pop_544(p_594).map(isExprPrefix_536(fnLine_596, b_593)); - }).chain(stuffFalse_530(p_594)); - }), _ramdaFantasy.Maybe.isJust), function (p_597) { - var isCurly_598 = _ramdaFantasy.Maybe.isJust(safeLast_528(p_597).map(isBraces_516)); - var alreadyCheckedFunction_599 = R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_545, _ramdaFantasy.Maybe.isJust)(p_597); - if (alreadyCheckedFunction_599) { +var functionPrefix_546 = R.pipeK(curly_538, pop_545, paren_539, pop_545, opt_543(ident_541, pop_545), func_540); +var isRegexPrefix_547 = function isRegexPrefix_547(b_596) { + return R.anyPass([isEmpty_512, isTopPunctuator_533, R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(nonLiteralKeyword_542, pop_545, notDot_544), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(paren_539, pop_545, nonLiteralKeyword_542, pop_545, notDot_544), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_546, R.chain(function (p_597) { + return safeLast_529(p_597).map(function (s_598) { + return s_598.lineNumber(); + }).chain(function (fnLine_599) { + return pop_545(p_597).map(isExprPrefix_537(fnLine_599, b_596)); + }).chain(stuffFalse_531(p_597)); + }), _ramdaFantasy.Maybe.isJust), function (p_600) { + var isCurly_601 = _ramdaFantasy.Maybe.isJust(safeLast_529(p_600).map(isBraces_517)); + var alreadyCheckedFunction_602 = R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_546, _ramdaFantasy.Maybe.isJust)(p_600); + if (alreadyCheckedFunction_602) { return false; } - return R.pipe(_ramdaFantasy.Maybe.of, R.chain(curly_537), R.chain(function (p_600) { - return safeLast_528(p_600).map(function (s_601) { - return s_601.lineNumber(); - }).chain(function (curlyLine_602) { - return pop_544(p_600).map(isExprPrefix_536(curlyLine_602, b_593)); - }).chain(stuffFalse_530(p_600)); - }), _ramdaFantasy.Maybe.isJust)(p_597); + return R.pipe(_ramdaFantasy.Maybe.of, R.chain(curly_538), R.chain(function (p_603) { + return safeLast_529(p_603).map(function (s_604) { + return s_604.lineNumber(); + }).chain(function (curlyLine_605) { + return pop_545(p_603).map(isExprPrefix_537(curlyLine_605, b_596)); + }).chain(stuffFalse_531(p_603)); + }), _ramdaFantasy.Maybe.isJust)(p_600); }]); }; -function lastEl_547(l_603) { - return l_603[l_603.length - 1]; +function lastEl_548(l_606) { + return l_606[l_606.length - 1]; } +function countSlashes_549(reader_607) { + var index_608 = reader_607.index; + var onSlash_609 = function onSlash_609() { + return reader_607.source.charCodeAt(index_608) === 92; + }; + var length_610 = reader_607.source.length; + var count_611 = onSlash_609() ? 1 : 0; + while (++index_608 < length_610 && onSlash_609()) { + ++count_611; + } + return count_611; +} +var calcDepth_550 = R.compose(Math.log2, R.inc); var Reader = function (_Tokenizer) { _inherits(Reader, _Tokenizer); - function Reader(strings_604, context_605, replacements_606) { + function Reader(strings_612, context_613, replacements_614) { _classCallCheck(this, Reader); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Reader).call(this, Array.isArray(strings_604) ? strings_604.join("") : strings_604)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Reader).call(this, Array.isArray(strings_612) ? strings_612.join("") : strings_612)); _this.delimStack = new Map(); - _this.insideSyntaxTemplate = [false]; - _this.context = context_605; - if (Array.isArray(strings_604)) { + _this.syntaxNestingDepth = 0; + _this.context = context_613; + if (Array.isArray(strings_612)) { (function () { var totalIndex = 0; - _this.replacementIndex = R.reduce(function (acc_607, strRep_608) { - acc_607.push({ index: totalIndex + strRep_608[0].length, replacement: strRep_608[1] }); - totalIndex += strRep_608[0].length; - return acc_607; - }, [], R.zip(strings_604, replacements_606)); + _this.replacementIndex = R.reduce(function (acc_615, strRep_616) { + acc_615.push({ index: totalIndex + strRep_616[0].length, replacement: strRep_616[1] }); + totalIndex += strRep_616[0].length; + return acc_615; + }, [], R.zip(strings_612, replacements_614)); })(); } return _this; @@ -219,66 +233,66 @@ var Reader = function (_Tokenizer) { _createClass(Reader, [{ key: "read", value: function read() { - var stack_609 = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; - var b_610 = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - var singleDelimiter_611 = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + var stack_617 = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; + var b_618 = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var singleDelimiter_619 = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - var prefix_612 = (0, _immutable.List)(); + var prefix_620 = (0, _immutable.List)(); while (true) { - var tok = this.advance(prefix_612, b_610); + var tok = this.advance(prefix_620, b_618); if (tok instanceof _syntax2.default || tok instanceof _terms2.default) { - stack_609.push(tok); + stack_617.push(tok); continue; } if (Array.isArray(tok)) { - Array.prototype.push.apply(stack_609, tok); + Array.prototype.push.apply(stack_617, tok); continue; } if (_immutable.List.isList(tok)) { - Array.prototype.push.apply(stack_609, tok.toArray()); + Array.prototype.push.apply(stack_617, tok.toArray()); continue; } if (isEOS_501(tok)) { - if (stack_609[0] && isLeftDelimiter_505(stack_609[0].token)) { + if (stack_617[0] && isLeftDelimiter_505(stack_617[0].token)) { throw this.createUnexpected(tok); } break; } if (isLeftDelimiter_505(tok)) { if (isLeftSyntax_503(tok)) { - this.insideSyntaxTemplate.push(true); + this.syntaxNestingDepth++; } var line = tok.slice.startLocation.line; - var innerB = isLeftBrace_496(tok) ? isExprPrefix_536(line, b_610)(prefix_612) : true; + var innerB = isLeftBrace_496(tok) ? isExprPrefix_537(line, b_618)(prefix_620) : true; var inner = this.read([new _syntax2.default(tok)], innerB, false); var stx = new _syntax2.default(inner, this.context); - prefix_612 = prefix_612.concat(stx); - stack_609.push(stx); - if (singleDelimiter_611) { + prefix_620 = prefix_620.concat(stx); + stack_617.push(stx); + if (singleDelimiter_619) { break; } } else if (isRightDelimiter_506(tok)) { - if (stack_609[0] && !isMatchingDelimiters_507(stack_609[0].token, tok)) { + if (stack_617[0] && !isMatchingDelimiters_507(stack_617[0].token, tok)) { throw this.createUnexpected(tok); } var _stx = new _syntax2.default(tok, this.context); - stack_609.push(_stx); - if (lastEl_547(this.insideSyntaxTemplate) && isRightSyntax_504(tok)) { - this.insideSyntaxTemplate.pop(); + stack_617.push(_stx); + if (this.syntaxNestingDepth && isRightSyntax_504(tok)) { + this.syntaxNestingDepth--; } break; } else { var _stx2 = new _syntax2.default(tok, this.context); - prefix_612 = prefix_612.concat(_stx2); - stack_609.push(_stx2); + prefix_620 = prefix_620.concat(_stx2); + stack_617.push(_stx2); } } - return (0, _immutable.List)(stack_609); + return (0, _immutable.List)(stack_617); } }, { key: "advance", - value: function advance(prefix_613, b_614) { - var startLocation_615 = this.getLocation(); + value: function advance(prefix_621, b_622) { + var startLocation_623 = this.getLocation(); this.lastIndex = this.index; this.lastLine = this.line; this.lastLineStart = this.lineStart; @@ -291,14 +305,14 @@ var Reader = function (_Tokenizer) { this.replacementIndex.shift(); return rep; } - var charCode_616 = this.source.charCodeAt(this.index); - if (charCode_616 === 96) { + var charCode_624 = this.source.charCodeAt(this.index); + if (charCode_624 === 96) { var element = void 0, items = []; var _startLocation_ = this.getLocation(); var start = this.index; this.index++; - if (lastEl_547(this.insideSyntaxTemplate)) { + if (this.syntaxNestingDepth === 1) { var slice = this.getSlice(start, _startLocation_); return { type: RSYNTAX_492, value: "`", slice: slice }; } @@ -312,46 +326,64 @@ var Reader = function (_Tokenizer) { } } while (!element.tail); return { type: _tokenizer.TokenType.TEMPLATE, items: (0, _immutable.List)(items) }; - } else if (charCode_616 === 35) { - var _startLocation_2 = this.getLocation(); - var _start = this.index; - var _slice = this.getSlice(_start, _startLocation_2); - this.index++; - if (this.source.charCodeAt(this.index) === 96) { - this.index++; - return { type: LSYNTAX_491, value: "#`", slice: _slice }; + } else if (this.syntaxNestingDepth && charCode_624 === 92) { + var numSlashes = countSlashes_549(this); + var depth = calcDepth_550(numSlashes); + if (this.source.charCodeAt(this.index + numSlashes) === 96) { + if (depth > this.syntaxNestingDepth) { + this.index += Math.pow(2, this.syntaxNestingDepth) - 1; + throw this.createILLEGAL(); + } else if (depth < this.syntaxNestingDepth - 1) { + this.index += numSlashes; + throw this.createILLEGAL(); + } + var isClosing = depth === this.syntaxNestingDepth - 1; + var _startLocation_2 = this.getLocation(); + var _start = this.index; + var _slice = this.getSlice(_start, _startLocation_2); + this.index += numSlashes + 1; + return { type: isClosing ? RSYNTAX_492 : LSYNTAX_491, value: "\\".repeat(numSlashes).concat("'"), slice: _slice }; } - return { type: _tokenizer.TokenType.IDENTIFIER, value: "#", slice: _slice }; - } else if (charCode_616 === 64) { + } else if (charCode_624 === 35) { var _startLocation_3 = this.getLocation(); var _start2 = this.index; var _slice2 = this.getSlice(_start2, _startLocation_3); this.index++; - return { type: AT_493, value: "@", slice: _slice2 }; + if (this.source.charCodeAt(this.index) === 96) { + this.index++; + return { type: LSYNTAX_491, value: "#`", slice: _slice2 }; + } + return { type: _tokenizer.TokenType.IDENTIFIER, value: "#", slice: _slice2 }; + } else if (charCode_624 === 64) { + var _startLocation_4 = this.getLocation(); + var _start3 = this.index; + var _slice3 = this.getSlice(_start3, _startLocation_4); + this.index++; + return { type: AT_493, value: "@", slice: _slice3 }; } - var lookahead_617 = _get(Object.getPrototypeOf(Reader.prototype), "advance", this).call(this); - if (lookahead_617.type === _tokenizer.TokenType.DIV && isRegexPrefix_546(b_614)(prefix_613)) { + var lookahead_625 = _get(Object.getPrototypeOf(Reader.prototype), "advance", this).call(this); + if (lookahead_625.type === _tokenizer.TokenType.DIV && isRegexPrefix_547(b_622)(prefix_621)) { return _get(Object.getPrototypeOf(Reader.prototype), "scanRegExp", this).call(this, "/"); } - return lookahead_617; + return lookahead_625; } }, { key: "scanTemplateElement", value: function scanTemplateElement() { - var startLocation_618 = this.getLocation(); - var start_619 = this.index; + var startLocation_626 = this.getLocation(); + var start_627 = this.index; while (this.index < this.source.length) { var ch = this.source.charCodeAt(this.index); switch (ch) { case 96: - var slice = this.getSlice(start_619, startLocation_618); + var slice = this.getSlice(start_627, startLocation_626); this.index++; return { type: _tokenizer.TokenType.TEMPLATE, tail: true, interp: false, slice: slice }; case 36: if (this.source.charCodeAt(this.index + 1) === 123) { - var _slice3 = this.getSlice(start_619, startLocation_618); + var _slice4 = this.getSlice(start_627, startLocation_626); this.index += 1; - return { type: _tokenizer.TokenType.TEMPLATE, tail: false, interp: true, slice: _slice3 }; + return { type: _tokenizer.TokenType.TEMPLATE, tail: false, interp: true, slice: _slice4 }; } this.index++; break; @@ -375,4 +407,4 @@ var Reader = function (_Tokenizer) { }(_tokenizer2.default); exports.default = Reader; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3NoaWZ0LXJlYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQTs7QUFDQTs7OztBQUNBOztJQUFhLEM7O0FBQ2I7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7Ozs7O0FBRkEsSUFBTSxXQUFXLG9CQUFNLElBQXZCO0FBQ0EsSUFBTSxjQUFjLG9CQUFNLE9BQTFCOztBQUVBLElBQU0sY0FBYyxFQUFDLE1BQU0sYUFBUCxFQUFwQjtBQUNBLElBQU0sY0FBYyxFQUFDLE1BQU0sY0FBUCxFQUFwQjtBQUNBLElBQU0sU0FBUyxFQUFDLE9BQU8sc0JBQVcsVUFBbkIsRUFBK0IsTUFBTSxHQUFyQyxFQUFmO0FBQ0EsSUFBTSxzQkFBc0IsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixNQUFqQixFQUF5QixPQUF6QixDQUE1QjtBQUNBLElBQU0sb0JBQW9CLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTFCO0FBQ0EsSUFBTSxrQkFBa0IsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBeEI7QUFDQSxJQUFNLGtCQUFrQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF4QjtBQUNBLElBQU0scUJBQXFCLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTNCO0FBQ0EsSUFBTSxtQkFBbUIsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBekI7QUFDQSxJQUFNLG1CQUFtQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF6QjtBQUNBLElBQU0sWUFBWSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsR0FBakIsRUFBVixDQUFsQjtBQUNBLElBQU0sYUFBYSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJB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QVosQ0FBdUIsS0FBSyxLQUE1QixDQUFUO0FBQ0EsZ0JBQVEsRUFBUjtBQUNFLGVBQUssRUFBTDtBQUNFLGdCQUFJLFFBQVEsS0FBSyxRQUFMLENBQWMsU0FBZCxFQUF5QixpQkFBekIsQ0FBWjtBQUNBLGlCQUFLLEtBQUw7QUFDQSxtQkFBTyxFQUFDLE1BQU0scUJBQVUsUUFBakIsRUFBMkIsTUFBTSxJQUFqQyxFQUF1QyxRQUFRLEtBQS9DLEVBQXNELE9BQU8sS0FBN0QsRUFBUDtBQUNGLGVBQUssRUFBTDtBQUNFLGdCQUFJLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsS0FBSyxLQUFMLEdBQWEsQ0FBcEMsTUFBMkMsR0FBL0MsRUFBb0Q7QUFDbEQsa0JBQUksVUFBUSxLQUFLLFFBQUwsQ0FBYyxTQUFkLEVBQXlCLGlCQUF6QixDQUFaO0FBQ0EsbUJBQUssS0FBTCxJQUFjLENBQWQ7QUFDQSxxQkFBTyxFQUFDLE1BQU0scUJBQVUsUUFBakIsRUFBMkIsTUFBTSxLQUFqQyxFQUF3QyxRQUFRLElBQWhELEVBQXNELE9BQU8sT0FBN0QsRUFBUDtBQUNEO0FBQ0QsaUJBQUssS0FBTDtBQUNBO0FBQ0YsZUFBSyxFQUFMO0FBQ0U7QUFDRSxrQkFBSSxRQUFRLEtBQUssZ0JBQUwsQ0FBc0IsRUFBdEIsRUFBMEIsSUFBMUIsRUFBZ0MsQ0FBaEMsQ0FBWjtBQUNBLGtCQUFJLFNBQVMsSUFBYixFQUFtQjtBQUNqQixzQkFBTSxLQUFLLGFBQUwsRUFBTjtBQUNEO0FBQ0Q7QUFDRDtBQUNIO0FBQ0UsaUJBQUssS0FBTDtBQXRCSjtBQXdCRDtBQUNELFlBQU0sS0FBSyxhQUFMLEVBQU47QUFDRDs7Ozs7O2tCQTVKa0IsTSIsImZpbGUiOiJzaGlmdC1yZWFkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzaGlmdC1wYXJzZXIvZGlzdC90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5DbGFzcywgVG9rZW5UeXBlfSBmcm9tIFwic2hpZnQtcGFyc2VyL2Rpc3QvdG9rZW5pemVyXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQgICogYXMgUiBmcm9tIFwicmFtZGFcIjtcbmltcG9ydCB7TWF5YmV9IGZyb20gXCJyYW1kYS1mYW50YXN5XCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5jb25zdCBKdXN0XzQ4OSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzQ5MCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQgVGVybSBmcm9tIFwiLi90ZXJtc1wiO1xuY29uc3QgTFNZTlRBWF80OTEgPSB7bmFtZTogXCJsZWZ0LXN5bnRheFwifTtcbmNvbnN0IFJTWU5UQVhfNDkyID0ge25hbWU6IFwicmlnaHQtc3ludGF4XCJ9O1xuY29uc3QgQVRfNDkzID0ge2tsYXNzOiBUb2tlbkNsYXNzLlB1bmN0dWF0b3IsIG5hbWU6IFwiQFwifTtcbmNvbnN0IGxpdGVyYWxLZXl3b3Jkc180OTQgPSBbXCJ0aGlzXCIsIFwibnVsbFwiLCBcInRydWVcIiwgXCJmYWxzZVwiXTtcbmNvbnN0IGlzTGVmdEJyYWNrZXRfNDk1ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLfSk7XG5jb25zdCBpc0xlZnRCcmFjZV80OTYgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0V9KTtcbmNvbnN0IGlzTGVmdFBhcmVuXzQ5NyA9IFIud2hlcmVFcSh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTn0pO1xuY29uc3QgaXNSaWdodEJyYWNrZXRfNDk4ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNLfSk7XG5jb25zdCBpc1JpZ2h0QnJhY2VfNDk5ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNFfSk7XG5jb25zdCBpc1JpZ2h0UGFyZW5fNTAwID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUlBBUkVOfSk7XG5jb25zdCBpc0VPU181MDEgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5FT1N9KTtcbmNvbnN0IGlzSGFzaF81MDIgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5JREVOVElGSUVSLCB2YWx1ZTogXCIjXCJ9KTtcbmNvbnN0IGlzTGVmdFN5bnRheF81MDMgPSBSLndoZXJlRXEoe3R5cGU6IExTWU5UQVhfNDkxfSk7XG5jb25zdCBpc1JpZ2h0U3ludGF4XzUwNCA9IFIud2hlcmVFcSh7dHlwZTogUlNZTlRBWF80OTJ9KTtcbmNvbnN0IGlzTGVmdERlbGltaXRlcl81MDUgPSBSLmFueVBhc3MoW2lzTGVmdEJyYWNrZXRfNDk1LCBpc0xlZnRCcmFjZV80OTYsIGlzTGVmdFBhcmVuXzQ5NywgaXNMZWZ0U3ludGF4XzUwM10pO1xuY29uc3QgaXNSaWdodERlbGltaXRlcl81MDYgPSBSLmFueVBhc3MoW2lzUmlnaHRCcmFja2V0XzQ5OCwgaXNSaWdodEJyYWNlXzQ5OSwgaXNSaWdodFBhcmVuXzUwMCwgaXNSaWdodFN5bnRheF81MDRdKTtcbmNvbnN0IGlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyA9IFIuY29uZChbW2lzTGVmdEJyYWNrZXRfNDk1LCAoX181NDgsIGJfNTQ5KSA9PiBpc1JpZ2h0QnJhY2tldF80OTgoYl81NDkpXSwgW2lzTGVmdEJyYWNlXzQ5NiwgKF9fNTUwLCBiXzU1MSkgPT4gaXNSaWdodEJyYWNlXzQ5OShiXzU1MSldLCBbaXNMZWZ0UGFyZW5fNDk3LCAoX181NTIsIGJfNTUzKSA9PiBpc1JpZ2h0UGFyZW5fNTAwKGJfNTUzKV0sIFtpc0xlZnRTeW50YXhfNTAzLCAoX181NTQsIGJfNTU1KSA9PiBpc1JpZ2h0U3ludGF4XzUwNChiXzU1NSldLCBbUi5ULCBSLkZdXSk7XG5jb25zdCBhc3NpZ25PcHNfNTA4ID0gW1wiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsIFwiJj1cIiwgXCJ8PVwiLCBcIl49XCIsIFwiLFwiXTtcbmNvbnN0IGJpbmFyeU9wc181MDkgPSBbXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIjw8XCIsIFwiPj5cIiwgXCI+Pj5cIiwgXCImXCIsIFwifFwiLCBcIl5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsIFwiPD1cIiwgXCI8XCIsIFwiPlwiLCBcIiE9XCIsIFwiIT09XCIsIFwiaW5zdGFuY2VvZlwiXTtcbmNvbnN0IHVuYXJ5T3BzXzUxMCA9IFtcIisrXCIsIFwiLS1cIiwgXCJ+XCIsIFwiIVwiLCBcImRlbGV0ZVwiLCBcInZvaWRcIiwgXCJ0eXBlb2ZcIiwgXCJ5aWVsZFwiLCBcInRocm93XCIsIFwibmV3XCJdO1xuY29uc3QgaXNFbXB0eV81MTEgPSBSLndoZXJlRXEoe3NpemU6IDB9KTtcbmNvbnN0IGlzUHVuY3R1YXRvcl81MTIgPSBzXzU1NiA9PiBzXzU1Ni5pc1B1bmN0dWF0b3IoKTtcbmNvbnN0IGlzS2V5d29yZF81MTMgPSBzXzU1NyA9PiBzXzU1Ny5pc0tleXdvcmQoKTtcbmNvbnN0IGlzRGVsaW1pdGVyXzUxNCA9IHNfNTU4ID0+IHNfNTU4LmlzRGVsaW1pdGVyKCk7XG5jb25zdCBpc1BhcmVuc181MTUgPSBzXzU1OSA9PiBzXzU1OS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFjZXNfNTE2ID0gc181NjAgPT4gc181NjAuaXNCcmFjZXMoKTtcbmNvbnN0IGlzQnJhY2tldHNfNTE3ID0gc181NjEgPT4gc181NjEuaXNCcmFja2V0cygpO1xuY29uc3QgaXNJZGVudGlmaWVyXzUxOCA9IHNfNTYyID0+IHNfNTYyLmlzSWRlbnRpZmllcigpO1xuY29uc3QgdmFsXzUxOSA9IHNfNTYzID0+IHNfNTYzLnZhbCgpO1xuY29uc3QgaXNWYWxfNTIwID0gUi5jdXJyeSgodl81NjQsIHNfNTY1KSA9PiBzXzU2NS52YWwoKSA9PT0gdl81NjQpO1xuY29uc3QgaXNEb3RfNTIxID0gUi5hbGxQYXNzKFtpc1B1bmN0dWF0b3JfNTEyLCBpc1ZhbF81MjAoXCIuXCIpXSk7XG5jb25zdCBpc0NvbG9uXzUyMiA9IFIuYWxsUGFzcyhbaXNQdW5jdHVhdG9yXzUxMiwgaXNWYWxfNTIwKFwiOlwiKV0pO1xuY29uc3QgaXNGdW5jdGlvbktleXdvcmRfNTIzID0gUi5hbGxQYXNzKFtpc0tleXdvcmRfNTEzLCBpc1ZhbF81MjAoXCJmdW5jdGlvblwiKV0pO1xuY29uc3QgaXNPcGVyYXRvcl81MjQgPSBzXzU2NiA9PiAoc181NjYuaXNQdW5jdHVhdG9yKCkgfHwgc181NjYuaXNLZXl3b3JkKCkpICYmIFIuYW55KFIuZXF1YWxzKHNfNTY2LnZhbCgpKSwgYXNzaWduT3BzXzUwOC5jb25jYXQoYmluYXJ5T3BzXzUwOSkuY29uY2F0KHVuYXJ5T3BzXzUxMCkpO1xuY29uc3QgaXNOb25MaXRlcmFsS2V5d29yZF81MjUgPSBSLmFsbFBhc3MoW2lzS2V5d29yZF81MTMsIHNfNTY3ID0+IFIubm9uZShSLmVxdWFscyhzXzU2Ny52YWwoKSksIGxpdGVyYWxLZXl3b3Jkc180OTQpXSk7XG5jb25zdCBpc0tleXdvcmRFeHByUHJlZml4XzUyNiA9IFIuYWxsUGFzcyhbaXNLZXl3b3JkXzUxMywgc181NjggPT4gUi5hbnkoUi5lcXVhbHMoc181NjgudmFsKCkpLCBbXCJpbnN0YW5jZW9mXCIsIFwidHlwZW9mXCIsIFwiZGVsZXRlXCIsIFwidm9pZFwiLCBcInlpZWxkXCIsIFwidGhyb3dcIiwgXCJuZXdcIiwgXCJjYXNlXCJdKV0pO1xubGV0IGxhc3RfNTI3ID0gcF81NjkgPT4gcF81NjkubGFzdCgpO1xubGV0IHNhZmVMYXN0XzUyOCA9IFIucGlwZShSLmNvbmQoW1tpc0VtcHR5XzUxMSwgUi5hbHdheXMoTm90aGluZ180OTAoKSldLCBbUi5ULCBSLmNvbXBvc2UoTWF5YmUub2YsIGxhc3RfNTI3KV1dKSk7XG5sZXQgc3R1ZmZUcnVlXzUyOSA9IFIuY3VycnkoKHBfNTcwLCBiXzU3MSkgPT4gYl81NzEgPyBKdXN0XzQ4OShwXzU3MCkgOiBOb3RoaW5nXzQ5MCgpKTtcbmxldCBzdHVmZkZhbHNlXzUzMCA9IFIuY3VycnkoKHBfNTcyLCBiXzU3MykgPT4gIWJfNTczID8gSnVzdF80ODkocF81NzIpIDogTm90aGluZ180OTAoKSk7XG5sZXQgaXNUb3BDb2xvbl81MzEgPSBSLnBpcGUoc2FmZUxhc3RfNTI4LCBSLm1hcChpc0NvbG9uXzUyMiksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5sZXQgaXNUb3BQdW5jdHVhdG9yXzUzMiA9IFIucGlwZShzYWZlTGFzdF81MjgsIFIubWFwKGlzUHVuY3R1YXRvcl81MTIpLCBNYXliZS5tYXliZShmYWxzZSwgUi5pZGVudGl0eSkpO1xubGV0IGlzRXhwclJldHVybl81MzMgPSBSLmN1cnJ5KChsXzU3NCwgcF81NzUpID0+IHtcbiAgbGV0IHJldEt3ZF81NzYgPSBzYWZlTGFzdF81MjgocF81NzUpO1xuICBsZXQgbWF5YmVEb3RfNTc3ID0gcG9wXzU0NChwXzU3NSkuY2hhaW4oc2FmZUxhc3RfNTI4KTtcbiAgaWYgKG1heWJlRG90XzU3Ny5tYXAoaXNEb3RfNTIxKS5nZXRPckVsc2UoZmFsc2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJldEt3ZF81NzYubWFwKHNfNTc4ID0+IHtcbiAgICByZXR1cm4gc181NzguaXNLZXl3b3JkKCkgJiYgc181NzgudmFsKCkgPT09IFwicmV0dXJuXCIgJiYgc181NzgubGluZU51bWJlcigpID09PSBsXzU3NDtcbiAgfSkuZ2V0T3JFbHNlKGZhbHNlKTtcbn0pO1xuY29uc3QgaXNUb3BPcGVyYXRvcl81MzQgPSBSLnBpcGUoc2FmZUxhc3RfNTI4LCBSLm1hcChpc09wZXJhdG9yXzUyNCksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5jb25zdCBpc1RvcEtleXdvcmRFeHByUHJlZml4XzUzNSA9IFIucGlwZShzYWZlTGFzdF81MjgsIFIubWFwKGlzS2V5d29yZEV4cHJQcmVmaXhfNTI2KSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmxldCBpc0V4cHJQcmVmaXhfNTM2ID0gUi5jdXJyeSgobF81NzksIGJfNTgwKSA9PiBSLmNvbmQoW1tpc0VtcHR5XzUxMSwgUi5hbHdheXMoYl81ODApXSwgW2lzVG9wQ29sb25fNTMxLCBSLmFsd2F5cyhiXzU4MCldLCBbaXNUb3BLZXl3b3JkRXhwclByZWZpeF81MzUsIFIuVF0sIFtpc1RvcE9wZXJhdG9yXzUzNCwgUi5UXSwgW2lzVG9wUHVuY3R1YXRvcl81MzIsIFIuYWx3YXlzKGJfNTgwKV0sIFtpc0V4cHJSZXR1cm5fNTMzKGxfNTc5KSwgUi5UXSwgW1IuVCwgUi5GXV0pKTtcbmxldCBjdXJseV81MzcgPSBwXzU4MSA9PiBzYWZlTGFzdF81MjgocF81ODEpLm1hcChpc0JyYWNlc181MTYpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODEpKTtcbmxldCBwYXJlbl81MzggPSBwXzU4MiA9PiBzYWZlTGFzdF81MjgocF81ODIpLm1hcChpc1BhcmVuc181MTUpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODIpKTtcbmxldCBmdW5jXzUzOSA9IHBfNTgzID0+IHNhZmVMYXN0XzUyOChwXzU4MykubWFwKGlzRnVuY3Rpb25LZXl3b3JkXzUyMykuY2hhaW4oc3R1ZmZUcnVlXzUyOShwXzU4MykpO1xubGV0IGlkZW50XzU0MCA9IHBfNTg0ID0+IHNhZmVMYXN0XzUyOChwXzU4NCkubWFwKGlzSWRlbnRpZmllcl81MTgpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODQpKTtcbmxldCBub25MaXRlcmFsS2V5d29yZF81NDEgPSBwXzU4NSA9PiBzYWZlTGFzdF81MjgocF81ODUpLm1hcChpc05vbkxpdGVyYWxLZXl3b3JkXzUyNSkuY2hhaW4oc3R1ZmZUcnVlXzUyOShwXzU4NSkpO1xubGV0IG9wdF81NDIgPSBSLmN1cnJ5KChhXzU4NiwgYl81ODcsIHBfNTg4KSA9PiB7XG4gIGxldCByZXN1bHRfNTg5ID0gUi5waXBlSyhhXzU4NiwgYl81ODcpKE1heWJlLm9mKHBfNTg4KSk7XG4gIHJldHVybiBNYXliZS5pc0p1c3QocmVzdWx0XzU4OSkgPyByZXN1bHRfNTg5IDogTWF5YmUub2YocF81ODgpO1xufSk7XG5sZXQgbm90RG90XzU0MyA9IFIuaWZFbHNlKFIud2hlcmVFcSh7c2l6ZTogMH0pLCBKdXN0XzQ4OSwgcF81OTAgPT4gc2FmZUxhc3RfNTI4KHBfNTkwKS5tYXAoc181OTEgPT4gIShzXzU5MS5pc1B1bmN0dWF0b3IoKSAmJiBzXzU5MS52YWwoKSA9PT0gXCIuXCIpKS5jaGFpbihzdHVmZlRydWVfNTI5KHBfNTkwKSkpO1xubGV0IHBvcF81NDQgPSBSLmNvbXBvc2UoSnVzdF80ODksIHBfNTkyID0+IHBfNTkyLnBvcCgpKTtcbmNvbnN0IGZ1bmN0aW9uUHJlZml4XzU0NSA9IFIucGlwZUsoY3VybHlfNTM3LCBwb3BfNTQ0LCBwYXJlbl81MzgsIHBvcF81NDQsIG9wdF81NDIoaWRlbnRfNTQwLCBwb3BfNTQ0KSwgZnVuY181MzkpO1xuY29uc3QgaXNSZWdleFByZWZpeF81NDYgPSBiXzU5MyA9PiBSLmFueVBhc3MoW2lzRW1wdHlfNTExLCBpc1RvcFB1bmN0dWF0b3JfNTMyLCBSLnBpcGUoTWF5YmUub2YsIFIucGlwZUsobm9uTGl0ZXJhbEtleXdvcmRfNTQxLCBwb3BfNTQ0LCBub3REb3RfNTQzKSwgTWF5YmUuaXNKdXN0KSwgUi5waXBlKE1heWJlLm9mLCBSLnBpcGVLKHBhcmVuXzUzOCwgcG9wXzU0NCwgbm9uTGl0ZXJhbEtleXdvcmRfNTQxLCBwb3BfNTQ0LCBub3REb3RfNTQzKSwgTWF5YmUuaXNKdXN0KSwgUi5waXBlKE1heWJlLm9mLCBmdW5jdGlvblByZWZpeF81NDUsIFIuY2hhaW4ocF81OTQgPT4ge1xuICByZXR1cm4gc2FmZUxhc3RfNTI4KHBfNTk0KS5tYXAoc181OTUgPT4gc181OTUubGluZU51bWJlcigpKS5jaGFpbihmbkxpbmVfNTk2ID0+IHtcbiAgICByZXR1cm4gcG9wXzU0NChwXzU5NCkubWFwKGlzRXhwclByZWZpeF81MzYoZm5MaW5lXzU5NiwgYl81OTMpKTtcbiAgfSkuY2hhaW4oc3R1ZmZGYWxzZV81MzAocF81OTQpKTtcbn0pLCBNYXliZS5pc0p1c3QpLCBwXzU5NyA9PiB7XG4gIGxldCBpc0N1cmx5XzU5OCA9IE1heWJlLmlzSnVzdChzYWZlTGFzdF81MjgocF81OTcpLm1hcChpc0JyYWNlc181MTYpKTtcbiAgbGV0IGFscmVhZHlDaGVja2VkRnVuY3Rpb25fNTk5ID0gUi5waXBlKE1heWJlLm9mLCBmdW5jdGlvblByZWZpeF81NDUsIE1heWJlLmlzSnVzdCkocF81OTcpO1xuICBpZiAoYWxyZWFkeUNoZWNrZWRGdW5jdGlvbl81OTkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIFIucGlwZShNYXliZS5vZiwgUi5jaGFpbihjdXJseV81MzcpLCBSLmNoYWluKHBfNjAwID0+IHtcbiAgICByZXR1cm4gc2FmZUxhc3RfNTI4KHBfNjAwKS5tYXAoc182MDEgPT4gc182MDEubGluZU51bWJlcigpKS5jaGFpbihjdXJseUxpbmVfNjAyID0+IHtcbiAgICAgIHJldHVybiBwb3BfNTQ0KHBfNjAwKS5tYXAoaXNFeHByUHJlZml4XzUzNihjdXJseUxpbmVfNjAyLCBiXzU5MykpO1xuICAgIH0pLmNoYWluKHN0dWZmRmFsc2VfNTMwKHBfNjAwKSk7XG4gIH0pLCBNYXliZS5pc0p1c3QpKHBfNTk3KTtcbn1dKTtcbmZ1bmN0aW9uIGxhc3RFbF81NDcobF82MDMpIHtcbiAgcmV0dXJuIGxfNjAzW2xfNjAzLmxlbmd0aCAtIDFdO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZGVyIGV4dGVuZHMgVG9rZW5pemVyIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nc182MDQsIGNvbnRleHRfNjA1LCByZXBsYWNlbWVudHNfNjA2KSB7XG4gICAgc3VwZXIoQXJyYXkuaXNBcnJheShzdHJpbmdzXzYwNCkgPyBzdHJpbmdzXzYwNC5qb2luKFwiXCIpIDogc3RyaW5nc182MDQpO1xuICAgIHRoaXMuZGVsaW1TdGFjayA9IG5ldyBNYXA7XG4gICAgdGhpcy5pbnNpZGVTeW50YXhUZW1wbGF0ZSA9IFtmYWxzZV07XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF82MDU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RyaW5nc182MDQpKSB7XG4gICAgICBsZXQgdG90YWxJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlcGxhY2VtZW50SW5kZXggPSBSLnJlZHVjZSgoYWNjXzYwNywgc3RyUmVwXzYwOCkgPT4ge1xuICAgICAgICBhY2NfNjA3LnB1c2goe2luZGV4OiB0b3RhbEluZGV4ICsgc3RyUmVwXzYwOFswXS5sZW5ndGgsIHJlcGxhY2VtZW50OiBzdHJSZXBfNjA4WzFdfSk7XG4gICAgICAgIHRvdGFsSW5kZXggKz0gc3RyUmVwXzYwOFswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBhY2NfNjA3O1xuICAgICAgfSwgW10sIFIuemlwKHN0cmluZ3NfNjA0LCByZXBsYWNlbWVudHNfNjA2KSk7XG4gICAgfVxuICB9XG4gIHJlYWQoc3RhY2tfNjA5ID0gW10sIGJfNjEwID0gZmFsc2UsIHNpbmdsZURlbGltaXRlcl82MTEgPSBmYWxzZSkge1xuICAgIGxldCBwcmVmaXhfNjEyID0gTGlzdCgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgdG9rID0gdGhpcy5hZHZhbmNlKHByZWZpeF82MTIsIGJfNjEwKTtcbiAgICAgIGlmICh0b2sgaW5zdGFuY2VvZiBTeW50YXggfHwgdG9rIGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgICBzdGFja182MDkucHVzaCh0b2spO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvaykpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc3RhY2tfNjA5LCB0b2spO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChMaXN0LmlzTGlzdCh0b2spKSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrXzYwOSwgdG9rLnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRU9TXzUwMSh0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MDlbMF0gJiYgaXNMZWZ0RGVsaW1pdGVyXzUwNShzdGFja182MDlbMF0udG9rZW4pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVVbmV4cGVjdGVkKHRvayk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNMZWZ0RGVsaW1pdGVyXzUwNSh0b2spKSB7XG4gICAgICAgIGlmIChpc0xlZnRTeW50YXhfNTAzKHRvaykpIHtcbiAgICAgICAgICB0aGlzLmluc2lkZVN5bnRheFRlbXBsYXRlLnB1c2godHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmUgPSB0b2suc2xpY2Uuc3RhcnRMb2NhdGlvbi5saW5lO1xuICAgICAgICBsZXQgaW5uZXJCID0gaXNMZWZ0QnJhY2VfNDk2KHRvaykgPyBpc0V4cHJQcmVmaXhfNTM2KGxpbmUsIGJfNjEwKShwcmVmaXhfNjEyKSA6IHRydWU7XG4gICAgICAgIGxldCBpbm5lciA9IHRoaXMucmVhZChbbmV3IFN5bnRheCh0b2spXSwgaW5uZXJCLCBmYWxzZSk7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KGlubmVyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjEyID0gcHJlZml4XzYxMi5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjA5LnB1c2goc3R4KTtcbiAgICAgICAgaWYgKHNpbmdsZURlbGltaXRlcl82MTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1JpZ2h0RGVsaW1pdGVyXzUwNih0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MDlbMF0gJiYgIWlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyhzdGFja182MDlbMF0udG9rZW4sIHRvaykpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3R4ID0gbmV3IFN5bnRheCh0b2ssIHRoaXMuY29udGV4dCk7XG4gICAgICAgIHN0YWNrXzYwOS5wdXNoKHN0eCk7XG4gICAgICAgIGlmIChsYXN0RWxfNTQ3KHRoaXMuaW5zaWRlU3ludGF4VGVtcGxhdGUpICYmIGlzUmlnaHRTeW50YXhfNTA0KHRvaykpIHtcbiAgICAgICAgICB0aGlzLmluc2lkZVN5bnRheFRlbXBsYXRlLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0eCA9IG5ldyBTeW50YXgodG9rLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjEyID0gcHJlZml4XzYxMi5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjA5LnB1c2goc3R4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIExpc3Qoc3RhY2tfNjA5KTtcbiAgfVxuICBhZHZhbmNlKHByZWZpeF82MTMsIGJfNjE0KSB7XG4gICAgbGV0IHN0YXJ0TG9jYXRpb25fNjE1ID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgIHRoaXMubGFzdEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICB0aGlzLmxhc3RMaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMubGFzdExpbmVTdGFydCA9IHRoaXMubGluZVN0YXJ0O1xuICAgIHRoaXMuc2tpcENvbW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgIHRoaXMuc3RhcnRMaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMuc3RhcnRMaW5lU3RhcnQgPSB0aGlzLmxpbmVTdGFydDtcbiAgICBpZiAodGhpcy5yZXBsYWNlbWVudEluZGV4ICYmIHRoaXMucmVwbGFjZW1lbnRJbmRleFswXSAmJiB0aGlzLmluZGV4ID49IHRoaXMucmVwbGFjZW1lbnRJbmRleFswXS5pbmRleCkge1xuICAgICAgbGV0IHJlcCA9IHRoaXMucmVwbGFjZW1lbnRJbmRleFswXS5yZXBsYWNlbWVudDtcbiAgICAgIHRoaXMucmVwbGFjZW1lbnRJbmRleC5zaGlmdCgpO1xuICAgICAgcmV0dXJuIHJlcDtcbiAgICB9XG4gICAgbGV0IGNoYXJDb2RlXzYxNiA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7XG4gICAgaWYgKGNoYXJDb2RlXzYxNiA9PT0gOTYpIHtcbiAgICAgIGxldCBlbGVtZW50LCBpdGVtcyA9IFtdO1xuICAgICAgbGV0IHN0YXJ0TG9jYXRpb25fNjE1ID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5pbmRleDtcbiAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIGlmIChsYXN0RWxfNTQ3KHRoaXMuaW5zaWRlU3ludGF4VGVtcGxhdGUpKSB7XG4gICAgICAgIGxldCBzbGljZSA9IHRoaXMuZ2V0U2xpY2Uoc3RhcnQsIHN0YXJ0TG9jYXRpb25fNjE1KTtcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBSU1lOVEFYXzQ5MiwgdmFsdWU6IFwiYFwiLCBzbGljZTogc2xpY2V9O1xuICAgICAgfVxuICAgICAgZG8ge1xuICAgICAgICBlbGVtZW50ID0gdGhpcy5zY2FuVGVtcGxhdGVFbGVtZW50KCk7XG4gICAgICAgIGl0ZW1zLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LmludGVycCkge1xuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLnJlYWQoW10sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICBhc3NlcnQoZWxlbWVudC5zaXplID09PSAxLCBcInNob3VsZCBvbmx5IGhhdmUgcmVhZCBhIHNpbmdsZSBkZWxpbWl0ZXIgaW5zaWRlIGEgdGVtcGxhdGVcIik7XG4gICAgICAgICAgaXRlbXMucHVzaChlbGVtZW50LmdldCgwKSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKCFlbGVtZW50LnRhaWwpO1xuICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuVEVNUExBVEUsIGl0ZW1zOiBMaXN0KGl0ZW1zKX07XG4gICAgfSBlbHNlIGlmIChjaGFyQ29kZV82MTYgPT09IDM1KSB7XG4gICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MTUgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MTUpO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDk2KSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBMU1lOVEFYXzQ5MSwgdmFsdWU6IFwiI2BcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiBcIiNcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICB9IGVsc2UgaWYgKGNoYXJDb2RlXzYxNiA9PT0gNjQpIHtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYxNSA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBzdGFydExvY2F0aW9uXzYxNSk7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICByZXR1cm4ge3R5cGU6IEFUXzQ5MywgdmFsdWU6IFwiQFwiLCBzbGljZTogc2xpY2V9O1xuICAgIH1cbiAgICBsZXQgbG9va2FoZWFkXzYxNyA9IHN1cGVyLmFkdmFuY2UoKTtcbiAgICBpZiAobG9va2FoZWFkXzYxNy50eXBlID09PSBUb2tlblR5cGUuRElWICYmIGlzUmVnZXhQcmVmaXhfNTQ2KGJfNjE0KShwcmVmaXhfNjEzKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNjYW5SZWdFeHAoXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbG9va2FoZWFkXzYxNztcbiAgfVxuICBzY2FuVGVtcGxhdGVFbGVtZW50KCkge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYxOCA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICBsZXQgc3RhcnRfNjE5ID0gdGhpcy5pbmRleDtcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuc291cmNlLmxlbmd0aCkge1xuICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0XzYxOSwgc3RhcnRMb2NhdGlvbl82MTgpO1xuICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgdGFpbDogdHJ1ZSwgaW50ZXJwOiBmYWxzZSwgc2xpY2U6IHNsaWNlfTtcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDEyMykge1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydF82MTksIHN0YXJ0TG9jYXRpb25fNjE4KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlRFTVBMQVRFLCB0YWlsOiBmYWxzZSwgaW50ZXJwOiB0cnVlLCBzbGljZTogc2xpY2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IG9jdGFsID0gdGhpcy5zY2FuU3RyaW5nRXNjYXBlKFwiXCIsIG51bGwpWzFdO1xuICAgICAgICAgICAgaWYgKG9jdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVJTExFR0FMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUlMTEVHQUwoKTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3NoaWZ0LXJlYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQTs7QUFDQTs7OztBQUNBOztJQUFhLEM7O0FBQ2I7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7Ozs7O0FBRkEsSUFBTSxXQUFXLG9CQUFNLElBQXZCO0FBQ0EsSUFBTSxjQUFjLG9CQUFNLE9BQTFCOztBQUVBLElBQU0sY0FBYyxFQUFDLE1BQU0sYUFBUCxFQUFwQjtBQUNBLElBQU0sY0FBYyxFQUFDLE1BQU0sY0FBUCxFQUFwQjtBQUNBLElBQU0sU0FBUyxFQUFDLE9BQU8sc0JBQVcsVUFBbkIsRUFBK0IsTUFBTSxHQUFyQyxFQUFmO0FBQ0EsSUFBTSxzQkFBc0IsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixNQUFqQixFQUF5QixPQUF6QixDQUE1QjtBQUNBLElBQU0sb0JBQW9CLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTFCO0FBQ0EsSUFBTSxrQkFBa0IsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBeEI7QUFDQSxJQUFNLGtCQUFrQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF4QjtBQUNBLElBQU0scUJBQXFCLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTNCO0FBQ0EsSUFBTSxtQkFBbUIsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBekI7QUFDQSxJQUFNLG1CQUFtQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF6QjtBQUNBLElBQU0sWUFBWSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsR0FBakIsRUFBVixDQUFsQjtBQUNBLElBQU0sYUFBYSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJB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QUFtQjtBQUNqQixzQkFBTSxLQUFLLGFBQUwsRUFBTjtBQUNEO0FBQ0Q7QUFDRDtBQUNIO0FBQ0UsaUJBQUssS0FBTDtBQXRCSjtBQXdCRDtBQUNELFlBQU0sS0FBSyxhQUFMLEVBQU47QUFDRDs7Ozs7O2tCQTlLa0IsTSIsImZpbGUiOiJzaGlmdC1yZWFkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzaGlmdC1wYXJzZXIvZGlzdC90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5DbGFzcywgVG9rZW5UeXBlfSBmcm9tIFwic2hpZnQtcGFyc2VyL2Rpc3QvdG9rZW5pemVyXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQgICogYXMgUiBmcm9tIFwicmFtZGFcIjtcbmltcG9ydCB7TWF5YmV9IGZyb20gXCJyYW1kYS1mYW50YXN5XCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5jb25zdCBKdXN0XzQ4OSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzQ5MCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQgVGVybSBmcm9tIFwiLi90ZXJtc1wiO1xuY29uc3QgTFNZTlRBWF80OTEgPSB7bmFtZTogXCJsZWZ0LXN5bnRheFwifTtcbmNvbnN0IFJTWU5UQVhfNDkyID0ge25hbWU6IFwicmlnaHQtc3ludGF4XCJ9O1xuY29uc3QgQVRfNDkzID0ge2tsYXNzOiBUb2tlbkNsYXNzLlB1bmN0dWF0b3IsIG5hbWU6IFwiQFwifTtcbmNvbnN0IGxpdGVyYWxLZXl3b3Jkc180OTQgPSBbXCJ0aGlzXCIsIFwibnVsbFwiLCBcInRydWVcIiwgXCJmYWxzZVwiXTtcbmNvbnN0IGlzTGVmdEJyYWNrZXRfNDk1ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLfSk7XG5jb25zdCBpc0xlZnRCcmFjZV80OTYgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0V9KTtcbmNvbnN0IGlzTGVmdFBhcmVuXzQ5NyA9IFIud2hlcmVFcSh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTn0pO1xuY29uc3QgaXNSaWdodEJyYWNrZXRfNDk4ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNLfSk7XG5jb25zdCBpc1JpZ2h0QnJhY2VfNDk5ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNFfSk7XG5jb25zdCBpc1JpZ2h0UGFyZW5fNTAwID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUlBBUkVOfSk7XG5jb25zdCBpc0VPU181MDEgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5FT1N9KTtcbmNvbnN0IGlzSGFzaF81MDIgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5JREVOVElGSUVSLCB2YWx1ZTogXCIjXCJ9KTtcbmNvbnN0IGlzTGVmdFN5bnRheF81MDMgPSBSLndoZXJlRXEoe3R5cGU6IExTWU5UQVhfNDkxfSk7XG5jb25zdCBpc1JpZ2h0U3ludGF4XzUwNCA9IFIud2hlcmVFcSh7dHlwZTogUlNZTlRBWF80OTJ9KTtcbmNvbnN0IGlzTGVmdERlbGltaXRlcl81MDUgPSBSLmFueVBhc3MoW2lzTGVmdEJyYWNrZXRfNDk1LCBpc0xlZnRCcmFjZV80OTYsIGlzTGVmdFBhcmVuXzQ5NywgaXNMZWZ0U3ludGF4XzUwM10pO1xuY29uc3QgaXNSaWdodERlbGltaXRlcl81MDYgPSBSLmFueVBhc3MoW2lzUmlnaHRCcmFja2V0XzQ5OCwgaXNSaWdodEJyYWNlXzQ5OSwgaXNSaWdodFBhcmVuXzUwMCwgaXNSaWdodFN5bnRheF81MDRdKTtcbmNvbnN0IGlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyA9IFIuY29uZChbW2lzTGVmdEJyYWNrZXRfNDk1LCAoX181NTEsIGJfNTUyKSA9PiBpc1JpZ2h0QnJhY2tldF80OTgoYl81NTIpXSwgW2lzTGVmdEJyYWNlXzQ5NiwgKF9fNTUzLCBiXzU1NCkgPT4gaXNSaWdodEJyYWNlXzQ5OShiXzU1NCldLCBbaXNMZWZ0UGFyZW5fNDk3LCAoX181NTUsIGJfNTU2KSA9PiBpc1JpZ2h0UGFyZW5fNTAwKGJfNTU2KV0sIFtpc0xlZnRTeW50YXhfNTAzLCAoX181NTcsIGJfNTU4KSA9PiBpc1JpZ2h0U3ludGF4XzUwNChiXzU1OCldLCBbUi5ULCBSLkZdXSk7XG5jb25zdCBhc3NpZ25PcHNfNTA4ID0gW1wiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsIFwiJj1cIiwgXCJ8PVwiLCBcIl49XCIsIFwiLFwiXTtcbmNvbnN0IGJpbmFyeU9wc181MDkgPSBbXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIjw8XCIsIFwiPj5cIiwgXCI+Pj5cIiwgXCImXCIsIFwifFwiLCBcIl5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsIFwiPD1cIiwgXCI8XCIsIFwiPlwiLCBcIiE9XCIsIFwiIT09XCIsIFwiaW5zdGFuY2VvZlwiXTtcbmNvbnN0IHVuYXJ5T3BzXzUxMCA9IFtcIisrXCIsIFwiLS1cIiwgXCJ+XCIsIFwiIVwiLCBcImRlbGV0ZVwiLCBcInZvaWRcIiwgXCJ0eXBlb2ZcIiwgXCJ5aWVsZFwiLCBcInRocm93XCIsIFwibmV3XCJdO1xuY29uc3QgaXNOb3RGYWxzZV81MTEgPSBSLmNvbXBvc2UoUi5ub3QsIFIuY3VycnkoUi5lcXVhbHMpKGZhbHNlKSk7XG5jb25zdCBpc0VtcHR5XzUxMiA9IFIud2hlcmVFcSh7c2l6ZTogMH0pO1xuY29uc3QgaXNQdW5jdHVhdG9yXzUxMyA9IHNfNTU5ID0+IHNfNTU5LmlzUHVuY3R1YXRvcigpO1xuY29uc3QgaXNLZXl3b3JkXzUxNCA9IHNfNTYwID0+IHNfNTYwLmlzS2V5d29yZCgpO1xuY29uc3QgaXNEZWxpbWl0ZXJfNTE1ID0gc181NjEgPT4gc181NjEuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzUGFyZW5zXzUxNiA9IHNfNTYyID0+IHNfNTYyLmlzUGFyZW5zKCk7XG5jb25zdCBpc0JyYWNlc181MTcgPSBzXzU2MyA9PiBzXzU2My5pc0JyYWNlcygpO1xuY29uc3QgaXNCcmFja2V0c181MTggPSBzXzU2NCA9PiBzXzU2NC5pc0JyYWNrZXRzKCk7XG5jb25zdCBpc0lkZW50aWZpZXJfNTE5ID0gc181NjUgPT4gc181NjUuaXNJZGVudGlmaWVyKCk7XG5jb25zdCB2YWxfNTIwID0gc181NjYgPT4gc181NjYudmFsKCk7XG5jb25zdCBpc1ZhbF81MjEgPSBSLmN1cnJ5KCh2XzU2Nywgc181NjgpID0+IHNfNTY4LnZhbCgpID09PSB2XzU2Nyk7XG5jb25zdCBpc0RvdF81MjIgPSBSLmFsbFBhc3MoW2lzUHVuY3R1YXRvcl81MTMsIGlzVmFsXzUyMShcIi5cIildKTtcbmNvbnN0IGlzQ29sb25fNTIzID0gUi5hbGxQYXNzKFtpc1B1bmN0dWF0b3JfNTEzLCBpc1ZhbF81MjEoXCI6XCIpXSk7XG5jb25zdCBpc0Z1bmN0aW9uS2V5d29yZF81MjQgPSBSLmFsbFBhc3MoW2lzS2V5d29yZF81MTQsIGlzVmFsXzUyMShcImZ1bmN0aW9uXCIpXSk7XG5jb25zdCBpc09wZXJhdG9yXzUyNSA9IHNfNTY5ID0+IChzXzU2OS5pc1B1bmN0dWF0b3IoKSB8fCBzXzU2OS5pc0tleXdvcmQoKSkgJiYgUi5hbnkoUi5lcXVhbHMoc181NjkudmFsKCkpLCBhc3NpZ25PcHNfNTA4LmNvbmNhdChiaW5hcnlPcHNfNTA5KS5jb25jYXQodW5hcnlPcHNfNTEwKSk7XG5jb25zdCBpc05vbkxpdGVyYWxLZXl3b3JkXzUyNiA9IFIuYWxsUGFzcyhbaXNLZXl3b3JkXzUxNCwgc181NzAgPT4gUi5ub25lKFIuZXF1YWxzKHNfNTcwLnZhbCgpKSwgbGl0ZXJhbEtleXdvcmRzXzQ5NCldKTtcbmNvbnN0IGlzS2V5d29yZEV4cHJQcmVmaXhfNTI3ID0gUi5hbGxQYXNzKFtpc0tleXdvcmRfNTE0LCBzXzU3MSA9PiBSLmFueShSLmVxdWFscyhzXzU3MS52YWwoKSksIFtcImluc3RhbmNlb2ZcIiwgXCJ0eXBlb2ZcIiwgXCJkZWxldGVcIiwgXCJ2b2lkXCIsIFwieWllbGRcIiwgXCJ0aHJvd1wiLCBcIm5ld1wiLCBcImNhc2VcIl0pXSk7XG5sZXQgbGFzdF81MjggPSBwXzU3MiA9PiBwXzU3Mi5sYXN0KCk7XG5sZXQgc2FmZUxhc3RfNTI5ID0gUi5waXBlKFIuY29uZChbW2lzRW1wdHlfNTEyLCBSLmFsd2F5cyhOb3RoaW5nXzQ5MCgpKV0sIFtSLlQsIFIuY29tcG9zZShNYXliZS5vZiwgbGFzdF81MjgpXV0pKTtcbmxldCBzdHVmZlRydWVfNTMwID0gUi5jdXJyeSgocF81NzMsIGJfNTc0KSA9PiBiXzU3NCA/IEp1c3RfNDg5KHBfNTczKSA6IE5vdGhpbmdfNDkwKCkpO1xubGV0IHN0dWZmRmFsc2VfNTMxID0gUi5jdXJyeSgocF81NzUsIGJfNTc2KSA9PiAhYl81NzYgPyBKdXN0XzQ4OShwXzU3NSkgOiBOb3RoaW5nXzQ5MCgpKTtcbmxldCBpc1RvcENvbG9uXzUzMiA9IFIucGlwZShzYWZlTGFzdF81MjksIFIubWFwKGlzQ29sb25fNTIzKSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmxldCBpc1RvcFB1bmN0dWF0b3JfNTMzID0gUi5waXBlKHNhZmVMYXN0XzUyOSwgUi5tYXAoaXNQdW5jdHVhdG9yXzUxMyksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5sZXQgaXNFeHByUmV0dXJuXzUzNCA9IFIuY3VycnkoKGxfNTc3LCBwXzU3OCkgPT4ge1xuICBsZXQgcmV0S3dkXzU3OSA9IHNhZmVMYXN0XzUyOShwXzU3OCk7XG4gIGxldCBtYXliZURvdF81ODAgPSBwb3BfNTQ1KHBfNTc4KS5jaGFpbihzYWZlTGFzdF81MjkpO1xuICBpZiAobWF5YmVEb3RfNTgwLm1hcChpc0RvdF81MjIpLmdldE9yRWxzZShmYWxzZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmV0S3dkXzU3OS5tYXAoc181ODEgPT4ge1xuICAgIHJldHVybiBzXzU4MS5pc0tleXdvcmQoKSAmJiBzXzU4MS52YWwoKSA9PT0gXCJyZXR1cm5cIiAmJiBzXzU4MS5saW5lTnVtYmVyKCkgPT09IGxfNTc3O1xuICB9KS5nZXRPckVsc2UoZmFsc2UpO1xufSk7XG5jb25zdCBpc1RvcE9wZXJhdG9yXzUzNSA9IFIucGlwZShzYWZlTGFzdF81MjksIFIubWFwKGlzT3BlcmF0b3JfNTI1KSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmNvbnN0IGlzVG9wS2V5d29yZEV4cHJQcmVmaXhfNTM2ID0gUi5waXBlKHNhZmVMYXN0XzUyOSwgUi5tYXAoaXNLZXl3b3JkRXhwclByZWZpeF81MjcpLCBNYXliZS5tYXliZShmYWxzZSwgUi5pZGVudGl0eSkpO1xubGV0IGlzRXhwclByZWZpeF81MzcgPSBSLmN1cnJ5KChsXzU4MiwgYl81ODMpID0+IFIuY29uZChbW2lzRW1wdHlfNTEyLCBSLmFsd2F5cyhiXzU4MyldLCBbaXNUb3BDb2xvbl81MzIsIFIuYWx3YXlzKGJfNTgzKV0sIFtpc1RvcEtleXdvcmRFeHByUHJlZml4XzUzNiwgUi5UXSwgW2lzVG9wT3BlcmF0b3JfNTM1LCBSLlRdLCBbaXNUb3BQdW5jdHVhdG9yXzUzMywgUi5hbHdheXMoYl81ODMpXSwgW2lzRXhwclJldHVybl81MzQobF81ODIpLCBSLlRdLCBbUi5ULCBSLkZdXSkpO1xubGV0IGN1cmx5XzUzOCA9IHBfNTg0ID0+IHNhZmVMYXN0XzUyOShwXzU4NCkubWFwKGlzQnJhY2VzXzUxNykuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NCkpO1xubGV0IHBhcmVuXzUzOSA9IHBfNTg1ID0+IHNhZmVMYXN0XzUyOShwXzU4NSkubWFwKGlzUGFyZW5zXzUxNikuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NSkpO1xubGV0IGZ1bmNfNTQwID0gcF81ODYgPT4gc2FmZUxhc3RfNTI5KHBfNTg2KS5tYXAoaXNGdW5jdGlvbktleXdvcmRfNTI0KS5jaGFpbihzdHVmZlRydWVfNTMwKHBfNTg2KSk7XG5sZXQgaWRlbnRfNTQxID0gcF81ODcgPT4gc2FmZUxhc3RfNTI5KHBfNTg3KS5tYXAoaXNJZGVudGlmaWVyXzUxOSkuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NykpO1xubGV0IG5vbkxpdGVyYWxLZXl3b3JkXzU0MiA9IHBfNTg4ID0+IHNhZmVMYXN0XzUyOShwXzU4OCkubWFwKGlzTm9uTGl0ZXJhbEtleXdvcmRfNTI2KS5jaGFpbihzdHVmZlRydWVfNTMwKHBfNTg4KSk7XG5sZXQgb3B0XzU0MyA9IFIuY3VycnkoKGFfNTg5LCBiXzU5MCwgcF81OTEpID0+IHtcbiAgbGV0IHJlc3VsdF81OTIgPSBSLnBpcGVLKGFfNTg5LCBiXzU5MCkoTWF5YmUub2YocF81OTEpKTtcbiAgcmV0dXJuIE1heWJlLmlzSnVzdChyZXN1bHRfNTkyKSA/IHJlc3VsdF81OTIgOiBNYXliZS5vZihwXzU5MSk7XG59KTtcbmxldCBub3REb3RfNTQ0ID0gUi5pZkVsc2UoUi53aGVyZUVxKHtzaXplOiAwfSksIEp1c3RfNDg5LCBwXzU5MyA9PiBzYWZlTGFzdF81MjkocF81OTMpLm1hcChzXzU5NCA9PiAhKHNfNTk0LmlzUHVuY3R1YXRvcigpICYmIHNfNTk0LnZhbCgpID09PSBcIi5cIikpLmNoYWluKHN0dWZmVHJ1ZV81MzAocF81OTMpKSk7XG5sZXQgcG9wXzU0NSA9IFIuY29tcG9zZShKdXN0XzQ4OSwgcF81OTUgPT4gcF81OTUucG9wKCkpO1xuY29uc3QgZnVuY3Rpb25QcmVmaXhfNTQ2ID0gUi5waXBlSyhjdXJseV81MzgsIHBvcF81NDUsIHBhcmVuXzUzOSwgcG9wXzU0NSwgb3B0XzU0MyhpZGVudF81NDEsIHBvcF81NDUpLCBmdW5jXzU0MCk7XG5jb25zdCBpc1JlZ2V4UHJlZml4XzU0NyA9IGJfNTk2ID0+IFIuYW55UGFzcyhbaXNFbXB0eV81MTIsIGlzVG9wUHVuY3R1YXRvcl81MzMsIFIucGlwZShNYXliZS5vZiwgUi5waXBlSyhub25MaXRlcmFsS2V5d29yZF81NDIsIHBvcF81NDUsIG5vdERvdF81NDQpLCBNYXliZS5pc0p1c3QpLCBSLnBpcGUoTWF5YmUub2YsIFIucGlwZUsocGFyZW5fNTM5LCBwb3BfNTQ1LCBub25MaXRlcmFsS2V5d29yZF81NDIsIHBvcF81NDUsIG5vdERvdF81NDQpLCBNYXliZS5pc0p1c3QpLCBSLnBpcGUoTWF5YmUub2YsIGZ1bmN0aW9uUHJlZml4XzU0NiwgUi5jaGFpbihwXzU5NyA9PiB7XG4gIHJldHVybiBzYWZlTGFzdF81MjkocF81OTcpLm1hcChzXzU5OCA9PiBzXzU5OC5saW5lTnVtYmVyKCkpLmNoYWluKGZuTGluZV81OTkgPT4ge1xuICAgIHJldHVybiBwb3BfNTQ1KHBfNTk3KS5tYXAoaXNFeHByUHJlZml4XzUzNyhmbkxpbmVfNTk5LCBiXzU5NikpO1xuICB9KS5jaGFpbihzdHVmZkZhbHNlXzUzMShwXzU5NykpO1xufSksIE1heWJlLmlzSnVzdCksIHBfNjAwID0+IHtcbiAgbGV0IGlzQ3VybHlfNjAxID0gTWF5YmUuaXNKdXN0KHNhZmVMYXN0XzUyOShwXzYwMCkubWFwKGlzQnJhY2VzXzUxNykpO1xuICBsZXQgYWxyZWFkeUNoZWNrZWRGdW5jdGlvbl82MDIgPSBSLnBpcGUoTWF5YmUub2YsIGZ1bmN0aW9uUHJlZml4XzU0NiwgTWF5YmUuaXNKdXN0KShwXzYwMCk7XG4gIGlmIChhbHJlYWR5Q2hlY2tlZEZ1bmN0aW9uXzYwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gUi5waXBlKE1heWJlLm9mLCBSLmNoYWluKGN1cmx5XzUzOCksIFIuY2hhaW4ocF82MDMgPT4ge1xuICAgIHJldHVybiBzYWZlTGFzdF81MjkocF82MDMpLm1hcChzXzYwNCA9PiBzXzYwNC5saW5lTnVtYmVyKCkpLmNoYWluKGN1cmx5TGluZV82MDUgPT4ge1xuICAgICAgcmV0dXJuIHBvcF81NDUocF82MDMpLm1hcChpc0V4cHJQcmVmaXhfNTM3KGN1cmx5TGluZV82MDUsIGJfNTk2KSk7XG4gICAgfSkuY2hhaW4oc3R1ZmZGYWxzZV81MzEocF82MDMpKTtcbiAgfSksIE1heWJlLmlzSnVzdCkocF82MDApO1xufV0pO1xuZnVuY3Rpb24gbGFzdEVsXzU0OChsXzYwNikge1xuICByZXR1cm4gbF82MDZbbF82MDYubGVuZ3RoIC0gMV07XG59XG5mdW5jdGlvbiBjb3VudFNsYXNoZXNfNTQ5KHJlYWRlcl82MDcpIHtcbiAgbGV0IGluZGV4XzYwOCA9IHJlYWRlcl82MDcuaW5kZXg7XG4gIGxldCBvblNsYXNoXzYwOSA9ICgpID0+IHJlYWRlcl82MDcuc291cmNlLmNoYXJDb2RlQXQoaW5kZXhfNjA4KSA9PT0gOTI7XG4gIGxldCBsZW5ndGhfNjEwID0gcmVhZGVyXzYwNy5zb3VyY2UubGVuZ3RoO1xuICBsZXQgY291bnRfNjExID0gb25TbGFzaF82MDkoKSA/IDEgOiAwO1xuICB3aGlsZSAoKytpbmRleF82MDggPCBsZW5ndGhfNjEwICYmIG9uU2xhc2hfNjA5KCkpIHtcbiAgICArK2NvdW50XzYxMTtcbiAgfVxuICByZXR1cm4gY291bnRfNjExO1xufVxuY29uc3QgY2FsY0RlcHRoXzU1MCA9IFIuY29tcG9zZShNYXRoLmxvZzIsIFIuaW5jKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRlciBleHRlbmRzIFRva2VuaXplciB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ3NfNjEyLCBjb250ZXh0XzYxMywgcmVwbGFjZW1lbnRzXzYxNCkge1xuICAgIHN1cGVyKEFycmF5LmlzQXJyYXkoc3RyaW5nc182MTIpID8gc3RyaW5nc182MTIuam9pbihcIlwiKSA6IHN0cmluZ3NfNjEyKTtcbiAgICB0aGlzLmRlbGltU3RhY2sgPSBuZXcgTWFwO1xuICAgIHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoID0gMDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzYxMztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdHJpbmdzXzYxMikpIHtcbiAgICAgIGxldCB0b3RhbEluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVwbGFjZW1lbnRJbmRleCA9IFIucmVkdWNlKChhY2NfNjE1LCBzdHJSZXBfNjE2KSA9PiB7XG4gICAgICAgIGFjY182MTUucHVzaCh7aW5kZXg6IHRvdGFsSW5kZXggKyBzdHJSZXBfNjE2WzBdLmxlbmd0aCwgcmVwbGFjZW1lbnQ6IHN0clJlcF82MTZbMV19KTtcbiAgICAgICAgdG90YWxJbmRleCArPSBzdHJSZXBfNjE2WzBdLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGFjY182MTU7XG4gICAgICB9LCBbXSwgUi56aXAoc3RyaW5nc182MTIsIHJlcGxhY2VtZW50c182MTQpKTtcbiAgICB9XG4gIH1cbiAgcmVhZChzdGFja182MTcgPSBbXSwgYl82MTggPSBmYWxzZSwgc2luZ2xlRGVsaW1pdGVyXzYxOSA9IGZhbHNlKSB7XG4gICAgbGV0IHByZWZpeF82MjAgPSBMaXN0KCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCB0b2sgPSB0aGlzLmFkdmFuY2UocHJlZml4XzYyMCwgYl82MTgpO1xuICAgICAgaWYgKHRvayBpbnN0YW5jZW9mIFN5bnRheCB8fCB0b2sgaW5zdGFuY2VvZiBUZXJtKSB7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHRvayk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzdGFja182MTcsIHRvayk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKExpc3QuaXNMaXN0KHRvaykpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc3RhY2tfNjE3LCB0b2sudG9BcnJheSgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNFT1NfNTAxKHRvaykpIHtcbiAgICAgICAgaWYgKHN0YWNrXzYxN1swXSAmJiBpc0xlZnREZWxpbWl0ZXJfNTA1KHN0YWNrXzYxN1swXS50b2tlbikpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc0xlZnREZWxpbWl0ZXJfNTA1KHRvaykpIHtcbiAgICAgICAgaWYgKGlzTGVmdFN5bnRheF81MDModG9rKSkge1xuICAgICAgICAgIHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmUgPSB0b2suc2xpY2Uuc3RhcnRMb2NhdGlvbi5saW5lO1xuICAgICAgICBsZXQgaW5uZXJCID0gaXNMZWZ0QnJhY2VfNDk2KHRvaykgPyBpc0V4cHJQcmVmaXhfNTM3KGxpbmUsIGJfNjE4KShwcmVmaXhfNjIwKSA6IHRydWU7XG4gICAgICAgIGxldCBpbm5lciA9IHRoaXMucmVhZChbbmV3IFN5bnRheCh0b2spXSwgaW5uZXJCLCBmYWxzZSk7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KGlubmVyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjIwID0gcHJlZml4XzYyMC5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjE3LnB1c2goc3R4KTtcbiAgICAgICAgaWYgKHNpbmdsZURlbGltaXRlcl82MTkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1JpZ2h0RGVsaW1pdGVyXzUwNih0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MTdbMF0gJiYgIWlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyhzdGFja182MTdbMF0udG9rZW4sIHRvaykpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3R4ID0gbmV3IFN5bnRheCh0b2ssIHRoaXMuY29udGV4dCk7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHN0eCk7XG4gICAgICAgIGlmICh0aGlzLnN5bnRheE5lc3RpbmdEZXB0aCAmJiBpc1JpZ2h0U3ludGF4XzUwNCh0b2spKSB7XG4gICAgICAgICAgdGhpcy5zeW50YXhOZXN0aW5nRGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KHRvaywgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgcHJlZml4XzYyMCA9IHByZWZpeF82MjAuY29uY2F0KHN0eCk7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHN0eCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHN0YWNrXzYxNyk7XG4gIH1cbiAgYWR2YW5jZShwcmVmaXhfNjIxLCBiXzYyMikge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICB0aGlzLmxhc3RJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgdGhpcy5sYXN0TGluZSA9IHRoaXMubGluZTtcbiAgICB0aGlzLmxhc3RMaW5lU3RhcnQgPSB0aGlzLmxpbmVTdGFydDtcbiAgICB0aGlzLnNraXBDb21tZW50KCk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICB0aGlzLnN0YXJ0TGluZSA9IHRoaXMubGluZTtcbiAgICB0aGlzLnN0YXJ0TGluZVN0YXJ0ID0gdGhpcy5saW5lU3RhcnQ7XG4gICAgaWYgKHRoaXMucmVwbGFjZW1lbnRJbmRleCAmJiB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0gJiYgdGhpcy5pbmRleCA+PSB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0uaW5kZXgpIHtcbiAgICAgIGxldCByZXAgPSB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0ucmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLnJlcGxhY2VtZW50SW5kZXguc2hpZnQoKTtcbiAgICAgIHJldHVybiByZXA7XG4gICAgfVxuICAgIGxldCBjaGFyQ29kZV82MjQgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuICAgIGlmIChjaGFyQ29kZV82MjQgPT09IDk2KSB7XG4gICAgICBsZXQgZWxlbWVudCwgaXRlbXMgPSBbXTtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICBpZiAodGhpcy5zeW50YXhOZXN0aW5nRGVwdGggPT09IDEpIHtcbiAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MjMpO1xuICAgICAgICByZXR1cm4ge3R5cGU6IFJTWU5UQVhfNDkyLCB2YWx1ZTogXCJgXCIsIHNsaWNlOiBzbGljZX07XG4gICAgICB9XG4gICAgICBkbyB7XG4gICAgICAgIGVsZW1lbnQgPSB0aGlzLnNjYW5UZW1wbGF0ZUVsZW1lbnQoKTtcbiAgICAgICAgaXRlbXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaW50ZXJwKSB7XG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMucmVhZChbXSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGFzc2VydChlbGVtZW50LnNpemUgPT09IDEsIFwic2hvdWxkIG9ubHkgaGF2ZSByZWFkIGEgc2luZ2xlIGRlbGltaXRlciBpbnNpZGUgYSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgICBpdGVtcy5wdXNoKGVsZW1lbnQuZ2V0KDApKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoIWVsZW1lbnQudGFpbCk7XG4gICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgaXRlbXM6IExpc3QoaXRlbXMpfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoICYmIGNoYXJDb2RlXzYyNCA9PT0gOTIpIHtcbiAgICAgIGxldCBudW1TbGFzaGVzID0gY291bnRTbGFzaGVzXzU0OSh0aGlzKTtcbiAgICAgIGxldCBkZXB0aCA9IGNhbGNEZXB0aF81NTAobnVtU2xhc2hlcyk7XG4gICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgbnVtU2xhc2hlcykgPT09IDk2KSB7XG4gICAgICAgIGlmIChkZXB0aCA+IHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoKSB7XG4gICAgICAgICAgdGhpcy5pbmRleCArPSBNYXRoLnBvdygyLCB0aGlzLnN5bnRheE5lc3RpbmdEZXB0aCkgLSAxO1xuICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlSUxMRUdBTCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcHRoIDwgdGhpcy5zeW50YXhOZXN0aW5nRGVwdGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5pbmRleCArPSBudW1TbGFzaGVzO1xuICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlSUxMRUdBTCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0Nsb3NpbmcgPSBkZXB0aCA9PT0gdGhpcy5zeW50YXhOZXN0aW5nRGVwdGggLSAxO1xuICAgICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MjMgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxldCBzbGljZSA9IHRoaXMuZ2V0U2xpY2Uoc3RhcnQsIHN0YXJ0TG9jYXRpb25fNjIzKTtcbiAgICAgICAgdGhpcy5pbmRleCArPSBudW1TbGFzaGVzICsgMTtcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBpc0Nsb3NpbmcgPyBSU1lOVEFYXzQ5MiA6IExTWU5UQVhfNDkxLCB2YWx1ZTogXCJcXFxcXCIucmVwZWF0KG51bVNsYXNoZXMpLmNvbmNhdChcIidcIiksIHNsaWNlOiBzbGljZX07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyQ29kZV82MjQgPT09IDM1KSB7XG4gICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MjMgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MjMpO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDk2KSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBMU1lOVEFYXzQ5MSwgdmFsdWU6IFwiI2BcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiBcIiNcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICB9IGVsc2UgaWYgKGNoYXJDb2RlXzYyNCA9PT0gNjQpIHtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBzdGFydExvY2F0aW9uXzYyMyk7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICByZXR1cm4ge3R5cGU6IEFUXzQ5MywgdmFsdWU6IFwiQFwiLCBzbGljZTogc2xpY2V9O1xuICAgIH1cbiAgICBsZXQgbG9va2FoZWFkXzYyNSA9IHN1cGVyLmFkdmFuY2UoKTtcbiAgICBpZiAobG9va2FoZWFkXzYyNS50eXBlID09PSBUb2tlblR5cGUuRElWICYmIGlzUmVnZXhQcmVmaXhfNTQ3KGJfNjIyKShwcmVmaXhfNjIxKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNjYW5SZWdFeHAoXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbG9va2FoZWFkXzYyNTtcbiAgfVxuICBzY2FuVGVtcGxhdGVFbGVtZW50KCkge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYyNiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICBsZXQgc3RhcnRfNjI3ID0gdGhpcy5pbmRleDtcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuc291cmNlLmxlbmd0aCkge1xuICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0XzYyNywgc3RhcnRMb2NhdGlvbl82MjYpO1xuICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgdGFpbDogdHJ1ZSwgaW50ZXJwOiBmYWxzZSwgc2xpY2U6IHNsaWNlfTtcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDEyMykge1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydF82MjcsIHN0YXJ0TG9jYXRpb25fNjI2KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlRFTVBMQVRFLCB0YWlsOiBmYWxzZSwgaW50ZXJwOiB0cnVlLCBzbGljZTogc2xpY2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IG9jdGFsID0gdGhpcy5zY2FuU3RyaW5nRXNjYXBlKFwiXCIsIG51bGwpWzFdO1xuICAgICAgICAgICAgaWYgKG9jdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVJTExFR0FMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUlMTEVHQUwoKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sweet.js b/dist/sweet.js index c0d8ec72..2b413f6c 100644 --- a/dist/sweet.js +++ b/dist/sweet.js @@ -51,31 +51,31 @@ var _modules = require("./modules"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function expand(source_620) { - var options_621 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var reader_622 = new _shiftReader2.default(source_620); - var stxl_623 = reader_622.read(); - var scope_624 = (0, _scope.freshScope)("top"); - var bindings_625 = new _bindingMap2.default(); - var expander_626 = new _expander2.default({ env: new _env2.default(), store: new _env2.default(), bindings: bindings_625, cwd: options_621.cwd, filename: options_621.filename, modules: new _modules.Modules(), currentScope: [scope_624], transform: options_621.transform ? options_621.transform : function (x_628) { - return { code: x_628 }; - }, moduleResolver: options_621.moduleResolver, moduleLoader: options_621.moduleLoader }); - var exStxl_627 = expander_626.expand(stxl_623.map(function (s_629) { - return s_629.addScope(scope_624, bindings_625); +function expand(source_628) { + var options_629 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var reader_630 = new _shiftReader2.default(source_628); + var stxl_631 = reader_630.read(); + var scope_632 = (0, _scope.freshScope)("top"); + var bindings_633 = new _bindingMap2.default(); + var expander_634 = new _expander2.default({ env: new _env2.default(), store: new _env2.default(), bindings: bindings_633, cwd: options_629.cwd, filename: options_629.filename, modules: new _modules.Modules(), currentScope: [scope_632], transform: options_629.transform ? options_629.transform : function (x_636) { + return { code: x_636 }; + }, moduleResolver: options_629.moduleResolver, moduleLoader: options_629.moduleLoader }); + var exStxl_635 = expander_634.expand(stxl_631.map(function (s_637) { + return s_637.addScope(scope_632, bindings_633); })); - return new _terms2.default("Module", { directives: (0, _immutable.List)(), items: exStxl_627 }); + return new _terms2.default("Module", { directives: (0, _immutable.List)(), items: exStxl_635 }); } -function parse(source_630) { - var options_631 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; +function parse(source_638) { + var options_639 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return (0, _shiftReducer2.default)(new _parseReducer2.default(), expand(source_630, options_631)); + return (0, _shiftReducer2.default)(new _parseReducer2.default(), expand(source_638, options_639)); } -function compile(source_632) { - var options_633 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; +function compile(source_640) { + var options_641 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var ast_634 = parse(source_632, options_633); - var gen_635 = (0, _shiftCodegen2.default)(ast_634, new _shiftCodegen.FormattedCodeGen()); - return options_633.transform && !options_633.noBabel ? options_633.transform(gen_635, { babelrc: true, filename: options_633.filename }) : { code: gen_635 }; + var ast_642 = parse(source_640, options_641); + var gen_643 = (0, _shiftCodegen2.default)(ast_642, new _shiftCodegen.FormattedCodeGen()); + return options_641.transform && !options_641.noBabel ? options_641.transform(gen_643, { babelrc: true, filename: options_641.filename }) : { code: gen_643 }; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N3ZWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBWWdCLE0sR0FBQSxNO1FBV0EsSyxHQUFBLEs7UUFHQSxPLEdBQUEsTzs7QUExQmhCOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ08sU0FBUyxNQUFULENBQWdCLFVBQWhCLEVBQThDO0FBQUEsTUFBbEIsV0FBa0IseURBQUosRUFBSTs7QUFDbkQsTUFBSSxhQUFhLDBCQUFXLFVBQVgsQ0FBakI7QUFDQSxNQUFJLFdBQVcsV0FBVyxJQUFYLEVBQWY7QUFDQSxNQUFJLFlBQVksdUJBQVcsS0FBWCxDQUFoQjtBQUNBLE1BQUksZUFBZSwwQkFBbkI7QUFDQSxNQUFJLGVBQWUsdUJBQWEsRUFBQyxLQUFLLG1CQUFOLEVBQWUsT0FBTyxtQkFBdEIsRUFBK0IsVUFBVSxZQUF6QyxFQUF1RCxLQUFLLFlBQVksR0FBeEUsRUFBNkUsVUFBVSxZQUFZLFFBQW5HLEVBQTZHLFNBQVMsc0JBQXRILEVBQW1JLGNBQWMsQ0FBQyxTQUFELENBQWpKLEVBQThKLFdBQVcsWUFBWSxTQUFaLEdBQXdCLFlBQVksU0FBcEMsR0FBZ0QsVUFBVSxLQUFWLEVBQWlCO0FBQ3hRLGFBQU8sRUFBQyxNQUFNLEtBQVAsRUFBUDtBQUNELEtBRitCLEVBRTdCLGdCQUFnQixZQUFZLGNBRkMsRUFFZSxjQUFjLFlBQVksWUFGekMsRUFBYixDQUFuQjtBQUdBLE1BQUksYUFBYSxhQUFhLE1BQWIsQ0FBb0IsU0FBUyxHQUFULENBQWE7QUFBQSxXQUFTLE1BQU0sUUFBTixDQUFlLFNBQWYsRUFBMEIsWUFBMUIsQ0FBVDtBQUFBLEdBQWIsQ0FBcEIsQ0FBakI7QUFDQSxTQUFPLG9CQUFTLFFBQVQsRUFBbUIsRUFBQyxZQUFZLHNCQUFiLEVBQXFCLE9BQU8sVUFBNUIsRUFBbkIsQ0FBUDtBQUNEO0FBQ00sU0FBUyxLQUFULENBQWUsVUFBZixFQUE2QztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ2xELFNBQU8sNEJBQU8sNEJBQVAsRUFBeUIsT0FBTyxVQUFQLEVBQW1CLFdBQW5CLENBQXpCLENBQVA7QUFDRDtBQUNNLFNBQVMsT0FBVCxDQUFpQixVQUFqQixFQUErQztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ3BELE1BQUksVUFBVSxNQUFNLFVBQU4sRUFBa0IsV0FBbEIsQ0FBZDtBQUNBLE1BQUksVUFBVSw0QkFBUSxPQUFSLEVBQWlCLG9DQUFqQixDQUFkO0FBQ0EsU0FBTyxZQUFZLFNBQVosSUFBeUIsQ0FBQyxZQUFZLE9BQXRDLEdBQWdELFlBQVksU0FBWixDQUFzQixPQUF0QixFQUErQixFQUFDLFNBQVMsSUFBVixFQUFnQixVQUFVLFlBQVksUUFBdEMsRUFBL0IsQ0FBaEQsR0FBa0ksRUFBQyxNQUFNLE9BQVAsRUFBekk7QUFDRCIsImZpbGUiOiJzd2VldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFkZXIgZnJvbSBcIi4vc2hpZnQtcmVhZGVyXCI7XG5pbXBvcnQgRXhwYW5kZXIgZnJvbSBcIi4vZXhwYW5kZXJcIjtcbmltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCBFbnYgZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJzaGlmdC1yZWR1Y2VyXCI7XG5pbXBvcnQgUGFyc2VSZWR1Y2VyIGZyb20gXCIuL3BhcnNlLXJlZHVjZXJcIjtcbmltcG9ydCBjb2RlZ2VuLCB7Rm9ybWF0dGVkQ29kZUdlbn0gZnJvbSBcInNoaWZ0LWNvZGVnZW5cIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5pbXBvcnQgQmluZGluZ01hcCBmcm9tIFwiLi9iaW5kaW5nLW1hcC5qc1wiO1xuaW1wb3J0IFRlcm0gZnJvbSBcIi4vdGVybXNcIjtcbmltcG9ydCB7TW9kdWxlc30gZnJvbSBcIi4vbW9kdWxlc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzb3VyY2VfNjIwLCBvcHRpb25zXzYyMSA9IHt9KSB7XG4gIGxldCByZWFkZXJfNjIyID0gbmV3IFJlYWRlcihzb3VyY2VfNjIwKTtcbiAgbGV0IHN0eGxfNjIzID0gcmVhZGVyXzYyMi5yZWFkKCk7XG4gIGxldCBzY29wZV82MjQgPSBmcmVzaFNjb3BlKFwidG9wXCIpO1xuICBsZXQgYmluZGluZ3NfNjI1ID0gbmV3IEJpbmRpbmdNYXA7XG4gIGxldCBleHBhbmRlcl82MjYgPSBuZXcgRXhwYW5kZXIoe2VudjogbmV3IEVudiwgc3RvcmU6IG5ldyBFbnYsIGJpbmRpbmdzOiBiaW5kaW5nc182MjUsIGN3ZDogb3B0aW9uc182MjEuY3dkLCBmaWxlbmFtZTogb3B0aW9uc182MjEuZmlsZW5hbWUsIG1vZHVsZXM6IG5ldyBNb2R1bGVzLCBjdXJyZW50U2NvcGU6IFtzY29wZV82MjRdLCB0cmFuc2Zvcm06IG9wdGlvbnNfNjIxLnRyYW5zZm9ybSA/IG9wdGlvbnNfNjIxLnRyYW5zZm9ybSA6IGZ1bmN0aW9uICh4XzYyOCkge1xuICAgIHJldHVybiB7Y29kZTogeF82Mjh9O1xuICB9LCBtb2R1bGVSZXNvbHZlcjogb3B0aW9uc182MjEubW9kdWxlUmVzb2x2ZXIsIG1vZHVsZUxvYWRlcjogb3B0aW9uc182MjEubW9kdWxlTG9hZGVyfSk7XG4gIGxldCBleFN0eGxfNjI3ID0gZXhwYW5kZXJfNjI2LmV4cGFuZChzdHhsXzYyMy5tYXAoc182MjkgPT4gc182MjkuYWRkU2NvcGUoc2NvcGVfNjI0LCBiaW5kaW5nc182MjUpKSk7XG4gIHJldHVybiBuZXcgVGVybShcIk1vZHVsZVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBpdGVtczogZXhTdHhsXzYyN30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHNvdXJjZV82MzAsIG9wdGlvbnNfNjMxID0ge30pIHtcbiAgcmV0dXJuIHJlZHVjZShuZXcgUGFyc2VSZWR1Y2VyLCBleHBhbmQoc291cmNlXzYzMCwgb3B0aW9uc182MzEpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKHNvdXJjZV82MzIsIG9wdGlvbnNfNjMzID0ge30pIHtcbiAgbGV0IGFzdF82MzQgPSBwYXJzZShzb3VyY2VfNjMyLCBvcHRpb25zXzYzMyk7XG4gIGxldCBnZW5fNjM1ID0gY29kZWdlbihhc3RfNjM0LCBuZXcgRm9ybWF0dGVkQ29kZUdlbik7XG4gIHJldHVybiBvcHRpb25zXzYzMy50cmFuc2Zvcm0gJiYgIW9wdGlvbnNfNjMzLm5vQmFiZWwgPyBvcHRpb25zXzYzMy50cmFuc2Zvcm0oZ2VuXzYzNSwge2JhYmVscmM6IHRydWUsIGZpbGVuYW1lOiBvcHRpb25zXzYzMy5maWxlbmFtZX0pIDoge2NvZGU6IGdlbl82MzV9O1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N3ZWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBWWdCLE0sR0FBQSxNO1FBV0EsSyxHQUFBLEs7UUFHQSxPLEdBQUEsTzs7QUExQmhCOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ08sU0FBUyxNQUFULENBQWdCLFVBQWhCLEVBQThDO0FBQUEsTUFBbEIsV0FBa0IseURBQUosRUFBSTs7QUFDbkQsTUFBSSxhQUFhLDBCQUFXLFVBQVgsQ0FBakI7QUFDQSxNQUFJLFdBQVcsV0FBVyxJQUFYLEVBQWY7QUFDQSxNQUFJLFlBQVksdUJBQVcsS0FBWCxDQUFoQjtBQUNBLE1BQUksZUFBZSwwQkFBbkI7QUFDQSxNQUFJLGVBQWUsdUJBQWEsRUFBQyxLQUFLLG1CQUFOLEVBQWUsT0FBTyxtQkFBdEIsRUFBK0IsVUFBVSxZQUF6QyxFQUF1RCxLQUFLLFlBQVksR0FBeEUsRUFBNkUsVUFBVSxZQUFZLFFBQW5HLEVBQTZHLFNBQVMsc0JBQXRILEVBQW1JLGNBQWMsQ0FBQyxTQUFELENBQWpKLEVBQThKLFdBQVcsWUFBWSxTQUFaLEdBQXdCLFlBQVksU0FBcEMsR0FBZ0QsVUFBVSxLQUFWLEVBQWlCO0FBQ3hRLGFBQU8sRUFBQyxNQUFNLEtBQVAsRUFBUDtBQUNELEtBRitCLEVBRTdCLGdCQUFnQixZQUFZLGNBRkMsRUFFZSxjQUFjLFlBQVksWUFGekMsRUFBYixDQUFuQjtBQUdBLE1BQUksYUFBYSxhQUFhLE1BQWIsQ0FBb0IsU0FBUyxHQUFULENBQWE7QUFBQSxXQUFTLE1BQU0sUUFBTixDQUFlLFNBQWYsRUFBMEIsWUFBMUIsQ0FBVDtBQUFBLEdBQWIsQ0FBcEIsQ0FBakI7QUFDQSxTQUFPLG9CQUFTLFFBQVQsRUFBbUIsRUFBQyxZQUFZLHNCQUFiLEVBQXFCLE9BQU8sVUFBNUIsRUFBbkIsQ0FBUDtBQUNEO0FBQ00sU0FBUyxLQUFULENBQWUsVUFBZixFQUE2QztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ2xELFNBQU8sNEJBQU8sNEJBQVAsRUFBeUIsT0FBTyxVQUFQLEVBQW1CLFdBQW5CLENBQXpCLENBQVA7QUFDRDtBQUNNLFNBQVMsT0FBVCxDQUFpQixVQUFqQixFQUErQztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ3BELE1BQUksVUFBVSxNQUFNLFVBQU4sRUFBa0IsV0FBbEIsQ0FBZDtBQUNBLE1BQUksVUFBVSw0QkFBUSxPQUFSLEVBQWlCLG9DQUFqQixDQUFkO0FBQ0EsU0FBTyxZQUFZLFNBQVosSUFBeUIsQ0FBQyxZQUFZLE9BQXRDLEdBQWdELFlBQVksU0FBWixDQUFzQixPQUF0QixFQUErQixFQUFDLFNBQVMsSUFBVixFQUFnQixVQUFVLFlBQVksUUFBdEMsRUFBL0IsQ0FBaEQsR0FBa0ksRUFBQyxNQUFNLE9BQVAsRUFBekk7QUFDRCIsImZpbGUiOiJzd2VldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFkZXIgZnJvbSBcIi4vc2hpZnQtcmVhZGVyXCI7XG5pbXBvcnQgRXhwYW5kZXIgZnJvbSBcIi4vZXhwYW5kZXJcIjtcbmltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCBFbnYgZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJzaGlmdC1yZWR1Y2VyXCI7XG5pbXBvcnQgUGFyc2VSZWR1Y2VyIGZyb20gXCIuL3BhcnNlLXJlZHVjZXJcIjtcbmltcG9ydCBjb2RlZ2VuLCB7Rm9ybWF0dGVkQ29kZUdlbn0gZnJvbSBcInNoaWZ0LWNvZGVnZW5cIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5pbXBvcnQgQmluZGluZ01hcCBmcm9tIFwiLi9iaW5kaW5nLW1hcC5qc1wiO1xuaW1wb3J0IFRlcm0gZnJvbSBcIi4vdGVybXNcIjtcbmltcG9ydCB7TW9kdWxlc30gZnJvbSBcIi4vbW9kdWxlc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzb3VyY2VfNjI4LCBvcHRpb25zXzYyOSA9IHt9KSB7XG4gIGxldCByZWFkZXJfNjMwID0gbmV3IFJlYWRlcihzb3VyY2VfNjI4KTtcbiAgbGV0IHN0eGxfNjMxID0gcmVhZGVyXzYzMC5yZWFkKCk7XG4gIGxldCBzY29wZV82MzIgPSBmcmVzaFNjb3BlKFwidG9wXCIpO1xuICBsZXQgYmluZGluZ3NfNjMzID0gbmV3IEJpbmRpbmdNYXA7XG4gIGxldCBleHBhbmRlcl82MzQgPSBuZXcgRXhwYW5kZXIoe2VudjogbmV3IEVudiwgc3RvcmU6IG5ldyBFbnYsIGJpbmRpbmdzOiBiaW5kaW5nc182MzMsIGN3ZDogb3B0aW9uc182MjkuY3dkLCBmaWxlbmFtZTogb3B0aW9uc182MjkuZmlsZW5hbWUsIG1vZHVsZXM6IG5ldyBNb2R1bGVzLCBjdXJyZW50U2NvcGU6IFtzY29wZV82MzJdLCB0cmFuc2Zvcm06IG9wdGlvbnNfNjI5LnRyYW5zZm9ybSA/IG9wdGlvbnNfNjI5LnRyYW5zZm9ybSA6IGZ1bmN0aW9uICh4XzYzNikge1xuICAgIHJldHVybiB7Y29kZTogeF82MzZ9O1xuICB9LCBtb2R1bGVSZXNvbHZlcjogb3B0aW9uc182MjkubW9kdWxlUmVzb2x2ZXIsIG1vZHVsZUxvYWRlcjogb3B0aW9uc182MjkubW9kdWxlTG9hZGVyfSk7XG4gIGxldCBleFN0eGxfNjM1ID0gZXhwYW5kZXJfNjM0LmV4cGFuZChzdHhsXzYzMS5tYXAoc182MzcgPT4gc182MzcuYWRkU2NvcGUoc2NvcGVfNjMyLCBiaW5kaW5nc182MzMpKSk7XG4gIHJldHVybiBuZXcgVGVybShcIk1vZHVsZVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBpdGVtczogZXhTdHhsXzYzNX0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHNvdXJjZV82MzgsIG9wdGlvbnNfNjM5ID0ge30pIHtcbiAgcmV0dXJuIHJlZHVjZShuZXcgUGFyc2VSZWR1Y2VyLCBleHBhbmQoc291cmNlXzYzOCwgb3B0aW9uc182MzkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKHNvdXJjZV82NDAsIG9wdGlvbnNfNjQxID0ge30pIHtcbiAgbGV0IGFzdF82NDIgPSBwYXJzZShzb3VyY2VfNjQwLCBvcHRpb25zXzY0MSk7XG4gIGxldCBnZW5fNjQzID0gY29kZWdlbihhc3RfNjQyLCBuZXcgRm9ybWF0dGVkQ29kZUdlbik7XG4gIHJldHVybiBvcHRpb25zXzY0MS50cmFuc2Zvcm0gJiYgIW9wdGlvbnNfNjQxLm5vQmFiZWwgPyBvcHRpb25zXzY0MS50cmFuc2Zvcm0oZ2VuXzY0Mywge2JhYmVscmM6IHRydWUsIGZpbGVuYW1lOiBvcHRpb25zXzY0MS5maWxlbmFtZX0pIDoge2NvZGU6IGdlbl82NDN9O1xufVxuIl19 \ No newline at end of file diff --git a/dist/symbol.js b/dist/symbol.js index 82675348..486fae2a 100644 --- a/dist/symbol.js +++ b/dist/symbol.js @@ -4,29 +4,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.gensym = gensym; -var internedMap_636 = new Map(); -var counter_637 = 0; -function gensym(name_640) { - var prefix_641 = name_640 == null ? "s_" : name_640 + "_"; - var sym_642 = new Symbol_638(prefix_641 + counter_637); - counter_637++; - return sym_642; +var internedMap_644 = new Map(); +var counter_645 = 0; +function gensym(name_648) { + var prefix_649 = name_648 == null ? "s_" : name_648 + "_"; + var sym_650 = new Symbol_646(prefix_649 + counter_645); + counter_645++; + return sym_650; } -function Symbol_638(name_643) { - this.name = name_643; +function Symbol_646(name_651) { + this.name = name_651; } -Symbol_638.prototype.toString = function () { +Symbol_646.prototype.toString = function () { return this.name; }; -function makeSymbol_639(name_644) { - if (internedMap_636.has(name_644)) { - return internedMap_636.get(name_644); +function makeSymbol_647(name_652) { + if (internedMap_644.has(name_652)) { + return internedMap_644.get(name_652); } else { - var sym = new Symbol_638(name_644); - internedMap_636.set(name_644, sym); + var sym = new Symbol_646(name_652); + internedMap_644.set(name_652, sym); return sym; } } -exports.Symbol = makeSymbol_639; -exports.SymbolClass = Symbol_638; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N5bWJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQUVnQixNLEdBQUEsTTtBQUZoQixJQUFJLGtCQUFrQixJQUFJLEdBQUosRUFBdEI7QUFDQSxJQUFJLGNBQWMsQ0FBbEI7QUFDTyxTQUFTLE1BQVQsQ0FBZ0IsUUFBaEIsRUFBMEI7QUFDL0IsTUFBSSxhQUFhLFlBQVksSUFBWixHQUFtQixJQUFuQixHQUEwQixXQUFXLEdBQXREO0FBQ0EsTUFBSSxVQUFVLElBQUksVUFBSixDQUFlLGFBQWEsV0FBNUIsQ0FBZDtBQUNBO0FBQ0EsU0FBTyxPQUFQO0FBQ0Q7QUFDRCxTQUFTLFVBQVQsQ0FBb0IsUUFBcEIsRUFBOEI7QUFDNUIsT0FBSyxJQUFMLEdBQVksUUFBWjtBQUNEO0FBQ0QsV0FBVyxTQUFYLENBQXFCLFFBQXJCLEdBQWdDLFlBQVk7QUFDMUMsU0FBTyxLQUFLLElBQVo7QUFDRCxDQUZEO0FBR0EsU0FBUyxjQUFULENBQXdCLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUksZ0JBQWdCLEdBQWhCLENBQW9CLFFBQXBCLENBQUosRUFBbUM7QUFDakMsV0FBTyxnQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsQ0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksTUFBTSxJQUFJLFVBQUosQ0FBZSxRQUFmLENBQVY7QUFDQSxvQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsRUFBOEIsR0FBOUI7QUFDQSxXQUFPLEdBQVA7QUFDRDtBQUNGO1FBQ3lCLE0sR0FBbEIsYztRQUF3QyxXLEdBQWQsVSIsImZpbGUiOiJzeW1ib2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgaW50ZXJuZWRNYXBfNjM2ID0gbmV3IE1hcDtcbmxldCBjb3VudGVyXzYzNyA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2Vuc3ltKG5hbWVfNjQwKSB7XG4gIGxldCBwcmVmaXhfNjQxID0gbmFtZV82NDAgPT0gbnVsbCA/IFwic19cIiA6IG5hbWVfNjQwICsgXCJfXCI7XG4gIGxldCBzeW1fNjQyID0gbmV3IFN5bWJvbF82MzgocHJlZml4XzY0MSArIGNvdW50ZXJfNjM3KTtcbiAgY291bnRlcl82MzcrKztcbiAgcmV0dXJuIHN5bV82NDI7XG59XG5mdW5jdGlvbiBTeW1ib2xfNjM4KG5hbWVfNjQzKSB7XG4gIHRoaXMubmFtZSA9IG5hbWVfNjQzO1xufVxuU3ltYm9sXzYzOC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuZnVuY3Rpb24gbWFrZVN5bWJvbF82MzkobmFtZV82NDQpIHtcbiAgaWYgKGludGVybmVkTWFwXzYzNi5oYXMobmFtZV82NDQpKSB7XG4gICAgcmV0dXJuIGludGVybmVkTWFwXzYzNi5nZXQobmFtZV82NDQpO1xuICB9IGVsc2Uge1xuICAgIGxldCBzeW0gPSBuZXcgU3ltYm9sXzYzOChuYW1lXzY0NCk7XG4gICAgaW50ZXJuZWRNYXBfNjM2LnNldChuYW1lXzY0NCwgc3ltKTtcbiAgICByZXR1cm4gc3ltO1xuICB9XG59XG5leHBvcnQge21ha2VTeW1ib2xfNjM5IGFzIFN5bWJvbCwgU3ltYm9sXzYzOCBhcyBTeW1ib2xDbGFzc307XG4iXX0= \ No newline at end of file +exports.Symbol = makeSymbol_647; +exports.SymbolClass = Symbol_646; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N5bWJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQUVnQixNLEdBQUEsTTtBQUZoQixJQUFJLGtCQUFrQixJQUFJLEdBQUosRUFBdEI7QUFDQSxJQUFJLGNBQWMsQ0FBbEI7QUFDTyxTQUFTLE1BQVQsQ0FBZ0IsUUFBaEIsRUFBMEI7QUFDL0IsTUFBSSxhQUFhLFlBQVksSUFBWixHQUFtQixJQUFuQixHQUEwQixXQUFXLEdBQXREO0FBQ0EsTUFBSSxVQUFVLElBQUksVUFBSixDQUFlLGFBQWEsV0FBNUIsQ0FBZDtBQUNBO0FBQ0EsU0FBTyxPQUFQO0FBQ0Q7QUFDRCxTQUFTLFVBQVQsQ0FBb0IsUUFBcEIsRUFBOEI7QUFDNUIsT0FBSyxJQUFMLEdBQVksUUFBWjtBQUNEO0FBQ0QsV0FBVyxTQUFYLENBQXFCLFFBQXJCLEdBQWdDLFlBQVk7QUFDMUMsU0FBTyxLQUFLLElBQVo7QUFDRCxDQUZEO0FBR0EsU0FBUyxjQUFULENBQXdCLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUksZ0JBQWdCLEdBQWhCLENBQW9CLFFBQXBCLENBQUosRUFBbUM7QUFDakMsV0FBTyxnQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsQ0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksTUFBTSxJQUFJLFVBQUosQ0FBZSxRQUFmLENBQVY7QUFDQSxvQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsRUFBOEIsR0FBOUI7QUFDQSxXQUFPLEdBQVA7QUFDRDtBQUNGO1FBQ3lCLE0sR0FBbEIsYztRQUF3QyxXLEdBQWQsVSIsImZpbGUiOiJzeW1ib2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgaW50ZXJuZWRNYXBfNjQ0ID0gbmV3IE1hcDtcbmxldCBjb3VudGVyXzY0NSA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2Vuc3ltKG5hbWVfNjQ4KSB7XG4gIGxldCBwcmVmaXhfNjQ5ID0gbmFtZV82NDggPT0gbnVsbCA/IFwic19cIiA6IG5hbWVfNjQ4ICsgXCJfXCI7XG4gIGxldCBzeW1fNjUwID0gbmV3IFN5bWJvbF82NDYocHJlZml4XzY0OSArIGNvdW50ZXJfNjQ1KTtcbiAgY291bnRlcl82NDUrKztcbiAgcmV0dXJuIHN5bV82NTA7XG59XG5mdW5jdGlvbiBTeW1ib2xfNjQ2KG5hbWVfNjUxKSB7XG4gIHRoaXMubmFtZSA9IG5hbWVfNjUxO1xufVxuU3ltYm9sXzY0Ni5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuZnVuY3Rpb24gbWFrZVN5bWJvbF82NDcobmFtZV82NTIpIHtcbiAgaWYgKGludGVybmVkTWFwXzY0NC5oYXMobmFtZV82NTIpKSB7XG4gICAgcmV0dXJuIGludGVybmVkTWFwXzY0NC5nZXQobmFtZV82NTIpO1xuICB9IGVsc2Uge1xuICAgIGxldCBzeW0gPSBuZXcgU3ltYm9sXzY0NihuYW1lXzY1Mik7XG4gICAgaW50ZXJuZWRNYXBfNjQ0LnNldChuYW1lXzY1Miwgc3ltKTtcbiAgICByZXR1cm4gc3ltO1xuICB9XG59XG5leHBvcnQge21ha2VTeW1ib2xfNjQ3IGFzIFN5bWJvbCwgU3ltYm9sXzY0NiBhcyBTeW1ib2xDbGFzc307XG4iXX0= \ No newline at end of file diff --git a/dist/syntax.js b/dist/syntax.js index 15efe45e..c282532b 100644 --- a/dist/syntax.js +++ b/dist/syntax.js @@ -28,13 +28,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_645 = _ramdaFantasy.Maybe.Just; -var Nothing_646 = _ramdaFantasy.Maybe.Nothing; +var Just_653 = _ramdaFantasy.Maybe.Just; +var Nothing_654 = _ramdaFantasy.Maybe.Nothing; -function sizeDecending_647(a_648, b_649) { - if (a_648.scopes.size > b_649.scopes.size) { +function sizeDecending_655(a_656, b_657) { + if (a_656.scopes.size > b_657.scopes.size) { return -1; - } else if (b_649.scopes.size > a_648.scopes.size) { + } else if (b_657.scopes.size > a_656.scopes.size) { return 1; } else { return 0; @@ -42,13 +42,13 @@ function sizeDecending_647(a_648, b_649) { } var Syntax = function () { - function Syntax(token_650) { - var context_651 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; + function Syntax(token_658) { + var context_659 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; _classCallCheck(this, Syntax); - this.token = token_650; - this.context = { bindings: context_651.bindings, scopeset: context_651.scopeset }; + this.token = token_658; + this.context = { bindings: context_659.bindings, scopeset: context_659.scopeset }; Object.freeze(this.context); Object.freeze(this); } @@ -59,27 +59,27 @@ var Syntax = function () { if (this.context.scopeset.size === 0 || !(this.isIdentifier() || this.isKeyword())) { return this.token.value; } - var scope_679 = this.context.scopeset.last(); - var stxScopes_680 = this.context.scopeset; - var bindings_681 = this.context.bindings; - if (scope_679) { - var scopesetBindingList = bindings_681.get(this); + var scope_687 = this.context.scopeset.last(); + var stxScopes_688 = this.context.scopeset; + var bindings_689 = this.context.bindings; + if (scope_687) { + var scopesetBindingList = bindings_689.get(this); if (scopesetBindingList) { var biggestBindingPair = scopesetBindingList.filter(function (_ref) { var scopes = _ref.scopes; var binding = _ref.binding; - return scopes.isSubset(stxScopes_680); - }).sort(sizeDecending_647); + return scopes.isSubset(stxScopes_688); + }).sort(sizeDecending_655); if (biggestBindingPair.size >= 2 && biggestBindingPair.get(0).scopes.size === biggestBindingPair.get(1).scopes.size) { - var debugBase = "{" + stxScopes_680.map(function (s_682) { - return s_682.toString(); + var debugBase = "{" + stxScopes_688.map(function (s_690) { + return s_690.toString(); }).join(", ") + "}"; var debugAmbigousScopesets = biggestBindingPair.map(function (_ref2) { var scopes = _ref2.scopes; - return "{" + scopes.map(function (s_683) { - return s_683.toString(); + return "{" + scopes.map(function (s_691) { + return s_691.toString(); }).join(", ") + "}"; }).join(", "); throw new Error("Scopeset " + debugBase + " has ambiguous subsets " + debugAmbigousScopesets); @@ -102,11 +102,11 @@ var Syntax = function () { return this.token.str; } if (this.isTemplate()) { - return this.token.items.map(function (el_684) { - if (el_684 instanceof Syntax && el_684.isDelimiter()) { + return this.token.items.map(function (el_692) { + if (el_692 instanceof Syntax && el_692.isDelimiter()) { return "${...}"; } - return el_684.slice.text; + return el_692.slice.text; }).join(""); } return this.token.value; @@ -122,11 +122,11 @@ var Syntax = function () { } }, { key: "setLineNumber", - value: function setLineNumber(line_685) { - var newTok_686 = {}; + value: function setLineNumber(line_693) { + var newTok_694 = {}; if (this.isDelimiter()) { - newTok_686 = this.token.map(function (s_687) { - return s_687.setLineNumber(line_685); + newTok_694 = this.token.map(function (s_695) { + return s_695.setLineNumber(line_693); }); } else { var _iteratorNormalCompletion = true; @@ -137,7 +137,7 @@ var Syntax = function () { for (var _iterator = Object.keys(this.token)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; - newTok_686[key] = this.token[key]; + newTok_694[key] = this.token[key]; } } catch (err) { _didIteratorError = true; @@ -154,10 +154,10 @@ var Syntax = function () { } } - (0, _errors.assert)(newTok_686.slice && newTok_686.slice.startLocation, "all tokens must have line info"); - newTok_686.slice.startLocation.line = line_685; + (0, _errors.assert)(newTok_694.slice && newTok_694.slice.startLocation, "all tokens must have line info"); + newTok_694.slice.startLocation.line = line_693; } - return new Syntax(newTok_686, this.context); + return new Syntax(newTok_694, this.context); } }, { key: "inner", @@ -167,45 +167,45 @@ var Syntax = function () { } }, { key: "addScope", - value: function addScope(scope_688, bindings_689) { - var options_690 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; + value: function addScope(scope_696, bindings_697) { + var options_698 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; - var token_691 = this.isDelimiter() ? this.token.map(function (s_693) { - return s_693.addScope(scope_688, bindings_689, options_690); + var token_699 = this.isDelimiter() ? this.token.map(function (s_701) { + return s_701.addScope(scope_696, bindings_697, options_698); }) : this.token; if (this.isTemplate()) { - token_691 = { type: this.token.type, items: token_691.items.map(function (it_694) { - if (it_694 instanceof Syntax && it_694.isDelimiter()) { - return it_694.addScope(scope_688, bindings_689, options_690); + token_699 = { type: this.token.type, items: token_699.items.map(function (it_702) { + if (it_702 instanceof Syntax && it_702.isDelimiter()) { + return it_702.addScope(scope_696, bindings_697, options_698); } - return it_694; + return it_702; }) }; } - var newScopeset_692 = void 0; - if (options_690.flip) { - var index = this.context.scopeset.indexOf(scope_688); + var newScopeset_700 = void 0; + if (options_698.flip) { + var index = this.context.scopeset.indexOf(scope_696); if (index !== -1) { - newScopeset_692 = this.context.scopeset.remove(index); + newScopeset_700 = this.context.scopeset.remove(index); } else { - newScopeset_692 = this.context.scopeset.push(scope_688); + newScopeset_700 = this.context.scopeset.push(scope_696); } } else { - newScopeset_692 = this.context.scopeset.push(scope_688); + newScopeset_700 = this.context.scopeset.push(scope_696); } - return new Syntax(token_691, { bindings: bindings_689, scopeset: newScopeset_692 }); + return new Syntax(token_699, { bindings: bindings_697, scopeset: newScopeset_700 }); } }, { key: "removeScope", - value: function removeScope(scope_695) { - var token_696 = this.isDelimiter() ? this.token.map(function (s_699) { - return s_699.removeScope(scope_695); + value: function removeScope(scope_703) { + var token_704 = this.isDelimiter() ? this.token.map(function (s_707) { + return s_707.removeScope(scope_703); }) : this.token; - var newScopeset_697 = this.context.scopeset; - var index_698 = this.context.scopeset.indexOf(scope_695); - if (index_698 !== -1) { - newScopeset_697 = this.context.scopeset.remove(index_698); + var newScopeset_705 = this.context.scopeset; + var index_706 = this.context.scopeset.indexOf(scope_703); + if (index_706 !== -1) { + newScopeset_705 = this.context.scopeset.remove(index_706); } - return new Syntax(token_696, { bindings: this.context.bindings, scopeset: newScopeset_697 }); + return new Syntax(token_704, { bindings: this.context.bindings, scopeset: newScopeset_705 }); } }, { key: "isIdentifier", @@ -291,8 +291,8 @@ var Syntax = function () { key: "toString", value: function toString() { if (this.isDelimiter()) { - return this.token.map(function (s_700) { - return s_700.toString(); + return this.token.map(function (s_708) { + return s_708.toString(); }).join(" "); } if (this.isStringLiteral()) { @@ -305,86 +305,86 @@ var Syntax = function () { } }], [{ key: "of", - value: function of(token_652) { - var stx_653 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function of(token_660) { + var stx_661 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax(token_652, stx_653.context); + return new Syntax(token_660, stx_661.context); } }, { key: "fromNull", value: function fromNull() { - var stx_654 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var stx_662 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_654.context); + return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_662.context); } }, { key: "fromNumber", - value: function fromNumber(value_655) { - var stx_656 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromNumber(value_663) { + var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_655 }, stx_656.context); + return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_663 }, stx_664.context); } }, { key: "fromString", - value: function fromString(value_657) { - var stx_658 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromString(value_665) { + var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_657 }, stx_658.context); + return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_665 }, stx_666.context); } }, { key: "fromPunctuator", - value: function fromPunctuator(value_659) { - var stx_660 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromPunctuator(value_667) { + var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_659 }, value: value_659 }, stx_660.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_667 }, value: value_667 }, stx_668.context); } }, { key: "fromKeyword", - value: function fromKeyword(value_661) { - var stx_662 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromKeyword(value_669) { + var stx_670 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_661 }, value: value_661 }, stx_662.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_669 }, value: value_669 }, stx_670.context); } }, { key: "fromIdentifier", - value: function fromIdentifier(value_663) { - var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromIdentifier(value_671) { + var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_663 }, stx_664.context); + return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_671 }, stx_672.context); } }, { key: "fromRegularExpression", - value: function fromRegularExpression(value_665) { - var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromRegularExpression(value_673) { + var stx_674 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_665 }, stx_666.context); + return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_673 }, stx_674.context); } }, { key: "fromBraces", - value: function fromBraces(inner_667) { - var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBraces(inner_675) { + var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_669 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); - var right_670 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); - return new Syntax(_immutable.List.of(left_669).concat(inner_667).push(right_670), stx_668.context); + var left_677 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); + var right_678 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); + return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); } }, { key: "fromBrackets", - value: function fromBrackets(inner_671) { - var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBrackets(inner_679) { + var stx_680 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_673 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); - var right_674 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); - return new Syntax(_immutable.List.of(left_673).concat(inner_671).push(right_674), stx_672.context); + var left_681 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); + var right_682 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); + return new Syntax(_immutable.List.of(left_681).concat(inner_679).push(right_682), stx_680.context); } }, { key: "fromParens", - value: function fromParens(inner_675) { - var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromParens(inner_683) { + var stx_684 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_677 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); - var right_678 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); - return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); + var left_685 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); + var right_686 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); + return new Syntax(_immutable.List.of(left_685).concat(inner_683).push(right_686), stx_684.context); } }]); @@ -392,4 +392,4 @@ var Syntax = function () { }(); exports.default = Syntax; -//# sourceMappingURL=data:application/json;base64,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QUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7O2lDQUNtQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQzNDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7OytCQUNpQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3pDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7Ozs7O2tCQTdDa0IsTSIsImZpbGUiOiJzeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwXCI7XG5pbXBvcnQge01heWJlfSBmcm9tIFwicmFtZGEtZmFudGFzeVwiO1xuaW1wb3J0ICAqIGFzIF8gZnJvbSBcInJhbWRhXCI7XG5jb25zdCBKdXN0XzY0NSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzY0NiA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5DbGFzc30gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xuZnVuY3Rpb24gc2l6ZURlY2VuZGluZ182NDcoYV82NDgsIGJfNjQ5KSB7XG4gIGlmIChhXzY0OC5zY29wZXMuc2l6ZSA+IGJfNjQ5LnNjb3Blcy5zaXplKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGJfNjQ5LnNjb3Blcy5zaXplID4gYV82NDguc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ludGF4IHtcbiAgY29uc3RydWN0b3IodG9rZW5fNjUwLCBjb250ZXh0XzY1MSA9IHtiaW5kaW5nczogbmV3IEJpbmRpbmdNYXAsIHNjb3Blc2V0OiBMaXN0KCl9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuXzY1MDtcbiAgICB0aGlzLmNvbnRleHQgPSB7YmluZGluZ3M6IGNvbnRleHRfNjUxLmJpbmRpbmdzLCBzY29wZXNldDogY29udGV4dF82NTEuc2NvcGVzZXR9O1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5jb250ZXh0KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIHN0YXRpYyBvZih0b2tlbl82NTIsIHN0eF82NTMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY1Miwgc3R4XzY1My5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bGwoc3R4XzY1NCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5OVUxMLCB2YWx1ZTogbnVsbH0sIHN0eF82NTQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21OdW1iZXIodmFsdWVfNjU1LCBzdHhfNjU2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTUJFUiwgdmFsdWU6IHZhbHVlXzY1NX0sIHN0eF82NTYuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21TdHJpbmcodmFsdWVfNjU3LCBzdHhfNjU4ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlNUUklORywgc3RyOiB2YWx1ZV82NTd9LCBzdHhfNjU4LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUHVuY3R1YXRvcih2YWx1ZV82NTksIHN0eF82NjAgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiB7a2xhc3M6IFRva2VuQ2xhc3MuUHVuY3R1YXRvciwgbmFtZTogdmFsdWVfNjU5fSwgdmFsdWU6IHZhbHVlXzY1OX0sIHN0eF82NjAuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21LZXl3b3JkKHZhbHVlXzY2MSwgc3R4XzY2MiA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5LZXl3b3JkLCBuYW1lOiB2YWx1ZV82NjF9LCB2YWx1ZTogdmFsdWVfNjYxfSwgc3R4XzY2Mi5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUlkZW50aWZpZXIodmFsdWVfNjYzLCBzdHhfNjY0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiB2YWx1ZV82NjN9LCBzdHhfNjY0LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24odmFsdWVfNjY1LCBzdHhfNjY2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJFR0VYUCwgdmFsdWU6IHZhbHVlXzY2NX0sIHN0eF82NjYuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFjZXMoaW5uZXJfNjY3LCBzdHhfNjY4ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NjkgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNFLCB2YWx1ZTogXCJ7XCJ9KTtcbiAgICBsZXQgcmlnaHRfNjcwID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDRSwgdmFsdWU6IFwifVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY2OSkuY29uY2F0KGlubmVyXzY2NykucHVzaChyaWdodF82NzApLCBzdHhfNjY4LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnJhY2tldHMoaW5uZXJfNjcxLCBzdHhfNjcyID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzMgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLLCB2YWx1ZTogXCJbXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc0ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDSywgdmFsdWU6IFwiXVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3MykuY29uY2F0KGlubmVyXzY3MSkucHVzaChyaWdodF82NzQpLCBzdHhfNjcyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUGFyZW5zKGlubmVyXzY3NSwgc3R4XzY3NiA9IHt9KSB7XG4gICAgbGV0IGxlZnRfNjc3ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTiwgdmFsdWU6IFwiKFwifSk7XG4gICAgbGV0IHJpZ2h0XzY3OCA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5SUEFSRU4sIHZhbHVlOiBcIilcIn0pO1xuICAgIHJldHVybiBuZXcgU3ludGF4KExpc3Qub2YobGVmdF82NzcpLmNvbmNhdChpbm5lcl82NzUpLnB1c2gocmlnaHRfNjc4KSwgc3R4XzY3Ni5jb250ZXh0KTtcbiAgfVxuICByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NvcGVzZXQuc2l6ZSA9PT0gMCB8fCAhKHRoaXMuaXNJZGVudGlmaWVyKCkgfHwgdGhpcy5pc0tleXdvcmQoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgc2NvcGVfNjc5ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0Lmxhc3QoKTtcbiAgICBsZXQgc3R4U2NvcGVzXzY4MCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgYmluZGluZ3NfNjgxID0gdGhpcy5jb250ZXh0LmJpbmRpbmdzO1xuICAgIGlmIChzY29wZV82NzkpIHtcbiAgICAgIGxldCBzY29wZXNldEJpbmRpbmdMaXN0ID0gYmluZGluZ3NfNjgxLmdldCh0aGlzKTtcbiAgICAgIGlmIChzY29wZXNldEJpbmRpbmdMaXN0KSB7XG4gICAgICAgIGxldCBiaWdnZXN0QmluZGluZ1BhaXIgPSBzY29wZXNldEJpbmRpbmdMaXN0LmZpbHRlcigoe3Njb3BlcywgYmluZGluZ30pID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NvcGVzLmlzU3Vic2V0KHN0eFNjb3Blc182ODApO1xuICAgICAgICB9KS5zb3J0KHNpemVEZWNlbmRpbmdfNjQ3KTtcbiAgICAgICAgaWYgKGJpZ2dlc3RCaW5kaW5nUGFpci5zaXplID49IDIgJiYgYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5zY29wZXMuc2l6ZSA9PT0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgxKS5zY29wZXMuc2l6ZSkge1xuICAgICAgICAgIGxldCBkZWJ1Z0Jhc2UgPSBcIntcIiArIHN0eFNjb3Blc182ODAubWFwKHNfNjgyID0+IHNfNjgyLnRvU3RyaW5nKCkpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuICAgICAgICAgIGxldCBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzID0gYmlnZ2VzdEJpbmRpbmdQYWlyLm1hcCgoe3Njb3Blc30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIHNjb3Blcy5tYXAoc182ODMgPT4gc182ODMudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3Blc2V0IFwiICsgZGVidWdCYXNlICsgXCIgaGFzIGFtYmlndW91cyBzdWJzZXRzIFwiICsgZGVidWdBbWJpZ291c1Njb3Blc2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgIT09IDApIHtcbiAgICAgICAgICBsZXQgYmluZGluZ1N0ciA9IGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYmluZGluZy50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChNYXliZS5pc0p1c3QoYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5hbGlhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzLmdldE9yRWxzZShudWxsKS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiaW5kaW5nU3RyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIHZhbCgpIHtcbiAgICBhc3NlcnQoIXRoaXMuaXNEZWxpbWl0ZXIoKSwgXCJjYW5ub3QgZ2V0IHRoZSB2YWwgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5pdGVtcy5tYXAoZWxfNjg0ID0+IHtcbiAgICAgICAgaWYgKGVsXzY4NCBpbnN0YW5jZW9mIFN5bnRheCAmJiBlbF82ODQuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICAgIHJldHVybiBcIiR7Li4ufVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbF82ODQuc2xpY2UudGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIGxpbmVOdW1iZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uZ2V0KDApLmxpbmVOdW1iZXIoKTtcbiAgICB9XG4gIH1cbiAgc2V0TGluZU51bWJlcihsaW5lXzY4NSkge1xuICAgIGxldCBuZXdUb2tfNjg2ID0ge307XG4gICAgaWYgKHRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgbmV3VG9rXzY4NiA9IHRoaXMudG9rZW4ubWFwKHNfNjg3ID0+IHNfNjg3LnNldExpbmVOdW1iZXIobGluZV82ODUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudG9rZW4pKSB7XG4gICAgICAgIG5ld1Rva182ODZba2V5XSA9IHRoaXMudG9rZW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChuZXdUb2tfNjg2LnNsaWNlICYmIG5ld1Rva182ODYuc2xpY2Uuc3RhcnRMb2NhdGlvbiwgXCJhbGwgdG9rZW5zIG11c3QgaGF2ZSBsaW5lIGluZm9cIik7XG4gICAgICBuZXdUb2tfNjg2LnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZSA9IGxpbmVfNjg1O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheChuZXdUb2tfNjg2LCB0aGlzLmNvbnRleHQpO1xuICB9XG4gIGlubmVyKCkge1xuICAgIGFzc2VydCh0aGlzLmlzRGVsaW1pdGVyKCksIFwiY2FuIG9ubHkgZ2V0IHRoZSBpbm5lciBvZiBhIGRlbGltaXRlclwiKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5zbGljZSgxLCB0aGlzLnRva2VuLnNpemUgLSAxKTtcbiAgfVxuICBhZGRTY29wZShzY29wZV82ODgsIGJpbmRpbmdzXzY4OSwgb3B0aW9uc182OTAgPSB7ZmxpcDogZmFsc2V9KSB7XG4gICAgbGV0IHRva2VuXzY5MSA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNjkzID0+IHNfNjkzLmFkZFNjb3BlKHNjb3BlXzY4OCwgYmluZGluZ3NfNjg5LCBvcHRpb25zXzY5MCkpIDogdGhpcy50b2tlbjtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHRva2VuXzY5MSA9IHt0eXBlOiB0aGlzLnRva2VuLnR5cGUsIGl0ZW1zOiB0b2tlbl82OTEuaXRlbXMubWFwKGl0XzY5NCA9PiB7XG4gICAgICAgIGlmIChpdF82OTQgaW5zdGFuY2VvZiBTeW50YXggJiYgaXRfNjk0LmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gaXRfNjk0LmFkZFNjb3BlKHNjb3BlXzY4OCwgYmluZGluZ3NfNjg5LCBvcHRpb25zXzY5MCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0XzY5NDtcbiAgICAgIH0pfTtcbiAgICB9XG4gICAgbGV0IG5ld1Njb3Blc2V0XzY5MjtcbiAgICBpZiAob3B0aW9uc182OTAuZmxpcCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjg4KTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNjkyID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY29wZXNldF82OTIgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82ODgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY29wZXNldF82OTIgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82ODgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTEsIHtiaW5kaW5nczogYmluZGluZ3NfNjg5LCBzY29wZXNldDogbmV3U2NvcGVzZXRfNjkyfSk7XG4gIH1cbiAgcmVtb3ZlU2NvcGUoc2NvcGVfNjk1KSB7XG4gICAgbGV0IHRva2VuXzY5NiA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNjk5ID0+IHNfNjk5LnJlbW92ZVNjb3BlKHNjb3BlXzY5NSkpIDogdGhpcy50b2tlbjtcbiAgICBsZXQgbmV3U2NvcGVzZXRfNjk3ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBpbmRleF82OTggPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQuaW5kZXhPZihzY29wZV82OTUpO1xuICAgIGlmIChpbmRleF82OTggIT09IC0xKSB7XG4gICAgICBuZXdTY29wZXNldF82OTcgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucmVtb3ZlKGluZGV4XzY5OCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY5Niwge2JpbmRpbmdzOiB0aGlzLmNvbnRleHQuYmluZGluZ3MsIHNjb3Blc2V0OiBuZXdTY29wZXNldF82OTd9KTtcbiAgfVxuICBpc0lkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLklkZW50O1xuICB9XG4gIGlzQXNzaWduKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkFTU0lHTjtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRSVUUgfHwgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRkFMU0U7XG4gIH1cbiAgaXNLZXl3b3JkKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5LZXl3b3JkO1xuICB9XG4gIGlzTnVsbExpdGVyYWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVMTDtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5OdW1lcmljTGl0ZXJhbDtcbiAgfVxuICBpc1B1bmN0dWF0b3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlB1bmN0dWF0b3I7XG4gIH1cbiAgaXNTdHJpbmdMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5TdHJpbmdMaXRlcmFsO1xuICB9XG4gIGlzUmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIGlzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuVEVNUExBVEU7XG4gIH1cbiAgaXNEZWxpbWl0ZXIoKSB7XG4gICAgcmV0dXJuIExpc3QuaXNMaXN0KHRoaXMudG9rZW4pO1xuICB9XG4gIGlzUGFyZW5zKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi5nZXQoMCkudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTjtcbiAgfVxuICBpc0JyYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0U7XG4gIH1cbiAgaXNCcmFja2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0s7XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnZhbCgpID09PSBcIiNgXCI7XG4gIH1cbiAgaXNFT0YoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9TO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLm1hcChzXzcwMCA9PiBzXzcwMC50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiBcIidcIiArIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbi52YWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7O2lDQUNtQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQzNDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7OytCQUNpQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3pDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7Ozs7O2tCQTdDa0IsTSIsImZpbGUiOiJzeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwXCI7XG5pbXBvcnQge01heWJlfSBmcm9tIFwicmFtZGEtZmFudGFzeVwiO1xuaW1wb3J0ICAqIGFzIF8gZnJvbSBcInJhbWRhXCI7XG5jb25zdCBKdXN0XzY1MyA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzY1NCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5DbGFzc30gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xuZnVuY3Rpb24gc2l6ZURlY2VuZGluZ182NTUoYV82NTYsIGJfNjU3KSB7XG4gIGlmIChhXzY1Ni5zY29wZXMuc2l6ZSA+IGJfNjU3LnNjb3Blcy5zaXplKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGJfNjU3LnNjb3Blcy5zaXplID4gYV82NTYuc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ludGF4IHtcbiAgY29uc3RydWN0b3IodG9rZW5fNjU4LCBjb250ZXh0XzY1OSA9IHtiaW5kaW5nczogbmV3IEJpbmRpbmdNYXAsIHNjb3Blc2V0OiBMaXN0KCl9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuXzY1ODtcbiAgICB0aGlzLmNvbnRleHQgPSB7YmluZGluZ3M6IGNvbnRleHRfNjU5LmJpbmRpbmdzLCBzY29wZXNldDogY29udGV4dF82NTkuc2NvcGVzZXR9O1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5jb250ZXh0KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIHN0YXRpYyBvZih0b2tlbl82NjAsIHN0eF82NjEgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY2MCwgc3R4XzY2MS5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bGwoc3R4XzY2MiA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5OVUxMLCB2YWx1ZTogbnVsbH0sIHN0eF82NjIuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21OdW1iZXIodmFsdWVfNjYzLCBzdHhfNjY0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTUJFUiwgdmFsdWU6IHZhbHVlXzY2M30sIHN0eF82NjQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21TdHJpbmcodmFsdWVfNjY1LCBzdHhfNjY2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlNUUklORywgc3RyOiB2YWx1ZV82NjV9LCBzdHhfNjY2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUHVuY3R1YXRvcih2YWx1ZV82NjcsIHN0eF82NjggPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiB7a2xhc3M6IFRva2VuQ2xhc3MuUHVuY3R1YXRvciwgbmFtZTogdmFsdWVfNjY3fSwgdmFsdWU6IHZhbHVlXzY2N30sIHN0eF82NjguY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21LZXl3b3JkKHZhbHVlXzY2OSwgc3R4XzY3MCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5LZXl3b3JkLCBuYW1lOiB2YWx1ZV82Njl9LCB2YWx1ZTogdmFsdWVfNjY5fSwgc3R4XzY3MC5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUlkZW50aWZpZXIodmFsdWVfNjcxLCBzdHhfNjcyID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiB2YWx1ZV82NzF9LCBzdHhfNjcyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24odmFsdWVfNjczLCBzdHhfNjc0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJFR0VYUCwgdmFsdWU6IHZhbHVlXzY3M30sIHN0eF82NzQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFjZXMoaW5uZXJfNjc1LCBzdHhfNjc2ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzcgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNFLCB2YWx1ZTogXCJ7XCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc4ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDRSwgdmFsdWU6IFwifVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3NykuY29uY2F0KGlubmVyXzY3NSkucHVzaChyaWdodF82NzgpLCBzdHhfNjc2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnJhY2tldHMoaW5uZXJfNjc5LCBzdHhfNjgwID0ge30pIHtcbiAgICBsZXQgbGVmdF82ODEgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLLCB2YWx1ZTogXCJbXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjgyID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDSywgdmFsdWU6IFwiXVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY4MSkuY29uY2F0KGlubmVyXzY3OSkucHVzaChyaWdodF82ODIpLCBzdHhfNjgwLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUGFyZW5zKGlubmVyXzY4Mywgc3R4XzY4NCA9IHt9KSB7XG4gICAgbGV0IGxlZnRfNjg1ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTiwgdmFsdWU6IFwiKFwifSk7XG4gICAgbGV0IHJpZ2h0XzY4NiA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5SUEFSRU4sIHZhbHVlOiBcIilcIn0pO1xuICAgIHJldHVybiBuZXcgU3ludGF4KExpc3Qub2YobGVmdF82ODUpLmNvbmNhdChpbm5lcl82ODMpLnB1c2gocmlnaHRfNjg2KSwgc3R4XzY4NC5jb250ZXh0KTtcbiAgfVxuICByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NvcGVzZXQuc2l6ZSA9PT0gMCB8fCAhKHRoaXMuaXNJZGVudGlmaWVyKCkgfHwgdGhpcy5pc0tleXdvcmQoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgc2NvcGVfNjg3ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0Lmxhc3QoKTtcbiAgICBsZXQgc3R4U2NvcGVzXzY4OCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgYmluZGluZ3NfNjg5ID0gdGhpcy5jb250ZXh0LmJpbmRpbmdzO1xuICAgIGlmIChzY29wZV82ODcpIHtcbiAgICAgIGxldCBzY29wZXNldEJpbmRpbmdMaXN0ID0gYmluZGluZ3NfNjg5LmdldCh0aGlzKTtcbiAgICAgIGlmIChzY29wZXNldEJpbmRpbmdMaXN0KSB7XG4gICAgICAgIGxldCBiaWdnZXN0QmluZGluZ1BhaXIgPSBzY29wZXNldEJpbmRpbmdMaXN0LmZpbHRlcigoe3Njb3BlcywgYmluZGluZ30pID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NvcGVzLmlzU3Vic2V0KHN0eFNjb3Blc182ODgpO1xuICAgICAgICB9KS5zb3J0KHNpemVEZWNlbmRpbmdfNjU1KTtcbiAgICAgICAgaWYgKGJpZ2dlc3RCaW5kaW5nUGFpci5zaXplID49IDIgJiYgYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5zY29wZXMuc2l6ZSA9PT0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgxKS5zY29wZXMuc2l6ZSkge1xuICAgICAgICAgIGxldCBkZWJ1Z0Jhc2UgPSBcIntcIiArIHN0eFNjb3Blc182ODgubWFwKHNfNjkwID0+IHNfNjkwLnRvU3RyaW5nKCkpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuICAgICAgICAgIGxldCBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzID0gYmlnZ2VzdEJpbmRpbmdQYWlyLm1hcCgoe3Njb3Blc30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIHNjb3Blcy5tYXAoc182OTEgPT4gc182OTEudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3Blc2V0IFwiICsgZGVidWdCYXNlICsgXCIgaGFzIGFtYmlndW91cyBzdWJzZXRzIFwiICsgZGVidWdBbWJpZ291c1Njb3Blc2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgIT09IDApIHtcbiAgICAgICAgICBsZXQgYmluZGluZ1N0ciA9IGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYmluZGluZy50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChNYXliZS5pc0p1c3QoYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5hbGlhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzLmdldE9yRWxzZShudWxsKS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiaW5kaW5nU3RyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIHZhbCgpIHtcbiAgICBhc3NlcnQoIXRoaXMuaXNEZWxpbWl0ZXIoKSwgXCJjYW5ub3QgZ2V0IHRoZSB2YWwgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5pdGVtcy5tYXAoZWxfNjkyID0+IHtcbiAgICAgICAgaWYgKGVsXzY5MiBpbnN0YW5jZW9mIFN5bnRheCAmJiBlbF82OTIuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICAgIHJldHVybiBcIiR7Li4ufVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbF82OTIuc2xpY2UudGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIGxpbmVOdW1iZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uZ2V0KDApLmxpbmVOdW1iZXIoKTtcbiAgICB9XG4gIH1cbiAgc2V0TGluZU51bWJlcihsaW5lXzY5Mykge1xuICAgIGxldCBuZXdUb2tfNjk0ID0ge307XG4gICAgaWYgKHRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgbmV3VG9rXzY5NCA9IHRoaXMudG9rZW4ubWFwKHNfNjk1ID0+IHNfNjk1LnNldExpbmVOdW1iZXIobGluZV82OTMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudG9rZW4pKSB7XG4gICAgICAgIG5ld1Rva182OTRba2V5XSA9IHRoaXMudG9rZW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChuZXdUb2tfNjk0LnNsaWNlICYmIG5ld1Rva182OTQuc2xpY2Uuc3RhcnRMb2NhdGlvbiwgXCJhbGwgdG9rZW5zIG11c3QgaGF2ZSBsaW5lIGluZm9cIik7XG4gICAgICBuZXdUb2tfNjk0LnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZSA9IGxpbmVfNjkzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheChuZXdUb2tfNjk0LCB0aGlzLmNvbnRleHQpO1xuICB9XG4gIGlubmVyKCkge1xuICAgIGFzc2VydCh0aGlzLmlzRGVsaW1pdGVyKCksIFwiY2FuIG9ubHkgZ2V0IHRoZSBpbm5lciBvZiBhIGRlbGltaXRlclwiKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5zbGljZSgxLCB0aGlzLnRva2VuLnNpemUgLSAxKTtcbiAgfVxuICBhZGRTY29wZShzY29wZV82OTYsIGJpbmRpbmdzXzY5Nywgb3B0aW9uc182OTggPSB7ZmxpcDogZmFsc2V9KSB7XG4gICAgbGV0IHRva2VuXzY5OSA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzAxID0+IHNfNzAxLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCkpIDogdGhpcy50b2tlbjtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHRva2VuXzY5OSA9IHt0eXBlOiB0aGlzLnRva2VuLnR5cGUsIGl0ZW1zOiB0b2tlbl82OTkuaXRlbXMubWFwKGl0XzcwMiA9PiB7XG4gICAgICAgIGlmIChpdF83MDIgaW5zdGFuY2VvZiBTeW50YXggJiYgaXRfNzAyLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gaXRfNzAyLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0XzcwMjtcbiAgICAgIH0pfTtcbiAgICB9XG4gICAgbGV0IG5ld1Njb3Blc2V0XzcwMDtcbiAgICBpZiAob3B0aW9uc182OTguZmxpcCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjk2KTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNzAwID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTksIHtiaW5kaW5nczogYmluZGluZ3NfNjk3LCBzY29wZXNldDogbmV3U2NvcGVzZXRfNzAwfSk7XG4gIH1cbiAgcmVtb3ZlU2NvcGUoc2NvcGVfNzAzKSB7XG4gICAgbGV0IHRva2VuXzcwNCA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzA3ID0+IHNfNzA3LnJlbW92ZVNjb3BlKHNjb3BlXzcwMykpIDogdGhpcy50b2tlbjtcbiAgICBsZXQgbmV3U2NvcGVzZXRfNzA1ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBpbmRleF83MDYgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQuaW5kZXhPZihzY29wZV83MDMpO1xuICAgIGlmIChpbmRleF83MDYgIT09IC0xKSB7XG4gICAgICBuZXdTY29wZXNldF83MDUgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucmVtb3ZlKGluZGV4XzcwNik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzcwNCwge2JpbmRpbmdzOiB0aGlzLmNvbnRleHQuYmluZGluZ3MsIHNjb3Blc2V0OiBuZXdTY29wZXNldF83MDV9KTtcbiAgfVxuICBpc0lkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLklkZW50O1xuICB9XG4gIGlzQXNzaWduKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkFTU0lHTjtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRSVUUgfHwgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRkFMU0U7XG4gIH1cbiAgaXNLZXl3b3JkKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5LZXl3b3JkO1xuICB9XG4gIGlzTnVsbExpdGVyYWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVMTDtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5OdW1lcmljTGl0ZXJhbDtcbiAgfVxuICBpc1B1bmN0dWF0b3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlB1bmN0dWF0b3I7XG4gIH1cbiAgaXNTdHJpbmdMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5TdHJpbmdMaXRlcmFsO1xuICB9XG4gIGlzUmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIGlzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuVEVNUExBVEU7XG4gIH1cbiAgaXNEZWxpbWl0ZXIoKSB7XG4gICAgcmV0dXJuIExpc3QuaXNMaXN0KHRoaXMudG9rZW4pO1xuICB9XG4gIGlzUGFyZW5zKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi5nZXQoMCkudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTjtcbiAgfVxuICBpc0JyYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0U7XG4gIH1cbiAgaXNCcmFja2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0s7XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnZhbCgpID09PSBcIiNgXCI7XG4gIH1cbiAgaXNFT0YoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9TO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLm1hcChzXzcwOCA9PiBzXzcwOC50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiBcIidcIiArIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbi52YWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/template-processor.js b/dist/template-processor.js index 324388d8..a2f2a842 100644 --- a/dist/template-processor.js +++ b/dist/template-processor.js @@ -22,65 +22,65 @@ var _errors = require("./errors"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var isDolar_701 = function isDolar_701(s_710) { - return s_710 && s_710 instanceof _syntax2.default && s_710.isIdentifier() && s_710.val() === "$"; +var isDolar_709 = function isDolar_709(s_718) { + return s_718 && s_718 instanceof _syntax2.default && s_718.isIdentifier() && s_718.val() === "$"; }; -var isDelimiter_702 = function isDelimiter_702(s_711) { - return s_711 && typeof s_711.isDelimiter === "function" && s_711.isDelimiter(); +var isDelimiter_710 = function isDelimiter_710(s_719) { + return s_719 && typeof s_719.isDelimiter === "function" && s_719.isDelimiter(); }; -var isBraces_703 = function isBraces_703(s_712) { - return s_712 && typeof s_712.isBraces === "function" && s_712.isBraces(); +var isBraces_711 = function isBraces_711(s_720) { + return s_720 && typeof s_720.isBraces === "function" && s_720.isBraces(); }; -var isParens_704 = function isParens_704(s_713) { - return s_713 && typeof s_713.isParens === "function" && s_713.isParens(); +var isParens_712 = function isParens_712(s_721) { + return s_721 && typeof s_721.isParens === "function" && s_721.isParens(); }; -var isBrackets_705 = function isBrackets_705(s_714) { - return s_714 && typeof s_714.isBrackets === "function" && s_714.isBrackets(); +var isBrackets_713 = function isBrackets_713(s_722) { + return s_722 && typeof s_722.isBrackets === "function" && s_722.isBrackets(); }; -var insertIntoDelimiter_706 = _ramda2.default.cond([[isBraces_703, function (s_715, r_716) { - return _syntax2.default.fromBraces(r_716, s_715); -}], [isParens_704, function (s_717, r_718) { - return _syntax2.default.fromParens(r_718, s_717); -}], [isBrackets_705, function (s_719, r_720) { - return _syntax2.default.fromBrackets(r_720, s_719); +var insertIntoDelimiter_714 = _ramda2.default.cond([[isBraces_711, function (s_723, r_724) { + return _syntax2.default.fromBraces(r_724, s_723); +}], [isParens_712, function (s_725, r_726) { + return _syntax2.default.fromParens(r_726, s_725); +}], [isBrackets_713, function (s_727, r_728) { + return _syntax2.default.fromBrackets(r_728, s_727); }]]); -var process_707 = function process_707(acc_721, s_722) { - if (isBraces_703(s_722) && isDolar_701(acc_721.template.last())) { - return { template: acc_721.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_721.interp.size)), s_722)), interp: acc_721.interp.push(s_722.inner()) }; - } else if (isDelimiter_702(s_722)) { - var innerResult = processTemplate(s_722.inner(), acc_721.interp); - return { template: acc_721.template.push(insertIntoDelimiter_706(s_722, innerResult.template)), interp: innerResult.interp }; +var process_715 = function process_715(acc_729, s_730) { + if (isBraces_711(s_730) && isDolar_709(acc_729.template.last())) { + return { template: acc_729.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_729.interp.size)), s_730)), interp: acc_729.interp.push(s_730.inner()) }; + } else if (isDelimiter_710(s_730)) { + var innerResult = processTemplate(s_730.inner(), acc_729.interp); + return { template: acc_729.template.push(insertIntoDelimiter_714(s_730, innerResult.template)), interp: innerResult.interp }; } else { - return { template: acc_721.template.push(s_722), interp: acc_721.interp }; + return { template: acc_729.template.push(s_730), interp: acc_729.interp }; } }; -function cloneLineNumber_708(to_723, from_724) { - if (from_724 && to_723 && typeof to_723.setLineNumber === "function") { - return to_723.setLineNumber(from_724.lineNumber()); +function cloneLineNumber_716(to_731, from_732) { + if (from_732 && to_731 && typeof to_731.setLineNumber === "function") { + return to_731.setLineNumber(from_732.lineNumber()); } - return to_723; + return to_731; } -var replace_709 = function replace_709(acc_725, s_726) { - var last_727 = acc_725.template.get(-1); - var beforeLast_728 = acc_725.template.get(-2); - if (isBraces_703(s_726) && isDolar_701(last_727)) { - var index = s_726.inner().first().val(); - (0, _errors.assert)(acc_725.rep.size > index, "unknown replacement value"); - var replacement = cloneLineNumber_708(acc_725.rep.get(index), beforeLast_728); - return { template: acc_725.template.pop().concat(replacement), rep: acc_725.rep }; - } else if (isDelimiter_702(s_726)) { - var innerResult = replaceTemplate(s_726.inner(), acc_725.rep); - return { template: acc_725.template.push(insertIntoDelimiter_706(s_726, innerResult)), rep: acc_725.rep }; +var replace_717 = function replace_717(acc_733, s_734) { + var last_735 = acc_733.template.get(-1); + var beforeLast_736 = acc_733.template.get(-2); + if (isBraces_711(s_734) && isDolar_709(last_735)) { + var index = s_734.inner().first().val(); + (0, _errors.assert)(acc_733.rep.size > index, "unknown replacement value"); + var replacement = cloneLineNumber_716(acc_733.rep.get(index), beforeLast_736); + return { template: acc_733.template.pop().concat(replacement), rep: acc_733.rep }; + } else if (isDelimiter_710(s_734)) { + var innerResult = replaceTemplate(s_734.inner(), acc_733.rep); + return { template: acc_733.template.push(insertIntoDelimiter_714(s_734, innerResult)), rep: acc_733.rep }; } else { - return { template: acc_725.template.push(s_726), rep: acc_725.rep }; + return { template: acc_733.template.push(s_734), rep: acc_733.rep }; } }; -function processTemplate(temp_729) { - var interp_730 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; +function processTemplate(temp_737) { + var interp_738 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; - return temp_729.reduce(process_707, { template: (0, _immutable.List)(), interp: interp_730 }); + return temp_737.reduce(process_715, { template: (0, _immutable.List)(), interp: interp_738 }); } -function replaceTemplate(temp_731, rep_732) { - return temp_731.reduce(replace_709, { template: (0, _immutable.List)(), rep: rep_732 }).template; +function replaceTemplate(temp_739, rep_740) { + return temp_739.reduce(replace_717, { template: (0, _immutable.List)(), rep: rep_740 }).template; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUE3Q2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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LEtBQUssUUFBUSxHQUF0RCxFQUFQO0FBQ0Q7QUFDRixDQWREO0FBZU8sU0FBUyxlQUFULENBQXlCLFFBQXpCLEVBQXdEO0FBQUEsTUFBckIsVUFBcUIseURBQVIsc0JBQVE7O0FBQzdELFNBQU8sU0FBUyxNQUFULENBQWdCLFdBQWhCLEVBQTZCLEVBQUMsVUFBVSxzQkFBWCxFQUFtQixRQUFRLFVBQTNCLEVBQTdCLENBQVA7QUFDRDtBQUNNLFNBQVMsZUFBVCxDQUF5QixRQUF6QixFQUFtQyxPQUFuQyxFQUE0QztBQUNqRCxTQUFPLFNBQVMsTUFBVCxDQUFnQixXQUFoQixFQUE2QixFQUFDLFVBQVUsc0JBQVgsRUFBbUIsS0FBSyxPQUF4QixFQUE3QixFQUErRCxRQUF0RTtBQUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNzAxID0gc183MTAgPT4gc183MTAgJiYgc183MTAgaW5zdGFuY2VvZiBTeW50YXggJiYgc183MTAuaXNJZGVudGlmaWVyKCkgJiYgc183MTAudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNzAyID0gc183MTEgPT4gc183MTEgJiYgdHlwZW9mIHNfNzExLmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MTEuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcwMyA9IHNfNzEyID0+IHNfNzEyICYmIHR5cGVvZiBzXzcxMi5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzEyLmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MDQgPSBzXzcxMyA9PiBzXzcxMyAmJiB0eXBlb2Ygc183MTMuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcxMy5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MDUgPSBzXzcxNCA9PiBzXzcxNCAmJiB0eXBlb2Ygc183MTQuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzE0LmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzA2ID0gXy5jb25kKFtbaXNCcmFjZXNfNzAzLCAoc183MTUsIHJfNzE2KSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcxNiwgc183MTUpXSwgW2lzUGFyZW5zXzcwNCwgKHNfNzE3LCByXzcxOCkgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MTgsIHNfNzE3KV0sIFtpc0JyYWNrZXRzXzcwNSwgKHNfNzE5LCByXzcyMCkgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcyMCwgc183MTkpXV0pO1xuY29uc3QgcHJvY2Vzc183MDcgPSAoYWNjXzcyMSwgc183MjIpID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcwMyhzXzcyMikgJiYgaXNEb2xhcl83MDEoYWNjXzcyMS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyMS50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcyMS5pbnRlcnAuc2l6ZSkpLCBzXzcyMikpLCBpbnRlcnA6IGFjY183MjEuaW50ZXJwLnB1c2goc183MjIuaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzcwMihzXzcyMikpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MjIuaW5uZXIoKSwgYWNjXzcyMS5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjEudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcwNihzXzcyMiwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjEudGVtcGxhdGUucHVzaChzXzcyMiksIGludGVycDogYWNjXzcyMS5pbnRlcnB9O1xuICB9XG59O1xuZnVuY3Rpb24gY2xvbmVMaW5lTnVtYmVyXzcwOCh0b183MjMsIGZyb21fNzI0KSB7XG4gIGlmIChmcm9tXzcyNCAmJiB0b183MjMgJiYgdHlwZW9mIHRvXzcyMy5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdG9fNzIzLnNldExpbmVOdW1iZXIoZnJvbV83MjQubGluZU51bWJlcigpKTtcbiAgfVxuICByZXR1cm4gdG9fNzIzO1xufVxuY29uc3QgcmVwbGFjZV83MDkgPSAoYWNjXzcyNSwgc183MjYpID0+IHtcbiAgbGV0IGxhc3RfNzI3ID0gYWNjXzcyNS50ZW1wbGF0ZS5nZXQoLTEpO1xuICBsZXQgYmVmb3JlTGFzdF83MjggPSBhY2NfNzI1LnRlbXBsYXRlLmdldCgtMik7XG4gIGlmIChpc0JyYWNlc183MDMoc183MjYpICYmIGlzRG9sYXJfNzAxKGxhc3RfNzI3KSkge1xuICAgIGxldCBpbmRleCA9IHNfNzI2LmlubmVyKCkuZmlyc3QoKS52YWwoKTtcbiAgICBhc3NlcnQoYWNjXzcyNS5yZXAuc2l6ZSA+IGluZGV4LCBcInVua25vd24gcmVwbGFjZW1lbnQgdmFsdWVcIik7XG4gICAgbGV0IHJlcGxhY2VtZW50ID0gY2xvbmVMaW5lTnVtYmVyXzcwOChhY2NfNzI1LnJlcC5nZXQoaW5kZXgpLCBiZWZvcmVMYXN0XzcyOCk7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyNS50ZW1wbGF0ZS5wb3AoKS5jb25jYXQocmVwbGFjZW1lbnQpLCByZXA6IGFjY183MjUucmVwfTtcbiAgfSBlbHNlIGlmIChpc0RlbGltaXRlcl83MDIoc183MjYpKSB7XG4gICAgbGV0IGlubmVyUmVzdWx0ID0gcmVwbGFjZVRlbXBsYXRlKHNfNzI2LmlubmVyKCksIGFjY183MjUucmVwKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzI1LnRlbXBsYXRlLnB1c2goaW5zZXJ0SW50b0RlbGltaXRlcl83MDYoc183MjYsIGlubmVyUmVzdWx0KSksIHJlcDogYWNjXzcyNS5yZXB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjUudGVtcGxhdGUucHVzaChzXzcyNiksIHJlcDogYWNjXzcyNS5yZXB9O1xuICB9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZSh0ZW1wXzcyOSwgaW50ZXJwXzczMCA9IExpc3QoKSkge1xuICByZXR1cm4gdGVtcF83MjkucmVkdWNlKHByb2Nlc3NfNzA3LCB7dGVtcGxhdGU6IExpc3QoKSwgaW50ZXJwOiBpbnRlcnBfNzMwfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlKHRlbXBfNzMxLCByZXBfNzMyKSB7XG4gIHJldHVybiB0ZW1wXzczMS5yZWR1Y2UocmVwbGFjZV83MDksIHt0ZW1wbGF0ZTogTGlzdCgpLCByZXA6IHJlcF83MzJ9KS50ZW1wbGF0ZTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUE3Q2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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LEtBQUssUUFBUSxHQUF0RCxFQUFQO0FBQ0Q7QUFDRixDQWREO0FBZU8sU0FBUyxlQUFULENBQXlCLFFBQXpCLEVBQXdEO0FBQUEsTUFBckIsVUFBcUIseURBQVIsc0JBQVE7O0FBQzdELFNBQU8sU0FBUyxNQUFULENBQWdCLFdBQWhCLEVBQTZCLEVBQUMsVUFBVSxzQkFBWCxFQUFtQixRQUFRLFVBQTNCLEVBQTdCLENBQVA7QUFDRDtBQUNNLFNBQVMsZUFBVCxDQUF5QixRQUF6QixFQUFtQyxPQUFuQyxFQUE0QztBQUNqRCxTQUFPLFNBQVMsTUFBVCxDQUFnQixXQUFoQixFQUE2QixFQUFDLFVBQVUsc0JBQVgsRUFBbUIsS0FBSyxPQUF4QixFQUE3QixFQUErRCxRQUF0RTtBQUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNzA5ID0gc183MTggPT4gc183MTggJiYgc183MTggaW5zdGFuY2VvZiBTeW50YXggJiYgc183MTguaXNJZGVudGlmaWVyKCkgJiYgc183MTgudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNzEwID0gc183MTkgPT4gc183MTkgJiYgdHlwZW9mIHNfNzE5LmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MTkuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcxMSA9IHNfNzIwID0+IHNfNzIwICYmIHR5cGVvZiBzXzcyMC5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIwLmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MTIgPSBzXzcyMSA9PiBzXzcyMSAmJiB0eXBlb2Ygc183MjEuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcyMS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MTMgPSBzXzcyMiA9PiBzXzcyMiAmJiB0eXBlb2Ygc183MjIuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIyLmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzE0ID0gXy5jb25kKFtbaXNCcmFjZXNfNzExLCAoc183MjMsIHJfNzI0KSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcyNCwgc183MjMpXSwgW2lzUGFyZW5zXzcxMiwgKHNfNzI1LCByXzcyNikgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MjYsIHNfNzI1KV0sIFtpc0JyYWNrZXRzXzcxMywgKHNfNzI3LCByXzcyOCkgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcyOCwgc183MjcpXV0pO1xuY29uc3QgcHJvY2Vzc183MTUgPSAoYWNjXzcyOSwgc183MzApID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcxMShzXzczMCkgJiYgaXNEb2xhcl83MDkoYWNjXzcyOS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyOS50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcyOS5pbnRlcnAuc2l6ZSkpLCBzXzczMCkpLCBpbnRlcnA6IGFjY183MjkuaW50ZXJwLnB1c2goc183MzAuaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzcxMChzXzczMCkpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MzAuaW5uZXIoKSwgYWNjXzcyOS5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcxNChzXzczMCwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChzXzczMCksIGludGVycDogYWNjXzcyOS5pbnRlcnB9O1xuICB9XG59O1xuZnVuY3Rpb24gY2xvbmVMaW5lTnVtYmVyXzcxNih0b183MzEsIGZyb21fNzMyKSB7XG4gIGlmIChmcm9tXzczMiAmJiB0b183MzEgJiYgdHlwZW9mIHRvXzczMS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdG9fNzMxLnNldExpbmVOdW1iZXIoZnJvbV83MzIubGluZU51bWJlcigpKTtcbiAgfVxuICByZXR1cm4gdG9fNzMxO1xufVxuY29uc3QgcmVwbGFjZV83MTcgPSAoYWNjXzczMywgc183MzQpID0+IHtcbiAgbGV0IGxhc3RfNzM1ID0gYWNjXzczMy50ZW1wbGF0ZS5nZXQoLTEpO1xuICBsZXQgYmVmb3JlTGFzdF83MzYgPSBhY2NfNzMzLnRlbXBsYXRlLmdldCgtMik7XG4gIGlmIChpc0JyYWNlc183MTEoc183MzQpICYmIGlzRG9sYXJfNzA5KGxhc3RfNzM1KSkge1xuICAgIGxldCBpbmRleCA9IHNfNzM0LmlubmVyKCkuZmlyc3QoKS52YWwoKTtcbiAgICBhc3NlcnQoYWNjXzczMy5yZXAuc2l6ZSA+IGluZGV4LCBcInVua25vd24gcmVwbGFjZW1lbnQgdmFsdWVcIik7XG4gICAgbGV0IHJlcGxhY2VtZW50ID0gY2xvbmVMaW5lTnVtYmVyXzcxNihhY2NfNzMzLnJlcC5nZXQoaW5kZXgpLCBiZWZvcmVMYXN0XzczNik7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzczMy50ZW1wbGF0ZS5wb3AoKS5jb25jYXQocmVwbGFjZW1lbnQpLCByZXA6IGFjY183MzMucmVwfTtcbiAgfSBlbHNlIGlmIChpc0RlbGltaXRlcl83MTAoc183MzQpKSB7XG4gICAgbGV0IGlubmVyUmVzdWx0ID0gcmVwbGFjZVRlbXBsYXRlKHNfNzM0LmlubmVyKCksIGFjY183MzMucmVwKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzMzLnRlbXBsYXRlLnB1c2goaW5zZXJ0SW50b0RlbGltaXRlcl83MTQoc183MzQsIGlubmVyUmVzdWx0KSksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MzMudGVtcGxhdGUucHVzaChzXzczNCksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZSh0ZW1wXzczNywgaW50ZXJwXzczOCA9IExpc3QoKSkge1xuICByZXR1cm4gdGVtcF83MzcucmVkdWNlKHByb2Nlc3NfNzE1LCB7dGVtcGxhdGU6IExpc3QoKSwgaW50ZXJwOiBpbnRlcnBfNzM4fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlKHRlbXBfNzM5LCByZXBfNzQwKSB7XG4gIHJldHVybiB0ZW1wXzczOS5yZWR1Y2UocmVwbGFjZV83MTcsIHt0ZW1wbGF0ZTogTGlzdCgpLCByZXA6IHJlcF83NDB9KS50ZW1wbGF0ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/term-expander.js b/dist/term-expander.js index 738b3a16..0fe79bd9 100644 --- a/dist/term-expander.js +++ b/dist/term-expander.js @@ -43,578 +43,578 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var TermExpander = function () { - function TermExpander(context_733) { + function TermExpander(context_741) { _classCallCheck(this, TermExpander); - this.context = context_733; + this.context = context_741; } _createClass(TermExpander, [{ key: "expand", - value: function expand(term_734) { - var field_735 = "expand" + term_734.type; - if (typeof this[field_735] === "function") { - return this[field_735](term_734); + value: function expand(term_742) { + var field_743 = "expand" + term_742.type; + if (typeof this[field_743] === "function") { + return this[field_743](term_742); } - (0, _errors.assert)(false, "expand not implemented yet for: " + term_734.type); + (0, _errors.assert)(false, "expand not implemented yet for: " + term_742.type); } }, { key: "expandTemplateExpression", - value: function expandTemplateExpression(term_736) { - return new _terms2.default("TemplateExpression", { tag: term_736.tag == null ? null : this.expand(term_736.tag), elements: term_736.elements.toArray() }); + value: function expandTemplateExpression(term_744) { + return new _terms2.default("TemplateExpression", { tag: term_744.tag == null ? null : this.expand(term_744.tag), elements: term_744.elements.toArray() }); } }, { key: "expandBreakStatement", - value: function expandBreakStatement(term_737) { - return new _terms2.default("BreakStatement", { label: term_737.label ? term_737.label.val() : null }); + value: function expandBreakStatement(term_745) { + return new _terms2.default("BreakStatement", { label: term_745.label ? term_745.label.val() : null }); } }, { key: "expandDoWhileStatement", - value: function expandDoWhileStatement(term_738) { - return new _terms2.default("DoWhileStatement", { body: this.expand(term_738.body), test: this.expand(term_738.test) }); + value: function expandDoWhileStatement(term_746) { + return new _terms2.default("DoWhileStatement", { body: this.expand(term_746.body), test: this.expand(term_746.test) }); } }, { key: "expandWithStatement", - value: function expandWithStatement(term_739) { - return new _terms2.default("WithStatement", { body: this.expand(term_739.body), object: this.expand(term_739.object) }); + value: function expandWithStatement(term_747) { + return new _terms2.default("WithStatement", { body: this.expand(term_747.body), object: this.expand(term_747.object) }); } }, { key: "expandDebuggerStatement", - value: function expandDebuggerStatement(term_740) { - return term_740; + value: function expandDebuggerStatement(term_748) { + return term_748; } }, { key: "expandContinueStatement", - value: function expandContinueStatement(term_741) { - return new _terms2.default("ContinueStatement", { label: term_741.label ? term_741.label.val() : null }); + value: function expandContinueStatement(term_749) { + return new _terms2.default("ContinueStatement", { label: term_749.label ? term_749.label.val() : null }); } }, { key: "expandSwitchStatementWithDefault", - value: function expandSwitchStatementWithDefault(term_742) { + value: function expandSwitchStatementWithDefault(term_750) { var _this = this; - return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_742.discriminant), preDefaultCases: term_742.preDefaultCases.map(function (c_743) { - return _this.expand(c_743); - }).toArray(), defaultCase: this.expand(term_742.defaultCase), postDefaultCases: term_742.postDefaultCases.map(function (c_744) { - return _this.expand(c_744); + return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_750.discriminant), preDefaultCases: term_750.preDefaultCases.map(function (c_751) { + return _this.expand(c_751); + }).toArray(), defaultCase: this.expand(term_750.defaultCase), postDefaultCases: term_750.postDefaultCases.map(function (c_752) { + return _this.expand(c_752); }).toArray() }); } }, { key: "expandComputedMemberExpression", - value: function expandComputedMemberExpression(term_745) { - return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_745.object), expression: this.expand(term_745.expression) }); + value: function expandComputedMemberExpression(term_753) { + return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_753.object), expression: this.expand(term_753.expression) }); } }, { key: "expandSwitchStatement", - value: function expandSwitchStatement(term_746) { + value: function expandSwitchStatement(term_754) { var _this2 = this; - return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_746.discriminant), cases: term_746.cases.map(function (c_747) { - return _this2.expand(c_747); + return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_754.discriminant), cases: term_754.cases.map(function (c_755) { + return _this2.expand(c_755); }).toArray() }); } }, { key: "expandFormalParameters", - value: function expandFormalParameters(term_748) { + value: function expandFormalParameters(term_756) { var _this3 = this; - var rest_749 = term_748.rest == null ? null : this.expand(term_748.rest); - return new _terms2.default("FormalParameters", { items: term_748.items.map(function (i_750) { - return _this3.expand(i_750); - }), rest: rest_749 }); + var rest_757 = term_756.rest == null ? null : this.expand(term_756.rest); + return new _terms2.default("FormalParameters", { items: term_756.items.map(function (i_758) { + return _this3.expand(i_758); + }), rest: rest_757 }); } }, { key: "expandArrowExpression", - value: function expandArrowExpression(term_751) { - return this.doFunctionExpansion(term_751, "ArrowExpression"); + value: function expandArrowExpression(term_759) { + return this.doFunctionExpansion(term_759, "ArrowExpression"); } }, { key: "expandSwitchDefault", - value: function expandSwitchDefault(term_752) { + value: function expandSwitchDefault(term_760) { var _this4 = this; - return new _terms2.default("SwitchDefault", { consequent: term_752.consequent.map(function (c_753) { - return _this4.expand(c_753); + return new _terms2.default("SwitchDefault", { consequent: term_760.consequent.map(function (c_761) { + return _this4.expand(c_761); }).toArray() }); } }, { key: "expandSwitchCase", - value: function expandSwitchCase(term_754) { + value: function expandSwitchCase(term_762) { var _this5 = this; - return new _terms2.default("SwitchCase", { test: this.expand(term_754.test), consequent: term_754.consequent.map(function (c_755) { - return _this5.expand(c_755); + return new _terms2.default("SwitchCase", { test: this.expand(term_762.test), consequent: term_762.consequent.map(function (c_763) { + return _this5.expand(c_763); }).toArray() }); } }, { key: "expandForInStatement", - value: function expandForInStatement(term_756) { - return new _terms2.default("ForInStatement", { left: this.expand(term_756.left), right: this.expand(term_756.right), body: this.expand(term_756.body) }); + value: function expandForInStatement(term_764) { + return new _terms2.default("ForInStatement", { left: this.expand(term_764.left), right: this.expand(term_764.right), body: this.expand(term_764.body) }); } }, { key: "expandTryCatchStatement", - value: function expandTryCatchStatement(term_757) { - return new _terms2.default("TryCatchStatement", { body: this.expand(term_757.body), catchClause: this.expand(term_757.catchClause) }); + value: function expandTryCatchStatement(term_765) { + return new _terms2.default("TryCatchStatement", { body: this.expand(term_765.body), catchClause: this.expand(term_765.catchClause) }); } }, { key: "expandTryFinallyStatement", - value: function expandTryFinallyStatement(term_758) { - var catchClause_759 = term_758.catchClause == null ? null : this.expand(term_758.catchClause); - return new _terms2.default("TryFinallyStatement", { body: this.expand(term_758.body), catchClause: catchClause_759, finalizer: this.expand(term_758.finalizer) }); + value: function expandTryFinallyStatement(term_766) { + var catchClause_767 = term_766.catchClause == null ? null : this.expand(term_766.catchClause); + return new _terms2.default("TryFinallyStatement", { body: this.expand(term_766.body), catchClause: catchClause_767, finalizer: this.expand(term_766.finalizer) }); } }, { key: "expandCatchClause", - value: function expandCatchClause(term_760) { - return new _terms2.default("CatchClause", { binding: this.expand(term_760.binding), body: this.expand(term_760.body) }); + value: function expandCatchClause(term_768) { + return new _terms2.default("CatchClause", { binding: this.expand(term_768.binding), body: this.expand(term_768.body) }); } }, { key: "expandThrowStatement", - value: function expandThrowStatement(term_761) { - return new _terms2.default("ThrowStatement", { expression: this.expand(term_761.expression) }); + value: function expandThrowStatement(term_769) { + return new _terms2.default("ThrowStatement", { expression: this.expand(term_769.expression) }); } }, { key: "expandForOfStatement", - value: function expandForOfStatement(term_762) { - return new _terms2.default("ForOfStatement", { left: this.expand(term_762.left), right: this.expand(term_762.right), body: this.expand(term_762.body) }); + value: function expandForOfStatement(term_770) { + return new _terms2.default("ForOfStatement", { left: this.expand(term_770.left), right: this.expand(term_770.right), body: this.expand(term_770.body) }); } }, { key: "expandBindingIdentifier", - value: function expandBindingIdentifier(term_763) { - return term_763; + value: function expandBindingIdentifier(term_771) { + return term_771; } }, { key: "expandBindingPropertyIdentifier", - value: function expandBindingPropertyIdentifier(term_764) { - return term_764; + value: function expandBindingPropertyIdentifier(term_772) { + return term_772; } }, { key: "expandBindingPropertyProperty", - value: function expandBindingPropertyProperty(term_765) { - return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_765.name), binding: this.expand(term_765.binding) }); + value: function expandBindingPropertyProperty(term_773) { + return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_773.name), binding: this.expand(term_773.binding) }); } }, { key: "expandComputedPropertyName", - value: function expandComputedPropertyName(term_766) { - return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_766.expression) }); + value: function expandComputedPropertyName(term_774) { + return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_774.expression) }); } }, { key: "expandObjectBinding", - value: function expandObjectBinding(term_767) { + value: function expandObjectBinding(term_775) { var _this6 = this; - return new _terms2.default("ObjectBinding", { properties: term_767.properties.map(function (t_768) { - return _this6.expand(t_768); + return new _terms2.default("ObjectBinding", { properties: term_775.properties.map(function (t_776) { + return _this6.expand(t_776); }).toArray() }); } }, { key: "expandArrayBinding", - value: function expandArrayBinding(term_769) { + value: function expandArrayBinding(term_777) { var _this7 = this; - var restElement_770 = term_769.restElement == null ? null : this.expand(term_769.restElement); - return new _terms2.default("ArrayBinding", { elements: term_769.elements.map(function (t_771) { - return t_771 == null ? null : _this7.expand(t_771); - }).toArray(), restElement: restElement_770 }); + var restElement_778 = term_777.restElement == null ? null : this.expand(term_777.restElement); + return new _terms2.default("ArrayBinding", { elements: term_777.elements.map(function (t_779) { + return t_779 == null ? null : _this7.expand(t_779); + }).toArray(), restElement: restElement_778 }); } }, { key: "expandBindingWithDefault", - value: function expandBindingWithDefault(term_772) { - return new _terms2.default("BindingWithDefault", { binding: this.expand(term_772.binding), init: this.expand(term_772.init) }); + value: function expandBindingWithDefault(term_780) { + return new _terms2.default("BindingWithDefault", { binding: this.expand(term_780.binding), init: this.expand(term_780.init) }); } }, { key: "expandShorthandProperty", - value: function expandShorthandProperty(term_773) { - return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_773.name }), expression: new _terms2.default("IdentifierExpression", { name: term_773.name }) }); + value: function expandShorthandProperty(term_781) { + return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_781.name }), expression: new _terms2.default("IdentifierExpression", { name: term_781.name }) }); } }, { key: "expandForStatement", - value: function expandForStatement(term_774) { - var init_775 = term_774.init == null ? null : this.expand(term_774.init); - var test_776 = term_774.test == null ? null : this.expand(term_774.test); - var update_777 = term_774.update == null ? null : this.expand(term_774.update); - var body_778 = this.expand(term_774.body); - return new _terms2.default("ForStatement", { init: init_775, test: test_776, update: update_777, body: body_778 }); + value: function expandForStatement(term_782) { + var init_783 = term_782.init == null ? null : this.expand(term_782.init); + var test_784 = term_782.test == null ? null : this.expand(term_782.test); + var update_785 = term_782.update == null ? null : this.expand(term_782.update); + var body_786 = this.expand(term_782.body); + return new _terms2.default("ForStatement", { init: init_783, test: test_784, update: update_785, body: body_786 }); } }, { key: "expandYieldExpression", - value: function expandYieldExpression(term_779) { - var expr_780 = term_779.expression == null ? null : this.expand(term_779.expression); - return new _terms2.default("YieldExpression", { expression: expr_780 }); + value: function expandYieldExpression(term_787) { + var expr_788 = term_787.expression == null ? null : this.expand(term_787.expression); + return new _terms2.default("YieldExpression", { expression: expr_788 }); } }, { key: "expandYieldGeneratorExpression", - value: function expandYieldGeneratorExpression(term_781) { - var expr_782 = term_781.expression == null ? null : this.expand(term_781.expression); - return new _terms2.default("YieldGeneratorExpression", { expression: expr_782 }); + value: function expandYieldGeneratorExpression(term_789) { + var expr_790 = term_789.expression == null ? null : this.expand(term_789.expression); + return new _terms2.default("YieldGeneratorExpression", { expression: expr_790 }); } }, { key: "expandWhileStatement", - value: function expandWhileStatement(term_783) { - return new _terms2.default("WhileStatement", { test: this.expand(term_783.test), body: this.expand(term_783.body) }); + value: function expandWhileStatement(term_791) { + return new _terms2.default("WhileStatement", { test: this.expand(term_791.test), body: this.expand(term_791.body) }); } }, { key: "expandIfStatement", - value: function expandIfStatement(term_784) { - var consequent_785 = term_784.consequent == null ? null : this.expand(term_784.consequent); - var alternate_786 = term_784.alternate == null ? null : this.expand(term_784.alternate); - return new _terms2.default("IfStatement", { test: this.expand(term_784.test), consequent: consequent_785, alternate: alternate_786 }); + value: function expandIfStatement(term_792) { + var consequent_793 = term_792.consequent == null ? null : this.expand(term_792.consequent); + var alternate_794 = term_792.alternate == null ? null : this.expand(term_792.alternate); + return new _terms2.default("IfStatement", { test: this.expand(term_792.test), consequent: consequent_793, alternate: alternate_794 }); } }, { key: "expandBlockStatement", - value: function expandBlockStatement(term_787) { - return new _terms2.default("BlockStatement", { block: this.expand(term_787.block) }); + value: function expandBlockStatement(term_795) { + return new _terms2.default("BlockStatement", { block: this.expand(term_795.block) }); } }, { key: "expandBlock", - value: function expandBlock(term_788) { + value: function expandBlock(term_796) { var _this8 = this; - return new _terms2.default("Block", { statements: term_788.statements.map(function (s_789) { - return _this8.expand(s_789); + return new _terms2.default("Block", { statements: term_796.statements.map(function (s_797) { + return _this8.expand(s_797); }).toArray() }); } }, { key: "expandVariableDeclarationStatement", - value: function expandVariableDeclarationStatement(term_790) { - return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_790.declaration) }); + value: function expandVariableDeclarationStatement(term_798) { + return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_798.declaration) }); } }, { key: "expandReturnStatement", - value: function expandReturnStatement(term_791) { - if (term_791.expression == null) { - return term_791; + value: function expandReturnStatement(term_799) { + if (term_799.expression == null) { + return term_799; } - return new _terms2.default("ReturnStatement", { expression: this.expand(term_791.expression) }); + return new _terms2.default("ReturnStatement", { expression: this.expand(term_799.expression) }); } }, { key: "expandClassDeclaration", - value: function expandClassDeclaration(term_792) { + value: function expandClassDeclaration(term_800) { var _this9 = this; - return new _terms2.default("ClassDeclaration", { name: term_792.name == null ? null : this.expand(term_792.name), super: term_792.super == null ? null : this.expand(term_792.super), elements: term_792.elements.map(function (el_793) { - return _this9.expand(el_793); + return new _terms2.default("ClassDeclaration", { name: term_800.name == null ? null : this.expand(term_800.name), super: term_800.super == null ? null : this.expand(term_800.super), elements: term_800.elements.map(function (el_801) { + return _this9.expand(el_801); }).toArray() }); } }, { key: "expandClassExpression", - value: function expandClassExpression(term_794) { + value: function expandClassExpression(term_802) { var _this10 = this; - return new _terms2.default("ClassExpression", { name: term_794.name == null ? null : this.expand(term_794.name), super: term_794.super == null ? null : this.expand(term_794.super), elements: term_794.elements.map(function (el_795) { - return _this10.expand(el_795); + return new _terms2.default("ClassExpression", { name: term_802.name == null ? null : this.expand(term_802.name), super: term_802.super == null ? null : this.expand(term_802.super), elements: term_802.elements.map(function (el_803) { + return _this10.expand(el_803); }).toArray() }); } }, { key: "expandClassElement", - value: function expandClassElement(term_796) { - return new _terms2.default("ClassElement", { isStatic: term_796.isStatic, method: this.expand(term_796.method) }); + value: function expandClassElement(term_804) { + return new _terms2.default("ClassElement", { isStatic: term_804.isStatic, method: this.expand(term_804.method) }); } }, { key: "expandThisExpression", - value: function expandThisExpression(term_797) { - return term_797; + value: function expandThisExpression(term_805) { + return term_805; } }, { key: "expandSyntaxTemplate", - value: function expandSyntaxTemplate(term_798) { + value: function expandSyntaxTemplate(term_806) { var _this11 = this; - var expander_799 = new _expander2.default(this.context); - var r_800 = (0, _templateProcessor.processTemplate)(term_798.template.inner()); - var str_801 = _syntax2.default.fromString(_serializer.serializer.write(r_800.template)); - var callee_802 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); - var expandedInterps_803 = r_800.interp.map(function (i_805) { - var enf_806 = new _enforester.Enforester(i_805, (0, _immutable.List)(), _this11.context); - return _this11.expand(enf_806.enforest("expression")); + var expander_807 = new _expander2.default(this.context); + var r_808 = (0, _templateProcessor.processTemplate)(term_806.template.inner()); + var str_809 = _syntax2.default.fromString(_serializer.serializer.write(r_808.template)); + var callee_810 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); + var expandedInterps_811 = r_808.interp.map(function (i_813) { + var enf_814 = new _enforester.Enforester(i_813, (0, _immutable.List)(), _this11.context); + return _this11.expand(enf_814.enforest("expression")); }); - var args_804 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_801 })).concat(expandedInterps_803); - return new _terms2.default("CallExpression", { callee: callee_802, arguments: args_804 }); + var args_812 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_809 })).concat(expandedInterps_811); + return new _terms2.default("CallExpression", { callee: callee_810, arguments: args_812 }); } }, { key: "expandSyntaxQuote", - value: function expandSyntaxQuote(term_807) { - var str_808 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_807.name)) }); - return new _terms2.default("TemplateExpression", { tag: term_807.template.tag, elements: term_807.template.elements.push(str_808).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); + value: function expandSyntaxQuote(term_815) { + var str_816 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_815.name)) }); + return new _terms2.default("TemplateExpression", { tag: term_815.template.tag, elements: term_815.template.elements.push(str_816).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); } }, { key: "expandStaticMemberExpression", - value: function expandStaticMemberExpression(term_809) { - return new _terms2.default("StaticMemberExpression", { object: this.expand(term_809.object), property: term_809.property }); + value: function expandStaticMemberExpression(term_817) { + return new _terms2.default("StaticMemberExpression", { object: this.expand(term_817.object), property: term_817.property }); } }, { key: "expandArrayExpression", - value: function expandArrayExpression(term_810) { + value: function expandArrayExpression(term_818) { var _this12 = this; - return new _terms2.default("ArrayExpression", { elements: term_810.elements.map(function (t_811) { - return t_811 == null ? t_811 : _this12.expand(t_811); + return new _terms2.default("ArrayExpression", { elements: term_818.elements.map(function (t_819) { + return t_819 == null ? t_819 : _this12.expand(t_819); }) }); } }, { key: "expandImport", - value: function expandImport(term_812) { - return term_812; + value: function expandImport(term_820) { + return term_820; } }, { key: "expandImportNamespace", - value: function expandImportNamespace(term_813) { - return term_813; + value: function expandImportNamespace(term_821) { + return term_821; } }, { key: "expandExport", - value: function expandExport(term_814) { - return new _terms2.default("Export", { declaration: this.expand(term_814.declaration) }); + value: function expandExport(term_822) { + return new _terms2.default("Export", { declaration: this.expand(term_822.declaration) }); } }, { key: "expandExportDefault", - value: function expandExportDefault(term_815) { - return new _terms2.default("ExportDefault", { body: this.expand(term_815.body) }); + value: function expandExportDefault(term_823) { + return new _terms2.default("ExportDefault", { body: this.expand(term_823.body) }); } }, { key: "expandExportFrom", - value: function expandExportFrom(term_816) { - return term_816; + value: function expandExportFrom(term_824) { + return term_824; } }, { key: "expandExportAllFrom", - value: function expandExportAllFrom(term_817) { - return term_817; + value: function expandExportAllFrom(term_825) { + return term_825; } }, { key: "expandExportSpecifier", - value: function expandExportSpecifier(term_818) { - return term_818; + value: function expandExportSpecifier(term_826) { + return term_826; } }, { key: "expandStaticPropertyName", - value: function expandStaticPropertyName(term_819) { - return term_819; + value: function expandStaticPropertyName(term_827) { + return term_827; } }, { key: "expandDataProperty", - value: function expandDataProperty(term_820) { - return new _terms2.default("DataProperty", { name: this.expand(term_820.name), expression: this.expand(term_820.expression) }); + value: function expandDataProperty(term_828) { + return new _terms2.default("DataProperty", { name: this.expand(term_828.name), expression: this.expand(term_828.expression) }); } }, { key: "expandObjectExpression", - value: function expandObjectExpression(term_821) { + value: function expandObjectExpression(term_829) { var _this13 = this; - return new _terms2.default("ObjectExpression", { properties: term_821.properties.map(function (t_822) { - return _this13.expand(t_822); + return new _terms2.default("ObjectExpression", { properties: term_829.properties.map(function (t_830) { + return _this13.expand(t_830); }) }); } }, { key: "expandVariableDeclarator", - value: function expandVariableDeclarator(term_823) { - var init_824 = term_823.init == null ? null : this.expand(term_823.init); - return new _terms2.default("VariableDeclarator", { binding: this.expand(term_823.binding), init: init_824 }); + value: function expandVariableDeclarator(term_831) { + var init_832 = term_831.init == null ? null : this.expand(term_831.init); + return new _terms2.default("VariableDeclarator", { binding: this.expand(term_831.binding), init: init_832 }); } }, { key: "expandVariableDeclaration", - value: function expandVariableDeclaration(term_825) { + value: function expandVariableDeclaration(term_833) { var _this14 = this; - return new _terms2.default("VariableDeclaration", { kind: term_825.kind, declarators: term_825.declarators.map(function (d_826) { - return _this14.expand(d_826); + return new _terms2.default("VariableDeclaration", { kind: term_833.kind, declarators: term_833.declarators.map(function (d_834) { + return _this14.expand(d_834); }) }); } }, { key: "expandParenthesizedExpression", - value: function expandParenthesizedExpression(term_827) { - if (term_827.inner.size === 0) { + value: function expandParenthesizedExpression(term_835) { + if (term_835.inner.size === 0) { throw new Error("unexpected end of input"); } - var enf_828 = new _enforester.Enforester(term_827.inner, (0, _immutable.List)(), this.context); - var lookahead_829 = enf_828.peek(); - var t_830 = enf_828.enforestExpression(); - if (t_830 == null || enf_828.rest.size > 0) { - throw enf_828.createError(lookahead_829, "unexpected syntax"); + var enf_836 = new _enforester.Enforester(term_835.inner, (0, _immutable.List)(), this.context); + var lookahead_837 = enf_836.peek(); + var t_838 = enf_836.enforestExpression(); + if (t_838 == null || enf_836.rest.size > 0) { + throw enf_836.createError(lookahead_837, "unexpected syntax"); } - return this.expand(t_830); + return this.expand(t_838); } }, { key: "expandUnaryExpression", - value: function expandUnaryExpression(term_831) { - return new _terms2.default("UnaryExpression", { operator: term_831.operator, operand: this.expand(term_831.operand) }); + value: function expandUnaryExpression(term_839) { + return new _terms2.default("UnaryExpression", { operator: term_839.operator, operand: this.expand(term_839.operand) }); } }, { key: "expandUpdateExpression", - value: function expandUpdateExpression(term_832) { - return new _terms2.default("UpdateExpression", { isPrefix: term_832.isPrefix, operator: term_832.operator, operand: this.expand(term_832.operand) }); + value: function expandUpdateExpression(term_840) { + return new _terms2.default("UpdateExpression", { isPrefix: term_840.isPrefix, operator: term_840.operator, operand: this.expand(term_840.operand) }); } }, { key: "expandBinaryExpression", - value: function expandBinaryExpression(term_833) { - var left_834 = this.expand(term_833.left); - var right_835 = this.expand(term_833.right); - return new _terms2.default("BinaryExpression", { left: left_834, operator: term_833.operator, right: right_835 }); + value: function expandBinaryExpression(term_841) { + var left_842 = this.expand(term_841.left); + var right_843 = this.expand(term_841.right); + return new _terms2.default("BinaryExpression", { left: left_842, operator: term_841.operator, right: right_843 }); } }, { key: "expandConditionalExpression", - value: function expandConditionalExpression(term_836) { - return new _terms2.default("ConditionalExpression", { test: this.expand(term_836.test), consequent: this.expand(term_836.consequent), alternate: this.expand(term_836.alternate) }); + value: function expandConditionalExpression(term_844) { + return new _terms2.default("ConditionalExpression", { test: this.expand(term_844.test), consequent: this.expand(term_844.consequent), alternate: this.expand(term_844.alternate) }); } }, { key: "expandNewTargetExpression", - value: function expandNewTargetExpression(term_837) { - return term_837; + value: function expandNewTargetExpression(term_845) { + return term_845; } }, { key: "expandNewExpression", - value: function expandNewExpression(term_838) { + value: function expandNewExpression(term_846) { var _this15 = this; - var callee_839 = this.expand(term_838.callee); - var enf_840 = new _enforester.Enforester(term_838.arguments, (0, _immutable.List)(), this.context); - var args_841 = enf_840.enforestArgumentList().map(function (arg_842) { - return _this15.expand(arg_842); + var callee_847 = this.expand(term_846.callee); + var enf_848 = new _enforester.Enforester(term_846.arguments, (0, _immutable.List)(), this.context); + var args_849 = enf_848.enforestArgumentList().map(function (arg_850) { + return _this15.expand(arg_850); }); - return new _terms2.default("NewExpression", { callee: callee_839, arguments: args_841.toArray() }); + return new _terms2.default("NewExpression", { callee: callee_847, arguments: args_849.toArray() }); } }, { key: "expandSuper", - value: function expandSuper(term_843) { - return term_843; + value: function expandSuper(term_851) { + return term_851; } }, { key: "expandCallExpression", - value: function expandCallExpression(term_844) { + value: function expandCallExpression(term_852) { var _this16 = this; - var callee_845 = this.expand(term_844.callee); - var enf_846 = new _enforester.Enforester(term_844.arguments, (0, _immutable.List)(), this.context); - var args_847 = enf_846.enforestArgumentList().map(function (arg_848) { - return _this16.expand(arg_848); + var callee_853 = this.expand(term_852.callee); + var enf_854 = new _enforester.Enforester(term_852.arguments, (0, _immutable.List)(), this.context); + var args_855 = enf_854.enforestArgumentList().map(function (arg_856) { + return _this16.expand(arg_856); }); - return new _terms2.default("CallExpression", { callee: callee_845, arguments: args_847 }); + return new _terms2.default("CallExpression", { callee: callee_853, arguments: args_855 }); } }, { key: "expandSpreadElement", - value: function expandSpreadElement(term_849) { - return new _terms2.default("SpreadElement", { expression: this.expand(term_849.expression) }); + value: function expandSpreadElement(term_857) { + return new _terms2.default("SpreadElement", { expression: this.expand(term_857.expression) }); } }, { key: "expandExpressionStatement", - value: function expandExpressionStatement(term_850) { - var child_851 = this.expand(term_850.expression); - return new _terms2.default("ExpressionStatement", { expression: child_851 }); + value: function expandExpressionStatement(term_858) { + var child_859 = this.expand(term_858.expression); + return new _terms2.default("ExpressionStatement", { expression: child_859 }); } }, { key: "expandLabeledStatement", - value: function expandLabeledStatement(term_852) { - return new _terms2.default("LabeledStatement", { label: term_852.label.val(), body: this.expand(term_852.body) }); + value: function expandLabeledStatement(term_860) { + return new _terms2.default("LabeledStatement", { label: term_860.label.val(), body: this.expand(term_860.body) }); } }, { key: "doFunctionExpansion", - value: function doFunctionExpansion(term_853, type_854) { + value: function doFunctionExpansion(term_861, type_862) { var _this17 = this; - var scope_855 = (0, _scope.freshScope)("fun"); - var red_856 = new _applyScopeInParamsReducer2.default(scope_855, this.context); - var params_857 = void 0; - if (type_854 !== "Getter" && type_854 !== "Setter") { - params_857 = red_856.transform(term_853.params); - params_857 = this.expand(params_857); + var scope_863 = (0, _scope.freshScope)("fun"); + var red_864 = new _applyScopeInParamsReducer2.default(scope_863, this.context); + var params_865 = void 0; + if (type_862 !== "Getter" && type_862 !== "Setter") { + params_865 = red_864.transform(term_861.params); + params_865 = this.expand(params_865); } - this.context.currentScope.push(scope_855); - var expander_858 = new _expander2.default(this.context); - var markedBody_859 = void 0, - bodyTerm_860 = void 0; - if (term_853.body instanceof _terms2.default) { - bodyTerm_860 = this.expand(term_853.body.addScope(scope_855, this.context.bindings)); + this.context.currentScope.push(scope_863); + var expander_866 = new _expander2.default(this.context); + var markedBody_867 = void 0, + bodyTerm_868 = void 0; + if (term_861.body instanceof _terms2.default) { + bodyTerm_868 = this.expand(term_861.body.addScope(scope_863, this.context.bindings)); } else { - markedBody_859 = term_853.body.map(function (b_861) { - return b_861.addScope(scope_855, _this17.context.bindings); + markedBody_867 = term_861.body.map(function (b_869) { + return b_869.addScope(scope_863, _this17.context.bindings); }); - bodyTerm_860 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_858.expand(markedBody_859) }); + bodyTerm_868 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_866.expand(markedBody_867) }); } this.context.currentScope.pop(); - if (type_854 === "Getter") { - return new _terms2.default(type_854, { name: this.expand(term_853.name), body: bodyTerm_860 }); - } else if (type_854 === "Setter") { - return new _terms2.default(type_854, { name: this.expand(term_853.name), param: term_853.param, body: bodyTerm_860 }); + if (type_862 === "Getter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), body: bodyTerm_868 }); + } else if (type_862 === "Setter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), param: term_861.param, body: bodyTerm_868 }); } - return new _terms2.default(type_854, { name: term_853.name, isGenerator: term_853.isGenerator, params: params_857, body: bodyTerm_860 }); + return new _terms2.default(type_862, { name: term_861.name, isGenerator: term_861.isGenerator, params: params_865, body: bodyTerm_868 }); } }, { key: "expandMethod", - value: function expandMethod(term_862) { - return this.doFunctionExpansion(term_862, "Method"); + value: function expandMethod(term_870) { + return this.doFunctionExpansion(term_870, "Method"); } }, { key: "expandSetter", - value: function expandSetter(term_863) { - return this.doFunctionExpansion(term_863, "Setter"); + value: function expandSetter(term_871) { + return this.doFunctionExpansion(term_871, "Setter"); } }, { key: "expandGetter", - value: function expandGetter(term_864) { - return this.doFunctionExpansion(term_864, "Getter"); + value: function expandGetter(term_872) { + return this.doFunctionExpansion(term_872, "Getter"); } }, { key: "expandFunctionDeclaration", - value: function expandFunctionDeclaration(term_865) { - return this.doFunctionExpansion(term_865, "FunctionDeclaration"); + value: function expandFunctionDeclaration(term_873) { + return this.doFunctionExpansion(term_873, "FunctionDeclaration"); } }, { key: "expandFunctionExpression", - value: function expandFunctionExpression(term_866) { - return this.doFunctionExpansion(term_866, "FunctionExpression"); + value: function expandFunctionExpression(term_874) { + return this.doFunctionExpansion(term_874, "FunctionExpression"); } }, { key: "expandCompoundAssignmentExpression", - value: function expandCompoundAssignmentExpression(term_867) { - return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_867.binding), operator: term_867.operator, expression: this.expand(term_867.expression) }); + value: function expandCompoundAssignmentExpression(term_875) { + return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_875.binding), operator: term_875.operator, expression: this.expand(term_875.expression) }); } }, { key: "expandAssignmentExpression", - value: function expandAssignmentExpression(term_868) { - return new _terms2.default("AssignmentExpression", { binding: this.expand(term_868.binding), expression: this.expand(term_868.expression) }); + value: function expandAssignmentExpression(term_876) { + return new _terms2.default("AssignmentExpression", { binding: this.expand(term_876.binding), expression: this.expand(term_876.expression) }); } }, { key: "expandEmptyStatement", - value: function expandEmptyStatement(term_869) { - return term_869; + value: function expandEmptyStatement(term_877) { + return term_877; } }, { key: "expandLiteralBooleanExpression", - value: function expandLiteralBooleanExpression(term_870) { - return term_870; + value: function expandLiteralBooleanExpression(term_878) { + return term_878; } }, { key: "expandLiteralNumericExpression", - value: function expandLiteralNumericExpression(term_871) { - return term_871; + value: function expandLiteralNumericExpression(term_879) { + return term_879; } }, { key: "expandLiteralInfinityExpression", - value: function expandLiteralInfinityExpression(term_872) { - return term_872; + value: function expandLiteralInfinityExpression(term_880) { + return term_880; } }, { key: "expandIdentifierExpression", - value: function expandIdentifierExpression(term_873) { - var trans_874 = this.context.env.get(term_873.name.resolve()); - if (trans_874) { - return new _terms2.default("IdentifierExpression", { name: trans_874.id }); + value: function expandIdentifierExpression(term_881) { + var trans_882 = this.context.env.get(term_881.name.resolve()); + if (trans_882) { + return new _terms2.default("IdentifierExpression", { name: trans_882.id }); } - return term_873; + return term_881; } }, { key: "expandLiteralNullExpression", - value: function expandLiteralNullExpression(term_875) { - return term_875; + value: function expandLiteralNullExpression(term_883) { + return term_883; } }, { key: "expandLiteralStringExpression", - value: function expandLiteralStringExpression(term_876) { - return term_876; + value: function expandLiteralStringExpression(term_884) { + return term_884; } }, { key: "expandLiteralRegExpExpression", - value: function expandLiteralRegExpExpression(term_877) { - return term_877; + value: function expandLiteralRegExpExpression(term_885) { + return term_885; } }]); @@ -622,4 +622,4 @@ var TermExpander = function () { }(); exports.default = TermExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzMzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83MzM7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzM0KSB7XG4gICAgbGV0IGZpZWxkXzczNSA9IFwiZXhwYW5kXCIgKyB0ZXJtXzczNC50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83MzVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzczNV0odGVybV83MzQpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzM0LnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzczNikge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzczNi50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzczNi50YWcpLCBlbGVtZW50czogdGVybV83MzYuZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83MzcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzM3LmxhYmVsID8gdGVybV83MzcubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzczOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzM4LmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczOC50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83MzkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzczOS5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczOS5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83NDApIHtcbiAgICByZXR1cm4gdGVybV83NDA7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83NDEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQxLmxhYmVsID8gdGVybV83NDEubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83NDIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Mi5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzQyLnByZURlZmF1bHRDYXNlcy5tYXAoY183NDMgPT4gdGhpcy5leHBhbmQoY183NDMpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc0Mi5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzQyLnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzQ0ID0+IHRoaXMuZXhwYW5kKGNfNzQ0KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzQ1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzQ1Lm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzQ1LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzQ2KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzQ2LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzc0Ni5jYXNlcy5tYXAoY183NDcgPT4gdGhpcy5leHBhbmQoY183NDcpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzQ4KSB7XG4gICAgbGV0IHJlc3RfNzQ5ID0gdGVybV83NDgucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzQ4LnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc0OC5pdGVtcy5tYXAoaV83NTAgPT4gdGhpcy5leHBhbmQoaV83NTApKSwgcmVzdDogcmVzdF83NDl9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NTEpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzUxLCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzUyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NTIuY29uc2VxdWVudC5tYXAoY183NTMgPT4gdGhpcy5leHBhbmQoY183NTMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NTQudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzU0LmNvbnNlcXVlbnQubWFwKGNfNzU1ID0+IHRoaXMuZXhwYW5kKGNfNzU1KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NTYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NTYubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc1Ni5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzU2LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NTcuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc1Ny5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzU4KSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc1OSA9IHRlcm1fNzU4LmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NTguY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzU4LmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzU5LCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzU4LmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc2MCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc2MC5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NjAuYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc2MSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc2MS5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzYyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzYyLmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NjIucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc2Mi5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzYzKSB7XG4gICAgcmV0dXJuIHRlcm1fNzYzO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NjQpIHtcbiAgICByZXR1cm4gdGVybV83NjQ7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NjUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NjUubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzY1LmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NjYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NjYuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzY3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NjcucHJvcGVydGllcy5tYXAodF83NjggPT4gdGhpcy5leHBhbmQodF83NjgpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NjkpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzcwID0gdGVybV83NjkucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OS5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NjkuZWxlbWVudHMubWFwKHRfNzcxID0+IHRfNzcxID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NzEpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83NzB9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83NzIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzcyLmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc3Mi5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzczKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzczLm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83NzMubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzc0KSB7XG4gICAgbGV0IGluaXRfNzc1ID0gdGVybV83NzQuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzc0LmluaXQpO1xuICAgIGxldCB0ZXN0Xzc3NiA9IHRlcm1fNzc0LnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3NC50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc3NyA9IHRlcm1fNzc0LnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzc0LnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzc4ID0gdGhpcy5leHBhbmQodGVybV83NzQuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc3NSwgdGVzdDogdGVzdF83NzYsIHVwZGF0ZTogdXBkYXRlXzc3NywgYm9keTogYm9keV83Nzh9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83NzkpIHtcbiAgICBsZXQgZXhwcl83ODAgPSB0ZXJtXzc3OS5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NzkuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc4MH0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc4MSkge1xuICAgIGxldCBleHByXzc4MiA9IHRlcm1fNzgxLmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4MS5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzgyfSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83ODMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83ODMudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzgzLmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83ODQpIHtcbiAgICBsZXQgY29uc2VxdWVudF83ODUgPSB0ZXJtXzc4NC5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODQuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83ODYgPSB0ZXJtXzc4NC5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4NC5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc4NC50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83ODUsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc4Nn0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzg3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Ny5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc4OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc4OC5zdGF0ZW1lbnRzLm1hcChzXzc4OSA9PiB0aGlzLmV4cGFuZChzXzc4OSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83OTApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83OTAuZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzkxKSB7XG4gICAgaWYgKHRlcm1fNzkxLmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzkxO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzkxLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzc5Mikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fNzkyLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi5uYW1lKSwgc3VwZXI6IHRlcm1fNzkyLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTIuc3VwZXIpLCBlbGVtZW50czogdGVybV83OTIuZWxlbWVudHMubWFwKGVsXzc5MyA9PiB0aGlzLmV4cGFuZChlbF83OTMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV83OTQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fNzk0Lm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5NC5uYW1lKSwgc3VwZXI6IHRlcm1fNzk0LnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTQuc3VwZXIpLCBlbGVtZW50czogdGVybV83OTQuZWxlbWVudHMubWFwKGVsXzc5NSA9PiB0aGlzLmV4cGFuZChlbF83OTUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV83OTYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzc5Ni5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Ni5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV83OTcpIHtcbiAgICByZXR1cm4gdGVybV83OTc7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV83OTgpIHtcbiAgICBsZXQgZXhwYW5kZXJfNzk5ID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfODAwID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fNzk4LnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfODAxID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzgwMC50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfODAyID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzgwMyA9IHJfODAwLmludGVycC5tYXAoaV84MDUgPT4ge1xuICAgICAgbGV0IGVuZl84MDYgPSBuZXcgRW5mb3Jlc3RlcihpXzgwNSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl84MDYuZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc184MDQgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfODAxfSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfODAzKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODAyLCBhcmd1bWVudHM6IGFyZ3NfODA0fSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV84MDcpIHtcbiAgICBsZXQgc3RyXzgwOCA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fODA3Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzgwNy50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzgwNy50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MDgpLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODA5Lm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgwOS5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgxMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODEwLmVsZW1lbnRzLm1hcCh0XzgxMSA9PiB0XzgxMSA9PSBudWxsID8gdF84MTEgOiB0aGlzLmV4cGFuZCh0XzgxMSkpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODEyKSB7XG4gICAgcmV0dXJuIHRlcm1fODEyO1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgxMykge1xuICAgIHJldHVybiB0ZXJtXzgxMztcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MTQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgxNC5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODE1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MTUuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODE2KSB7XG4gICAgcmV0dXJuIHRlcm1fODE2O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MTcpIHtcbiAgICByZXR1cm4gdGVybV84MTc7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODE4KSB7XG4gICAgcmV0dXJuIHRlcm1fODE4O1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgxOSkge1xuICAgIHJldHVybiB0ZXJtXzgxOTtcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MjApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODIwLm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMC5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MjEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgyMS5wcm9wZXJ0aWVzLm1hcCh0XzgyMiA9PiB0aGlzLmV4cGFuZCh0XzgyMikpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODIzKSB7XG4gICAgbGV0IGluaXRfODI0ID0gdGVybV84MjMuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODIzLmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MjMuYmluZGluZyksIGluaXQ6IGluaXRfODI0fSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgyNSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODI1LmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgyNS5kZWNsYXJhdG9ycy5tYXAoZF84MjYgPT4gdGhpcy5leHBhbmQoZF84MjYpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODI3KSB7XG4gICAgaWYgKHRlcm1fODI3LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgyOCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODI3LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MjkgPSBlbmZfODI4LnBlZWsoKTtcbiAgICBsZXQgdF84MzAgPSBlbmZfODI4LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgzMCA9PSBudWxsIHx8IGVuZl84MjgucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgyOC5jcmVhdGVFcnJvcihsb29rYWhlYWRfODI5LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MzApO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgzMSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODMxLm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgzMS5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84MzIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84MzIuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzgzMi5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84MzIub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODMzKSB7XG4gICAgbGV0IGxlZnRfODM0ID0gdGhpcy5leHBhbmQodGVybV84MzMubGVmdCk7XG4gICAgbGV0IHJpZ2h0XzgzNSA9IHRoaXMuZXhwYW5kKHRlcm1fODMzLnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0XzgzNCwgb3BlcmF0b3I6IHRlcm1fODMzLm9wZXJhdG9yLCByaWdodDogcmlnaHRfODM1fSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODM2KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzgzNi50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84MzYuY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84MzYuYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84MzcpIHtcbiAgICByZXR1cm4gdGVybV84Mzc7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzgzOCkge1xuICAgIGxldCBjYWxsZWVfODM5ID0gdGhpcy5leHBhbmQodGVybV84MzguY2FsbGVlKTtcbiAgICBsZXQgZW5mXzg0MCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODM4LmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzg0MSA9IGVuZl84NDAuZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzg0MiA9PiB0aGlzLmV4cGFuZChhcmdfODQyKSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODM5LCBhcmd1bWVudHM6IGFyZ3NfODQxLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODQzKSB7XG4gICAgcmV0dXJuIHRlcm1fODQzO1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODQ0KSB7XG4gICAgbGV0IGNhbGxlZV84NDUgPSB0aGlzLmV4cGFuZCh0ZXJtXzg0NC5jYWxsZWUpO1xuICAgIGxldCBlbmZfODQ2ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84NDQuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODQ3ID0gZW5mXzg0Ni5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODQ4ID0+IHRoaXMuZXhwYW5kKGFyZ184NDgpKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODQ1LCBhcmd1bWVudHM6IGFyZ3NfODQ3fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg0OSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODQ5LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg1MCkge1xuICAgIGxldCBjaGlsZF84NTEgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1MC5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NTF9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODUyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODUyLmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg1Mi5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NTMsIHR5cGVfODU0KSB7XG4gICAgbGV0IHNjb3BlXzg1NSA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NTYgPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NTUsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NTc7XG4gICAgaWYgKHR5cGVfODU0ICE9PSBcIkdldHRlclwiICYmIHR5cGVfODU0ICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODU3ID0gcmVkXzg1Ni50cmFuc2Zvcm0odGVybV84NTMucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NTcgPSB0aGlzLmV4cGFuZChwYXJhbXNfODU3KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg1NSk7XG4gICAgbGV0IGV4cGFuZGVyXzg1OCA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg1OSwgYm9keVRlcm1fODYwO1xuICAgIGlmICh0ZXJtXzg1My5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODYwID0gdGhpcy5leHBhbmQodGVybV84NTMuYm9keS5hZGRTY29wZShzY29wZV84NTUsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg1OSA9IHRlcm1fODUzLmJvZHkubWFwKGJfODYxID0+IGJfODYxLmFkZFNjb3BlKHNjb3BlXzg1NSwgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NjAgPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NTguZXhwYW5kKG1hcmtlZEJvZHlfODU5KX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg1NCA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODU0LCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NTMubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg2MH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NTQgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg1NCwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODUzLm5hbWUpLCBwYXJhbTogdGVybV84NTMucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg2MH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NTQsIHtuYW1lOiB0ZXJtXzg1My5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NTMuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg1NywgYm9keTogYm9keVRlcm1fODYwfSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODYyKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2MiwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODYzKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2MywgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODY0KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2NCwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg2NSkge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NjUsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NjYpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODY2LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODY3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NjcuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg2Ny5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NjcuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg2OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg2OC5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NjguZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg2OSkge1xuICAgIHJldHVybiB0ZXJtXzg2OTtcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NzApIHtcbiAgICByZXR1cm4gdGVybV84NzA7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODcxKSB7XG4gICAgcmV0dXJuIHRlcm1fODcxO1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84NzIpIHtcbiAgICByZXR1cm4gdGVybV84NzI7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84NzMpIHtcbiAgICBsZXQgdHJhbnNfODc0ID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84NzMubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184NzQpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184NzQuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODczO1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg3NSkge1xuICAgIHJldHVybiB0ZXJtXzg3NTtcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg3Nikge1xuICAgIHJldHVybiB0ZXJtXzg3NjtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg3Nykge1xuICAgIHJldHVybiB0ZXJtXzg3NztcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzQxKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83NDE7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzQyKSB7XG4gICAgbGV0IGZpZWxkXzc0MyA9IFwiZXhwYW5kXCIgKyB0ZXJtXzc0Mi50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83NDNdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzc0M10odGVybV83NDIpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzQyLnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzc0NCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzc0NC50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc0NC50YWcpLCBlbGVtZW50czogdGVybV83NDQuZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83NDUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ1LmxhYmVsID8gdGVybV83NDUubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzc0Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzQ2LmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ni50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83NDcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83NDgpIHtcbiAgICByZXR1cm4gdGVybV83NDg7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83NDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ5LmxhYmVsID8gdGVybV83NDkubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83NTApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnByZURlZmF1bHRDYXNlcy5tYXAoY183NTEgPT4gdGhpcy5leHBhbmQoY183NTEpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzUyID0+IHRoaXMuZXhwYW5kKGNfNzUyKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzUzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzUzLm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzUzLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzU0LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzc1NC5jYXNlcy5tYXAoY183NTUgPT4gdGhpcy5leHBhbmQoY183NTUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzU2KSB7XG4gICAgbGV0IHJlc3RfNzU3ID0gdGVybV83NTYucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzU2LnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc1Ni5pdGVtcy5tYXAoaV83NTggPT4gdGhpcy5leHBhbmQoaV83NTgpKSwgcmVzdDogcmVzdF83NTd9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NTkpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzU5LCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NjAuY29uc2VxdWVudC5tYXAoY183NjEgPT4gdGhpcy5leHBhbmQoY183NjEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzYyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NjIudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzYyLmNvbnNlcXVlbnQubWFwKGNfNzYzID0+IHRoaXMuZXhwYW5kKGNfNzYzKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NjQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NjQubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc2NC5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY0LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NjUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NjUuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc2NS5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzY2KSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc2NyA9IHRlcm1fNzY2LmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NjYuY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzY3LCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc2OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OC5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NjguYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc2OSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OS5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzcwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzcwLmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NzAucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc3MC5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzcxKSB7XG4gICAgcmV0dXJuIHRlcm1fNzcxO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NzIpIHtcbiAgICByZXR1cm4gdGVybV83NzI7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NzMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NzMubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzczLmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NzQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NzQuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NzUucHJvcGVydGllcy5tYXAodF83NzYgPT4gdGhpcy5leHBhbmQodF83NzYpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NzcpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzc4ID0gdGVybV83NzcucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3Ny5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NzcuZWxlbWVudHMubWFwKHRfNzc5ID0+IHRfNzc5ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NzkpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83Nzh9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83ODApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzgwLmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc4MC5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzgxKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzgxLm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83ODEubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzgyKSB7XG4gICAgbGV0IGluaXRfNzgzID0gdGVybV83ODIuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLmluaXQpO1xuICAgIGxldCB0ZXN0Xzc4NCA9IHRlcm1fNzgyLnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Mi50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc4NSA9IHRlcm1fNzgyLnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzg2ID0gdGhpcy5leHBhbmQodGVybV83ODIuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc4MywgdGVzdDogdGVzdF83ODQsIHVwZGF0ZTogdXBkYXRlXzc4NSwgYm9keTogYm9keV83ODZ9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83ODcpIHtcbiAgICBsZXQgZXhwcl83ODggPSB0ZXJtXzc4Ny5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODcuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc4OH0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc4OSkge1xuICAgIGxldCBleHByXzc5MCA9IHRlcm1fNzg5LmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4OS5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzkwfSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83OTEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83OTEudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzkxLmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83OTIpIHtcbiAgICBsZXQgY29uc2VxdWVudF83OTMgPSB0ZXJtXzc5Mi5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTIuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83OTQgPSB0ZXJtXzc5Mi5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83OTMsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc5NH0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzk1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc5NS5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc5Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc5Ni5zdGF0ZW1lbnRzLm1hcChzXzc5NyA9PiB0aGlzLmV4cGFuZChzXzc5NykpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83OTgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83OTguZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzk5KSB7XG4gICAgaWYgKHRlcm1fNzk5LmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzk5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzk5LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzgwMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fODAwLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMC5uYW1lKSwgc3VwZXI6IHRlcm1fODAwLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDAuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDAuZWxlbWVudHMubWFwKGVsXzgwMSA9PiB0aGlzLmV4cGFuZChlbF84MDEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV84MDIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fODAyLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMi5uYW1lKSwgc3VwZXI6IHRlcm1fODAyLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDIuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDIuZWxlbWVudHMubWFwKGVsXzgwMyA9PiB0aGlzLmV4cGFuZChlbF84MDMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV84MDQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzgwNC5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzgwNC5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV84MDUpIHtcbiAgICByZXR1cm4gdGVybV84MDU7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV84MDYpIHtcbiAgICBsZXQgZXhwYW5kZXJfODA3ID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfODA4ID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fODA2LnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfODA5ID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzgwOC50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfODEwID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzgxMSA9IHJfODA4LmludGVycC5tYXAoaV84MTMgPT4ge1xuICAgICAgbGV0IGVuZl84MTQgPSBuZXcgRW5mb3Jlc3RlcihpXzgxMywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl84MTQuZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc184MTIgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfODA5fSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfODExKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODEwLCBhcmd1bWVudHM6IGFyZ3NfODEyfSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV84MTUpIHtcbiAgICBsZXQgc3RyXzgxNiA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fODE1Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzgxNS50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzgxNS50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MTYpLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODE3Lm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgxNy5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgxOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODE4LmVsZW1lbnRzLm1hcCh0XzgxOSA9PiB0XzgxOSA9PSBudWxsID8gdF84MTkgOiB0aGlzLmV4cGFuZCh0XzgxOSkpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODIwKSB7XG4gICAgcmV0dXJuIHRlcm1fODIwO1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgyMSkge1xuICAgIHJldHVybiB0ZXJtXzgyMTtcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MjIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMi5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODIzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MjMuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODI0KSB7XG4gICAgcmV0dXJuIHRlcm1fODI0O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MjUpIHtcbiAgICByZXR1cm4gdGVybV84MjU7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODI2KSB7XG4gICAgcmV0dXJuIHRlcm1fODI2O1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgyNykge1xuICAgIHJldHVybiB0ZXJtXzgyNztcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MjgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODI4Lm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyOC5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MjkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgyOS5wcm9wZXJ0aWVzLm1hcCh0XzgzMCA9PiB0aGlzLmV4cGFuZCh0XzgzMCkpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODMxKSB7XG4gICAgbGV0IGluaXRfODMyID0gdGVybV84MzEuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODMxLmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MzEuYmluZGluZyksIGluaXQ6IGluaXRfODMyfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgzMykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODMzLmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgzMy5kZWNsYXJhdG9ycy5tYXAoZF84MzQgPT4gdGhpcy5leHBhbmQoZF84MzQpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODM1KSB7XG4gICAgaWYgKHRlcm1fODM1LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgzNiA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODM1LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MzcgPSBlbmZfODM2LnBlZWsoKTtcbiAgICBsZXQgdF84MzggPSBlbmZfODM2LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgzOCA9PSBudWxsIHx8IGVuZl84MzYucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgzNi5jcmVhdGVFcnJvcihsb29rYWhlYWRfODM3LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MzgpO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgzOSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODM5Lm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgzOS5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84NDApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84NDAuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzg0MC5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84NDAub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODQxKSB7XG4gICAgbGV0IGxlZnRfODQyID0gdGhpcy5leHBhbmQodGVybV84NDEubGVmdCk7XG4gICAgbGV0IHJpZ2h0Xzg0MyA9IHRoaXMuZXhwYW5kKHRlcm1fODQxLnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0Xzg0Miwgb3BlcmF0b3I6IHRlcm1fODQxLm9wZXJhdG9yLCByaWdodDogcmlnaHRfODQzfSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODQ0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzg0NC50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84NDQuY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84NDQuYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84NDUpIHtcbiAgICByZXR1cm4gdGVybV84NDU7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzg0Nikge1xuICAgIGxldCBjYWxsZWVfODQ3ID0gdGhpcy5leHBhbmQodGVybV84NDYuY2FsbGVlKTtcbiAgICBsZXQgZW5mXzg0OCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODQ2LmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzg0OSA9IGVuZl84NDguZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzg1MCA9PiB0aGlzLmV4cGFuZChhcmdfODUwKSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODQ3LCBhcmd1bWVudHM6IGFyZ3NfODQ5LnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODUxKSB7XG4gICAgcmV0dXJuIHRlcm1fODUxO1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODUyKSB7XG4gICAgbGV0IGNhbGxlZV84NTMgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1Mi5jYWxsZWUpO1xuICAgIGxldCBlbmZfODU0ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84NTIuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODU1ID0gZW5mXzg1NC5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODU2ID0+IHRoaXMuZXhwYW5kKGFyZ184NTYpKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODUzLCBhcmd1bWVudHM6IGFyZ3NfODU1fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg1Nykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODU3LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg1OCkge1xuICAgIGxldCBjaGlsZF84NTkgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1OC5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NTl9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODYwLmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg2MC5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NjEsIHR5cGVfODYyKSB7XG4gICAgbGV0IHNjb3BlXzg2MyA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NjQgPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NjMsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NjU7XG4gICAgaWYgKHR5cGVfODYyICE9PSBcIkdldHRlclwiICYmIHR5cGVfODYyICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODY1ID0gcmVkXzg2NC50cmFuc2Zvcm0odGVybV84NjEucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NjUgPSB0aGlzLmV4cGFuZChwYXJhbXNfODY1KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg2Myk7XG4gICAgbGV0IGV4cGFuZGVyXzg2NiA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg2NywgYm9keVRlcm1fODY4O1xuICAgIGlmICh0ZXJtXzg2MS5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODY4ID0gdGhpcy5leHBhbmQodGVybV84NjEuYm9keS5hZGRTY29wZShzY29wZV84NjMsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg2NyA9IHRlcm1fODYxLmJvZHkubWFwKGJfODY5ID0+IGJfODY5LmFkZFNjb3BlKHNjb3BlXzg2MywgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NjggPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NjYuZXhwYW5kKG1hcmtlZEJvZHlfODY3KX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg2MiA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODYyLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NjEubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NjIgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg2Miwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODYxLm5hbWUpLCBwYXJhbTogdGVybV84NjEucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NjIsIHtuYW1lOiB0ZXJtXzg2MS5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NjEuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg2NSwgYm9keTogYm9keVRlcm1fODY4fSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODcwKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MCwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODcxKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MSwgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODcyKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MiwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg3Mykge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NzMsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NzQpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODc0LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NzUuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg3NS5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzUuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg3Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg3Ni5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzYuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg3Nykge1xuICAgIHJldHVybiB0ZXJtXzg3NztcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NzgpIHtcbiAgICByZXR1cm4gdGVybV84Nzg7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODc5KSB7XG4gICAgcmV0dXJuIHRlcm1fODc5O1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84ODApIHtcbiAgICByZXR1cm4gdGVybV84ODA7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84ODEpIHtcbiAgICBsZXQgdHJhbnNfODgyID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84ODEubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184ODIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184ODIuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODgxO1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg4Mykge1xuICAgIHJldHVybiB0ZXJtXzg4MztcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg4NCkge1xuICAgIHJldHVybiB0ZXJtXzg4NDtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg4NSkge1xuICAgIHJldHVybiB0ZXJtXzg4NTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/terms.js b/dist/terms.js index 0555987c..2458c9de 100644 --- a/dist/terms.js +++ b/dist/terms.js @@ -30,20 +30,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Term = function () { - function Term(type_879, props_880) { + function Term(type_887, props_888) { _classCallCheck(this, Term); - this.type = type_879; + this.type = type_887; this.loc = null; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = Object.keys(props_880)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = Object.keys(props_888)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var prop = _step.value; - this[prop] = props_880[prop]; + this[prop] = props_888[prop]; } } catch (err) { _didIteratorError = true; @@ -63,26 +63,26 @@ var Term = function () { _createClass(Term, [{ key: "addScope", - value: function addScope(scope_881, bindings_882, options_883) { - var next_884 = {}; + value: function addScope(scope_889, bindings_890, options_891) { + var next_892 = {}; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { - for (var _iterator2 = fieldsIn_878(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + for (var _iterator2 = fieldsIn_886(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var field = _step2.value; if (this[field] == null) { - next_884[field] = null; + next_892[field] = null; } else if (typeof this[field].addScope === "function") { - next_884[field] = this[field].addScope(scope_881, bindings_882, options_883); + next_892[field] = this[field].addScope(scope_889, bindings_890, options_891); } else if (_immutable.List.isList(this[field])) { - next_884[field] = this[field].map(function (f_885) { - return f_885.addScope(scope_881, bindings_882, options_883); + next_892[field] = this[field].map(function (f_893) { + return f_893.addScope(scope_889, bindings_890, options_891); }); } else { - next_884[field] = this[field]; + next_892[field] = this[field]; } } } catch (err) { @@ -100,7 +100,7 @@ var Term = function () { } } - return new Term(this.type, next_884); + return new Term(this.type, next_892); } }, { key: "lineNumber", @@ -110,7 +110,7 @@ var Term = function () { var _iteratorError3 = undefined; try { - for (var _iterator3 = fieldsIn_878(this)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + for (var _iterator3 = fieldsIn_886(this)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var field = _step3.value; if (_typeof(this[field]) && this[field].lineNumber === "function") { @@ -134,26 +134,26 @@ var Term = function () { } }, { key: "setLineNumber", - value: function setLineNumber(line_886) { - var next_887 = {}; + value: function setLineNumber(line_894) { + var next_895 = {}; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { - for (var _iterator4 = fieldsIn_878(this)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + for (var _iterator4 = fieldsIn_886(this)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var field = _step4.value; if (this[field] == null) { - next_887[field] = null; + next_895[field] = null; } else if (typeof this[field].setLineNumber === "function") { - next_887[field] = this[field].setLineNumber(line_886); + next_895[field] = this[field].setLineNumber(line_894); } else if (_immutable.List.isList(this[field])) { - next_887[field] = this[field].map(function (f_888) { - return f_888.setLineNumber(line_886); + next_895[field] = this[field].map(function (f_896) { + return f_896.setLineNumber(line_894); }); } else { - next_887[field] = this[field]; + next_895[field] = this[field]; } } } catch (err) { @@ -171,7 +171,7 @@ var Term = function () { } } - return new Term(this.type, next_887); + return new Term(this.type, next_895); } }]); @@ -365,7 +365,7 @@ var isFunctionWithName = exports.isFunctionWithName = R.and(isFunctionTerm, R.co ; var isParenthesizedExpression = exports.isParenthesizedExpression = R.whereEq({ type: "ParenthesizedExpression" }); ; -var fieldsIn_878 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_889) { - return (0, _errors.assert)(false, "Missing case in fields: " + type_889.type); +var fieldsIn_886 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_897) { + return (0, _errors.assert)(false, "Missing case in fields: " + type_897.type); }]]); -//# sourceMappingURL=data:application/json;base64,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QSxDQUFOLENBQXAzSixDQUFQLENBQXJCIiwiZmlsZSI6InRlcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2Fzc2VydCwgZXhwZWN0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7bWl4aW59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0ICAqIGFzIFIgZnJvbSBcInJhbWRhXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtIHtcbiAgY29uc3RydWN0b3IodHlwZV84NzksIHByb3BzXzg4MCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGVfODc5O1xuICAgIHRoaXMubG9jID0gbnVsbDtcbiAgICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKHByb3BzXzg4MCkpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBwcm9wc184ODBbcHJvcF07XG4gICAgfVxuICB9XG4gIGFkZFNjb3BlKHNjb3BlXzg4MSwgYmluZGluZ3NfODgyLCBvcHRpb25zXzg4Mykge1xuICAgIGxldCBuZXh0Xzg4NCA9IHt9O1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0luXzg3OCh0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbZmllbGRdID09IG51bGwpIHtcbiAgICAgICAgbmV4dF84ODRbZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXNbZmllbGRdLmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84ODRbZmllbGRdID0gdGhpc1tmaWVsZF0uYWRkU2NvcGUoc2NvcGVfODgxLCBiaW5kaW5nc184ODIsIG9wdGlvbnNfODgzKTtcbiAgICAgIH0gZWxzZSBpZiAoTGlzdC5pc0xpc3QodGhpc1tmaWVsZF0pKSB7XG4gICAgICAgIG5leHRfODg0W2ZpZWxkXSA9IHRoaXNbZmllbGRdLm1hcChmXzg4NSA9PiBmXzg4NS5hZGRTY29wZShzY29wZV84ODEsIGJpbmRpbmdzXzg4Miwgb3B0aW9uc184ODMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRfODg0W2ZpZWxkXSA9IHRoaXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odGhpcy50eXBlLCBuZXh0Xzg4NCk7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84NzgodGhpcykpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF0gJiYgdGhpc1tmaWVsZF0ubGluZU51bWJlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2ZpZWxkXS5saW5lTnVtYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldExpbmVOdW1iZXIobGluZV84ODYpIHtcbiAgICBsZXQgbmV4dF84ODcgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84NzgodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODg3W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84ODdbZmllbGRdID0gdGhpc1tmaWVsZF0uc2V0TGluZU51bWJlcihsaW5lXzg4Nik7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg4N1tmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84ODggPT4gZl84ODguc2V0TGluZU51bWJlcihsaW5lXzg4NikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dF84ODdbZmllbGRdID0gdGhpc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0aGlzLnR5cGUsIG5leHRfODg3KTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1dpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdXaXRoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nSWRlbnRpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nSWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0QmluZGluZ1wifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1Byb3BlcnR5UHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0VsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01vZHVsZSA9IFIud2hlcmVFcSh7dHlwZTogXCJNb2R1bGVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnROYW1lc3BhY2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0TmFtZXNwYWNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0QWxsRnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRBbGxGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydEZyb20gPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RnJvbVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRTcGVjaWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0U3BlY2lmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01ldGhvZCA9IFIud2hlcmVFcSh7dHlwZTogXCJNZXRob2RcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzR2V0dGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkdldHRlclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RhdGFQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJEYXRhUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2hvcnRoYW5kUHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2hvcnRoYW5kUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3RhdGljUHJvcGVydHlOYW1lID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY1Byb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXJyYXlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFycmF5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJvd0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyb3dFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDYWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDYWxsRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb25kaXRpb25hbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSWRlbnRpZmllckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc05ld1RhcmdldEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNPYmplY3RFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVW5hcnlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVuYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUaGlzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJUaGlzRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVcGRhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVwZGF0ZUV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzWWllbGRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIllpZWxkRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JyZWFrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJyZWFrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbnRpbnVlU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2VyU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRlYnVnZ2VyU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RvV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRG9XaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFbXB0eVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJFbXB0eVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHByZXNzaW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ySW5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9ySW5TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yT2ZTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yT2ZTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvclN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJJZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMYWJlbGVkU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkxhYmVsZWRTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlJldHVyblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1Rocm93U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRocm93U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUNhdGNoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRyeUNhdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUZpbmFsbHlTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5RmluYWxseVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiV2hpbGVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2l0aFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaXRoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhdGNoQ2xhdXNlID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhdGNoQ2xhdXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RpcmVjdGl2ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJEaXJlY3RpdmVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ybWFsUGFyYW1ldGVycyA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JtYWxQYXJhbWV0ZXJzXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uQm9keSA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkJvZHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25EZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NjcmlwdCA9IFIud2hlcmVFcSh7dHlwZTogXCJTY3JpcHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ByZWFkRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTcHJlYWRFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N1cGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIlN1cGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaENhc2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoQ2FzZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRWxlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhUZW1wbGF0ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTeW50YXhUZW1wbGF0ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFibGVEZWNsYXJhdG9yID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFT0YgPSBSLndoZXJlRXEoe3R5cGU6IFwiRU9GXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheERlY2xhcmF0aW9uID0gUi5ib3RoKGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi53aGVyZUVxKHtraW5kOiBcInN5bnRheFwifSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4cmVjRGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4cmVjXCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvblRlcm0gPSBSLmVpdGhlcihpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uV2l0aE5hbWUgPSBSLmFuZChpc0Z1bmN0aW9uVGVybSwgUi5jb21wbGVtZW50KFIud2hlcmUoe25hbWU6IFIuaXNOaWx9KSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIn0pO1xuO1xuY29uc3QgZmllbGRzSW5fODc4ID0gUi5jb25kKFtbaXNCaW5kaW5nV2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nSWRlbnRpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIikpXSwgW2lzQXJyYXlCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIiwgXCJyZXN0RWxlbWVudFwiKSldLCBbaXNPYmplY3RCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmluZGluZ1wiLCBcImluaXRcIikpXSwgW2lzQmluZGluZ1Byb3BlcnR5UHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNDbGFzc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0RlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcInN1cGVyXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzQ2xhc3NFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXNTdGF0aWNcIiwgXCJtZXRob2RcIikpXSwgW2lzTW9kdWxlLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcIml0ZW1zXCIpKV0sIFtpc0ltcG9ydCwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZWRJbXBvcnRzXCIpKV0sIFtpc0ltcG9ydE5hbWVzcGFjZSwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZXNwYWNlQmluZGluZ1wiKSldLCBbaXNJbXBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNFeHBvcnRBbGxGcm9tLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIpKV0sIFtpc0V4cG9ydEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lZEV4cG9ydHNcIiwgXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGVjbGFyYXRpb25cIikpXSwgW2lzRXhwb3J0RGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIikpXSwgW2lzRXhwb3J0U3BlY2lmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cG9ydGVkTmFtZVwiKSldLCBbaXNNZXRob2QsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIikpXSwgW2lzR2V0dGVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNTZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwicGFyYW1cIikpXSwgW2lzRGF0YVByb3BlcnR5LCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzU2hvcnRoYW5kUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N0YXRpY1Byb3BlcnR5TmFtZSwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ2YWx1ZVwiKSldLCBbaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhdHRlcm5cIiwgXCJmbGFnc1wiKSldLCBbaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0FycmF5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImVsZW1lbnRzXCIpKV0sIFtpc0Fycm93RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzQXNzaWdubWVudEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNCaW5hcnlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIikpXSwgW2lzQ2FsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwiYmluZGluZ1wiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb25kaXRpb25hbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZXN0XCIsIFwiY29uc2VxdWVudFwiLCBcImFsdGVybmF0ZVwiKSldLCBbaXNGdW5jdGlvbkV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc0lkZW50aWZpZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNOZXdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiY2FsbGVlXCIsIFwiYXJndW1lbnRzXCIpKV0sIFtpc05ld1RhcmdldEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNPYmplY3RFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNVbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcIm9wZXJhbmRcIikpXSwgW2lzU3RhdGljTWVtYmVyRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9iamVjdFwiLCBcInByb3BlcnR5XCIpKV0sIFtpc1RlbXBsYXRlRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRhZ1wiLCBcImVsZW1lbnRzXCIpKV0sIFtpc1RoaXNFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzWWllbGRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc0Jsb2NrU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmxvY2tcIikpXSwgW2lzQnJlYWtTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsYWJlbFwiKSldLCBbaXNDb250aW51ZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0RlYnVnZ2VyU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRG9XaGlsZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJib2R5XCIpKV0sIFtpc0VtcHR5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRXhwcmVzc2lvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzRm9ySW5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0Zvck9mU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm9keVwiKSldLCBbaXNGb3JTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpbml0XCIsIFwidGVzdFwiLCBcInVwZGF0ZVwiLCBcImJvZHlcIikpXSwgW2lzTGFiZWxlZFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIsIFwiYm9keVwiKSldLCBbaXNSZXR1cm5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlzY3JpbWluYW50XCIsIFwicHJlRGVmYXVsdENhc2VzXCIsIFwiZGVmYXVsdENhc2VcIiwgXCJwb3N0RGVmYXVsdENhc2VzXCIpKV0sIFtpc1Rocm93U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNUcnlDYXRjaFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJjYXRjaENsYXVzZVwiKSldLCBbaXNUcnlGaW5hbGx5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIsIFwiZmluYWxpemVyXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNXaXRoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiYm9keVwiKSldLCBbaXNCbG9jaywgUi5hbHdheXMoTGlzdC5vZihcInN0YXRlbWVudHNcIikpXSwgW2lzQ2F0Y2hDbGF1c2UsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiYm9keVwiKSldLCBbaXNEaXJlY3RpdmUsIFIuYWx3YXlzKExpc3Qub2YoXCJyYXdWYWx1ZVwiKSldLCBbaXNGb3JtYWxQYXJhbWV0ZXJzLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXRlbXNcIiwgXCJyZXN0XCIpKV0sIFtpc0Z1bmN0aW9uQm9keSwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc1NjcmlwdCwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc1NwcmVhZEVsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N1cGVyLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzU3dpdGNoQ2FzZSwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIpKV0sIFtpc1N3aXRjaERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJjb25zZXF1ZW50XCIpKV0sIFtpc1RlbXBsYXRlRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc1N5bnRheFRlbXBsYXRlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVtcGxhdGVcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcImtpbmRcIiwgXCJkZWNsYXJhdG9yc1wiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0b3IsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImlubmVyXCIpKV0sIFtSLlQsIHR5cGVfODg5ID0+IGFzc2VydChmYWxzZSwgXCJNaXNzaW5nIGNhc2UgaW4gZmllbGRzOiBcIiArIHR5cGVfODg5LnR5cGUpXV0pO1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QSxDQUFOLENBQXAzSixDQUFQLENBQXJCIiwiZmlsZSI6InRlcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2Fzc2VydCwgZXhwZWN0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7bWl4aW59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0ICAqIGFzIFIgZnJvbSBcInJhbWRhXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtIHtcbiAgY29uc3RydWN0b3IodHlwZV84ODcsIHByb3BzXzg4OCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGVfODg3O1xuICAgIHRoaXMubG9jID0gbnVsbDtcbiAgICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKHByb3BzXzg4OCkpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBwcm9wc184ODhbcHJvcF07XG4gICAgfVxuICB9XG4gIGFkZFNjb3BlKHNjb3BlXzg4OSwgYmluZGluZ3NfODkwLCBvcHRpb25zXzg5MSkge1xuICAgIGxldCBuZXh0Xzg5MiA9IHt9O1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0luXzg4Nih0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbZmllbGRdID09IG51bGwpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXNbZmllbGRdLmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gdGhpc1tmaWVsZF0uYWRkU2NvcGUoc2NvcGVfODg5LCBiaW5kaW5nc184OTAsIG9wdGlvbnNfODkxKTtcbiAgICAgIH0gZWxzZSBpZiAoTGlzdC5pc0xpc3QodGhpc1tmaWVsZF0pKSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdLm1hcChmXzg5MyA9PiBmXzg5My5hZGRTY29wZShzY29wZV84ODksIGJpbmRpbmdzXzg5MCwgb3B0aW9uc184OTEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odGhpcy50eXBlLCBuZXh0Xzg5Mik7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF0gJiYgdGhpc1tmaWVsZF0ubGluZU51bWJlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2ZpZWxkXS5saW5lTnVtYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldExpbmVOdW1iZXIobGluZV84OTQpIHtcbiAgICBsZXQgbmV4dF84OTUgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODk1W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF0uc2V0TGluZU51bWJlcihsaW5lXzg5NCk7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg5NVtmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84OTYgPT4gZl84OTYuc2V0TGluZU51bWJlcihsaW5lXzg5NCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0aGlzLnR5cGUsIG5leHRfODk1KTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1dpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdXaXRoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nSWRlbnRpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nSWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0QmluZGluZ1wifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1Byb3BlcnR5UHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0VsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01vZHVsZSA9IFIud2hlcmVFcSh7dHlwZTogXCJNb2R1bGVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnROYW1lc3BhY2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0TmFtZXNwYWNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0QWxsRnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRBbGxGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydEZyb20gPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RnJvbVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRTcGVjaWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0U3BlY2lmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01ldGhvZCA9IFIud2hlcmVFcSh7dHlwZTogXCJNZXRob2RcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzR2V0dGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkdldHRlclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RhdGFQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJEYXRhUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2hvcnRoYW5kUHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2hvcnRoYW5kUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3RhdGljUHJvcGVydHlOYW1lID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY1Byb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXJyYXlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFycmF5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJvd0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyb3dFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDYWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDYWxsRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb25kaXRpb25hbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSWRlbnRpZmllckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc05ld1RhcmdldEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNPYmplY3RFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVW5hcnlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVuYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUaGlzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJUaGlzRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVcGRhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVwZGF0ZUV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzWWllbGRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIllpZWxkRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JyZWFrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJyZWFrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbnRpbnVlU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2VyU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRlYnVnZ2VyU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RvV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRG9XaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFbXB0eVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJFbXB0eVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHByZXNzaW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ySW5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9ySW5TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yT2ZTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yT2ZTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvclN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJJZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMYWJlbGVkU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkxhYmVsZWRTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlJldHVyblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1Rocm93U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRocm93U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUNhdGNoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRyeUNhdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUZpbmFsbHlTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5RmluYWxseVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiV2hpbGVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2l0aFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaXRoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhdGNoQ2xhdXNlID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhdGNoQ2xhdXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RpcmVjdGl2ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJEaXJlY3RpdmVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ybWFsUGFyYW1ldGVycyA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JtYWxQYXJhbWV0ZXJzXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uQm9keSA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkJvZHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25EZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NjcmlwdCA9IFIud2hlcmVFcSh7dHlwZTogXCJTY3JpcHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ByZWFkRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTcHJlYWRFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N1cGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIlN1cGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaENhc2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoQ2FzZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRWxlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhUZW1wbGF0ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTeW50YXhUZW1wbGF0ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFibGVEZWNsYXJhdG9yID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFT0YgPSBSLndoZXJlRXEoe3R5cGU6IFwiRU9GXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheERlY2xhcmF0aW9uID0gUi5ib3RoKGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi53aGVyZUVxKHtraW5kOiBcInN5bnRheFwifSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4cmVjRGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4cmVjXCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvblRlcm0gPSBSLmVpdGhlcihpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uV2l0aE5hbWUgPSBSLmFuZChpc0Z1bmN0aW9uVGVybSwgUi5jb21wbGVtZW50KFIud2hlcmUoe25hbWU6IFIuaXNOaWx9KSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIn0pO1xuO1xuY29uc3QgZmllbGRzSW5fODg2ID0gUi5jb25kKFtbaXNCaW5kaW5nV2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nSWRlbnRpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIikpXSwgW2lzQXJyYXlCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIiwgXCJyZXN0RWxlbWVudFwiKSldLCBbaXNPYmplY3RCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmluZGluZ1wiLCBcImluaXRcIikpXSwgW2lzQmluZGluZ1Byb3BlcnR5UHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNDbGFzc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0RlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcInN1cGVyXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzQ2xhc3NFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXNTdGF0aWNcIiwgXCJtZXRob2RcIikpXSwgW2lzTW9kdWxlLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcIml0ZW1zXCIpKV0sIFtpc0ltcG9ydCwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZWRJbXBvcnRzXCIpKV0sIFtpc0ltcG9ydE5hbWVzcGFjZSwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZXNwYWNlQmluZGluZ1wiKSldLCBbaXNJbXBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNFeHBvcnRBbGxGcm9tLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIpKV0sIFtpc0V4cG9ydEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lZEV4cG9ydHNcIiwgXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGVjbGFyYXRpb25cIikpXSwgW2lzRXhwb3J0RGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIikpXSwgW2lzRXhwb3J0U3BlY2lmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cG9ydGVkTmFtZVwiKSldLCBbaXNNZXRob2QsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIikpXSwgW2lzR2V0dGVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNTZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwicGFyYW1cIikpXSwgW2lzRGF0YVByb3BlcnR5LCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzU2hvcnRoYW5kUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N0YXRpY1Byb3BlcnR5TmFtZSwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ2YWx1ZVwiKSldLCBbaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhdHRlcm5cIiwgXCJmbGFnc1wiKSldLCBbaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0FycmF5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImVsZW1lbnRzXCIpKV0sIFtpc0Fycm93RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzQXNzaWdubWVudEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNCaW5hcnlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIikpXSwgW2lzQ2FsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwiYmluZGluZ1wiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb25kaXRpb25hbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZXN0XCIsIFwiY29uc2VxdWVudFwiLCBcImFsdGVybmF0ZVwiKSldLCBbaXNGdW5jdGlvbkV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc0lkZW50aWZpZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNOZXdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiY2FsbGVlXCIsIFwiYXJndW1lbnRzXCIpKV0sIFtpc05ld1RhcmdldEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNPYmplY3RFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNVbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcIm9wZXJhbmRcIikpXSwgW2lzU3RhdGljTWVtYmVyRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9iamVjdFwiLCBcInByb3BlcnR5XCIpKV0sIFtpc1RlbXBsYXRlRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRhZ1wiLCBcImVsZW1lbnRzXCIpKV0sIFtpc1RoaXNFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzWWllbGRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc0Jsb2NrU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmxvY2tcIikpXSwgW2lzQnJlYWtTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsYWJlbFwiKSldLCBbaXNDb250aW51ZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0RlYnVnZ2VyU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRG9XaGlsZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJib2R5XCIpKV0sIFtpc0VtcHR5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRXhwcmVzc2lvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzRm9ySW5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0Zvck9mU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm9keVwiKSldLCBbaXNGb3JTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpbml0XCIsIFwidGVzdFwiLCBcInVwZGF0ZVwiLCBcImJvZHlcIikpXSwgW2lzTGFiZWxlZFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIsIFwiYm9keVwiKSldLCBbaXNSZXR1cm5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlzY3JpbWluYW50XCIsIFwicHJlRGVmYXVsdENhc2VzXCIsIFwiZGVmYXVsdENhc2VcIiwgXCJwb3N0RGVmYXVsdENhc2VzXCIpKV0sIFtpc1Rocm93U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNUcnlDYXRjaFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJjYXRjaENsYXVzZVwiKSldLCBbaXNUcnlGaW5hbGx5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIsIFwiZmluYWxpemVyXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNXaXRoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiYm9keVwiKSldLCBbaXNCbG9jaywgUi5hbHdheXMoTGlzdC5vZihcInN0YXRlbWVudHNcIikpXSwgW2lzQ2F0Y2hDbGF1c2UsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiYm9keVwiKSldLCBbaXNEaXJlY3RpdmUsIFIuYWx3YXlzKExpc3Qub2YoXCJyYXdWYWx1ZVwiKSldLCBbaXNGb3JtYWxQYXJhbWV0ZXJzLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXRlbXNcIiwgXCJyZXN0XCIpKV0sIFtpc0Z1bmN0aW9uQm9keSwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc1NjcmlwdCwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc1NwcmVhZEVsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N1cGVyLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzU3dpdGNoQ2FzZSwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIpKV0sIFtpc1N3aXRjaERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJjb25zZXF1ZW50XCIpKV0sIFtpc1RlbXBsYXRlRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc1N5bnRheFRlbXBsYXRlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVtcGxhdGVcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcImtpbmRcIiwgXCJkZWNsYXJhdG9yc1wiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0b3IsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImlubmVyXCIpKV0sIFtSLlQsIHR5cGVfODk3ID0+IGFzc2VydChmYWxzZSwgXCJNaXNzaW5nIGNhc2UgaW4gZmllbGRzOiBcIiArIHR5cGVfODk3LnR5cGUpXV0pO1xuIl19 \ No newline at end of file diff --git a/dist/token-expander.js b/dist/token-expander.js index 4d3f7c23..aa430f5e 100644 --- a/dist/token-expander.js +++ b/dist/token-expander.js @@ -54,166 +54,166 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_890 = _ramdaFantasy.Maybe.Just; -var Nothing_891 = _ramdaFantasy.Maybe.Nothing; -var registerSyntax_892 = function registerSyntax_892(stx_897, context_898) { - var newBinding_899 = (0, _symbol.gensym)(stx_897.val()); - context_898.env.set(newBinding_899.toString(), new _transforms.VarBindingTransform(stx_897)); - context_898.bindings.add(stx_897, { binding: newBinding_899, phase: 0, skipDup: true }); +var Just_898 = _ramdaFantasy.Maybe.Just; +var Nothing_899 = _ramdaFantasy.Maybe.Nothing; +var registerSyntax_900 = function registerSyntax_900(stx_905, context_906) { + var newBinding_907 = (0, _symbol.gensym)(stx_905.val()); + context_906.env.set(newBinding_907.toString(), new _transforms.VarBindingTransform(stx_905)); + context_906.bindings.add(stx_905, { binding: newBinding_907, phase: 0, skipDup: true }); }; -var registerBindings_893 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_900) { +var registerBindings_901 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_908) { var name = _ref.name; - registerSyntax_892(name, context_900); -}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_901) { + registerSyntax_900(name, context_908); +}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_909) { var binding = _ref2.binding; - registerBindings_893(binding, context_901); -}], [_terms.isBindingPropertyProperty, function (_ref3, context_902) { + registerBindings_901(binding, context_909); +}], [_terms.isBindingPropertyProperty, function (_ref3, context_910) { var binding = _ref3.binding; - registerBindings_893(binding, context_902); -}], [_terms.isArrayBinding, function (_ref4, context_903) { + registerBindings_901(binding, context_910); +}], [_terms.isArrayBinding, function (_ref4, context_911) { var elements = _ref4.elements; var restElement = _ref4.restElement; if (restElement != null) { - registerBindings_893(restElement, context_903); + registerBindings_901(restElement, context_911); } - elements.forEach(function (el_904) { - if (el_904 != null) { - registerBindings_893(el_904, context_903); + elements.forEach(function (el_912) { + if (el_912 != null) { + registerBindings_901(el_912, context_911); } }); -}], [_terms.isObjectBinding, function (_ref5, context_905) { +}], [_terms.isObjectBinding, function (_ref5, context_913) { var properties = _ref5.properties; -}], [_.T, function (binding_906) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_906.type); +}], [_.T, function (binding_914) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_914.type); }]]); -var removeScope_894 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_907) { +var removeScope_902 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_915) { var name = _ref6.name; - return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_907) }); -}], [_terms.isArrayBinding, function (_ref7, scope_908) { + return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_915) }); +}], [_terms.isArrayBinding, function (_ref7, scope_916) { var elements = _ref7.elements; var restElement = _ref7.restElement; - return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_909) { - return el_909 == null ? null : removeScope_894(el_909, scope_908); - }), restElement: restElement == null ? null : removeScope_894(restElement, scope_908) }); -}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_910) { + return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_917) { + return el_917 == null ? null : removeScope_902(el_917, scope_916); + }), restElement: restElement == null ? null : removeScope_902(restElement, scope_916) }); +}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_918) { var binding = _ref8.binding; var init = _ref8.init; - return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_894(binding, scope_910), init: init }); -}], [_terms.isBindingPropertyProperty, function (_ref9, scope_911) { + return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_902(binding, scope_918), init: init }); +}], [_terms.isBindingPropertyProperty, function (_ref9, scope_919) { var binding = _ref9.binding; var name = _ref9.name; - return new _terms2.default("BindingPropertyProperty", { binding: removeScope_894(binding, scope_911), name: name }); -}], [_terms.isObjectBinding, function (_ref10, scope_912) { + return new _terms2.default("BindingPropertyProperty", { binding: removeScope_902(binding, scope_919), name: name }); +}], [_terms.isObjectBinding, function (_ref10, scope_920) { var properties = _ref10.properties; - return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_913) { - return removeScope_894(prop_913, scope_912); + return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_921) { + return removeScope_902(prop_921, scope_920); }) }); -}], [_.T, function (binding_914) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_914.type); +}], [_.T, function (binding_922) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_922.type); }]]); -function findNameInExports_895(name_915, exp_916) { - var foundNames_917 = exp_916.reduce(function (acc_918, e_919) { - if (e_919.declaration) { - return acc_918.concat(e_919.declaration.declarators.reduce(function (acc_920, decl_921) { - if (decl_921.binding.name.val() === name_915.val()) { - return acc_920.concat(decl_921.binding.name); +function findNameInExports_903(name_923, exp_924) { + var foundNames_925 = exp_924.reduce(function (acc_926, e_927) { + if (e_927.declaration) { + return acc_926.concat(e_927.declaration.declarators.reduce(function (acc_928, decl_929) { + if (decl_929.binding.name.val() === name_923.val()) { + return acc_928.concat(decl_929.binding.name); } - return acc_920; + return acc_928; }, (0, _immutable.List)())); } - return acc_918; + return acc_926; }, (0, _immutable.List)()); - (0, _errors.assert)(foundNames_917.size <= 1, "expecting no more than 1 matching name in exports"); - return foundNames_917.get(0); + (0, _errors.assert)(foundNames_925.size <= 1, "expecting no more than 1 matching name in exports"); + return foundNames_925.get(0); } -function bindImports_896(impTerm_922, exModule_923, context_924) { - var names_925 = []; - impTerm_922.namedImports.forEach(function (specifier_926) { - var name_927 = specifier_926.binding.name; - var exportName_928 = findNameInExports_895(name_927, exModule_923.exportEntries); - if (exportName_928 != null) { - var newBinding = (0, _symbol.gensym)(name_927.val()); - context_924.bindings.addForward(name_927, exportName_928, newBinding); - if (context_924.store.has(exportName_928.resolve())) { - names_925.push(name_927); +function bindImports_904(impTerm_930, exModule_931, context_932) { + var names_933 = []; + impTerm_930.namedImports.forEach(function (specifier_934) { + var name_935 = specifier_934.binding.name; + var exportName_936 = findNameInExports_903(name_935, exModule_931.exportEntries); + if (exportName_936 != null) { + var newBinding = (0, _symbol.gensym)(name_935.val()); + context_932.bindings.addForward(name_935, exportName_936, newBinding); + if (context_932.store.has(exportName_936.resolve())) { + names_933.push(name_935); } } }); - return (0, _immutable.List)(names_925); + return (0, _immutable.List)(names_933); } var TokenExpander = function () { - function TokenExpander(context_929) { + function TokenExpander(context_937) { _classCallCheck(this, TokenExpander); - this.context = context_929; + this.context = context_937; } _createClass(TokenExpander, [{ key: "expand", - value: function expand(stxl_930) { - var result_931 = (0, _immutable.List)(); - if (stxl_930.size === 0) { - return result_931; + value: function expand(stxl_938) { + var result_939 = (0, _immutable.List)(); + if (stxl_938.size === 0) { + return result_939; } - var prev_932 = (0, _immutable.List)(); - var enf_933 = new _enforester.Enforester(stxl_930, prev_932, this.context); - var self_934 = this; - while (!enf_933.done) { - var term = _.pipe(_.bind(enf_933.enforest, enf_933), _.cond([[_terms.isVariableDeclarationStatement, function (term_935) { - term_935.declaration.declarators = term_935.declaration.declarators.map(function (decl_936) { - return new _terms2.default("VariableDeclarator", { binding: removeScope_894(decl_936.binding, self_934.context.useScope), init: decl_936.init }); + var prev_940 = (0, _immutable.List)(); + var enf_941 = new _enforester.Enforester(stxl_938, prev_940, this.context); + var self_942 = this; + while (!enf_941.done) { + var term = _.pipe(_.bind(enf_941.enforest, enf_941), _.cond([[_terms.isVariableDeclarationStatement, function (term_943) { + term_943.declaration.declarators = term_943.declaration.declarators.map(function (decl_944) { + return new _terms2.default("VariableDeclarator", { binding: removeScope_902(decl_944.binding, self_942.context.useScope), init: decl_944.init }); }); - if ((0, _terms.isSyntaxDeclaration)(term_935.declaration)) { + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration)) { (function () { var scope = (0, _scope.freshScope)("nonrec"); - term_935.declaration.declarators.forEach(function (decl_937) { - var name_938 = decl_937.binding.name; - var nameAdded_939 = name_938.addScope(scope); - var nameRemoved_940 = name_938.removeScope(self_934.context.currentScope[self_934.context.currentScope.length - 1]); - var newBinding_941 = (0, _symbol.gensym)(name_938.val()); - self_934.context.bindings.addForward(nameAdded_939, nameRemoved_940, newBinding_941); - decl_937.init = decl_937.init.addScope(scope, self_934.context.bindings); + term_943.declaration.declarators.forEach(function (decl_945) { + var name_946 = decl_945.binding.name; + var nameAdded_947 = name_946.addScope(scope); + var nameRemoved_948 = name_946.removeScope(self_942.context.currentScope[self_942.context.currentScope.length - 1]); + var newBinding_949 = (0, _symbol.gensym)(name_946.val()); + self_942.context.bindings.addForward(nameAdded_947, nameRemoved_948, newBinding_949); + decl_945.init = decl_945.init.addScope(scope, self_942.context.bindings); }); })(); } - if ((0, _terms.isSyntaxDeclaration)(term_935.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_935.declaration)) { - term_935.declaration.declarators.forEach(function (decl_942) { - registerBindings_893(decl_942.binding, self_934.context); - (0, _loadSyntax2.default)(decl_942, self_934.context, self_934.context.env); + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_943.declaration)) { + term_943.declaration.declarators.forEach(function (decl_950) { + registerBindings_901(decl_950.binding, self_942.context); + (0, _loadSyntax2.default)(decl_950, self_942.context, self_942.context.env); }); - return Nothing_891(); + return Nothing_899(); } else { - term_935.declaration.declarators.forEach(function (decl_943) { - return registerBindings_893(decl_943.binding, self_934.context); + term_943.declaration.declarators.forEach(function (decl_951) { + return registerBindings_901(decl_951.binding, self_942.context); }); } - return Just_890(term_935); - }], [_terms.isFunctionWithName, function (term_944) { - term_944.name = removeScope_894(term_944.name, self_934.context.useScope); - registerBindings_893(term_944.name, self_934.context); - return Just_890(term_944); - }], [_terms.isImport, function (term_945) { - var mod_946 = self_934.context.modules.load(term_945.moduleSpecifier.val(), self_934.context); - if (term_945.forSyntax) { + return Just_898(term_943); + }], [_terms.isFunctionWithName, function (term_952) { + term_952.name = removeScope_902(term_952.name, self_942.context.useScope); + registerBindings_901(term_952.name, self_942.context); + return Just_898(term_952); + }], [_terms.isImport, function (term_953) { + var mod_954 = self_942.context.modules.load(term_953.moduleSpecifier.val(), self_942.context); + if (term_953.forSyntax) { console.log("import for syntax is not implemented yet"); } else { - mod_946.visit(self_934.context); + mod_954.visit(self_942.context); } - var boundNames_947 = bindImports_896(term_945, mod_946, self_934.context); - if (boundNames_947.size === 0) { - return Just_890(term_945); + var boundNames_955 = bindImports_904(term_953, mod_954, self_942.context); + if (boundNames_955.size === 0) { + return Just_898(term_953); } - return Nothing_891(); - }], [_terms.isEOF, Nothing_891], [_.T, Just_890]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); - result_931 = result_931.concat(term); + return Nothing_899(); + }], [_terms.isEOF, Nothing_899], [_.T, Just_898]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); + result_939 = result_939.concat(term); } - return result_931; + return result_939; } }]); @@ -221,4 +221,4 @@ var TokenExpander = function () { }(); exports.default = TokenExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg5MCA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg5MSA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF84OTIgPSAoc3R4Xzg5NywgY29udGV4dF84OTgpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfODk5ID0gZ2Vuc3ltKHN0eF84OTcudmFsKCkpO1xuICBjb250ZXh0Xzg5OC5lbnYuc2V0KG5ld0JpbmRpbmdfODk5LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF84OTcpKTtcbiAgY29udGV4dF84OTguYmluZGluZ3MuYWRkKHN0eF84OTcsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzg5OSwgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc184OTMgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0XzkwMCkgPT4ge1xuICByZWdpc3RlclN5bnRheF84OTIobmFtZSwgY29udGV4dF85MDApO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfOTAxKSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfODkzKGJpbmRpbmcsIGNvbnRleHRfOTAxKTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF85MDIpID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc184OTMoYmluZGluZywgY29udGV4dF85MDIpO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0XzkwMykgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfODkzKHJlc3RFbGVtZW50LCBjb250ZXh0XzkwMyk7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF85MDQgPT4ge1xuICAgIGlmIChlbF85MDQgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc184OTMoZWxfOTA0LCBjb250ZXh0XzkwMyk7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0XzkwNSkgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzkwNiA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ185MDYudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfODk0ID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfOTA3KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzkwNyl9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV85MDgpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzkwOSA9PiBlbF85MDkgPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV84OTQoZWxfOTA5LCBzY29wZV85MDgpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfODk0KHJlc3RFbGVtZW50LCBzY29wZV85MDgpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfOTEwKSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzg5NChiaW5kaW5nLCBzY29wZV85MTApLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTExKSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84OTQoYmluZGluZywgc2NvcGVfOTExKSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTEyKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTEzID0+IHJlbW92ZVNjb3BlXzg5NChwcm9wXzkxMywgc2NvcGVfOTEyKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTE0ID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkxNC50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzg5NShuYW1lXzkxNSwgZXhwXzkxNikge1xuICBsZXQgZm91bmROYW1lc185MTcgPSBleHBfOTE2LnJlZHVjZSgoYWNjXzkxOCwgZV85MTkpID0+IHtcbiAgICBpZiAoZV85MTkuZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTE4LmNvbmNhdChlXzkxOS5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MjAsIGRlY2xfOTIxKSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkyMS5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTE1LnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MjAuY29uY2F0KGRlY2xfOTIxLmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185MjA7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MTg7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkxNy5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTE3LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzg5NihpbXBUZXJtXzkyMiwgZXhNb2R1bGVfOTIzLCBjb250ZXh0XzkyNCkge1xuICBsZXQgbmFtZXNfOTI1ID0gW107XG4gIGltcFRlcm1fOTIyLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MjYgPT4ge1xuICAgIGxldCBuYW1lXzkyNyA9IHNwZWNpZmllcl85MjYuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkyOCA9IGZpbmROYW1lSW5FeHBvcnRzXzg5NShuYW1lXzkyNywgZXhNb2R1bGVfOTIzLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkyOCAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkyNy52YWwoKSk7XG4gICAgICBjb250ZXh0XzkyNC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTI3LCBleHBvcnROYW1lXzkyOCwgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MjQuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTI4LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTI1LnB1c2gobmFtZV85MjcpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkyNSk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MjkpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkyOTtcbiAgfVxuICBleHBhbmQoc3R4bF85MzApIHtcbiAgICBsZXQgcmVzdWx0XzkzMSA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85MzAuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85MzE7XG4gICAgfVxuICAgIGxldCBwcmV2XzkzMiA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzkzMyA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTMwLCBwcmV2XzkzMiwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85MzQgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzkzMy5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzkzMy5lbmZvcmVzdCwgZW5mXzkzMyksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85MzUgPT4ge1xuICAgICAgICB0ZXJtXzkzNS5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTM1LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzkzNiA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84OTQoZGVjbF85MzYuYmluZGluZywgc2VsZl85MzQuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTM2LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85MzUuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzkzNyA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85MzggPSBkZWNsXzkzNy5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzkzOSA9IG5hbWVfOTM4LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85NDAgPSBuYW1lXzkzOC5yZW1vdmVTY29wZShzZWxmXzkzNC5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzkzNC5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185NDEgPSBnZW5zeW0obmFtZV85MzgudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85MzQuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85MzksIG5hbWVSZW1vdmVkXzk0MCwgbmV3QmluZGluZ185NDEpO1xuICAgICAgICAgICAgZGVjbF85MzcuaW5pdCA9IGRlY2xfOTM3LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTM0LmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTM1LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85NDIgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc184OTMoZGVjbF85NDIuYmluZGluZywgc2VsZl85MzQuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTQyLCBzZWxmXzkzNC5jb250ZXh0LCBzZWxmXzkzNC5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODkxKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85MzUuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk0MyA9PiByZWdpc3RlckJpbmRpbmdzXzg5MyhkZWNsXzk0My5iaW5kaW5nLCBzZWxmXzkzNC5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODkwKHRlcm1fOTM1KTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzk0NCA9PiB7XG4gICAgICAgIHRlcm1fOTQ0Lm5hbWUgPSByZW1vdmVTY29wZV84OTQodGVybV85NDQubmFtZSwgc2VsZl85MzQuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfODkzKHRlcm1fOTQ0Lm5hbWUsIHNlbGZfOTM0LmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84OTAodGVybV85NDQpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85NDUgPT4ge1xuICAgICAgICBsZXQgbW9kXzk0NiA9IHNlbGZfOTM0LmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTQ1Lm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85MzQuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzk0NS5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzk0Ni52aXNpdChzZWxmXzkzNC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185NDcgPSBiaW5kSW1wb3J0c184OTYodGVybV85NDUsIG1vZF85NDYsIHNlbGZfOTM0LmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185NDcuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg5MCh0ZXJtXzk0NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODkxKCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg5MV0sIFtfLlQsIEp1c3RfODkwXV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkzMSA9IHJlc3VsdF85MzEuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkzMTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg5OCA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg5OSA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF85MDAgPSAoc3R4XzkwNSwgY29udGV4dF85MDYpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfOTA3ID0gZ2Vuc3ltKHN0eF85MDUudmFsKCkpO1xuICBjb250ZXh0XzkwNi5lbnYuc2V0KG5ld0JpbmRpbmdfOTA3LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF85MDUpKTtcbiAgY29udGV4dF85MDYuYmluZGluZ3MuYWRkKHN0eF85MDUsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzkwNywgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc185MDEgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0XzkwOCkgPT4ge1xuICByZWdpc3RlclN5bnRheF85MDAobmFtZSwgY29udGV4dF85MDgpO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfOTA5KSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfOTAxKGJpbmRpbmcsIGNvbnRleHRfOTA5KTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF85MTApID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc185MDEoYmluZGluZywgY29udGV4dF85MTApO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0XzkxMSkgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHJlc3RFbGVtZW50LCBjb250ZXh0XzkxMSk7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF85MTIgPT4ge1xuICAgIGlmIChlbF85MTIgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZWxfOTEyLCBjb250ZXh0XzkxMSk7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0XzkxMykgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzkxNCA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ185MTQudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfOTAyID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfOTE1KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzkxNSl9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV85MTYpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzkxNyA9PiBlbF85MTcgPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV85MDIoZWxfOTE3LCBzY29wZV85MTYpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfOTAyKHJlc3RFbGVtZW50LCBzY29wZV85MTYpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfOTE4KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzkwMihiaW5kaW5nLCBzY29wZV85MTgpLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTE5KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoYmluZGluZywgc2NvcGVfOTE5KSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTIwKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTIxID0+IHJlbW92ZVNjb3BlXzkwMihwcm9wXzkyMSwgc2NvcGVfOTIwKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTIyID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkyMi50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkyMywgZXhwXzkyNCkge1xuICBsZXQgZm91bmROYW1lc185MjUgPSBleHBfOTI0LnJlZHVjZSgoYWNjXzkyNiwgZV85MjcpID0+IHtcbiAgICBpZiAoZV85MjcuZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTI2LmNvbmNhdChlXzkyNy5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MjgsIGRlY2xfOTI5KSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkyOS5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTIzLnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MjguY29uY2F0KGRlY2xfOTI5LmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185Mjg7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MjY7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkyNS5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTI1LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzkwNChpbXBUZXJtXzkzMCwgZXhNb2R1bGVfOTMxLCBjb250ZXh0XzkzMikge1xuICBsZXQgbmFtZXNfOTMzID0gW107XG4gIGltcFRlcm1fOTMwLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MzQgPT4ge1xuICAgIGxldCBuYW1lXzkzNSA9IHNwZWNpZmllcl85MzQuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkzNiA9IGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkzNSwgZXhNb2R1bGVfOTMxLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkzNiAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkzNS52YWwoKSk7XG4gICAgICBjb250ZXh0XzkzMi5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTM1LCBleHBvcnROYW1lXzkzNiwgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MzIuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTM2LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTMzLnB1c2gobmFtZV85MzUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkzMyk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MzcpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkzNztcbiAgfVxuICBleHBhbmQoc3R4bF85MzgpIHtcbiAgICBsZXQgcmVzdWx0XzkzOSA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85Mzguc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85Mzk7XG4gICAgfVxuICAgIGxldCBwcmV2Xzk0MCA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzk0MSA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTM4LCBwcmV2Xzk0MCwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85NDIgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzk0MS5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzk0MS5lbmZvcmVzdCwgZW5mXzk0MSksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85NDMgPT4ge1xuICAgICAgICB0ZXJtXzk0My5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzk0NCA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoZGVjbF85NDQuYmluZGluZywgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTQ0LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk0NSA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85NDYgPSBkZWNsXzk0NS5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzk0NyA9IG5hbWVfOTQ2LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85NDggPSBuYW1lXzk0Ni5yZW1vdmVTY29wZShzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185NDkgPSBnZW5zeW0obmFtZV85NDYudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85NDIuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85NDcsIG5hbWVSZW1vdmVkXzk0OCwgbmV3QmluZGluZ185NDkpO1xuICAgICAgICAgICAgZGVjbF85NDUuaW5pdCA9IGRlY2xfOTQ1LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTQyLmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85NTAgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZGVjbF85NTAuYmluZGluZywgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTUwLCBzZWxmXzk0Mi5jb250ZXh0LCBzZWxmXzk0Mi5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk1MSA9PiByZWdpc3RlckJpbmRpbmdzXzkwMShkZWNsXzk1MS5iaW5kaW5nLCBzZWxmXzk0Mi5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODk4KHRlcm1fOTQzKTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzk1MiA9PiB7XG4gICAgICAgIHRlcm1fOTUyLm5hbWUgPSByZW1vdmVTY29wZV85MDIodGVybV85NTIubmFtZSwgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHRlcm1fOTUyLm5hbWUsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84OTgodGVybV85NTIpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85NTMgPT4ge1xuICAgICAgICBsZXQgbW9kXzk1NCA9IHNlbGZfOTQyLmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTUzLm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzk1My5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzk1NC52aXNpdChzZWxmXzk0Mi5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185NTUgPSBiaW5kSW1wb3J0c185MDQodGVybV85NTMsIG1vZF85NTQsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185NTUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg5OCh0ZXJtXzk1Myk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg5OV0sIFtfLlQsIEp1c3RfODk4XV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkzOSA9IHJlc3VsdF85MzkuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkzOTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/transforms.js b/dist/transforms.js index 8c374fbe..3fa38aab 100644 --- a/dist/transforms.js +++ b/dist/transforms.js @@ -86,15 +86,15 @@ var ReturnStatementTransform = exports.ReturnStatementTransform = function Retur _classCallCheck(this, ReturnStatementTransform); }; -var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_948) { +var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_956) { _classCallCheck(this, VarBindingTransform); - this.id = id_948; + this.id = id_956; }; -var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_949) { +var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_957) { _classCallCheck(this, CompiletimeTransform); - this.value = value_949; + this.value = value_957; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzk0OCkge1xuICAgIHRoaXMuaWQgPSBpZF85NDg7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzk0OSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85NDk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzk1Nikge1xuICAgIHRoaXMuaWQgPSBpZF85NTY7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzk1Nykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85NTc7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/utils.js b/dist/utils.js index 2173f575..247625ae 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -11,25 +11,25 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -function mixin(target_950, source_951) { - var F_952 = function (_target_) { - _inherits(F_952, _target_); +function mixin(target_958, source_959) { + var F_960 = function (_target_) { + _inherits(F_960, _target_); - function F_952() { - _classCallCheck(this, F_952); + function F_960() { + _classCallCheck(this, F_960); - return _possibleConstructorReturn(this, Object.getPrototypeOf(F_952).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(F_960).apply(this, arguments)); } - return F_952; - }(target_950); + return F_960; + }(target_958); - Object.getOwnPropertyNames(source_951.prototype).forEach(function (name_953) { - if (name_953 !== "constructor") { - var newProp = Object.getOwnPropertyDescriptor(source_951.prototype, name_953); - Object.defineProperty(F_952.prototype, name_953, newProp); + Object.getOwnPropertyNames(source_959.prototype).forEach(function (name_961) { + if (name_961 !== "constructor") { + var newProp = Object.getOwnPropertyDescriptor(source_959.prototype, name_961); + Object.defineProperty(F_960.prototype, name_961, newProp); } }); - return F_952; + return F_960; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0Xzk1MCwgc291cmNlXzk1MSkge1xuICBjbGFzcyBGXzk1MiBleHRlbmRzIHRhcmdldF85NTAge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk1MS5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NTMgPT4ge1xuICAgIGlmIChuYW1lXzk1MyAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk1MS5wcm90b3R5cGUsIG5hbWVfOTUzKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk1Mi5wcm90b3R5cGUsIG5hbWVfOTUzLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NTI7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0Xzk1OCwgc291cmNlXzk1OSkge1xuICBjbGFzcyBGXzk2MCBleHRlbmRzIHRhcmdldF85NTgge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk1OS5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NjEgPT4ge1xuICAgIGlmIChuYW1lXzk2MSAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk1OS5wcm90b3R5cGUsIG5hbWVfOTYxKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk2MC5wcm90b3R5cGUsIG5hbWVfOTYxLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NjA7XG59XG4iXX0= \ No newline at end of file diff --git a/src/shift-reader.js b/src/shift-reader.js index bc16305d..fb2bb0c0 100644 --- a/src/shift-reader.js +++ b/src/shift-reader.js @@ -58,6 +58,9 @@ const binaryOps = ["+", "-", "*", "/", "%","<<", ">>", ">>>", "&", "|", "^", const unaryOps = ["++", "--", "~", "!", "delete", "void", "typeof", "yield", "throw", "new"]; +// Any -> Boolean +const isNotFalse = R.compose(R.not, R.curry(R.equals)(false)); + // List -> Boolean const isEmpty = R.whereEq({size: 0}); @@ -262,11 +265,27 @@ function lastEl(l) { return l[l.length - 1]; } +// NOTE: Does not mutate reader +function countSlashes(reader) { + // 0x5c === '\' + let index = reader.index; + let onSlash = () => reader.source.charCodeAt(index) === 0x5c; + let length = reader.source.length; + let count = onSlash() ? 1 : 0; + while((++index < length) && onSlash()) { + ++count; + } + return count; +} + +// Number of '\' characters -> Nesting Depth +const calcDepth = R.compose(Math.log2, R.inc); + export default class Reader extends Tokenizer { constructor(strings, context, replacements) { super(Array.isArray(strings) ? strings.join('') : strings); this.delimStack = new Map(); - this.insideSyntaxTemplate = [false]; + this.syntaxNestingDepth = 0; this.context = context; // setup splicing replacement array @@ -311,7 +330,7 @@ export default class Reader extends Tokenizer { if (isLeftDelimiter(tok)) { if (isLeftSyntax(tok)) { - this.insideSyntaxTemplate.push(true); + this.syntaxNestingDepth++; } let line = tok.slice.startLocation.line; let innerB = isLeftBrace(tok) ? isExprPrefix(line, b)(prefix) : true; @@ -330,8 +349,8 @@ export default class Reader extends Tokenizer { } let stx = new Syntax(tok, this.context); stack.push(stx); - if (lastEl(this.insideSyntaxTemplate) && isRightSyntax(tok)) { - this.insideSyntaxTemplate.pop(); + if (this.syntaxNestingDepth && isRightSyntax(tok)) { + this.syntaxNestingDepth--; } break; } else { @@ -369,7 +388,7 @@ export default class Reader extends Tokenizer { let startLocation = this.getLocation(); let start = this.index; this.index++; - if (lastEl(this.insideSyntaxTemplate)) { + if (this.syntaxNestingDepth === 1) { let slice = this.getSlice(start, startLocation); return { @@ -392,6 +411,28 @@ export default class Reader extends Tokenizer { type: TokenType.TEMPLATE, items: List(items) }; + } else if (this.syntaxNestingDepth && (charCode === 0x5c)) { // \ + let numSlashes = countSlashes(this); + let depth = calcDepth(numSlashes); + if (this.source.charCodeAt(this.index + numSlashes) === 0x60) { // ` + if (depth > this.syntaxNestingDepth) { + this.index += Math.pow(2, this.syntaxNestingDepth) - 1; + throw this.createILLEGAL(); + } else if (depth < this.syntaxNestingDepth - 1) { + this.index += numSlashes; + throw this.createILLEGAL(); + } + let isClosing = depth === this.syntaxNestingDepth - 1; + let startLocation = this.getLocation(); + let start = this.index; + let slice = this.getSlice(start, startLocation); + this.index += numSlashes + 1; + return { + type: isClosing ? RSYNTAX : LSYNTAX, + value: '\\'.repeat(numSlashes).concat('\''), + slice: slice + }; + } } else if (charCode === 35) { // # let startLocation = this.getLocation(); let start = this.index;