From c66cecc1f49d10bbc6e39cc34a9ca00da5367fda Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 7 Aug 2021 16:56:46 +0000 Subject: [PATCH] chore(release): 1.9.5 [skip ci] --- CHANGELOG.md | 7 + .../out/client/formatters/lineFormatter.js | 48 +-- .../out/client/language/characterStream.js | 20 +- .../out/client/language/tokenizer.js | 372 +++++++++--------- dist/main.js | 7 +- package.json | 2 +- 6 files changed, 232 insertions(+), 224 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 397e4342..7bfd6348 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.9.5](https://github.com/lgeiger/ide-python/compare/v1.9.4...v1.9.5) (2021-08-07) + + +### Bug Fixes + +* config works with pylsp / pyls ([c6a873f](https://github.com/lgeiger/ide-python/commit/c6a873fb5219eb2f94da1a5530e277a0a01bb941)) + ## [1.9.4](https://github.com/lgeiger/ide-python/compare/v1.9.3...v1.9.4) (2021-07-17) diff --git a/dist/debugger/VendorLib/vs-py-debugger/out/client/formatters/lineFormatter.js b/dist/debugger/VendorLib/vs-py-debugger/out/client/formatters/lineFormatter.js index ac6d0d28..f325cdda 100644 --- a/dist/debugger/VendorLib/vs-py-debugger/out/client/formatters/lineFormatter.js +++ b/dist/debugger/VendorLib/vs-py-debugger/out/client/formatters/lineFormatter.js @@ -188,10 +188,10 @@ class LineFormatter { && this.text.charCodeAt(t.start + 1) === 42 /* Asterisk */ ) { - if (this.handleStarOperator(t, prev)) { - return; - } + if (this.handleStarOperator(t, prev)) { + return; } + } } // Do not append space if operator is preceded by '(' or ',' as in foo(**kwarg) @@ -211,8 +211,8 @@ class LineFormatter { || opCode === 126 /* Tilde */ ) { - return; - } + return; + } } this.builder.softAppendSpace(); @@ -224,17 +224,17 @@ class LineFormatter { && this.text.charCodeAt(current.start + 1) === 42 /* Asterisk */ ) { - if (!prev || prev.type !== types_1.TokenType.Identifier && prev.type !== types_1.TokenType.Number) { - this.builder.append('**'); - return true; - } + if (!prev || prev.type !== types_1.TokenType.Identifier && prev.type !== types_1.TokenType.Number) { + this.builder.append('**'); + return true; + } - if (prev && this.isKeyword(prev, 'lambda')) { - this.builder.softAppendSpace(); - this.builder.append('**'); - return true; - } - } // Check previous line for the **/* condition + if (prev && this.isKeyword(prev, 'lambda')) { + this.builder.softAppendSpace(); + this.builder.append('**'); + return true; + } + } // Check previous line for the **/* condition const lastLine = this.getPreviousLineTokens(); @@ -294,10 +294,10 @@ class LineFormatter { if (t.type === types_1.TokenType.Number && prev && prev.type === types_1.TokenType.Operator && prev.length === 1 && this.text.charCodeAt(prev.start) === 126 /* Tilde */ ) { - // Special case for ~ before numbers - this.builder.append(this.text.substring(t.start, t.end)); - return; - } + // Special case for ~ before numbers + this.builder.append(this.text.substring(t.start, t.end)); + return; + } if (t.type === types_1.TokenType.Unknown) { this.handleUnknown(t); @@ -316,8 +316,8 @@ class LineFormatter { || prevChar === 9 /* Tab */ ) { - this.builder.softAppendSpace(); - } + this.builder.softAppendSpace(); + } this.builder.append(this.text.substring(t.start, t.end)); const nextChar = t.end < this.text.length - 1 ? this.text.charCodeAt(t.end) : 0; @@ -327,8 +327,8 @@ class LineFormatter { || nextChar === 9 /* Tab */ ) { - this.builder.softAppendSpace(); - } + this.builder.softAppendSpace(); + } } // tslint:disable-next-line:cyclomatic-complexity @@ -521,4 +521,4 @@ class LineFormatter { } exports.LineFormatter = LineFormatter; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpbmVGb3JtYXR0ZXIuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJ2c2NvZGVfMSIsInJlcXVpcmUiLCJicmFjZUNvdW50ZXJfMSIsInRleHRCdWlsZGVyXzEiLCJ0ZXh0UmFuZ2VDb2xsZWN0aW9uXzEiLCJ0b2tlbml6ZXJfMSIsInR5cGVzXzEiLCJrZXl3b3Jkc1dpdGhTcGFjZUJlZm9yZUJyYWNlIiwiTGluZUZvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiYnVpbGRlciIsIlRleHRCdWlsZGVyIiwidG9rZW5zIiwiVGV4dFJhbmdlQ29sbGVjdGlvbiIsImJyYWNlQ291bnRlciIsIkJyYWNlQ291bnRlciIsInRleHQiLCJsaW5lTnVtYmVyIiwiZm9ybWF0TGluZSIsImRvY3VtZW50IiwibGluZUF0IiwiVG9rZW5pemVyIiwidG9rZW5pemUiLCJjb3VudCIsIndzIiwic3Vic3RyIiwiZ2V0SXRlbUF0Iiwic3RhcnQiLCJsZW5ndGgiLCJhcHBlbmQiLCJpIiwidCIsInByZXYiLCJ1bmRlZmluZWQiLCJuZXh0IiwidHlwZSIsIlRva2VuVHlwZSIsIk9wZXJhdG9yIiwiaGFuZGxlT3BlcmF0b3IiLCJDb21tYSIsImlzQ2xvc2VCcmFjZVR5cGUiLCJDb2xvbiIsInNvZnRBcHBlbmRTcGFjZSIsIklkZW50aWZpZXIiLCJpc09wZW5CcmFjZVR5cGUiLCJpZCIsInN1YnN0cmluZyIsImVuZCIsImlzS2V5d29yZFdpdGhTcGFjZUJlZm9yZUJyYWNlIiwiaXNPcGVuZWQiLCJPcGVuQnJhY2tldCIsIkNvbW1lbnQiLCJTZW1pY29sb24iLCJoYW5kbGVPdGhlciIsImdldFRleHQiLCJpbmRleCIsIm9wQ29kZSIsImNoYXJDb2RlQXQiLCJoYW5kbGVFcXVhbCIsImlzS2V5d29yZCIsImhhbmRsZVN0YXJPcGVyYXRvciIsImN1cnJlbnQiLCJOdW1iZXIiLCJsYXN0TGluZSIsImdldFByZXZpb3VzTGluZVRva2VucyIsImxhc3RUb2tlbiIsImlzTXVsdGlwbGVTdGF0ZW1lbnRzIiwiT3BlbkJyYWNlIiwiaXNFcXVhbHNJbnNpZGVBcmd1bWVudHMiLCJpc0JyYWNlVHlwZSIsImNvdW50QnJhY2UiLCJVbmtub3duIiwiaGFuZGxlVW5rbm93biIsInByZXZDaGFyIiwibmV4dENoYXIiLCJpc0luc2lkZUZ1bmN0aW9uQXJndW1lbnRzIiwiT3BlbkN1cmx5IiwiQ2xvc2VCcmFjZSIsIkNsb3NlQnJhY2tldCIsIkNsb3NlQ3VybHkiLCJzIiwiaW5kZXhPZiIsImtleXdvcmQiLCJwb3NpdGlvbiIsIlBvc2l0aW9uIiwibGluZSIsImxpbmVUb2tlbnMiLCJmaXJzdCIsInJhbmdlIiwibGFzdCIsImJlZm9yZUxhc3QiLCJjdXJyZW50TGluZSIsIlJhbmdlIiwib2Zmc2V0QXQiLCJmdW5jQ2FsbFN0YXJ0SW5kZXgiLCJmdW5jQ2FsbEVuZEluZGV4IiwiY2xvc2VCcmFjZUluZGV4IiwiZmluZENsb3NpbmdCcmFjZSIsImNvbG9uSW5kZXgiLCJmaW5kTmVhcmVzdENvbG9uIl0sIm1hcHBpbmdzIjoiQUFBQSxhLENBQ0E7QUFDQTs7QUFDQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxPQUF0QixFQUErQixZQUEvQixFQUE2QztBQUFFQyxFQUFBQSxLQUFLLEVBQUU7QUFBVCxDQUE3Qzs7QUFDQSxNQUFNQyxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQXhCOztBQUNBLE1BQU1DLGNBQWMsR0FBR0QsT0FBTyxDQUFDLDBCQUFELENBQTlCOztBQUNBLE1BQU1FLGFBQWEsR0FBR0YsT0FBTyxDQUFDLHlCQUFELENBQTdCOztBQUNBLE1BQU1HLHFCQUFxQixHQUFHSCxPQUFPLENBQUMsaUNBQUQsQ0FBckM7O0FBQ0EsTUFBTUksV0FBVyxHQUFHSixPQUFPLENBQUMsdUJBQUQsQ0FBM0I7O0FBQ0EsTUFBTUssT0FBTyxHQUFHTCxPQUFPLENBQUMsbUJBQUQsQ0FBdkI7O0FBQ0EsTUFBTU0sNEJBQTRCLEdBQUcsQ0FDakMsS0FEaUMs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QyxNQUFkLENBQXFCLEtBQUtILFVBQUwsR0FBa0IsQ0FBdkMsQ0FBYjtBQUNBLFdBQU8sSUFBSVosV0FBVyxDQUFDZ0IsU0FBaEIsR0FBNEJDLFFBQTVCLENBQXFDK0QsSUFBSSxDQUFDckUsSUFBMUMsQ0FBUDtBQUNIOztBQXRYZTs7QUF3WHBCbEIsT0FBTyxDQUFDVSxhQUFSLEdBQXdCQSxhQUF4QiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB2c2NvZGVfMSA9IHJlcXVpcmUoXCJ2c2NvZGVcIik7XG5jb25zdCBicmFjZUNvdW50ZXJfMSA9IHJlcXVpcmUoXCIuLi9sYW5ndWFnZS9icmFjZUNvdW50ZXJcIik7XG5jb25zdCB0ZXh0QnVpbGRlcl8xID0gcmVxdWlyZShcIi4uL2xhbmd1YWdlL3RleHRCdWlsZGVyXCIpO1xuY29uc3QgdGV4dFJhbmdlQ29sbGVjdGlvbl8xID0gcmVxdWlyZShcIi4uL2xhbmd1YWdlL3RleHRSYW5nZUNvbGxlY3Rpb25cIik7XG5jb25zdCB0b2tlbml6ZXJfMSA9IHJlcXVpcmUoXCIuLi9sYW5ndWFnZS90b2tlbml6ZXJcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL2xhbmd1YWdlL3R5cGVzXCIpO1xuY29uc3Qga2V5d29yZHNXaXRoU3BhY2VCZWZvcmVCcmFjZSA9IFtcbiAgICAnYW5kJywgJ2FzJywgJ2Fzc2VydCcsICdhd2FpdCcsXG4gICAgJ2RlbCcsXG4gICAgJ2V4Y2VwdCcsICdlbGlmJyxcbiAgICAnZm9yJywgJ2Zyb20nLFxuICAgICdnbG9iYWwnLFxuICAgICdpZicsICdpbXBvcnQnLCAnaW4nLCAnaXMnLFxuICAgICdsYW1iZGEnLFxuICAgICdub25sb2NhbCcsICdub3QnLFxuICAgICdvcicsXG4gICAgJ3JhaXNlJywgJ3JldHVybicsXG4gICAgJ3doaWxlJywgJ3dpdGgnLFxuICAgICd5aWVsZCdcbl07XG5jbGFzcyBMaW5lRm9ybWF0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5idWlsZGVyID0gbmV3IHRleHRCdWlsZGVyXzEuVGV4dEJ1aWxkZXIoKTtcbiAgICAgICAgdGhpcy50b2tlbnMgPSBuZXcgdGV4dFJhbmdlQ29sbGVjdGlvbl8xLlRleHRSYW5nZUNvbGxlY3Rpb24oW10pO1xuICAgICAgICB0aGlzLmJyYWNlQ291bnRlciA9IG5ldyBicmFjZUNvdW50ZXJfMS5CcmFjZUNvdW50ZXIoKTtcbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgICAgIHRoaXMubGluZU51bWJlciA9IDA7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICBmb3JtYXRMaW5lKGRvY3VtZW50LCBsaW5lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgdGhpcy50ZXh0ID0gZG9jdW1lbnQubGluZUF0KGxpbmVOdW1iZXIpLnRleHQ7XG4gICAgICAgIHRoaXMudG9rZW5zID0gbmV3IHRva2VuaXplcl8xLlRva2VuaXplcigpLnRva2VuaXplKHRoaXMudGV4dCk7XG4gICAgICAgIHRoaXMuYnVpbGRlciA9IG5ldyB0ZXh0QnVpbGRlcl8xLlRleHRCdWlsZGVyKCk7XG4gICAgICAgIHRoaXMuYnJhY2VDb3VudGVyID0gbmV3IGJyYWNlQ291bnRlcl8xLkJyYWNlQ291bnRlcigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd3MgPSB0aGlzLnRleHQuc3Vic3RyKDAsIHRoaXMudG9rZW5zLmdldEl0ZW1BdCgwKS5zdGFydCk7XG4gICAgICAgIGlmICh3cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHdzKTsgLy8gUHJlc2VydmUgbGVhZGluZyBpbmRlbnRhdGlvbi5cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmNvdW50OyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gaSA+IDAgPyB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaSAtIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IGkgPCB0aGlzLnRva2Vucy5jb3VudCAtIDEgPyB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaSArIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgc3dpdGNoICh0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9wZXJhdG9yKGkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIHR5cGVzXzEuVG9rZW5UeXBlLkNvbW1hOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmICF0aGlzLmlzQ2xvc2VCcmFjZVR5cGUobmV4dC50eXBlKSAmJiBuZXh0LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSB0eXBlc18xLlRva2VuVHlwZS5JZGVudGlmaWVyOlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiAhdGhpcy5pc09wZW5CcmFjZVR5cGUocHJldi50eXBlKSAmJiBwcmV2LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uICYmIHByZXYudHlwZSAhPT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkV2l0aFNwYWNlQmVmb3JlQnJhY2UoaWQpICYmIG5leHQgJiYgdGhpcy5pc09wZW5CcmFjZVR5cGUobmV4dC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHggaW4gKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uOlxuICAgICAgICAgICAgICAgICAgICAvLyB4OiAxIGlmIG5vdCBpbiBzbGljZSwgeFsxOnldIGlmIGluc2lkZSB0aGUgc2xpY2UuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyYWNlQ291bnRlci5pc09wZW5lZCh0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2tldCkgJiYgKG5leHQgJiYgbmV4dC50eXBlICE9PSB0eXBlc18xLlRva2VuVHlwZS5Db2xvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBpbnNpZGUgb3BlbmVkIFtbIC4uLiBdIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgdHlwZXNfMS5Ub2tlblR5cGUuQ29tbWVudDpcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIDIgc3BhY2VzIGJlZm9yZSBpbi1saW5lIGNvbW1lbnQgcGVyIFBFUCBndWlkZWxpbmVzLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSB0eXBlc18xLlRva2VuVHlwZS5TZW1pY29sb246XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJzsnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVPdGhlcih0LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlci5nZXRUZXh0KCk7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICBoYW5kbGVPcGVyYXRvcihpbmRleCkge1xuICAgICAgICBjb25zdCB0ID0gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGluZGV4KTtcbiAgICAgICAgY29uc3QgcHJldiA9IGluZGV4ID4gMCA/IHRoaXMudG9rZW5zLmdldEl0ZW1BdChpbmRleCAtIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBvcENvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdCh0LnN0YXJ0KTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGluZGV4IDwgdGhpcy50b2tlbnMuY291bnQgLSAxID8gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGluZGV4ICsgMSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgc3dpdGNoIChvcENvZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDYxIC8qIEVxdWFsICovOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVxdWFsKHQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgNDYgLyogUGVyaW9kICovOlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiB0aGlzLmlzS2V5d29yZChwcmV2LCAnZnJvbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiB0aGlzLmlzS2V5d29yZChuZXh0LCAnaW1wb3J0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSA2NCAvKiBBdCAqLzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpbmFyeSBjYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCdAJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCdAJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgMzMgLyogRXhjbGFtYXRpb25NYXJrICovOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCchJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDQyIC8qIEFzdGVyaXNrICovOlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiB0aGlzLmlzS2V5d29yZChwcmV2LCAnbGFtYmRhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJyonKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYW5kbGVTdGFyT3BlcmF0b3IodCwgcHJldikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dC5jaGFyQ29kZUF0KHQuc3RhcnQpID09PSA0MiAvKiBBc3RlcmlzayAqLyAmJiB0aGlzLnRleHQuY2hhckNvZGVBdCh0LnN0YXJ0ICsgMSkgPT09IDQyIC8qIEFzdGVyaXNrICovKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3Rhck9wZXJhdG9yKHQsIHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IGFwcGVuZCBzcGFjZSBpZiBvcGVyYXRvciBpcyBwcmVjZWRlZCBieSAnKCcgb3IgJywnIGFzIGluIGZvbygqKmt3YXJnKVxuICAgICAgICBpZiAocHJldiAmJiAodGhpcy5pc09wZW5CcmFjZVR5cGUocHJldi50eXBlKSB8fCBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbW1hKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgLy8gQ2hlY2sgdW5hcnkgY2FzZVxuICAgICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yKSB7XG4gICAgICAgICAgICBpZiAob3BDb2RlID09PSA0NSAvKiBIeXBoZW4gKi8gfHwgb3BDb2RlID09PSA0MyAvKiBQbHVzICovIHx8IG9wQ29kZSA9PT0gMTI2IC8qIFRpbGRlICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICB9XG4gICAgaGFuZGxlU3Rhck9wZXJhdG9yKGN1cnJlbnQsIHByZXYpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dC5jaGFyQ29kZUF0KGN1cnJlbnQuc3RhcnQpID09PSA0MiAvKiBBc3RlcmlzayAqLyAmJiB0aGlzLnRleHQuY2hhckNvZGVBdChjdXJyZW50LnN0YXJ0ICsgMSkgPT09IDQyIC8qIEFzdGVyaXNrICovKSB7XG4gICAgICAgICAgICBpZiAoIXByZXYgfHwgKHByZXYudHlwZSAhPT0gdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllciAmJiBwcmV2LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLk51bWJlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCcqKicpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXYgJiYgdGhpcy5pc0tleXdvcmQocHJldiwgJ2xhbWJkYScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJyoqJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgcHJldmlvdXMgbGluZSBmb3IgdGhlICoqLyogY29uZGl0aW9uXG4gICAgICAgIGNvbnN0IGxhc3RMaW5lID0gdGhpcy5nZXRQcmV2aW91c0xpbmVUb2tlbnMoKTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gbGFzdExpbmUgJiYgbGFzdExpbmUuY291bnQgPiAwID8gbGFzdExpbmUuZ2V0SXRlbUF0KGxhc3RMaW5lLmNvdW50IC0gMSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChsYXN0VG9rZW4gJiYgKHRoaXMuaXNPcGVuQnJhY2VUeXBlKGxhc3RUb2tlbi50eXBlKSB8fCBsYXN0VG9rZW4udHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29tbWEpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcoY3VycmVudC5zdGFydCwgY3VycmVudC5lbmQpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlRXF1YWwodCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZVN0YXRlbWVudHMoaW5kZXgpICYmICF0aGlzLmJyYWNlQ291bnRlci5pc09wZW5lZCh0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2UpKSB7XG4gICAgICAgICAgICAvLyB4ID0gMTsgeCwgeSA9IHksIHhcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJz0nKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzID0gaW4gZnVuY3Rpb24gYXJndW1lbnRzLiBJZiBzbywgZG8gbm90IGFkZCBzcGFjZXMgYXJvdW5kIGl0LlxuICAgICAgICBpZiAodGhpcy5pc0VxdWFsc0luc2lkZUFyZ3VtZW50cyhpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJz0nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJz0nKTtcbiAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgIH1cbiAgICBoYW5kbGVPdGhlcih0LCBpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5pc0JyYWNlVHlwZSh0LnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLmJyYWNlQ291bnRlci5jb3VudEJyYWNlKHQpO1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldiA9IGluZGV4ID4gMCA/IHRoaXMudG9rZW5zLmdldEl0ZW1BdChpbmRleCAtIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAocHJldiAmJiBwcmV2Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLnRleHQuY2hhckNvZGVBdChwcmV2LnN0YXJ0KSA9PT0gNjEgLyogRXF1YWwgKi8gJiYgdGhpcy5pc0VxdWFsc0luc2lkZUFyZ3VtZW50cyhpbmRleCAtIDEpKSB7XG4gICAgICAgICAgICAvLyBEb24ndCBhZGQgc3BhY2UgYXJvdW5kID0gaW5zaWRlIGZ1bmN0aW9uIGFyZ3VtZW50cy5cbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQodGhpcy50ZXh0LnN1YnN0cmluZyh0LnN0YXJ0LCB0LmVuZCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2ICYmICh0aGlzLmlzT3BlbkJyYWNlVHlwZShwcmV2LnR5cGUpIHx8IHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29sb24pKSB7XG4gICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgc3BhY2UgYWZ0ZXIgKCwgWyBvciB7IC5cbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQodGhpcy50ZXh0LnN1YnN0cmluZyh0LnN0YXJ0LCB0LmVuZCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk51bWJlciAmJiBwcmV2ICYmIHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlcmF0b3IgJiYgcHJldi5sZW5ndGggPT09IDEgJiYgdGhpcy50ZXh0LmNoYXJDb2RlQXQocHJldi5zdGFydCkgPT09IDEyNiAvKiBUaWxkZSAqLykge1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB+IGJlZm9yZSBudW1iZXJzXG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5Vbmtub3duKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVua25vd24odCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBnZW5lcmFsLCBrZWVwIHRva2VucyBzZXBhcmF0ZWQuXG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVVbmtub3duKHQpIHtcbiAgICAgICAgY29uc3QgcHJldkNoYXIgPSB0LnN0YXJ0ID4gMCA/IHRoaXMudGV4dC5jaGFyQ29kZUF0KHQuc3RhcnQgLSAxKSA6IDA7XG4gICAgICAgIGlmIChwcmV2Q2hhciA9PT0gMzIgLyogU3BhY2UgKi8gfHwgcHJldkNoYXIgPT09IDkgLyogVGFiICovKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gdC5lbmQgPCB0aGlzLnRleHQubGVuZ3RoIC0gMSA/IHRoaXMudGV4dC5jaGFyQ29kZUF0KHQuZW5kKSA6IDA7XG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gMzIgLyogU3BhY2UgKi8gfHwgbmV4dENoYXIgPT09IDkgLyogVGFiICovKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuICAgIGlzRXF1YWxzSW5zaWRlQXJndW1lbnRzKGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBhcmUgbG9va2luZyBmb3IgSURFTlQgPSA/XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaW5kZXggLSAxKTtcbiAgICAgICAgaWYgKHByZXYudHlwZSAhPT0gdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA+IDEgJiYgdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGluZGV4IC0gMikudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29sb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVHlwZSBoaW50IHNob3VsZCBoYXZlIHNwYWNlcyBhcm91bmQgbGlrZSBmb28oeDogaW50ID0gMSkgcGVyIFBFUCA4XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnNpZGVGdW5jdGlvbkFyZ3VtZW50cyh0aGlzLnRva2Vucy5nZXRJdGVtQXQoaW5kZXgpLnN0YXJ0KTtcbiAgICB9XG4gICAgaXNPcGVuQnJhY2VUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZW5CcmFjZSB8fCB0eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2tldCB8fCB0eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQ3VybHk7XG4gICAgfVxuICAgIGlzQ2xvc2VCcmFjZVR5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VCcmFjZSB8fCB0eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5DbG9zZUJyYWNrZXQgfHwgdHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VDdXJseTtcbiAgICB9XG4gICAgaXNCcmFjZVR5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wZW5CcmFjZVR5cGUodHlwZSkgfHwgdGhpcy5pc0Nsb3NlQnJhY2VUeXBlKHR5cGUpO1xuICAgIH1cbiAgICBpc011bHRpcGxlU3RhdGVtZW50cyhpbmRleCkge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50b2tlbnMuZ2V0SXRlbUF0KGkpLnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLlNlbWljb2xvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaXNLZXl3b3JkV2l0aFNwYWNlQmVmb3JlQnJhY2Uocykge1xuICAgICAgICByZXR1cm4ga2V5d29yZHNXaXRoU3BhY2VCZWZvcmVCcmFjZS5pbmRleE9mKHMpID49IDA7XG4gICAgfVxuICAgIGlzS2V5d29yZCh0LCBrZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiB0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLklkZW50aWZpZXIgJiYgdC5sZW5ndGggPT09IGtleXdvcmQubGVuZ3RoICYmIHRoaXMudGV4dC5zdWJzdHIodC5zdGFydCwgdC5sZW5ndGgpID09PSBrZXl3b3JkO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgaXNJbnNpZGVGdW5jdGlvbkFyZ3VtZW50cyhwb3NpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gdW5hYmxlIHRvIGRldGVybWluZVxuICAgICAgICB9XG4gICAgICAgIC8vIFdhbGsgdXAgdW50aWwgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBvciBsaW5lIHdpdGggJ2RlZiBJREVOVCgnIG9yIGxpbmUgZW5kaW5nIHdpdGggOlxuICAgICAgICAvLyBJREVOVCggYnkgaXRzZWxmIGlzIG5vdCByZWxpYWJsZSBzaW5jZSB0aGV5IGNhbiBiZSBuZXN0ZWQgaW4gSURFTlQoSURFTlQoYSksIHg9MSlcbiAgICAgICAgbGV0IHN0YXJ0ID0gbmV3IHZzY29kZV8xLlBvc2l0aW9uKDAsIDApO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5saW5lTnVtYmVyOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuZG9jdW1lbnQubGluZUF0KGkpO1xuICAgICAgICAgICAgY29uc3QgbGluZVRva2VucyA9IG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoKS50b2tlbml6ZShsaW5lLnRleHQpO1xuICAgICAgICAgICAgaWYgKGxpbmVUb2tlbnMuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICdkZWYgSURFTlQoJ1xuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBsaW5lVG9rZW5zLmdldEl0ZW1BdCgwKTtcbiAgICAgICAgICAgIGlmIChsaW5lVG9rZW5zLmNvdW50ID49IDMgJiZcbiAgICAgICAgICAgICAgICBmaXJzdC5sZW5ndGggPT09IDMgJiYgbGluZS50ZXh0LnN1YnN0cihmaXJzdC5zdGFydCwgZmlyc3QubGVuZ3RoKSA9PT0gJ2RlZicgJiZcbiAgICAgICAgICAgICAgICBsaW5lVG9rZW5zLmdldEl0ZW1BdCgxKS50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5JZGVudGlmaWVyICYmXG4gICAgICAgICAgICAgICAgbGluZVRva2Vucy5nZXRJdGVtQXQoMikudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBsaW5lLnJhbmdlLnN0YXJ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmVUb2tlbnMuY291bnQgPiAwICYmIGkgPCB0aGlzLmxpbmVOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmUgb2YgcHJldmlvdXMgbGluZXMgZW5kcyB3aXRoIDpcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gbGluZVRva2Vucy5nZXRJdGVtQXQobGluZVRva2Vucy5jb3VudCAtIDEpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5kb2N1bWVudC5saW5lQXQoaSArIDEpLnJhbmdlLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZVRva2Vucy5jb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlTGFzdCA9IGxpbmVUb2tlbnMuZ2V0SXRlbUF0KGxpbmVUb2tlbnMuY291bnQgLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZUxhc3QudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29sb24gJiYgbGFzdC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5Db21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuZG9jdW1lbnQubGluZUF0KGkgKyAxKS5yYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdyB0b2tlbml6ZSBmcm9tIHRoZSBuZWFyZXN0IHJlYXNvbmFibGUgcG9pbnRcbiAgICAgICAgY29uc3QgY3VycmVudExpbmUgPSB0aGlzLmRvY3VtZW50LmxpbmVBdCh0aGlzLmxpbmVOdW1iZXIpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5kb2N1bWVudC5nZXRUZXh0KG5ldyB2c2NvZGVfMS5SYW5nZShzdGFydCwgY3VycmVudExpbmUucmFuZ2UuZW5kKSk7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoKS50b2tlbml6ZSh0ZXh0KTtcbiAgICAgICAgLy8gVHJhbnNsYXRlIHBvc2l0aW9uIGluIHRoZSBsaW5lIGJlaW5nIGZvcm1hdHRlZCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIHRva2VuaXplZCBibG9ja1xuICAgICAgICBwb3NpdGlvbiA9IHRoaXMuZG9jdW1lbnQub2Zmc2V0QXQoY3VycmVudExpbmUucmFuZ2Uuc3RhcnQpICsgcG9zaXRpb24gLSB0aGlzLmRvY3VtZW50Lm9mZnNldEF0KHN0YXJ0KTtcbiAgICAgICAgLy8gV2FsayB0b2tlbnMgbG9jYXRpbmcgbmFycm93ZXN0IGZ1bmN0aW9uIHNpZ25hdHVyZSBhcyBpbiBJREVOVCggfCApXG4gICAgICAgIGxldCBmdW5jQ2FsbFN0YXJ0SW5kZXggPSAtMTtcbiAgICAgICAgbGV0IGZ1bmNDYWxsRW5kSW5kZXggPSAtMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMuY291bnQgLSAxOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0b2tlbnMuZ2V0SXRlbUF0KGkpO1xuICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0b2tlbnMuZ2V0SXRlbUF0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2UgJiYgIXRoaXMuaXNLZXl3b3JkV2l0aFNwYWNlQmVmb3JlQnJhY2UodGV4dC5zdWJzdHIodC5zdGFydCwgdC5sZW5ndGgpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgYXQgSURFTlQoLCB0cnkgYW5kIGxvY2F0ZSB0aGUgY2xvc2luZyBicmFjZVxuICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VCcmFjZUluZGV4ID0gdGhpcy5maW5kQ2xvc2luZ0JyYWNlKHRva2VucywgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zaW5nIGJyYWNlIGlzIG5vdCByZXF1aXJlZCBpbiBjYXNlIGNvbnN0cnVjdCBpcyBub3QgeWV0IHRlcm1pbmF0ZWRcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VCcmFjZUluZGV4ID0gY2xvc2VCcmFjZUluZGV4ID4gMCA/IGNsb3NlQnJhY2VJbmRleCA6IHRva2Vucy5jb3VudCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBpbiByYW5nZT9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gbmV4dC5zdGFydCAmJiBwb3NpdGlvbiA8IHRva2Vucy5nZXRJdGVtQXQoY2xvc2VCcmFjZUluZGV4KS5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0NhbGxTdGFydEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNDYWxsRW5kSW5kZXggPSBjbG9zZUJyYWNlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGlkIHdlIGZpbmQgYW55dGhpbmc/XG4gICAgICAgIGlmIChmdW5jQ2FsbFN0YXJ0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICAvLyBObz8gU2VlIGlmIHdlIGFyZSBiZXR3ZWVuICdsYW1iZGEnIGFuZCAnOidcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmNvdW50OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdG9rZW5zLmdldEl0ZW1BdChpKTtcbiAgICAgICAgICAgICAgICBpZiAodC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5JZGVudGlmaWVyICYmIHRleHQuc3Vic3RyKHQuc3RhcnQsIHQubGVuZ3RoKSA9PT0gJ2xhbWJkYScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgdC5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFBvc2l0aW9uIGlzIGJlZm9yZSB0aGUgbmVhcmVzdCAnbGFtYmRhJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xvbkluZGV4ID0gdGhpcy5maW5kTmVhcmVzdENvbG9uKHRva2VucywgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zaW5nIDogaXMgbm90IHJlcXVpcmVkIGluIGNhc2UgY29uc3RydWN0IGlzIG5vdCB5ZXQgdGVybWluYXRlZFxuICAgICAgICAgICAgICAgICAgICBjb2xvbkluZGV4ID0gY29sb25JbmRleCA+IDAgPyBjb2xvbkluZGV4IDogdG9rZW5zLmNvdW50IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gdC5zdGFydCAmJiBwb3NpdGlvbiA8IHRva2Vucy5nZXRJdGVtQXQoY29sb25JbmRleCkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNDYWxsU3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jQ2FsbEVuZEluZGV4ID0gY29sb25JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY0NhbGxTdGFydEluZGV4ID49IDAgJiYgZnVuY0NhbGxFbmRJbmRleCA+IDA7XG4gICAgfVxuICAgIGZpbmROZWFyZXN0Q29sb24odG9rZW5zLCBpbmRleCkge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0b2tlbnMuY291bnQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHRva2Vucy5nZXRJdGVtQXQoaSkudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29sb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGZpbmRDbG9zaW5nQnJhY2UodG9rZW5zLCBpbmRleCkge1xuICAgICAgICBjb25zdCBicmFjZUNvdW50ZXIgPSBuZXcgYnJhY2VDb3VudGVyXzEuQnJhY2VDb3VudGVyKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRva2Vucy5jb3VudDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdG9rZW5zLmdldEl0ZW1BdChpKTtcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZW5CcmFjZSB8fCB0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNsb3NlQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBicmFjZUNvdW50ZXIuY291bnRCcmFjZSh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChicmFjZUNvdW50ZXIuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGdldFByZXZpb3VzTGluZVRva2VucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50IHx8IHRoaXMubGluZU51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gdW5hYmxlIHRvIGRldGVybWluZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmRvY3VtZW50LmxpbmVBdCh0aGlzLmxpbmVOdW1iZXIgLSAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoKS50b2tlbml6ZShsaW5lLnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGluZUZvcm1hdHRlciA9IExpbmVGb3JtYXR0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW5lRm9ybWF0dGVyLmpzLm1hcCJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpbmVGb3JtYXR0ZXIuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJ2c2NvZGVfMSIsInJlcXVpcmUiLCJicmFjZUNvdW50ZXJfMSIsInRleHRCdWlsZGVyXzEiLCJ0ZXh0UmFuZ2VDb2xsZWN0aW9uXzEiLCJ0b2tlbml6ZXJfMSIsInR5cGVzXzEiLCJrZXl3b3Jkc1dpdGhTcGFjZUJlZm9yZUJyYWNlIiwiTGluZUZvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiYnVpbGRlciIsIlRleHRCdWlsZGVyIiwidG9rZW5zIiwiVGV4dFJhbmdlQ29sbGVjdGlvbiIsImJyYWNlQ291bnRlciIsIkJyYWNlQ291bnRlciIsInRleHQiLCJsaW5lTnVtYmVyIiwiZm9ybWF0TGluZSIsImRvY3VtZW50IiwibGluZUF0IiwiVG9rZW5pemVyIiwidG9rZW5pemUiLCJjb3VudCIsIndzIiwic3Vic3RyIiwiZ2V0SXRlbUF0Iiwic3RhcnQiLCJsZW5ndGgiLCJhcHBlbmQiLCJpIiwidCIsInByZXYiLCJ1bmRlZmluZWQiLCJuZXh0IiwidHlwZSIsIlRva2VuVHlwZSIsIk9wZXJhdG9yIiwiaGFuZGxlT3BlcmF0b3IiLCJDb21tYSIsImlzQ2xvc2VCcmFjZVR5cGUiLCJDb2xvbiIsInNvZnRBcHBlbmRTcGFjZSIsIklkZW50aWZpZXIiLCJpc09wZW5CcmFjZVR5cGUiLCJpZCIsInN1YnN0cmluZyIsImVuZCIsImlzS2V5d29yZFdpdGhTcGFjZUJlZm9yZUJyYWNlIiwiaXNPcGVuZWQiLCJPcGVuQnJhY2tldCIsIkNvbW1lbnQiLCJTZW1pY29sb24iLCJoYW5kbGVPdGhlciIsImdldFRleHQiLCJpbmRleCIsIm9wQ29kZSIsImNoYXJDb2RlQXQiLCJoYW5kbGVFcXVhbCIsImlzS2V5d29yZCIsImhhbmRsZVN0YXJPcGVyYXRvciIsImN1cnJlbnQiLCJOdW1iZXIiLCJsYXN0TGluZSIsImdldFByZXZpb3VzTGluZVRva2VucyIsImxhc3RUb2tlbiIsImlzTXVsdGlwbGVTdGF0ZW1lbnRzIiwiT3BlbkJyYWNlIiwiaXNFcXVhbHNJbnNpZGVBcmd1bWVudHMiLCJpc0JyYWNlVHlwZSIsImNvdW50QnJhY2UiLCJVbmtub3duIiwiaGFuZGxlVW5rbm93biIsInByZXZDaGFyIiwibmV4dENoYXIiLCJpc0luc2lkZUZ1bmN0aW9uQXJndW1lbnRzIiwiT3BlbkN1cmx5IiwiQ2xvc2VCcmFjZSIsIkNsb3NlQnJhY2tldCIsIkNsb3NlQ3VybHkiLCJzIiwiaW5kZXhPZiIsImtleXdvcmQiLCJwb3NpdGlvbiIsIlBvc2l0aW9uIiwibGluZSIsImxpbmVUb2tlbnMiLCJmaXJzdCIsInJhbmdlIiwibGFzdCIsImJlZm9yZUxhc3QiLCJjdXJyZW50TGluZSIsIlJhbmdlIiwib2Zmc2V0QXQiLCJmdW5jQ2FsbFN0YXJ0SW5kZXgiLCJmdW5jQ2FsbEVuZEluZGV4IiwiY2xvc2VCcmFjZUluZGV4IiwiZmluZENsb3NpbmdCcmFjZSIsImNvbG9uSW5kZXgiLCJmaW5kTmVhcmVzdENvbG9uIl0sIm1hcHBpbmdzIjoiQUFBQSxhLENBQ0E7QUFDQTs7QUFDQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxPQUF0QixFQUErQixZQUEvQixFQUE2QztBQUFFQyxFQUFBQSxLQUFLLEVBQUU7QUFBVCxDQUE3Qzs7QUFDQSxNQUFNQyxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQXhCOztBQUNBLE1BQU1DLGNBQWMsR0FBR0QsT0FBTyxDQUFDLDBCQUFELENBQTlCOztBQUNBLE1BQU1FLGFBQWEsR0FBR0YsT0FBTyxDQUFDLHlCQUFELENBQTdCOztBQUNBLE1BQU1HLHFCQUFxQixHQUFHSCxPQUFPLENBQUMsaUNBQUQsQ0FBckM7O0FBQ0EsTUFBTUksV0FBVyxHQUFHSixPQUFPLENBQUMsdUJBQUQsQ0FBM0I7O0FBQ0EsTUFBTUssT0FBTyxHQUFHTCxPQUFPLENBQUMsbUJBQUQsQ0FBdkI7O0FBQ0EsTUFBTU0sNEJBQTRCLEdBQUcsQ0FDakMsS0FEaUMs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TUFBZCxDQUFxQixLQUFLSCxVQUFMLEdBQWtCLENBQXZDLENBQWI7QUFDQSxXQUFPLElBQUlaLFdBQVcsQ0FBQ2dCLFNBQWhCLEdBQTRCQyxRQUE1QixDQUFxQytELElBQUksQ0FBQ3JFLElBQTFDLENBQVA7QUFDSDs7QUF0WGU7O0FBd1hwQmxCLE9BQU8sQ0FBQ1UsYUFBUixHQUF3QkEsYUFBeEIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdnNjb2RlXzEgPSByZXF1aXJlKFwidnNjb2RlXCIpO1xuY29uc3QgYnJhY2VDb3VudGVyXzEgPSByZXF1aXJlKFwiLi4vbGFuZ3VhZ2UvYnJhY2VDb3VudGVyXCIpO1xuY29uc3QgdGV4dEJ1aWxkZXJfMSA9IHJlcXVpcmUoXCIuLi9sYW5ndWFnZS90ZXh0QnVpbGRlclwiKTtcbmNvbnN0IHRleHRSYW5nZUNvbGxlY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi9sYW5ndWFnZS90ZXh0UmFuZ2VDb2xsZWN0aW9uXCIpO1xuY29uc3QgdG9rZW5pemVyXzEgPSByZXF1aXJlKFwiLi4vbGFuZ3VhZ2UvdG9rZW5pemVyXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9sYW5ndWFnZS90eXBlc1wiKTtcbmNvbnN0IGtleXdvcmRzV2l0aFNwYWNlQmVmb3JlQnJhY2UgPSBbXG4gICAgJ2FuZCcsICdhcycsICdhc3NlcnQnLCAnYXdhaXQnLFxuICAgICdkZWwnLFxuICAgICdleGNlcHQnLCAnZWxpZicsXG4gICAgJ2ZvcicsICdmcm9tJyxcbiAgICAnZ2xvYmFsJyxcbiAgICAnaWYnLCAnaW1wb3J0JywgJ2luJywgJ2lzJyxcbiAgICAnbGFtYmRhJyxcbiAgICAnbm9ubG9jYWwnLCAnbm90JyxcbiAgICAnb3InLFxuICAgICdyYWlzZScsICdyZXR1cm4nLFxuICAgICd3aGlsZScsICd3aXRoJyxcbiAgICAneWllbGQnXG5dO1xuY2xhc3MgTGluZUZvcm1hdHRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYnVpbGRlciA9IG5ldyB0ZXh0QnVpbGRlcl8xLlRleHRCdWlsZGVyKCk7XG4gICAgICAgIHRoaXMudG9rZW5zID0gbmV3IHRleHRSYW5nZUNvbGxlY3Rpb25fMS5UZXh0UmFuZ2VDb2xsZWN0aW9uKFtdKTtcbiAgICAgICAgdGhpcy5icmFjZUNvdW50ZXIgPSBuZXcgYnJhY2VDb3VudGVyXzEuQnJhY2VDb3VudGVyKCk7XG4gICAgICAgIHRoaXMudGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSAwO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgZm9ybWF0TGluZShkb2N1bWVudCwgbGluZU51bWJlcikge1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIHRoaXMudGV4dCA9IGRvY3VtZW50LmxpbmVBdChsaW5lTnVtYmVyKS50ZXh0O1xuICAgICAgICB0aGlzLnRva2VucyA9IG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoKS50b2tlbml6ZSh0aGlzLnRleHQpO1xuICAgICAgICB0aGlzLmJ1aWxkZXIgPSBuZXcgdGV4dEJ1aWxkZXJfMS5UZXh0QnVpbGRlcigpO1xuICAgICAgICB0aGlzLmJyYWNlQ291bnRlciA9IG5ldyBicmFjZUNvdW50ZXJfMS5CcmFjZUNvdW50ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdzID0gdGhpcy50ZXh0LnN1YnN0cigwLCB0aGlzLnRva2Vucy5nZXRJdGVtQXQoMCkuc3RhcnQpO1xuICAgICAgICBpZiAod3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh3cyk7IC8vIFByZXNlcnZlIGxlYWRpbmcgaW5kZW50YXRpb24uXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy5jb3VudDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGkpO1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGkgPiAwID8gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGkgLSAxKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBpIDwgdGhpcy50b2tlbnMuY291bnQgLSAxID8gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGkgKyAxKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHN3aXRjaCAodC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSB0eXBlc18xLlRva2VuVHlwZS5PcGVyYXRvcjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVPcGVyYXRvcihpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSB0eXBlc18xLlRva2VuVHlwZS5Db21tYTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiAhdGhpcy5pc0Nsb3NlQnJhY2VUeXBlKG5leHQudHlwZSkgJiYgbmV4dC50eXBlICE9PSB0eXBlc18xLlRva2VuVHlwZS5Db2xvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllcjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgIXRoaXMuaXNPcGVuQnJhY2VUeXBlKHByZXYudHlwZSkgJiYgcHJldi50eXBlICE9PSB0eXBlc18xLlRva2VuVHlwZS5Db2xvbiAmJiBwcmV2LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZChpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzS2V5d29yZFdpdGhTcGFjZUJlZm9yZUJyYWNlKGlkKSAmJiBuZXh0ICYmIHRoaXMuaXNPcGVuQnJhY2VUeXBlKG5leHQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB4IGluICgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSB0eXBlc18xLlRva2VuVHlwZS5Db2xvbjpcbiAgICAgICAgICAgICAgICAgICAgLy8geDogMSBpZiBub3QgaW4gc2xpY2UsIHhbMTp5XSBpZiBpbnNpZGUgdGhlIHNsaWNlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmFjZUNvdW50ZXIuaXNPcGVuZWQodHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNrZXQpICYmIChuZXh0ICYmIG5leHQudHlwZSAhPT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29sb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgaW5zaWRlIG9wZW5lZCBbWyAuLi4gXSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIHR5cGVzXzEuVG9rZW5UeXBlLkNvbW1lbnQ6XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCAyIHNwYWNlcyBiZWZvcmUgaW4tbGluZSBjb21tZW50IHBlciBQRVAgZ3VpZGVsaW5lcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgdHlwZXNfMS5Ub2tlblR5cGUuU2VtaWNvbG9uOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlT3RoZXIodCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkZXIuZ2V0VGV4dCgpO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgaGFuZGxlT3BlcmF0b3IoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMudG9rZW5zLmdldEl0ZW1BdChpbmRleCk7XG4gICAgICAgIGNvbnN0IHByZXYgPSBpbmRleCA+IDAgPyB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaW5kZXggLSAxKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgb3BDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQodC5zdGFydCk7XG4gICAgICAgIGNvbnN0IG5leHQgPSBpbmRleCA8IHRoaXMudG9rZW5zLmNvdW50IC0gMSA/IHRoaXMudG9rZW5zLmdldEl0ZW1BdChpbmRleCArIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAodC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHN3aXRjaCAob3BDb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA2MSAvKiBFcXVhbCAqLzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcXVhbCh0LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDQ2IC8qIFBlcmlvZCAqLzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgdGhpcy5pc0tleXdvcmQocHJldiwgJ2Zyb20nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgdGhpcy5pc0tleXdvcmQobmV4dCwgJ2ltcG9ydCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgNjQgLyogQXQgKi86XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCaW5hcnkgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDMzIC8qIEV4Y2xhbWF0aW9uTWFyayAqLzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSA0MiAvKiBBc3RlcmlzayAqLzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgdGhpcy5pc0tleXdvcmQocHJldiwgJ2xhbWJkYScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCcqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3Rhck9wZXJhdG9yKHQsIHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHQuY2hhckNvZGVBdCh0LnN0YXJ0KSA9PT0gNDIgLyogQXN0ZXJpc2sgKi8gJiYgdGhpcy50ZXh0LmNoYXJDb2RlQXQodC5zdGFydCArIDEpID09PSA0MiAvKiBBc3RlcmlzayAqLykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhbmRsZVN0YXJPcGVyYXRvcih0LCBwcmV2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIERvIG5vdCBhcHBlbmQgc3BhY2UgaWYgb3BlcmF0b3IgaXMgcHJlY2VkZWQgYnkgJygnIG9yICcsJyBhcyBpbiBmb28oKiprd2FyZylcbiAgICAgICAgaWYgKHByZXYgJiYgKHRoaXMuaXNPcGVuQnJhY2VUeXBlKHByZXYudHlwZSkgfHwgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5Db21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQodGhpcy50ZXh0LnN1YnN0cmluZyh0LnN0YXJ0LCB0LmVuZCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgIC8vIENoZWNrIHVuYXJ5IGNhc2VcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVyYXRvcikge1xuICAgICAgICAgICAgaWYgKG9wQ29kZSA9PT0gNDUgLyogSHlwaGVuICovIHx8IG9wQ29kZSA9PT0gNDMgLyogUGx1cyAqLyB8fCBvcENvZGUgPT09IDEyNiAvKiBUaWxkZSAqLykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgfVxuICAgIGhhbmRsZVN0YXJPcGVyYXRvcihjdXJyZW50LCBwcmV2KSB7XG4gICAgICAgIGlmICh0aGlzLnRleHQuY2hhckNvZGVBdChjdXJyZW50LnN0YXJ0KSA9PT0gNDIgLyogQXN0ZXJpc2sgKi8gJiYgdGhpcy50ZXh0LmNoYXJDb2RlQXQoY3VycmVudC5zdGFydCArIDEpID09PSA0MiAvKiBBc3RlcmlzayAqLykge1xuICAgICAgICAgICAgaWYgKCFwcmV2IHx8IChwcmV2LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLklkZW50aWZpZXIgJiYgcHJldi50eXBlICE9PSB0eXBlc18xLlRva2VuVHlwZS5OdW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCgnKionKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2ICYmIHRoaXMuaXNLZXl3b3JkKHByZXYsICdsYW1iZGEnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCcqKicpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIHByZXZpb3VzIGxpbmUgZm9yIHRoZSAqKi8qIGNvbmRpdGlvblxuICAgICAgICBjb25zdCBsYXN0TGluZSA9IHRoaXMuZ2V0UHJldmlvdXNMaW5lVG9rZW5zKCk7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IGxhc3RMaW5lICYmIGxhc3RMaW5lLmNvdW50ID4gMCA/IGxhc3RMaW5lLmdldEl0ZW1BdChsYXN0TGluZS5jb3VudCAtIDEpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAobGFzdFRva2VuICYmICh0aGlzLmlzT3BlbkJyYWNlVHlwZShsYXN0VG9rZW4udHlwZSkgfHwgbGFzdFRva2VuLnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbW1hKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKGN1cnJlbnQuc3RhcnQsIGN1cnJlbnQuZW5kKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhbmRsZUVxdWFsKHQsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTdGF0ZW1lbnRzKGluZGV4KSAmJiAhdGhpcy5icmFjZUNvdW50ZXIuaXNPcGVuZWQodHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNlKSkge1xuICAgICAgICAgICAgLy8geCA9IDE7IHgsIHkgPSB5LCB4XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCc9Jyk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc29mdEFwcGVuZFNwYWNlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyA9IGluIGZ1bmN0aW9uIGFyZ3VtZW50cy4gSWYgc28sIGRvIG5vdCBhZGQgc3BhY2VzIGFyb3VuZCBpdC5cbiAgICAgICAgaWYgKHRoaXMuaXNFcXVhbHNJbnNpZGVBcmd1bWVudHMoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCc9Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKCc9Jyk7XG4gICAgICAgIHRoaXMuYnVpbGRlci5zb2Z0QXBwZW5kU3BhY2UoKTtcbiAgICB9XG4gICAgaGFuZGxlT3RoZXIodCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNCcmFjZVR5cGUodC50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5icmFjZUNvdW50ZXIuY291bnRCcmFjZSh0KTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQodGhpcy50ZXh0LnN1YnN0cmluZyh0LnN0YXJ0LCB0LmVuZCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXYgPSBpbmRleCA+IDAgPyB0aGlzLnRva2Vucy5nZXRJdGVtQXQoaW5kZXggLSAxKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi5sZW5ndGggPT09IDEgJiYgdGhpcy50ZXh0LmNoYXJDb2RlQXQocHJldi5zdGFydCkgPT09IDYxIC8qIEVxdWFsICovICYmIHRoaXMuaXNFcXVhbHNJbnNpZGVBcmd1bWVudHMoaW5kZXggLSAxKSkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIHNwYWNlIGFyb3VuZCA9IGluc2lkZSBmdW5jdGlvbiBhcmd1bWVudHMuXG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldiAmJiAodGhpcy5pc09wZW5CcmFjZVR5cGUocHJldi50eXBlKSB8fCBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uKSkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IHNwYWNlIGFmdGVyICgsIFsgb3IgeyAuXG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYXBwZW5kKHRoaXMudGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5OdW1iZXIgJiYgcHJldiAmJiBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yICYmIHByZXYubGVuZ3RoID09PSAxICYmIHRoaXMudGV4dC5jaGFyQ29kZUF0KHByZXYuc3RhcnQpID09PSAxMjYgLyogVGlsZGUgKi8pIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgfiBiZWZvcmUgbnVtYmVyc1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHQudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuVW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVVbmtub3duKHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSW4gZ2VuZXJhbCwga2VlcCB0b2tlbnMgc2VwYXJhdGVkLlxuICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLmFwcGVuZCh0aGlzLnRleHQuc3Vic3RyaW5nKHQuc3RhcnQsIHQuZW5kKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlVW5rbm93bih0KSB7XG4gICAgICAgIGNvbnN0IHByZXZDaGFyID0gdC5zdGFydCA+IDAgPyB0aGlzLnRleHQuY2hhckNvZGVBdCh0LnN0YXJ0IC0gMSkgOiAwO1xuICAgICAgICBpZiAocHJldkNoYXIgPT09IDMyIC8qIFNwYWNlICovIHx8IHByZXZDaGFyID09PSA5IC8qIFRhYiAqLykge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGRlci5hcHBlbmQodGhpcy50ZXh0LnN1YnN0cmluZyh0LnN0YXJ0LCB0LmVuZCkpO1xuICAgICAgICBjb25zdCBuZXh0Q2hhciA9IHQuZW5kIDwgdGhpcy50ZXh0Lmxlbmd0aCAtIDEgPyB0aGlzLnRleHQuY2hhckNvZGVBdCh0LmVuZCkgOiAwO1xuICAgICAgICBpZiAobmV4dENoYXIgPT09IDMyIC8qIFNwYWNlICovIHx8IG5leHRDaGFyID09PSA5IC8qIFRhYiAqLykge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyLnNvZnRBcHBlbmRTcGFjZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICBpc0VxdWFsc0luc2lkZUFyZ3VtZW50cyhpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIElERU5UID0gP1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy50b2tlbnMuZ2V0SXRlbUF0KGluZGV4IC0gMSk7XG4gICAgICAgIGlmIChwcmV2LnR5cGUgIT09IHR5cGVzXzEuVG9rZW5UeXBlLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPiAxICYmIHRoaXMudG9rZW5zLmdldEl0ZW1BdChpbmRleCAtIDIpLnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFR5cGUgaGludCBzaG91bGQgaGF2ZSBzcGFjZXMgYXJvdW5kIGxpa2UgZm9vKHg6IGludCA9IDEpIHBlciBQRVAgOFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5zaWRlRnVuY3Rpb25Bcmd1bWVudHModGhpcy50b2tlbnMuZ2V0SXRlbUF0KGluZGV4KS5zdGFydCk7XG4gICAgfVxuICAgIGlzT3BlbkJyYWNlVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2UgfHwgdHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNrZXQgfHwgdHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkN1cmx5O1xuICAgIH1cbiAgICBpc0Nsb3NlQnJhY2VUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNsb3NlQnJhY2UgfHwgdHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VCcmFja2V0IHx8IHR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNsb3NlQ3VybHk7XG4gICAgfVxuICAgIGlzQnJhY2VUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuQnJhY2VUeXBlKHR5cGUpIHx8IHRoaXMuaXNDbG9zZUJyYWNlVHlwZSh0eXBlKTtcbiAgICB9XG4gICAgaXNNdWx0aXBsZVN0YXRlbWVudHMoaW5kZXgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudG9rZW5zLmdldEl0ZW1BdChpKS50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5TZW1pY29sb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlzS2V5d29yZFdpdGhTcGFjZUJlZm9yZUJyYWNlKHMpIHtcbiAgICAgICAgcmV0dXJuIGtleXdvcmRzV2l0aFNwYWNlQmVmb3JlQnJhY2UuaW5kZXhPZihzKSA+PSAwO1xuICAgIH1cbiAgICBpc0tleXdvcmQodCwga2V5d29yZCkge1xuICAgICAgICByZXR1cm4gdC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5JZGVudGlmaWVyICYmIHQubGVuZ3RoID09PSBrZXl3b3JkLmxlbmd0aCAmJiB0aGlzLnRleHQuc3Vic3RyKHQuc3RhcnQsIHQubGVuZ3RoKSA9PT0ga2V5d29yZDtcbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuICAgIGlzSW5zaWRlRnVuY3Rpb25Bcmd1bWVudHMocG9zaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHVuYWJsZSB0byBkZXRlcm1pbmVcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWxrIHVwIHVudGlsIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQgb3IgbGluZSB3aXRoICdkZWYgSURFTlQoJyBvciBsaW5lIGVuZGluZyB3aXRoIDpcbiAgICAgICAgLy8gSURFTlQoIGJ5IGl0c2VsZiBpcyBub3QgcmVsaWFibGUgc2luY2UgdGhleSBjYW4gYmUgbmVzdGVkIGluIElERU5UKElERU5UKGEpLCB4PTEpXG4gICAgICAgIGxldCBzdGFydCA9IG5ldyB2c2NvZGVfMS5Qb3NpdGlvbigwLCAwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGluZU51bWJlcjsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmRvY3VtZW50LmxpbmVBdChpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVUb2tlbnMgPSBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKCkudG9rZW5pemUobGluZS50ZXh0KTtcbiAgICAgICAgICAgIGlmIChsaW5lVG9rZW5zLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAnZGVmIElERU5UKCdcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbGluZVRva2Vucy5nZXRJdGVtQXQoMCk7XG4gICAgICAgICAgICBpZiAobGluZVRva2Vucy5jb3VudCA+PSAzICYmXG4gICAgICAgICAgICAgICAgZmlyc3QubGVuZ3RoID09PSAzICYmIGxpbmUudGV4dC5zdWJzdHIoZmlyc3Quc3RhcnQsIGZpcnN0Lmxlbmd0aCkgPT09ICdkZWYnICYmXG4gICAgICAgICAgICAgICAgbGluZVRva2Vucy5nZXRJdGVtQXQoMSkudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllciAmJlxuICAgICAgICAgICAgICAgIGxpbmVUb2tlbnMuZ2V0SXRlbUF0KDIpLnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZW5CcmFjZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGluZS5yYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5lVG9rZW5zLmNvdW50ID4gMCAmJiBpIDwgdGhpcy5saW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gT25lIG9mIHByZXZpb3VzIGxpbmVzIGVuZHMgd2l0aCA6XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IGxpbmVUb2tlbnMuZ2V0SXRlbUF0KGxpbmVUb2tlbnMuY291bnQgLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5Db2xvbikge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuZG9jdW1lbnQubGluZUF0KGkgKyAxKS5yYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpbmVUb2tlbnMuY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZUxhc3QgPSBsaW5lVG9rZW5zLmdldEl0ZW1BdChsaW5lVG9rZW5zLmNvdW50IC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVMYXN0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uICYmIGxhc3QudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmRvY3VtZW50LmxpbmVBdChpICsgMSkucmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgdG9rZW5pemUgZnJvbSB0aGUgbmVhcmVzdCByZWFzb25hYmxlIHBvaW50XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5kb2N1bWVudC5saW5lQXQodGhpcy5saW5lTnVtYmVyKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuZG9jdW1lbnQuZ2V0VGV4dChuZXcgdnNjb2RlXzEuUmFuZ2Uoc3RhcnQsIGN1cnJlbnRMaW5lLnJhbmdlLmVuZCkpO1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKCkudG9rZW5pemUodGV4dCk7XG4gICAgICAgIC8vIFRyYW5zbGF0ZSBwb3NpdGlvbiBpbiB0aGUgbGluZSBiZWluZyBmb3JtYXR0ZWQgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSB0b2tlbml6ZWQgYmxvY2tcbiAgICAgICAgcG9zaXRpb24gPSB0aGlzLmRvY3VtZW50Lm9mZnNldEF0KGN1cnJlbnRMaW5lLnJhbmdlLnN0YXJ0KSArIHBvc2l0aW9uIC0gdGhpcy5kb2N1bWVudC5vZmZzZXRBdChzdGFydCk7XG4gICAgICAgIC8vIFdhbGsgdG9rZW5zIGxvY2F0aW5nIG5hcnJvd2VzdCBmdW5jdGlvbiBzaWduYXR1cmUgYXMgaW4gSURFTlQoIHwgKVxuICAgICAgICBsZXQgZnVuY0NhbGxTdGFydEluZGV4ID0gLTE7XG4gICAgICAgIGxldCBmdW5jQ2FsbEVuZEluZGV4ID0gLTE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmNvdW50IC0gMTsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdG9rZW5zLmdldEl0ZW1BdChpKTtcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gdG9rZW5zLmdldEl0ZW1BdChpICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNlICYmICF0aGlzLmlzS2V5d29yZFdpdGhTcGFjZUJlZm9yZUJyYWNlKHRleHQuc3Vic3RyKHQuc3RhcnQsIHQubGVuZ3RoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGF0IElERU5UKCwgdHJ5IGFuZCBsb2NhdGUgdGhlIGNsb3NpbmcgYnJhY2VcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlQnJhY2VJbmRleCA9IHRoaXMuZmluZENsb3NpbmdCcmFjZSh0b2tlbnMsIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBicmFjZSBpcyBub3QgcmVxdWlyZWQgaW4gY2FzZSBjb25zdHJ1Y3QgaXMgbm90IHlldCB0ZXJtaW5hdGVkXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQnJhY2VJbmRleCA9IGNsb3NlQnJhY2VJbmRleCA+IDAgPyBjbG9zZUJyYWNlSW5kZXggOiB0b2tlbnMuY291bnQgLSAxO1xuICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgaW4gcmFuZ2U/XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IG5leHQuc3RhcnQgJiYgcG9zaXRpb24gPCB0b2tlbnMuZ2V0SXRlbUF0KGNsb3NlQnJhY2VJbmRleCkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNDYWxsU3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jQ2FsbEVuZEluZGV4ID0gY2xvc2VCcmFjZUluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIERpZCB3ZSBmaW5kIGFueXRoaW5nP1xuICAgICAgICBpZiAoZnVuY0NhbGxTdGFydEluZGV4IDwgMCkge1xuICAgICAgICAgICAgLy8gTm8/IFNlZSBpZiB3ZSBhcmUgYmV0d2VlbiAnbGFtYmRhJyBhbmQgJzonXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5jb3VudDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRva2Vucy5nZXRJdGVtQXQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuSWRlbnRpZmllciAmJiB0ZXh0LnN1YnN0cih0LnN0YXJ0LCB0Lmxlbmd0aCkgPT09ICdsYW1iZGEnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IHQuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBQb3NpdGlvbiBpcyBiZWZvcmUgdGhlIG5lYXJlc3QgJ2xhbWJkYSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sb25JbmRleCA9IHRoaXMuZmluZE5lYXJlc3RDb2xvbih0b2tlbnMsIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyA6IGlzIG5vdCByZXF1aXJlZCBpbiBjYXNlIGNvbnN0cnVjdCBpcyBub3QgeWV0IHRlcm1pbmF0ZWRcbiAgICAgICAgICAgICAgICAgICAgY29sb25JbmRleCA9IGNvbG9uSW5kZXggPiAwID8gY29sb25JbmRleCA6IHRva2Vucy5jb3VudCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IHQuc3RhcnQgJiYgcG9zaXRpb24gPCB0b2tlbnMuZ2V0SXRlbUF0KGNvbG9uSW5kZXgpLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jQ2FsbFN0YXJ0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0NhbGxFbmRJbmRleCA9IGNvbG9uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmNDYWxsU3RhcnRJbmRleCA+PSAwICYmIGZ1bmNDYWxsRW5kSW5kZXggPiAwO1xuICAgIH1cbiAgICBmaW5kTmVhcmVzdENvbG9uKHRva2VucywgaW5kZXgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdG9rZW5zLmNvdW50OyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbnMuZ2V0SXRlbUF0KGkpLnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBmaW5kQ2xvc2luZ0JyYWNlKHRva2VucywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgYnJhY2VDb3VudGVyID0gbmV3IGJyYWNlQ291bnRlcl8xLkJyYWNlQ291bnRlcigpO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0b2tlbnMuY291bnQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHRva2Vucy5nZXRJdGVtQXQoaSk7XG4gICAgICAgICAgICBpZiAodC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2UgfHwgdC50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5DbG9zZUJyYWNlKSB7XG4gICAgICAgICAgICAgICAgYnJhY2VDb3VudGVyLmNvdW50QnJhY2UodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJhY2VDb3VudGVyLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBnZXRQcmV2aW91c0xpbmVUb2tlbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5kb2N1bWVudCB8fCB0aGlzLmxpbmVOdW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIHVuYWJsZSB0byBkZXRlcm1pbmVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5kb2N1bWVudC5saW5lQXQodGhpcy5saW5lTnVtYmVyIC0gMSk7XG4gICAgICAgIHJldHVybiBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKCkudG9rZW5pemUobGluZS50ZXh0KTtcbiAgICB9XG59XG5leHBvcnRzLkxpbmVGb3JtYXR0ZXIgPSBMaW5lRm9ybWF0dGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGluZUZvcm1hdHRlci5qcy5tYXAiXX0= \ No newline at end of file diff --git a/dist/debugger/VendorLib/vs-py-debugger/out/client/language/characterStream.js b/dist/debugger/VendorLib/vs-py-debugger/out/client/language/characterStream.js index cbf123f8..ca74b390 100644 --- a/dist/debugger/VendorLib/vs-py-debugger/out/client/language/characterStream.js +++ b/dist/debugger/VendorLib/vs-py-debugger/out/client/language/characterStream.js @@ -80,18 +80,18 @@ class CharacterStream { if (this._currentChar === 13 /* CarriageReturn */ ) { - this.moveNext(); + this.moveNext(); - if (this.currentChar === 10 - /* LineFeed */ - ) { - this.moveNext(); - } - } else if (this._currentChar === 10 - /* LineFeed */ - ) { + if (this.currentChar === 10 + /* LineFeed */ + ) { this.moveNext(); } + } else if (this._currentChar === 10 + /* LineFeed */ + ) { + this.moveNext(); + } } skipWhitespace() { @@ -145,4 +145,4 @@ class CharacterStream { } exports.CharacterStream = CharacterStream; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNoYXJhY3RlclN0cmVhbS5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImNoYXJhY3RlcnNfMSIsInJlcXVpcmUiLCJ0ZXh0SXRlcmF0b3JfMSIsIkNoYXJhY3RlclN0cmVhbSIsImNvbnN0cnVjdG9yIiwidGV4dCIsIlRleHRJdGVyYXRvciIsIl9wb3NpdGlvbiIsIl9jdXJyZW50Q2hhciIsImxlbmd0aCIsImNoYXJDb2RlQXQiLCJfaXNFbmRPZlN0cmVhbSIsImdldFRleHQiLCJwb3NpdGlvbiIsImNoZWNrQm91bmRzIiwiY3VycmVudENoYXIiLCJuZXh0Q2hhciIsInByZXZDaGFyIiwiaXNFbmRPZlN0cmVhbSIsImxvb2tBaGVhZCIsIm9mZnNldCIsInBvcyIsImFkdmFuY2UiLCJtb3ZlTmV4dCIsImlzQXRXaGl0ZVNwYWNlIiwiaXNXaGl0ZVNwYWNlIiwiaXNBdExpbmVCcmVhayIsImlzTGluZUJyZWFrIiwic2tpcExpbmVCcmVhayIsInNraXBXaGl0ZXNwYWNlIiwic2tpcFRvRW9sIiwic2tpcFRvV2hpdGVzcGFjZSIsImlzQXRTdHJpbmciLCJpbmRleCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUNBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE9BQXRCLEVBQStCLFlBQS9CLEVBQTZDO0FBQUVDLEVBQUFBLEtBQUssRUFBRTtBQUFULENBQTdDOztBQUNBLE1BQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBNUI7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHRCxPQUFPLENBQUMsZ0JBQUQsQ0FBOUI7O0FBQ0EsTUFBTUUsZUFBTixDQUFzQjtBQUNsQkMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU87QUFDZCxTQUFLQSxJQUFMLEdBQVksT0FBT0EsSUFBUCxLQUFnQixRQUFoQixHQUEyQixJQUFJSCxjQUFjLENBQUNJLFlBQW5CLENBQWdDRCxJQUFoQyxDQUEzQixHQUFt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LE9BQU8sQ0FBQ0ssZUFBUixHQUEwQkEsZUFBMUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNoYXJhY3RlcnNfMSA9IHJlcXVpcmUoXCIuL2NoYXJhY3RlcnNcIik7XG5jb25zdCB0ZXh0SXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuL3RleHRJdGVyYXRvclwiKTtcbmNsYXNzIENoYXJhY3RlclN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICB0aGlzLnRleHQgPSB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyBuZXcgdGV4dEl0ZXJhdG9yXzEuVGV4dEl0ZXJhdG9yKHRleHQpIDogdGV4dDtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRleHQubGVuZ3RoID4gMCA/IHRleHQuY2hhckNvZGVBdCgwKSA6IDA7XG4gICAgICAgIHRoaXMuX2lzRW5kT2ZTdHJlYW0gPSB0ZXh0Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5nZXRUZXh0KCk7XG4gICAgfVxuICAgIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cbiAgICBzZXQgcG9zaXRpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGVja0JvdW5kcygpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudENoYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICB9XG4gICAgZ2V0IG5leHRDaGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbiArIDEgPCB0aGlzLnRleHQubGVuZ3RoID8gdGhpcy50ZXh0LmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbiArIDEpIDogMDtcbiAgICB9XG4gICAgZ2V0IHByZXZDaGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbiAtIDEgPj0gMCA/IHRoaXMudGV4dC5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24gLSAxKSA6IDA7XG4gICAgfVxuICAgIGlzRW5kT2ZTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VuZE9mU3RyZWFtO1xuICAgIH1cbiAgICBsb29rQWhlYWQob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX3Bvc2l0aW9uICsgb2Zmc2V0O1xuICAgICAgICByZXR1cm4gcG9zIDwgMCB8fCBwb3MgPj0gdGhpcy50ZXh0Lmxlbmd0aCA/IDAgOiB0aGlzLnRleHQuY2hhckNvZGVBdChwb3MpO1xuICAgIH1cbiAgICBhZHZhbmNlKG9mZnNldCkge1xuICAgICAgICB0aGlzLnBvc2l0aW9uICs9IG9mZnNldDtcbiAgICB9XG4gICAgbW92ZU5leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA8IHRoaXMudGV4dC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiBjYXNlLCBubyBuZWVkIHRvIGNoZWNrIGJvdW5kcyBleHRlbnNpdmVseVxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gMTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQodGhpcy5fcG9zaXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZHZhbmNlKDEpO1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNFbmRPZlN0cmVhbSgpO1xuICAgIH1cbiAgICBpc0F0V2hpdGVTcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNfMS5pc1doaXRlU3BhY2UodGhpcy5jdXJyZW50Q2hhcik7XG4gICAgfVxuICAgIGlzQXRMaW5lQnJlYWsoKSB7XG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzXzEuaXNMaW5lQnJlYWsodGhpcy5jdXJyZW50Q2hhcik7XG4gICAgfVxuICAgIHNraXBMaW5lQnJlYWsoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gMTMgLyogQ2FycmlhZ2VSZXR1cm4gKi8pIHtcbiAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyID09PSAxMCAvKiBMaW5lRmVlZCAqLykge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gMTAgLyogTGluZUZlZWQgKi8pIHtcbiAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBza2lwV2hpdGVzcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmlzRW5kT2ZTdHJlYW0oKSAmJiB0aGlzLmlzQXRXaGl0ZVNwYWNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBza2lwVG9Fb2woKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy5pc0VuZE9mU3RyZWFtKCkgJiYgIXRoaXMuaXNBdExpbmVCcmVhaygpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2tpcFRvV2hpdGVzcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmlzRW5kT2ZTdHJlYW0oKSAmJiAhdGhpcy5pc0F0V2hpdGVTcGFjZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNBdFN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPT09IDM5IC8qIFNpbmdsZVF1b3RlICovIHx8IHRoaXMuY3VycmVudENoYXIgPT09IDM0IC8qIERvdWJsZVF1b3RlICovO1xuICAgIH1cbiAgICBjaGFyQ29kZUF0KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQubGVuZ3RoO1xuICAgIH1cbiAgICBjaGVja0JvdW5kcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRW5kT2ZTdHJlYW0gPSB0aGlzLl9wb3NpdGlvbiA+PSB0aGlzLnRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5faXNFbmRPZlN0cmVhbSkge1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB0aGlzLnRleHQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy5faXNFbmRPZlN0cmVhbSA/IDAgOiB0aGlzLnRleHQuY2hhckNvZGVBdCh0aGlzLl9wb3NpdGlvbik7XG4gICAgfVxufVxuZXhwb3J0cy5DaGFyYWN0ZXJTdHJlYW0gPSBDaGFyYWN0ZXJTdHJlYW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFyYWN0ZXJTdHJlYW0uanMubWFwIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNoYXJhY3RlclN0cmVhbS5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImNoYXJhY3RlcnNfMSIsInJlcXVpcmUiLCJ0ZXh0SXRlcmF0b3JfMSIsIkNoYXJhY3RlclN0cmVhbSIsImNvbnN0cnVjdG9yIiwidGV4dCIsIlRleHRJdGVyYXRvciIsIl9wb3NpdGlvbiIsIl9jdXJyZW50Q2hhciIsImxlbmd0aCIsImNoYXJDb2RlQXQiLCJfaXNFbmRPZlN0cmVhbSIsImdldFRleHQiLCJwb3NpdGlvbiIsImNoZWNrQm91bmRzIiwiY3VycmVudENoYXIiLCJuZXh0Q2hhciIsInByZXZDaGFyIiwiaXNFbmRPZlN0cmVhbSIsImxvb2tBaGVhZCIsIm9mZnNldCIsInBvcyIsImFkdmFuY2UiLCJtb3ZlTmV4dCIsImlzQXRXaGl0ZVNwYWNlIiwiaXNXaGl0ZVNwYWNlIiwiaXNBdExpbmVCcmVhayIsImlzTGluZUJyZWFrIiwic2tpcExpbmVCcmVhayIsInNraXBXaGl0ZXNwYWNlIiwic2tpcFRvRW9sIiwic2tpcFRvV2hpdGVzcGFjZSIsImlzQXRTdHJpbmciLCJpbmRleCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUNBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE9BQXRCLEVBQStCLFlBQS9CLEVBQTZDO0FBQUVDLEVBQUFBLEtBQUssRUFBRTtBQUFULENBQTdDOztBQUNBLE1BQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBNUI7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHRCxPQUFPLENBQUMsZ0JBQUQsQ0FBOUI7O0FBQ0EsTUFBTUUsZUFBTixDQUFzQjtBQUNsQkMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU87QUFDZCxTQUFLQSxJQUFMLEdBQVksT0FBT0EsSUFBUCxLQUFnQixRQUFoQixHQUEyQixJQUFJSCxjQUFjLENBQUNJLFlBQW5CLENBQWdDRCxJQUFoQyxDQUEzQixHQUFt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T0FBTyxDQUFDSyxlQUFSLEdBQTBCQSxlQUExQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2hhcmFjdGVyc18xID0gcmVxdWlyZShcIi4vY2hhcmFjdGVyc1wiKTtcbmNvbnN0IHRleHRJdGVyYXRvcl8xID0gcmVxdWlyZShcIi4vdGV4dEl0ZXJhdG9yXCIpO1xuY2xhc3MgQ2hhcmFjdGVyU3RyZWFtIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyA/IG5ldyB0ZXh0SXRlcmF0b3JfMS5UZXh0SXRlcmF0b3IodGV4dCkgOiB0ZXh0O1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGV4dC5sZW5ndGggPiAwID8gdGV4dC5jaGFyQ29kZUF0KDApIDogMDtcbiAgICAgICAgdGhpcy5faXNFbmRPZlN0cmVhbSA9IHRleHQubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBnZXRUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0LmdldFRleHQoKTtcbiAgICB9XG4gICAgZ2V0IHBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxuICAgIHNldCBwb3NpdGlvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoZWNrQm91bmRzKCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50Q2hhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgIH1cbiAgICBnZXQgbmV4dENoYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uICsgMSA8IHRoaXMudGV4dC5sZW5ndGggPyB0aGlzLnRleHQuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uICsgMSkgOiAwO1xuICAgIH1cbiAgICBnZXQgcHJldkNoYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uIC0gMSA+PSAwID8gdGhpcy50ZXh0LmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbiAtIDEpIDogMDtcbiAgICB9XG4gICAgaXNFbmRPZlN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRW5kT2ZTdHJlYW07XG4gICAgfVxuICAgIGxvb2tBaGVhZChvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fcG9zaXRpb24gKyBvZmZzZXQ7XG4gICAgICAgIHJldHVybiBwb3MgPCAwIHx8IHBvcyA+PSB0aGlzLnRleHQubGVuZ3RoID8gMCA6IHRoaXMudGV4dC5jaGFyQ29kZUF0KHBvcyk7XG4gICAgfVxuICAgIGFkdmFuY2Uob2Zmc2V0KSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24gKz0gb2Zmc2V0O1xuICAgIH1cbiAgICBtb3ZlTmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uIDwgdGhpcy50ZXh0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGNhc2UsIG5vIG5lZWQgdG8gY2hlY2sgYm91bmRzIGV4dGVuc2l2ZWx5XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiArPSAxO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLnRleHQuY2hhckNvZGVBdCh0aGlzLl9wb3NpdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkdmFuY2UoMSk7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0VuZE9mU3RyZWFtKCk7XG4gICAgfVxuICAgIGlzQXRXaGl0ZVNwYWNlKCkge1xuICAgICAgICByZXR1cm4gY2hhcmFjdGVyc18xLmlzV2hpdGVTcGFjZSh0aGlzLmN1cnJlbnRDaGFyKTtcbiAgICB9XG4gICAgaXNBdExpbmVCcmVhaygpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNfMS5pc0xpbmVCcmVhayh0aGlzLmN1cnJlbnRDaGFyKTtcbiAgICB9XG4gICAgc2tpcExpbmVCcmVhaygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSAxMyAvKiBDYXJyaWFnZVJldHVybiAqLykge1xuICAgICAgICAgICAgdGhpcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXIgPT09IDEwIC8qIExpbmVGZWVkICovKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSAxMCAvKiBMaW5lRmVlZCAqLykge1xuICAgICAgICAgICAgdGhpcy5tb3ZlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNraXBXaGl0ZXNwYWNlKCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuaXNFbmRPZlN0cmVhbSgpICYmIHRoaXMuaXNBdFdoaXRlU3BhY2UoKSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNraXBUb0VvbCgpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmlzRW5kT2ZTdHJlYW0oKSAmJiAhdGhpcy5pc0F0TGluZUJyZWFrKCkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBza2lwVG9XaGl0ZXNwYWNlKCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuaXNFbmRPZlN0cmVhbSgpICYmICF0aGlzLmlzQXRXaGl0ZVNwYWNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0F0U3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi8gfHwgdGhpcy5jdXJyZW50Q2hhciA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi87XG4gICAgfVxuICAgIGNoYXJDb2RlQXQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGg7XG4gICAgfVxuICAgIGNoZWNrQm91bmRzKCkge1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNFbmRPZlN0cmVhbSA9IHRoaXMuX3Bvc2l0aW9uID49IHRoaXMudGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLl9pc0VuZE9mU3RyZWFtKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHRoaXMudGV4dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9pc0VuZE9mU3RyZWFtID8gMCA6IHRoaXMudGV4dC5jaGFyQ29kZUF0KHRoaXMuX3Bvc2l0aW9uKTtcbiAgICB9XG59XG5leHBvcnRzLkNoYXJhY3RlclN0cmVhbSA9IENoYXJhY3RlclN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJhY3RlclN0cmVhbS5qcy5tYXAiXX0= \ No newline at end of file diff --git a/dist/debugger/VendorLib/vs-py-debugger/out/client/language/tokenizer.js b/dist/debugger/VendorLib/vs-py-debugger/out/client/language/tokenizer.js index 0a1de752..4ff637e9 100644 --- a/dist/debugger/VendorLib/vs-py-debugger/out/client/language/tokenizer.js +++ b/dist/debugger/VendorLib/vs-py-debugger/out/client/language/tokenizer.js @@ -99,9 +99,9 @@ class Tokenizer { if (this.cs.currentChar === 35 /* Hash */ ) { - this.handleComment(); - return true; - } + this.handleComment(); + return true; + } if (this.mode === types_1.TokenizerMode.CommentsAndStrings) { return false; @@ -172,9 +172,9 @@ class Tokenizer { if (this.cs.currentChar === 46 /* Period */ ) { - this.tokens.push(new Token(types_1.TokenType.Operator, this.cs.position, 1)); - break; - } + this.tokens.push(new Token(types_1.TokenType.Operator, this.cs.position, 1)); + break; + } if (!this.tryIdentifier()) { if (!this.tryOperator()) { @@ -231,48 +231,48 @@ class Tokenizer { if (characters_1.isDecimal(this.cs.lookAhead(next)) || this.cs.lookAhead(next) === 46 /* Period */ ) { - // Check what previous token is, if any - if (this.tokens.length === 0) { - // At the start of the file this can only be a number - return true; - } + // Check what previous token is, if any + if (this.tokens.length === 0) { + // At the start of the file this can only be a number + return true; + } - const prev = this.tokens[this.tokens.length - 1]; + const prev = this.tokens[this.tokens.length - 1]; - if (prev.type === types_1.TokenType.OpenBrace || prev.type === types_1.TokenType.OpenBracket || prev.type === types_1.TokenType.Comma || prev.type === types_1.TokenType.Colon || prev.type === types_1.TokenType.Semicolon || prev.type === types_1.TokenType.Operator) { - return true; - } + if (prev.type === types_1.TokenType.OpenBrace || prev.type === types_1.TokenType.OpenBracket || prev.type === types_1.TokenType.Comma || prev.type === types_1.TokenType.Colon || prev.type === types_1.TokenType.Semicolon || prev.type === types_1.TokenType.Operator) { + return true; } + } if (this.cs.lookAhead(next) === 48 /* _0 */ ) { - const nextNext = this.cs.lookAhead(next + 1); + const nextNext = this.cs.lookAhead(next + 1); - if (nextNext === 120 - /* x */ - || nextNext === 88 - /* X */ - ) { - return true; - } + if (nextNext === 120 + /* x */ + || nextNext === 88 + /* X */ + ) { + return true; + } - if (nextNext === 98 - /* b */ - || nextNext === 66 - /* B */ - ) { - return true; - } + if (nextNext === 98 + /* b */ + || nextNext === 66 + /* B */ + ) { + return true; + } - if (nextNext === 111 - /* o */ - || nextNext === 79 - /* O */ - ) { - return true; - } + if (nextNext === 111 + /* o */ + || nextNext === 79 + /* O */ + ) { + return true; } + } return false; } // tslint:disable-next-line:cyclomatic-complexity @@ -287,69 +287,69 @@ class Tokenizer { || this.cs.currentChar === 43 /* Plus */ ) { - this.cs.moveNext(); // Skip leading +/- + this.cs.moveNext(); // Skip leading +/- - leadingSign = 1; - } + leadingSign = 1; + } if (this.cs.currentChar === 48 /* _0 */ ) { - let radix = 0; // Try hex => hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ + let radix = 0; // Try hex => hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ - if ((this.cs.nextChar === 120 - /* x */ - || this.cs.nextChar === 88 - /* X */ - ) && characters_1.isHex(this.cs.lookAhead(2))) { - this.cs.advance(2); - - while (characters_1.isHex(this.cs.currentChar)) { - this.cs.moveNext(); - } + if ((this.cs.nextChar === 120 + /* x */ + || this.cs.nextChar === 88 + /* X */ + ) && characters_1.isHex(this.cs.lookAhead(2))) { + this.cs.advance(2); - radix = 16; - } // Try binary => bininteger: "0" ("b" | "B") (["_"] bindigit)+ + while (characters_1.isHex(this.cs.currentChar)) { + this.cs.moveNext(); + } + radix = 16; + } // Try binary => bininteger: "0" ("b" | "B") (["_"] bindigit)+ - if ((this.cs.nextChar === 98 - /* b */ - || this.cs.nextChar === 66 - /* B */ - ) && characters_1.isBinary(this.cs.lookAhead(2))) { - this.cs.advance(2); - while (characters_1.isBinary(this.cs.currentChar)) { - this.cs.moveNext(); - } + if ((this.cs.nextChar === 98 + /* b */ + || this.cs.nextChar === 66 + /* B */ + ) && characters_1.isBinary(this.cs.lookAhead(2))) { + this.cs.advance(2); - radix = 2; - } // Try octal => octinteger: "0" ("o" | "O") (["_"] octdigit)+ + while (characters_1.isBinary(this.cs.currentChar)) { + this.cs.moveNext(); + } + radix = 2; + } // Try octal => octinteger: "0" ("o" | "O") (["_"] octdigit)+ - if ((this.cs.nextChar === 111 - /* o */ - || this.cs.nextChar === 79 - /* O */ - ) && characters_1.isOctal(this.cs.lookAhead(2))) { - this.cs.advance(2); - while (characters_1.isOctal(this.cs.currentChar)) { - this.cs.moveNext(); - } + if ((this.cs.nextChar === 111 + /* o */ + || this.cs.nextChar === 79 + /* O */ + ) && characters_1.isOctal(this.cs.lookAhead(2))) { + this.cs.advance(2); - radix = 8; + while (characters_1.isOctal(this.cs.currentChar)) { + this.cs.moveNext(); } - if (radix > 0) { - const text = this.cs.getText().substr(start + leadingSign, this.cs.position - start - leadingSign); + radix = 8; + } + + if (radix > 0) { + const text = this.cs.getText().substr(start + leadingSign, this.cs.position - start - leadingSign); - if (!isNaN(parseInt(text, radix))) { - this.tokens.push(new Token(types_1.TokenType.Number, start, text.length + leadingSign)); - return true; - } + if (!isNaN(parseInt(text, radix))) { + this.tokens.push(new Token(types_1.TokenType.Number, start, text.length + leadingSign)); + return true; } } + } let decimal = false; // Try decimal int => // decinteger: nonzerodigit (["_"] digit)* | "0" (["_"] "0")* @@ -361,40 +361,40 @@ class Tokenizer { && this.cs.currentChar <= 57 /* _9 */ ) { - while (characters_1.isDecimal(this.cs.currentChar)) { - this.cs.moveNext(); - } - - decimal = this.cs.currentChar !== 46 - /* Period */ - && this.cs.currentChar !== 101 - /* e */ - && this.cs.currentChar !== 69 - /* E */ - ; + while (characters_1.isDecimal(this.cs.currentChar)) { + this.cs.moveNext(); } + decimal = this.cs.currentChar !== 46 + /* Period */ + && this.cs.currentChar !== 101 + /* e */ + && this.cs.currentChar !== 69 + /* E */ + ; + } + if (this.cs.currentChar === 48 /* _0 */ ) { - // "0" (["_"] "0")* - while (this.cs.currentChar === 48 - /* _0 */ - || this.cs.currentChar === 95 - /* Underscore */ - ) { - this.cs.moveNext(); - } - - decimal = this.cs.currentChar !== 46 - /* Period */ - && this.cs.currentChar !== 101 - /* e */ - && this.cs.currentChar !== 69 - /* E */ - ; + // "0" (["_"] "0")* + while (this.cs.currentChar === 48 + /* _0 */ + || this.cs.currentChar === 95 + /* Underscore */ + ) { + this.cs.moveNext(); } + decimal = this.cs.currentChar !== 46 + /* Period */ + && this.cs.currentChar !== 101 + /* e */ + && this.cs.currentChar !== 69 + /* E */ + ; + } + if (decimal) { const text = this.cs.getText().substr(start + leadingSign, this.cs.position - start - leadingSign); @@ -481,10 +481,10 @@ class Tokenizer { if (nextChar === 42 /* Asterisk */ ) { - length = this.cs.lookAhead(2) === 61 - /* Equal */ - ? 3 : 2; - } else { + length = this.cs.lookAhead(2) === 61 + /* Equal */ + ? 3 : 2; + } else { length = nextChar === 61 /* Equal */ ? 2 : 1; @@ -498,10 +498,10 @@ class Tokenizer { if (nextChar === 47 /* Slash */ ) { - length = this.cs.lookAhead(2) === 61 - /* Equal */ - ? 3 : 2; - } else { + length = this.cs.lookAhead(2) === 61 + /* Equal */ + ? 3 : 2; + } else { length = nextChar === 61 /* Equal */ ? 2 : 1; @@ -515,14 +515,14 @@ class Tokenizer { if (nextChar === 62 /* Greater */ ) { - length = 2; - } else if (nextChar === 60 + length = 2; + } else if (nextChar === 60 /* Less */ ) { - length = this.cs.lookAhead(2) === 61 - /* Equal */ - ? 3 : 2; - } else { + length = this.cs.lookAhead(2) === 61 + /* Equal */ + ? 3 : 2; + } else { length = nextChar === 61 /* Equal */ ? 2 : 1; @@ -536,10 +536,10 @@ class Tokenizer { if (nextChar === 62 /* Greater */ ) { - length = this.cs.lookAhead(2) === 61 - /* Equal */ - ? 3 : 2; - } else { + length = this.cs.lookAhead(2) === 61 + /* Equal */ + ? 3 : 2; + } else { length = nextChar === 61 /* Equal */ ? 2 : 1; @@ -590,64 +590,64 @@ class Tokenizer { || this.cs.currentChar === 34 /* DoubleQuote */ ) { - return 0; // Simple string, no prefix - } + return 0; // Simple string, no prefix + } if (this.cs.nextChar === 39 /* SingleQuote */ || this.cs.nextChar === 34 /* DoubleQuote */ ) { - switch (this.cs.currentChar) { - case 102 - /* f */ - : - case 70 - /* F */ - : - case 114 - /* r */ - : - case 82 - /* R */ - : - case 98 - /* b */ - : - case 66 - /* B */ - : - case 117 - /* u */ - : - case 85 - /* U */ - : - return 1; - // single-char prefix like u"" or r"" - - default: - break; - } + switch (this.cs.currentChar) { + case 102 + /* f */ + : + case 70 + /* F */ + : + case 114 + /* r */ + : + case 82 + /* R */ + : + case 98 + /* b */ + : + case 66 + /* B */ + : + case 117 + /* u */ + : + case 85 + /* U */ + : + return 1; + // single-char prefix like u"" or r"" + + default: + break; } + } if (this.cs.lookAhead(2) === 39 /* SingleQuote */ || this.cs.lookAhead(2) === 34 /* DoubleQuote */ ) { - const prefix = this.cs.getText().substr(this.cs.position, 2).toLowerCase(); + const prefix = this.cs.getText().substr(this.cs.position, 2).toLowerCase(); - switch (prefix) { - case 'rf': - case 'ur': - case 'br': - return 2; + switch (prefix) { + case 'rf': + case 'ur': + case 'br': + return 2; - default: - break; - } + default: + break; } + } return -1; } @@ -656,22 +656,22 @@ class Tokenizer { if (this.cs.currentChar === 39 /* SingleQuote */ ) { - return this.cs.nextChar === 39 - /* SingleQuote */ - && this.cs.lookAhead(2) === 39 - /* SingleQuote */ - ? QuoteType.TripleSingle : QuoteType.Single; - } + return this.cs.nextChar === 39 + /* SingleQuote */ + && this.cs.lookAhead(2) === 39 + /* SingleQuote */ + ? QuoteType.TripleSingle : QuoteType.Single; + } if (this.cs.currentChar === 34 /* DoubleQuote */ ) { - return this.cs.nextChar === 34 - /* DoubleQuote */ - && this.cs.lookAhead(2) === 34 - /* DoubleQuote */ - ? QuoteType.TripleDouble : QuoteType.Double; - } + return this.cs.nextChar === 34 + /* DoubleQuote */ + && this.cs.lookAhead(2) === 34 + /* DoubleQuote */ + ? QuoteType.TripleDouble : QuoteType.Double; + } return QuoteType.None; } @@ -705,8 +705,8 @@ class Tokenizer { || this.cs.currentChar === 13 /* CarriageReturn */ ) { - return; // Unterminated single-line string - } + return; // Unterminated single-line string + } if (this.cs.currentChar === 92 /* Backslash */ @@ -744,8 +744,8 @@ class Tokenizer { || this.cs.currentChar === 69 /* E */ ) { - this.cs.moveNext(); // Optional exponent sign - } + this.cs.moveNext(); // Optional exponent sign + } this.skipDecimalNumber(true); // skip exponent value } @@ -759,8 +759,8 @@ class Tokenizer { if (this.cs.currentChar === 46 /* Period */ ) { - this.cs.moveNext(); // Optional period - } + this.cs.moveNext(); // Optional period + } this.skipDecimalNumber(false); } @@ -782,4 +782,4 @@ class Tokenizer { } exports.Tokenizer = Tokenizer; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRva2VuaXplci5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImNoYXJhY3RlcnNfMSIsInJlcXVpcmUiLCJjaGFyYWN0ZXJTdHJlYW1fMSIsInRleHRSYW5nZUNvbGxlY3Rpb25fMSIsInR5cGVzXzEiLCJRdW90ZVR5cGUiLCJUb2tlbiIsIlRleHRSYW5nZSIsImNvbnN0cnVjdG9yIiwidHlwZSIsInN0YXJ0IiwibGVuZ3RoIiwiVG9rZW5pemVyIiwiY3MiLCJDaGFyYWN0ZXJTdHJlYW0iLCJ0b2tlbnMiLCJtb2RlIiwiVG9rZW5pemVyTW9kZSIsIkZ1bGwiLCJ0b2tlbml6ZSIsInRleHQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInBvc2l0aW9uIiwiZW5kIiwiaXNFbmRPZlN0cmVhbSIsIkFkZE5leHRUb2tlbiIsIlRleHRSYW5nZUNvbGxlY3Rpb24iLCJza2lwV2hpdGVzcGFjZSIsImhhbmRsZUNoYXJhY3RlciIsIm1vdmVOZXh0Iiwic3RyaW5nUHJlZml4TGVuZ3RoIiwiZ2V0U3RyaW5nUHJlZml4TGVuZ3RoIiwiYWR2YW5jZSIsInF1b3RlVHlwZSIsImdldFF1b3RlVHlwZSIsIk5vbmUiLCJoYW5kbGVTdHJpbmciLCJjdXJyZW50Q2hhciIsImhhbmRsZUNvbW1lbnQiLCJDb21tZW50c0FuZFN0cmluZ3MiLCJwdXNoIiwiVG9rZW5UeXBlIiwiT3BlbkJyYWNlIiwiQ2xvc2VCcmFjZSIsIk9wZW5CcmFja2V0IiwiQ2xvc2VCcmFja2V0IiwiT3BlbkN1cmx5IiwiQ2xvc2VDdXJseSIsIkNvbW1hIiwiU2VtaWNvbG9uIiwiQ29sb24iLCJpc1Bvc3NpYmxlTnVtYmVyIiwidHJ5TnVtYmVyIiwiT3BlcmF0b3IiLCJ0cnlJZGVudGlmaWVyIiwidHJ5T3BlcmF0b3IiLCJoYW5kbGVVbmtub3duIiwiaXNJZGVudGlmaWVyU3RhcnRDaGFyIiwiaXNJZGVudGlmaWVyQ2hhciIsIklkZW50aWZpZXIiLCJpc0RlY2ltYWwiLCJuZXh0Q2hhciIsIm5leHQiLCJsb29rQWhlYWQiLCJwcmV2IiwibmV4dE5leHQiLCJsZWFkaW5nU2lnbiIsInJhZGl4IiwiaXNIZXgiLCJpc0JpbmFyeSIsImlzT2N0YWwiLCJnZXRUZXh0Iiwic3Vic3RyIiwiaXNOYU4iLCJwYXJzZUludCIsIk51bWJlciIsImRlY2ltYWwiLCJza2lwRmxvYXRpbmdQb2ludENhbmRpZGF0ZSIsInBhcnNlRmxvYXQiLCJza2lwVG9XaGl0ZXNwYWNlIiwiVW5rbm93biIsInNraXBUb0VvbCIsIkNvbW1lbnQiLCJwcmVmaXgiLCJ0b0xvd2VyQ2FzZSIsIlRyaXBsZVNpbmdsZSIsIlNpbmdsZSIsIlRyaXBsZURvdWJsZSIsIkRvdWJsZSIsInNraXBUb1NpbmdsZUVuZFF1b3RlIiwic2tpcFRvVHJpcGxlRW5kUXVvdGUiLCJTdHJpbmciLCJxdW90ZSIsImFsbG93U2lnbiIsInNraXBGcmFjdGlvbmFsTnVtYmVyIiwic2tpcERlY2ltYWxOdW1iZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFDQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxPQUF0QixFQUErQixZQUEvQixFQUE2QztBQUFFQyxFQUFBQSxLQUFLLEVBQUU7QUFBVCxDQUE3Qzs7QUFDQSxNQUFNQyxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQTVCOztBQUNBLE1BQU1DLGlCQUFpQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBakM7O0FBQ0EsTUFBTUUscUJBQXFCLEdBQUdGLE9BQU8sQ0FBQyx1QkFBRCxDQUFyQzs7QUFDQSxNQUFNRyxPQUFPLEdBQUdILE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLElBQUlJLFNBQUo7O0FBQ0EsQ0FBQyxVQUFVQSxTQUFWLEVBQXFCO0FBQ2xCQSxFQUFBQSxTQUFTLENBQUNBLFNBQVMsQ0FBQyxNQUFELENBQVQsR0FBb0IsQ0FBckIsQ0FBVCxHQUFtQyxNQUFuQztBQUNBQSxFQUFBQSxTQUFTLENBQUNBLFNBQVMsQ0FBQyxRQUFELENB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QUEzQixPQUEyQyxLQUFLekIsRUFBTCxDQUFReUIsV0FBUixLQUF3QjtBQUFHO0FBQTNFLEtBQWIsRUFBcUc7QUFDakcsV0FBS3pCLEVBQUwsQ0FBUWlCLFFBQVIsR0FEaUcsQ0FDN0U7QUFDdkI7O0FBQ0QsV0FBTzlCLFlBQVksQ0FBQzZELFNBQWIsQ0FBdUIsS0FBS2hELEVBQUwsQ0FBUXlCLFdBQS9CLENBQVAsRUFBb0Q7QUFDaEQsV0FBS3pCLEVBQUwsQ0FBUWlCLFFBQVIsR0FEZ0QsQ0FDNUI7QUFDdkI7QUFDSjs7QUFoYlc7O0FBa2JoQmhDLE9BQU8sQ0FBQ2MsU0FBUixHQUFvQkEsU0FBcEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNoYXJhY3RlcnNfMSA9IHJlcXVpcmUoXCIuL2NoYXJhY3RlcnNcIik7XG5jb25zdCBjaGFyYWN0ZXJTdHJlYW1fMSA9IHJlcXVpcmUoXCIuL2NoYXJhY3RlclN0cmVhbVwiKTtcbmNvbnN0IHRleHRSYW5nZUNvbGxlY3Rpb25fMSA9IHJlcXVpcmUoXCIuL3RleHRSYW5nZUNvbGxlY3Rpb25cIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG52YXIgUXVvdGVUeXBlO1xuKGZ1bmN0aW9uIChRdW90ZVR5cGUpIHtcbiAgICBRdW90ZVR5cGVbUXVvdGVUeXBlW1wiTm9uZVwiXSA9IDBdID0gXCJOb25lXCI7XG4gICAgUXVvdGVUeXBlW1F1b3RlVHlwZVtcIlNpbmdsZVwiXSA9IDFdID0gXCJTaW5nbGVcIjtcbiAgICBRdW90ZVR5cGVbUXVvdGVUeXBlW1wiRG91YmxlXCJdID0gMl0gPSBcIkRvdWJsZVwiO1xuICAgIFF1b3RlVHlwZVtRdW90ZVR5cGVbXCJUcmlwbGVTaW5nbGVcIl0gPSAzXSA9IFwiVHJpcGxlU2luZ2xlXCI7XG4gICAgUXVvdGVUeXBlW1F1b3RlVHlwZVtcIlRyaXBsZURvdWJsZVwiXSA9IDRdID0gXCJUcmlwbGVEb3VibGVcIjtcbn0pKFF1b3RlVHlwZSB8fCAoUXVvdGVUeXBlID0ge30pKTtcbmNsYXNzIFRva2VuIGV4dGVuZHMgdHlwZXNfMS5UZXh0UmFuZ2Uge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHN0YXJ0LCBsZW5ndGgpIHtcbiAgICAgICAgc3VwZXIoc3RhcnQsIGxlbmd0aCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuY2xhc3MgVG9rZW5pemVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jcyA9IG5ldyBjaGFyYWN0ZXJTdHJlYW1fMS5DaGFyYWN0ZXJTdHJlYW0oJycpO1xuICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLm1vZGUgPSB0eXBlc18xLlRva2VuaXplck1vZGUuRnVsbDtcbiAgICB9XG4gICAgdG9rZW5pemUodGV4dCwgc3RhcnQsIGxlbmd0aCwgbW9kZSkge1xuICAgICAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJhbmdlIHN0YXJ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZW5ndGggPCAwIHx8IHN0YXJ0ICsgbGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYW5nZSBsZW5ndGgnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlICE9PSB1bmRlZmluZWQgPyBtb2RlIDogdHlwZXNfMS5Ub2tlbml6ZXJNb2RlLkZ1bGw7XG4gICAgICAgIHRoaXMuY3MgPSBuZXcgY2hhcmFjdGVyU3RyZWFtXzEuQ2hhcmFjdGVyU3RyZWFtKHRleHQpO1xuICAgICAgICB0aGlzLmNzLnBvc2l0aW9uID0gc3RhcnQ7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIXRoaXMuY3MuaXNFbmRPZlN0cmVhbSgpKSB7XG4gICAgICAgICAgICB0aGlzLkFkZE5leHRUb2tlbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3MucG9zaXRpb24gPj0gZW5kKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyB0ZXh0UmFuZ2VDb2xsZWN0aW9uXzEuVGV4dFJhbmdlQ29sbGVjdGlvbih0aGlzLnRva2Vucyk7XG4gICAgfVxuICAgIEFkZE5leHRUb2tlbigpIHtcbiAgICAgICAgdGhpcy5jcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICBpZiAodGhpcy5jcy5pc0VuZE9mU3RyZWFtKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgaGFuZGxlQ2hhcmFjdGVyKCkge1xuICAgICAgICAvLyBmLXN0cmluZ3MsIGItc3RyaW5ncywgZXRjXG4gICAgICAgIGNvbnN0IHN0cmluZ1ByZWZpeExlbmd0aCA9IHRoaXMuZ2V0U3RyaW5nUHJlZml4TGVuZ3RoKCk7XG4gICAgICAgIGlmIChzdHJpbmdQcmVmaXhMZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgLy8gSW5kZWVkIGEgc3RyaW5nXG4gICAgICAgICAgICB0aGlzLmNzLmFkdmFuY2Uoc3RyaW5nUHJlZml4TGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHF1b3RlVHlwZSA9IHRoaXMuZ2V0UXVvdGVUeXBlKCk7XG4gICAgICAgICAgICBpZiAocXVvdGVUeXBlICE9PSBRdW90ZVR5cGUuTm9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RyaW5nKHF1b3RlVHlwZSwgc3RyaW5nUHJlZml4TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gMzUgLyogSGFzaCAqLykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21tZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSB0eXBlc18xLlRva2VuaXplck1vZGUuQ29tbWVudHNBbmRTdHJpbmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmNzLmN1cnJlbnRDaGFyKSB7XG4gICAgICAgICAgICBjYXNlIDQwIC8qIE9wZW5QYXJlbnRoZXNpcyAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2UsIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDEgLyogQ2xvc2VQYXJlbnRoZXNpcyAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5DbG9zZUJyYWNlLCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDkxIC8qIE9wZW5CcmFja2V0ICovOlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLk9wZW5CcmFja2V0LCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDkzIC8qIENsb3NlQnJhY2tldCAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5DbG9zZUJyYWNrZXQsIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTIzIC8qIE9wZW5CcmFjZSAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5PcGVuQ3VybHksIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTI1IC8qIENsb3NlQnJhY2UgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VDdXJseSwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0NCAvKiBDb21tYSAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5Db21tYSwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OSAvKiBTZW1pY29sb24gKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuU2VtaWNvbG9uLCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU4IC8qIENvbG9uICovOlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uLCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUG9zc2libGVOdW1iZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cnlOdW1iZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ2IC8qIFBlcmlvZCAqLykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5PcGVyYXRvciwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRyeUlkZW50aWZpZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudHJ5T3BlcmF0b3IoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVbmtub3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnlJZGVudGlmaWVyKCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY3MucG9zaXRpb247XG4gICAgICAgIGlmIChjaGFyYWN0ZXJzXzEuaXNJZGVudGlmaWVyU3RhcnRDaGFyKHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyc18xLmlzSWRlbnRpZmllckNoYXIodGhpcy5jcy5jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MucG9zaXRpb24gPiBzdGFydCkge1xuICAgICAgICAgICAgLy8gY29uc3QgdGV4dCA9IHRoaXMuY3MuZ2V0VGV4dCgpLnN1YnN0cihzdGFydCwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0KTtcbiAgICAgICAgICAgIC8vIGNvbnN0IHR5cGUgPSB0aGlzLmtleXdvcmRzLmZpbmQoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IHRleHQpID8gVG9rZW5UeXBlLktleXdvcmQgOiBUb2tlblR5cGUuSWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLklkZW50aWZpZXIsIHN0YXJ0LCB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuICAgIGlzUG9zc2libGVOdW1iZXIoKSB7XG4gICAgICAgIGlmIChjaGFyYWN0ZXJzXzEuaXNEZWNpbWFsKHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDYgLyogUGVyaW9kICovICYmIGNoYXJhY3RlcnNfMS5pc0RlY2ltYWwodGhpcy5jcy5uZXh0Q2hhcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHQgPSAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDUgLyogSHlwaGVuICovIHx8IHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQzIC8qIFBsdXMgKi8pID8gMSA6IDA7XG4gICAgICAgIC8vIE5leHQgY2hhcmFjdGVyIG11c3QgYmUgZGVjaW1hbCBvciBhIGRvdCBvdGhlcndpc2VcbiAgICAgICAgLy8gaXQgaXMgbm90IGEgbnVtYmVyLiBObyB3aGl0ZXNwYWNlIGlzIGFsbG93ZWQuXG4gICAgICAgIGlmIChjaGFyYWN0ZXJzXzEuaXNEZWNpbWFsKHRoaXMuY3MubG9va0FoZWFkKG5leHQpKSB8fCB0aGlzLmNzLmxvb2tBaGVhZChuZXh0KSA9PT0gNDYgLyogUGVyaW9kICovKSB7XG4gICAgICAgICAgICAvLyBDaGVjayB3aGF0IHByZXZpb3VzIHRva2VuIGlzLCBpZiBhbnlcbiAgICAgICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgdGhpcyBjYW4gb25seSBiZSBhIG51bWJlclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNlXG4gICAgICAgICAgICAgICAgfHwgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2tldFxuICAgICAgICAgICAgICAgIHx8IHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuQ29tbWFcbiAgICAgICAgICAgICAgICB8fCBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbG9uXG4gICAgICAgICAgICAgICAgfHwgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5TZW1pY29sb25cbiAgICAgICAgICAgICAgICB8fCBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MubG9va0FoZWFkKG5leHQpID09PSA0OCAvKiBfMCAqLykge1xuICAgICAgICAgICAgY29uc3QgbmV4dE5leHQgPSB0aGlzLmNzLmxvb2tBaGVhZChuZXh0ICsgMSk7XG4gICAgICAgICAgICBpZiAobmV4dE5leHQgPT09IDEyMCAvKiB4ICovIHx8IG5leHROZXh0ID09PSA4OCAvKiBYICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5leHQgPT09IDk4IC8qIGIgKi8gfHwgbmV4dE5leHQgPT09IDY2IC8qIEIgKi8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0TmV4dCA9PT0gMTExIC8qIG8gKi8gfHwgbmV4dE5leHQgPT09IDc5IC8qIE8gKi8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICB0cnlOdW1iZXIoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jcy5wb3NpdGlvbjtcbiAgICAgICAgbGV0IGxlYWRpbmdTaWduID0gMDtcbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ1IC8qIEh5cGhlbiAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0MyAvKiBQbHVzICovKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7IC8vIFNraXAgbGVhZGluZyArLy1cbiAgICAgICAgICAgIGxlYWRpbmdTaWduID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDggLyogXzAgKi8pIHtcbiAgICAgICAgICAgIGxldCByYWRpeCA9IDA7XG4gICAgICAgICAgICAvLyBUcnkgaGV4ID0+IGhleGludGVnZXI6IFwiMFwiIChcInhcIiB8IFwiWFwiKSAoW1wiX1wiXSBoZXhkaWdpdCkrXG4gICAgICAgICAgICBpZiAoKHRoaXMuY3MubmV4dENoYXIgPT09IDEyMCAvKiB4ICovIHx8IHRoaXMuY3MubmV4dENoYXIgPT09IDg4IC8qIFggKi8pICYmIGNoYXJhY3RlcnNfMS5pc0hleCh0aGlzLmNzLmxvb2tBaGVhZCgyKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLmFkdmFuY2UoMik7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnNfMS5pc0hleCh0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJhZGl4ID0gMTY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUcnkgYmluYXJ5ID0+IGJpbmludGVnZXI6IFwiMFwiIChcImJcIiB8IFwiQlwiKSAoW1wiX1wiXSBiaW5kaWdpdCkrXG4gICAgICAgICAgICBpZiAoKHRoaXMuY3MubmV4dENoYXIgPT09IDk4IC8qIGIgKi8gfHwgdGhpcy5jcy5uZXh0Q2hhciA9PT0gNjYgLyogQiAqLykgJiYgY2hhcmFjdGVyc18xLmlzQmluYXJ5KHRoaXMuY3MubG9va0FoZWFkKDIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3MuYWR2YW5jZSgyKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyc18xLmlzQmluYXJ5KHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmFkaXggPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVHJ5IG9jdGFsID0+IG9jdGludGVnZXI6IFwiMFwiIChcIm9cIiB8IFwiT1wiKSAoW1wiX1wiXSBvY3RkaWdpdCkrXG4gICAgICAgICAgICBpZiAoKHRoaXMuY3MubmV4dENoYXIgPT09IDExMSAvKiBvICovIHx8IHRoaXMuY3MubmV4dENoYXIgPT09IDc5IC8qIE8gKi8pICYmIGNoYXJhY3RlcnNfMS5pc09jdGFsKHRoaXMuY3MubG9va0FoZWFkKDIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3MuYWR2YW5jZSgyKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyc18xLmlzT2N0YWwodGhpcy5jcy5jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYWRpeCA9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmFkaXggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3MuZ2V0VGV4dCgpLnN1YnN0cihzdGFydCArIGxlYWRpbmdTaWduLCB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQgLSBsZWFkaW5nU2lnbik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUludCh0ZXh0LCByYWRpeCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLk51bWJlciwgc3RhcnQsIHRleHQubGVuZ3RoICsgbGVhZGluZ1NpZ24pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBkZWNpbWFsID0gZmFsc2U7XG4gICAgICAgIC8vIFRyeSBkZWNpbWFsIGludCA9PlxuICAgICAgICAvLyAgICBkZWNpbnRlZ2VyOiBub256ZXJvZGlnaXQgKFtcIl9cIl0gZGlnaXQpKiB8IFwiMFwiIChbXCJfXCJdIFwiMFwiKSpcbiAgICAgICAgLy8gICAgbm9uemVyb2RpZ2l0OiBcIjFcIi4uLlwiOVwiXG4gICAgICAgIC8vICAgIGRpZ2l0OiBcIjBcIi4uLlwiOVwiXG4gICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID49IDQ5IC8qIF8xICovICYmIHRoaXMuY3MuY3VycmVudENoYXIgPD0gNTcgLyogXzkgKi8pIHtcbiAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzXzEuaXNEZWNpbWFsKHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjaW1hbCA9IHRoaXMuY3MuY3VycmVudENoYXIgIT09IDQ2IC8qIFBlcmlvZCAqLyAmJiB0aGlzLmNzLmN1cnJlbnRDaGFyICE9PSAxMDEgLyogZSAqLyAmJiB0aGlzLmNzLmN1cnJlbnRDaGFyICE9PSA2OSAvKiBFICovO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0OCAvKiBfMCAqLykgeyAvLyBcIjBcIiAoW1wiX1wiXSBcIjBcIikqXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDggLyogXzAgKi8gfHwgdGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gOTUgLyogVW5kZXJzY29yZSAqLykge1xuICAgICAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlY2ltYWwgPSB0aGlzLmNzLmN1cnJlbnRDaGFyICE9PSA0NiAvKiBQZXJpb2QgKi8gJiYgdGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gMTAxIC8qIGUgKi8gJiYgdGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gNjkgLyogRSAqLztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVjaW1hbCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3MuZ2V0VGV4dCgpLnN1YnN0cihzdGFydCArIGxlYWRpbmdTaWduLCB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQgLSBsZWFkaW5nU2lnbik7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlSW50KHRleHQsIDEwKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5OdW1iZXIsIHN0YXJ0LCB0ZXh0Lmxlbmd0aCArIGxlYWRpbmdTaWduKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQuIFNpZ24gd2FzIGFscmVhZHkgc2tpcHBlZCBvdmVyLlxuICAgICAgICBpZiAoKHRoaXMuY3MuY3VycmVudENoYXIgPj0gNDggLyogXzAgKi8gJiYgdGhpcy5jcy5jdXJyZW50Q2hhciA8PSA1NyAvKiBfOSAqLykgfHxcbiAgICAgICAgICAgICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0NiAvKiBQZXJpb2QgKi8gJiYgdGhpcy5jcy5uZXh0Q2hhciA+PSA0OCAvKiBfMCAqLyAmJiB0aGlzLmNzLm5leHRDaGFyIDw9IDU3IC8qIF85ICovKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2tpcEZsb2F0aW5nUG9pbnRDYW5kaWRhdGUoZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3MuZ2V0VGV4dCgpLnN1YnN0cihzdGFydCwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQodGV4dCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLk51bWJlciwgc3RhcnQsIHRoaXMuY3MucG9zaXRpb24gLSBzdGFydCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcy5wb3NpdGlvbiA9IHN0YXJ0O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICB0cnlPcGVyYXRvcigpIHtcbiAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gdGhpcy5jcy5uZXh0Q2hhcjtcbiAgICAgICAgc3dpdGNoICh0aGlzLmNzLmN1cnJlbnRDaGFyKSB7XG4gICAgICAgICAgICBjYXNlIDQzIC8qIFBsdXMgKi86XG4gICAgICAgICAgICBjYXNlIDM4IC8qIEFtcGVyc2FuZCAqLzpcbiAgICAgICAgICAgIGNhc2UgMTI0IC8qIEJhciAqLzpcbiAgICAgICAgICAgIGNhc2UgOTQgLyogQ2FyZXQgKi86XG4gICAgICAgICAgICBjYXNlIDYxIC8qIEVxdWFsICovOlxuICAgICAgICAgICAgY2FzZSAzMyAvKiBFeGNsYW1hdGlvbk1hcmsgKi86XG4gICAgICAgICAgICBjYXNlIDM3IC8qIFBlcmNlbnQgKi86XG4gICAgICAgICAgICBjYXNlIDEyNiAvKiBUaWxkZSAqLzpcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0Q2hhciA9PT0gNjEgLyogRXF1YWwgKi8gPyAyIDogMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDUgLyogSHlwaGVuICovOlxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IG5leHRDaGFyID09PSA2MSAvKiBFcXVhbCAqLyB8fCBuZXh0Q2hhciA9PT0gNjIgLyogR3JlYXRlciAqLyA/IDIgOiAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0MiAvKiBBc3RlcmlzayAqLzpcbiAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPT09IDQyIC8qIEFzdGVyaXNrICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuY3MubG9va0FoZWFkKDIpID09PSA2MSAvKiBFcXVhbCAqLyA/IDMgOiAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbmV4dENoYXIgPT09IDYxIC8qIEVxdWFsICovID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0NyAvKiBTbGFzaCAqLzpcbiAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPT09IDQ3IC8qIFNsYXNoICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuY3MubG9va0FoZWFkKDIpID09PSA2MSAvKiBFcXVhbCAqLyA/IDMgOiAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbmV4dENoYXIgPT09IDYxIC8qIEVxdWFsICovID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2MCAvKiBMZXNzICovOlxuICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhciA9PT0gNjIgLyogR3JlYXRlciAqLykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0Q2hhciA9PT0gNjAgLyogTGVzcyAqLykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gNjEgLyogRXF1YWwgKi8gPyAzIDogMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG5leHRDaGFyID09PSA2MSAvKiBFcXVhbCAqLyA/IDIgOiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjIgLyogR3JlYXRlciAqLzpcbiAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPT09IDYyIC8qIEdyZWF0ZXIgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5jcy5sb29rQWhlYWQoMikgPT09IDYxIC8qIEVxdWFsICovID8gMyA6IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0Q2hhciA9PT0gNjEgLyogRXF1YWwgKi8gPyAyIDogMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDY0IC8qIEF0ICovOlxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IG5leHRDaGFyID09PSA2MSAvKiBFcXVhbCAqLyA/IDIgOiAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuT3BlcmF0b3IsIHRoaXMuY3MucG9zaXRpb24sIGxlbmd0aCkpO1xuICAgICAgICB0aGlzLmNzLmFkdmFuY2UobGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGhhbmRsZVVua25vd24oKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jcy5wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jcy5za2lwVG9XaGl0ZXNwYWNlKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY3MucG9zaXRpb24gLSBzdGFydDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLlVua25vd24sIHN0YXJ0LCBsZW5ndGgpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQ29tbWVudCgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNzLnBvc2l0aW9uO1xuICAgICAgICB0aGlzLmNzLnNraXBUb0VvbCgpO1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5Db21tZW50LCBzdGFydCwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0KSk7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICBnZXRTdHJpbmdQcmVmaXhMZW5ndGgoKSB7XG4gICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAzNCAvKiBEb3VibGVRdW90ZSAqLykge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFNpbXBsZSBzdHJpbmcsIG5vIHByZWZpeFxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNzLm5leHRDaGFyID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqLyB8fCB0aGlzLmNzLm5leHRDaGFyID09PSAzNCAvKiBEb3VibGVRdW90ZSAqLykge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmNzLmN1cnJlbnRDaGFyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMDIgLyogZiAqLzpcbiAgICAgICAgICAgICAgICBjYXNlIDcwIC8qIEYgKi86XG4gICAgICAgICAgICAgICAgY2FzZSAxMTQgLyogciAqLzpcbiAgICAgICAgICAgICAgICBjYXNlIDgyIC8qIFIgKi86XG4gICAgICAgICAgICAgICAgY2FzZSA5OCAvKiBiICovOlxuICAgICAgICAgICAgICAgIGNhc2UgNjYgLyogQiAqLzpcbiAgICAgICAgICAgICAgICBjYXNlIDExNyAvKiB1ICovOlxuICAgICAgICAgICAgICAgIGNhc2UgODUgLyogVSAqLzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8vIHNpbmdsZS1jaGFyIHByZWZpeCBsaWtlIHVcIlwiIG9yIHJcIlwiXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MubG9va0FoZWFkKDIpID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqLyB8fCB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi8pIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuY3MuZ2V0VGV4dCgpLnN1YnN0cih0aGlzLmNzLnBvc2l0aW9uLCAyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdyZic6XG4gICAgICAgICAgICAgICAgY2FzZSAndXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2JyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBnZXRRdW90ZVR5cGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3MubmV4dENoYXIgPT09IDM5IC8qIFNpbmdsZVF1b3RlICovICYmIHRoaXMuY3MubG9va0FoZWFkKDIpID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqL1xuICAgICAgICAgICAgICAgID8gUXVvdGVUeXBlLlRyaXBsZVNpbmdsZVxuICAgICAgICAgICAgICAgIDogUXVvdGVUeXBlLlNpbmdsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzLm5leHRDaGFyID09PSAzNCAvKiBEb3VibGVRdW90ZSAqLyAmJiB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi9cbiAgICAgICAgICAgICAgICA/IFF1b3RlVHlwZS5UcmlwbGVEb3VibGVcbiAgICAgICAgICAgICAgICA6IFF1b3RlVHlwZS5Eb3VibGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFF1b3RlVHlwZS5Ob25lO1xuICAgIH1cbiAgICBoYW5kbGVTdHJpbmcocXVvdGVUeXBlLCBzdHJpbmdQcmVmaXhMZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNzLnBvc2l0aW9uIC0gc3RyaW5nUHJlZml4TGVuZ3RoO1xuICAgICAgICBpZiAocXVvdGVUeXBlID09PSBRdW90ZVR5cGUuU2luZ2xlIHx8IHF1b3RlVHlwZSA9PT0gUXVvdGVUeXBlLkRvdWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5za2lwVG9TaW5nbGVFbmRRdW90ZShxdW90ZVR5cGUgPT09IFF1b3RlVHlwZS5TaW5nbGVcbiAgICAgICAgICAgICAgICA/IDM5IC8qIFNpbmdsZVF1b3RlICovXG4gICAgICAgICAgICAgICAgOiAzNCAvKiBEb3VibGVRdW90ZSAqLyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNzLmFkdmFuY2UoMyk7XG4gICAgICAgICAgICB0aGlzLnNraXBUb1RyaXBsZUVuZFF1b3RlKHF1b3RlVHlwZSA9PT0gUXVvdGVUeXBlLlRyaXBsZVNpbmdsZVxuICAgICAgICAgICAgICAgID8gMzkgLyogU2luZ2xlUXVvdGUgKi9cbiAgICAgICAgICAgICAgICA6IDM0IC8qIERvdWJsZVF1b3RlICovKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5TdHJpbmcsIHN0YXJ0LCB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQpKTtcbiAgICB9XG4gICAgc2tpcFRvU2luZ2xlRW5kUXVvdGUocXVvdGUpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmNzLmlzRW5kT2ZTdHJlYW0oKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDEwIC8qIExpbmVGZWVkICovIHx8IHRoaXMuY3MuY3VycmVudENoYXIgPT09IDEzIC8qIENhcnJpYWdlUmV0dXJuICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBVbnRlcm1pbmF0ZWQgc2luZ2xlLWxpbmUgc3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gOTIgLyogQmFja3NsYXNoICovICYmIHRoaXMuY3MubmV4dENoYXIgPT09IHF1b3RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcy5hZHZhbmNlKDIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IHF1b3RlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgIH1cbiAgICBza2lwVG9UcmlwbGVFbmRRdW90ZShxdW90ZSkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuY3MuaXNFbmRPZlN0cmVhbSgpICYmICh0aGlzLmNzLmN1cnJlbnRDaGFyICE9PSBxdW90ZSB8fCB0aGlzLmNzLm5leHRDaGFyICE9PSBxdW90ZSB8fCB0aGlzLmNzLmxvb2tBaGVhZCgyKSAhPT0gcXVvdGUpKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcy5hZHZhbmNlKDMpO1xuICAgIH1cbiAgICBza2lwRmxvYXRpbmdQb2ludENhbmRpZGF0ZShhbGxvd1NpZ24pIHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIGVuZCBvZiB0aGUgcG90ZW50aWFsIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY3MucG9zaXRpb247XG4gICAgICAgIHRoaXMuc2tpcEZyYWN0aW9uYWxOdW1iZXIoYWxsb3dTaWduKTtcbiAgICAgICAgaWYgKHRoaXMuY3MucG9zaXRpb24gPiBzdGFydCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDEwMSAvKiBlICovIHx8IHRoaXMuY3MuY3VycmVudENoYXIgPT09IDY5IC8qIEUgKi8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7IC8vIE9wdGlvbmFsIGV4cG9uZW50IHNpZ25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2tpcERlY2ltYWxOdW1iZXIodHJ1ZSk7IC8vIHNraXAgZXhwb25lbnQgdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jcy5wb3NpdGlvbiA+IHN0YXJ0O1xuICAgIH1cbiAgICBza2lwRnJhY3Rpb25hbE51bWJlcihhbGxvd1NpZ24pIHtcbiAgICAgICAgdGhpcy5za2lwRGVjaW1hbE51bWJlcihhbGxvd1NpZ24pO1xuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDYgLyogUGVyaW9kICovKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7IC8vIE9wdGlvbmFsIHBlcmlvZFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcERlY2ltYWxOdW1iZXIoZmFsc2UpO1xuICAgIH1cbiAgICBza2lwRGVjaW1hbE51bWJlcihhbGxvd1NpZ24pIHtcbiAgICAgICAgaWYgKGFsbG93U2lnbiAmJiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDUgLyogSHlwaGVuICovIHx8IHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQzIC8qIFBsdXMgKi8pKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7IC8vIE9wdGlvbmFsIHNpZ25cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2hhcmFjdGVyc18xLmlzRGVjaW1hbCh0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpOyAvLyBza2lwIGludGVnZXIgcGFydFxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbml6ZXIuanMubWFwIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRva2VuaXplci5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImNoYXJhY3RlcnNfMSIsInJlcXVpcmUiLCJjaGFyYWN0ZXJTdHJlYW1fMSIsInRleHRSYW5nZUNvbGxlY3Rpb25fMSIsInR5cGVzXzEiLCJRdW90ZVR5cGUiLCJUb2tlbiIsIlRleHRSYW5nZSIsImNvbnN0cnVjdG9yIiwidHlwZSIsInN0YXJ0IiwibGVuZ3RoIiwiVG9rZW5pemVyIiwiY3MiLCJDaGFyYWN0ZXJTdHJlYW0iLCJ0b2tlbnMiLCJtb2RlIiwiVG9rZW5pemVyTW9kZSIsIkZ1bGwiLCJ0b2tlbml6ZSIsInRleHQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInBvc2l0aW9uIiwiZW5kIiwiaXNFbmRPZlN0cmVhbSIsIkFkZE5leHRUb2tlbiIsIlRleHRSYW5nZUNvbGxlY3Rpb24iLCJza2lwV2hpdGVzcGFjZSIsImhhbmRsZUNoYXJhY3RlciIsIm1vdmVOZXh0Iiwic3RyaW5nUHJlZml4TGVuZ3RoIiwiZ2V0U3RyaW5nUHJlZml4TGVuZ3RoIiwiYWR2YW5jZSIsInF1b3RlVHlwZSIsImdldFF1b3RlVHlwZSIsIk5vbmUiLCJoYW5kbGVTdHJpbmciLCJjdXJyZW50Q2hhciIsImhhbmRsZUNvbW1lbnQiLCJDb21tZW50c0FuZFN0cmluZ3MiLCJwdXNoIiwiVG9rZW5UeXBlIiwiT3BlbkJyYWNlIiwiQ2xvc2VCcmFjZSIsIk9wZW5CcmFja2V0IiwiQ2xvc2VCcmFja2V0IiwiT3BlbkN1cmx5IiwiQ2xvc2VDdXJseSIsIkNvbW1hIiwiU2VtaWNvbG9uIiwiQ29sb24iLCJpc1Bvc3NpYmxlTnVtYmVyIiwidHJ5TnVtYmVyIiwiT3BlcmF0b3IiLCJ0cnlJZGVudGlmaWVyIiwidHJ5T3BlcmF0b3IiLCJoYW5kbGVVbmtub3duIiwiaXNJZGVudGlmaWVyU3RhcnRDaGFyIiwiaXNJZGVudGlmaWVyQ2hhciIsIklkZW50aWZpZXIiLCJpc0RlY2ltYWwiLCJuZXh0Q2hhciIsIm5leHQiLCJsb29rQWhlYWQiLCJwcmV2IiwibmV4dE5leHQiLCJsZWFkaW5nU2lnbiIsInJhZGl4IiwiaXNIZXgiLCJpc0JpbmFyeSIsImlzT2N0YWwiLCJnZXRUZXh0Iiwic3Vic3RyIiwiaXNOYU4iLCJwYXJzZUludCIsIk51bWJlciIsImRlY2ltYWwiLCJza2lwRmxvYXRpbmdQb2ludENhbmRpZGF0ZSIsInBhcnNlRmxvYXQiLCJza2lwVG9XaGl0ZXNwYWNlIiwiVW5rbm93biIsInNraXBUb0VvbCIsIkNvbW1lbnQiLCJwcmVmaXgiLCJ0b0xvd2VyQ2FzZSIsIlRyaXBsZVNpbmdsZSIsIlNpbmdsZSIsIlRyaXBsZURvdWJsZSIsIkRvdWJsZSIsInNraXBUb1NpbmdsZUVuZFF1b3RlIiwic2tpcFRvVHJpcGxlRW5kUXVvdGUiLCJTdHJpbmciLCJxdW90ZSIsImFsbG93U2lnbiIsInNraXBGcmFjdGlvbmFsTnVtYmVyIiwic2tpcERlY2ltYWxOdW1iZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFDQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxPQUF0QixFQUErQixZQUEvQixFQUE2QztBQUFFQyxFQUFBQSxLQUFLLEVBQUU7QUFBVCxDQUE3Qzs7QUFDQSxNQUFNQyxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQTVCOztBQUNBLE1BQU1DLGlCQUFpQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBakM7O0FBQ0EsTUFBTUUscUJBQXFCLEdBQUdGLE9BQU8sQ0FBQyx1QkFBRCxDQUFyQzs7QUFDQSxNQUFNRyxPQUFPLEdBQUdILE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLElBQUlJLFNBQUo7O0FBQ0EsQ0FBQyxVQUFVQSxTQUFWLEVBQXFCO0FBQ2xCQSxFQUFBQSxTQUFTLENBQUNBLFNBQVMsQ0FBQyxNQUFELENBQVQsR0FBb0IsQ0FBckIsQ0FBVCxHQUFtQyxNQUFuQztBQUNBQSxFQUFBQSxTQUFTLENBQUNBLFNBQVMsQ0FBQyxRQUFELENB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LEVBQUwsQ0FBUXlCLFdBQVIsS0FBd0I7QUFBRztBQUEzRSxLQUFiLEVBQXFHO0FBQ2pHLFdBQUt6QixFQUFMLENBQVFpQixRQUFSLEdBRGlHLENBQzdFO0FBQ3ZCOztBQUNELFdBQU85QixZQUFZLENBQUM2RCxTQUFiLENBQXVCLEtBQUtoRCxFQUFMLENBQVF5QixXQUEvQixDQUFQLEVBQW9EO0FBQ2hELFdBQUt6QixFQUFMLENBQVFpQixRQUFSLEdBRGdELENBQzVCO0FBQ3ZCO0FBQ0o7O0FBaGJXOztBQWtiaEJoQyxPQUFPLENBQUNjLFNBQVIsR0FBb0JBLFNBQXBCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4ndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjaGFyYWN0ZXJzXzEgPSByZXF1aXJlKFwiLi9jaGFyYWN0ZXJzXCIpO1xuY29uc3QgY2hhcmFjdGVyU3RyZWFtXzEgPSByZXF1aXJlKFwiLi9jaGFyYWN0ZXJTdHJlYW1cIik7XG5jb25zdCB0ZXh0UmFuZ2VDb2xsZWN0aW9uXzEgPSByZXF1aXJlKFwiLi90ZXh0UmFuZ2VDb2xsZWN0aW9uXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xudmFyIFF1b3RlVHlwZTtcbihmdW5jdGlvbiAoUXVvdGVUeXBlKSB7XG4gICAgUXVvdGVUeXBlW1F1b3RlVHlwZVtcIk5vbmVcIl0gPSAwXSA9IFwiTm9uZVwiO1xuICAgIFF1b3RlVHlwZVtRdW90ZVR5cGVbXCJTaW5nbGVcIl0gPSAxXSA9IFwiU2luZ2xlXCI7XG4gICAgUXVvdGVUeXBlW1F1b3RlVHlwZVtcIkRvdWJsZVwiXSA9IDJdID0gXCJEb3VibGVcIjtcbiAgICBRdW90ZVR5cGVbUXVvdGVUeXBlW1wiVHJpcGxlU2luZ2xlXCJdID0gM10gPSBcIlRyaXBsZVNpbmdsZVwiO1xuICAgIFF1b3RlVHlwZVtRdW90ZVR5cGVbXCJUcmlwbGVEb3VibGVcIl0gPSA0XSA9IFwiVHJpcGxlRG91YmxlXCI7XG59KShRdW90ZVR5cGUgfHwgKFF1b3RlVHlwZSA9IHt9KSk7XG5jbGFzcyBUb2tlbiBleHRlbmRzIHR5cGVzXzEuVGV4dFJhbmdlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBzdGFydCwgbGVuZ3RoKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbn1cbmNsYXNzIFRva2VuaXplciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY3MgPSBuZXcgY2hhcmFjdGVyU3RyZWFtXzEuQ2hhcmFjdGVyU3RyZWFtKCcnKTtcbiAgICAgICAgdGhpcy50b2tlbnMgPSBbXTtcbiAgICAgICAgdGhpcy5tb2RlID0gdHlwZXNfMS5Ub2tlbml6ZXJNb2RlLkZ1bGw7XG4gICAgfVxuICAgIHRva2VuaXplKHRleHQsIHN0YXJ0LCBsZW5ndGgsIG1vZGUpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYW5nZSBzdGFydCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVuZ3RoIDwgMCB8fCBzdGFydCArIGxlbmd0aCA+IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmFuZ2UgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlID0gbW9kZSAhPT0gdW5kZWZpbmVkID8gbW9kZSA6IHR5cGVzXzEuVG9rZW5pemVyTW9kZS5GdWxsO1xuICAgICAgICB0aGlzLmNzID0gbmV3IGNoYXJhY3RlclN0cmVhbV8xLkNoYXJhY3RlclN0cmVhbSh0ZXh0KTtcbiAgICAgICAgdGhpcy5jcy5wb3NpdGlvbiA9IHN0YXJ0O1xuICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmNzLmlzRW5kT2ZTdHJlYW0oKSkge1xuICAgICAgICAgICAgdGhpcy5BZGROZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNzLnBvc2l0aW9uID49IGVuZCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgdGV4dFJhbmdlQ29sbGVjdGlvbl8xLlRleHRSYW5nZUNvbGxlY3Rpb24odGhpcy50b2tlbnMpO1xuICAgIH1cbiAgICBBZGROZXh0VG9rZW4oKSB7XG4gICAgICAgIHRoaXMuY3Muc2tpcFdoaXRlc3BhY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuY3MuaXNFbmRPZlN0cmVhbSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhhbmRsZUNoYXJhY3RlcigpKSB7XG4gICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuICAgIGhhbmRsZUNoYXJhY3RlcigpIHtcbiAgICAgICAgLy8gZi1zdHJpbmdzLCBiLXN0cmluZ3MsIGV0Y1xuICAgICAgICBjb25zdCBzdHJpbmdQcmVmaXhMZW5ndGggPSB0aGlzLmdldFN0cmluZ1ByZWZpeExlbmd0aCgpO1xuICAgICAgICBpZiAoc3RyaW5nUHJlZml4TGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgIC8vIEluZGVlZCBhIHN0cmluZ1xuICAgICAgICAgICAgdGhpcy5jcy5hZHZhbmNlKHN0cmluZ1ByZWZpeExlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBxdW90ZVR5cGUgPSB0aGlzLmdldFF1b3RlVHlwZSgpO1xuICAgICAgICAgICAgaWYgKHF1b3RlVHlwZSAhPT0gUXVvdGVUeXBlLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN0cmluZyhxdW90ZVR5cGUsIHN0cmluZ1ByZWZpeExlbmd0aCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDM1IC8qIEhhc2ggKi8pIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tbWVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gdHlwZXNfMS5Ub2tlbml6ZXJNb2RlLkNvbW1lbnRzQW5kU3RyaW5ncykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5jcy5jdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgY2FzZSA0MCAvKiBPcGVuUGFyZW50aGVzaXMgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNlLCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQxIC8qIENsb3NlUGFyZW50aGVzaXMgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VCcmFjZSwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA5MSAvKiBPcGVuQnJhY2tldCAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5PcGVuQnJhY2tldCwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA5MyAvKiBDbG9zZUJyYWNrZXQgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuQ2xvc2VCcmFja2V0LCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEyMyAvKiBPcGVuQnJhY2UgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuT3BlbkN1cmx5LCB0aGlzLmNzLnBvc2l0aW9uLCAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEyNSAvKiBDbG9zZUJyYWNlICovOlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLkNsb3NlQ3VybHksIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDQgLyogQ29tbWEgKi86XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuQ29tbWEsIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTkgLyogU2VtaWNvbG9uICovOlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLlNlbWljb2xvbiwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OCAvKiBDb2xvbiAqLzpcbiAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5Db2xvbiwgdGhpcy5jcy5wb3NpdGlvbiwgMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Bvc3NpYmxlTnVtYmVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TnVtYmVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0NiAvKiBQZXJpb2QgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuT3BlcmF0b3IsIHRoaXMuY3MucG9zaXRpb24sIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50cnlJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRyeU9wZXJhdG9yKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVW5rbm93bigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5SWRlbnRpZmllcigpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNzLnBvc2l0aW9uO1xuICAgICAgICBpZiAoY2hhcmFjdGVyc18xLmlzSWRlbnRpZmllclN0YXJ0Q2hhcih0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnNfMS5pc0lkZW50aWZpZXJDaGFyKHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNzLnBvc2l0aW9uID4gc3RhcnQpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IHRleHQgPSB0aGlzLmNzLmdldFRleHQoKS5zdWJzdHIoc3RhcnQsIHRoaXMuY3MucG9zaXRpb24gLSBzdGFydCk7XG4gICAgICAgICAgICAvLyBjb25zdCB0eXBlID0gdGhpcy5rZXl3b3Jkcy5maW5kKCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSB0ZXh0KSA/IFRva2VuVHlwZS5LZXl3b3JkIDogVG9rZW5UeXBlLklkZW50aWZpZXI7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5JZGVudGlmaWVyLCBzdGFydCwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0KSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbiAgICBpc1Bvc3NpYmxlTnVtYmVyKCkge1xuICAgICAgICBpZiAoY2hhcmFjdGVyc18xLmlzRGVjaW1hbCh0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ2IC8qIFBlcmlvZCAqLyAmJiBjaGFyYWN0ZXJzXzEuaXNEZWNpbWFsKHRoaXMuY3MubmV4dENoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0ID0gKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ1IC8qIEh5cGhlbiAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0MyAvKiBQbHVzICovKSA/IDEgOiAwO1xuICAgICAgICAvLyBOZXh0IGNoYXJhY3RlciBtdXN0IGJlIGRlY2ltYWwgb3IgYSBkb3Qgb3RoZXJ3aXNlXG4gICAgICAgIC8vIGl0IGlzIG5vdCBhIG51bWJlci4gTm8gd2hpdGVzcGFjZSBpcyBhbGxvd2VkLlxuICAgICAgICBpZiAoY2hhcmFjdGVyc18xLmlzRGVjaW1hbCh0aGlzLmNzLmxvb2tBaGVhZChuZXh0KSkgfHwgdGhpcy5jcy5sb29rQWhlYWQobmV4dCkgPT09IDQ2IC8qIFBlcmlvZCAqLykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgd2hhdCBwcmV2aW91cyB0b2tlbiBpcywgaWYgYW55XG4gICAgICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHRoaXMgY2FuIG9ubHkgYmUgYSBudW1iZXJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLk9wZW5CcmFjZVxuICAgICAgICAgICAgICAgIHx8IHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuT3BlbkJyYWNrZXRcbiAgICAgICAgICAgICAgICB8fCBwcmV2LnR5cGUgPT09IHR5cGVzXzEuVG9rZW5UeXBlLkNvbW1hXG4gICAgICAgICAgICAgICAgfHwgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5Db2xvblxuICAgICAgICAgICAgICAgIHx8IHByZXYudHlwZSA9PT0gdHlwZXNfMS5Ub2tlblR5cGUuU2VtaWNvbG9uXG4gICAgICAgICAgICAgICAgfHwgcHJldi50eXBlID09PSB0eXBlc18xLlRva2VuVHlwZS5PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNzLmxvb2tBaGVhZChuZXh0KSA9PT0gNDggLyogXzAgKi8pIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHROZXh0ID0gdGhpcy5jcy5sb29rQWhlYWQobmV4dCArIDEpO1xuICAgICAgICAgICAgaWYgKG5leHROZXh0ID09PSAxMjAgLyogeCAqLyB8fCBuZXh0TmV4dCA9PT0gODggLyogWCAqLykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHROZXh0ID09PSA5OCAvKiBiICovIHx8IG5leHROZXh0ID09PSA2NiAvKiBCICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5leHQgPT09IDExMSAvKiBvICovIHx8IG5leHROZXh0ID09PSA3OSAvKiBPICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgdHJ5TnVtYmVyKCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY3MucG9zaXRpb247XG4gICAgICAgIGxldCBsZWFkaW5nU2lnbiA9IDA7XG4gICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0NSAvKiBIeXBoZW4gKi8gfHwgdGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDMgLyogUGx1cyAqLykge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpOyAvLyBTa2lwIGxlYWRpbmcgKy8tXG4gICAgICAgICAgICBsZWFkaW5nU2lnbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ4IC8qIF8wICovKSB7XG4gICAgICAgICAgICBsZXQgcmFkaXggPSAwO1xuICAgICAgICAgICAgLy8gVHJ5IGhleCA9PiBoZXhpbnRlZ2VyOiBcIjBcIiAoXCJ4XCIgfCBcIlhcIikgKFtcIl9cIl0gaGV4ZGlnaXQpK1xuICAgICAgICAgICAgaWYgKCh0aGlzLmNzLm5leHRDaGFyID09PSAxMjAgLyogeCAqLyB8fCB0aGlzLmNzLm5leHRDaGFyID09PSA4OCAvKiBYICovKSAmJiBjaGFyYWN0ZXJzXzEuaXNIZXgodGhpcy5jcy5sb29rQWhlYWQoMikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcy5hZHZhbmNlKDIpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzXzEuaXNIZXgodGhpcy5jcy5jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYWRpeCA9IDE2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVHJ5IGJpbmFyeSA9PiBiaW5pbnRlZ2VyOiBcIjBcIiAoXCJiXCIgfCBcIkJcIikgKFtcIl9cIl0gYmluZGlnaXQpK1xuICAgICAgICAgICAgaWYgKCh0aGlzLmNzLm5leHRDaGFyID09PSA5OCAvKiBiICovIHx8IHRoaXMuY3MubmV4dENoYXIgPT09IDY2IC8qIEIgKi8pICYmIGNoYXJhY3RlcnNfMS5pc0JpbmFyeSh0aGlzLmNzLmxvb2tBaGVhZCgyKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLmFkdmFuY2UoMik7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnNfMS5pc0JpbmFyeSh0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJhZGl4ID0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRyeSBvY3RhbCA9PiBvY3RpbnRlZ2VyOiBcIjBcIiAoXCJvXCIgfCBcIk9cIikgKFtcIl9cIl0gb2N0ZGlnaXQpK1xuICAgICAgICAgICAgaWYgKCh0aGlzLmNzLm5leHRDaGFyID09PSAxMTEgLyogbyAqLyB8fCB0aGlzLmNzLm5leHRDaGFyID09PSA3OSAvKiBPICovKSAmJiBjaGFyYWN0ZXJzXzEuaXNPY3RhbCh0aGlzLmNzLmxvb2tBaGVhZCgyKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLmFkdmFuY2UoMik7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnNfMS5pc09jdGFsKHRoaXMuY3MuY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmFkaXggPSA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJhZGl4ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNzLmdldFRleHQoKS5zdWJzdHIoc3RhcnQgKyBsZWFkaW5nU2lnbiwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0IC0gbGVhZGluZ1NpZ24pO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQodGV4dCwgcmFkaXgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5OdW1iZXIsIHN0YXJ0LCB0ZXh0Lmxlbmd0aCArIGxlYWRpbmdTaWduKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICAvLyBUcnkgZGVjaW1hbCBpbnQgPT5cbiAgICAgICAgLy8gICAgZGVjaW50ZWdlcjogbm9uemVyb2RpZ2l0IChbXCJfXCJdIGRpZ2l0KSogfCBcIjBcIiAoW1wiX1wiXSBcIjBcIikqXG4gICAgICAgIC8vICAgIG5vbnplcm9kaWdpdDogXCIxXCIuLi5cIjlcIlxuICAgICAgICAvLyAgICBkaWdpdDogXCIwXCIuLi5cIjlcIlxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA+PSA0OSAvKiBfMSAqLyAmJiB0aGlzLmNzLmN1cnJlbnRDaGFyIDw9IDU3IC8qIF85ICovKSB7XG4gICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyc18xLmlzRGVjaW1hbCh0aGlzLmNzLmN1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlY2ltYWwgPSB0aGlzLmNzLmN1cnJlbnRDaGFyICE9PSA0NiAvKiBQZXJpb2QgKi8gJiYgdGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gMTAxIC8qIGUgKi8gJiYgdGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gNjkgLyogRSAqLztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDggLyogXzAgKi8pIHsgLy8gXCIwXCIgKFtcIl9cIl0gXCIwXCIpKlxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ4IC8qIF8wICovIHx8IHRoaXMuY3MuY3VycmVudENoYXIgPT09IDk1IC8qIFVuZGVyc2NvcmUgKi8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNzLm1vdmVOZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWNpbWFsID0gdGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gNDYgLyogUGVyaW9kICovICYmIHRoaXMuY3MuY3VycmVudENoYXIgIT09IDEwMSAvKiBlICovICYmIHRoaXMuY3MuY3VycmVudENoYXIgIT09IDY5IC8qIEUgKi87XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlY2ltYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNzLmdldFRleHQoKS5zdWJzdHIoc3RhcnQgKyBsZWFkaW5nU2lnbiwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0IC0gbGVhZGluZ1NpZ24pO1xuICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUludCh0ZXh0LCAxMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuTnVtYmVyLCBzdGFydCwgdGV4dC5sZW5ndGggKyBsZWFkaW5nU2lnbikpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZsb2F0aW5nIHBvaW50LiBTaWduIHdhcyBhbHJlYWR5IHNraXBwZWQgb3Zlci5cbiAgICAgICAgaWYgKCh0aGlzLmNzLmN1cnJlbnRDaGFyID49IDQ4IC8qIF8wICovICYmIHRoaXMuY3MuY3VycmVudENoYXIgPD0gNTcgLyogXzkgKi8pIHx8XG4gICAgICAgICAgICAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gNDYgLyogUGVyaW9kICovICYmIHRoaXMuY3MubmV4dENoYXIgPj0gNDggLyogXzAgKi8gJiYgdGhpcy5jcy5uZXh0Q2hhciA8PSA1NyAvKiBfOSAqLykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNraXBGbG9hdGluZ1BvaW50Q2FuZGlkYXRlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNzLmdldFRleHQoKS5zdWJzdHIoc3RhcnQsIHRoaXMuY3MucG9zaXRpb24gLSBzdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KHRleHQpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5OdW1iZXIsIHN0YXJ0LCB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3MucG9zaXRpb24gPSBzdGFydDtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgdHJ5T3BlcmF0b3IoKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBjb25zdCBuZXh0Q2hhciA9IHRoaXMuY3MubmV4dENoYXI7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jcy5jdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgY2FzZSA0MyAvKiBQbHVzICovOlxuICAgICAgICAgICAgY2FzZSAzOCAvKiBBbXBlcnNhbmQgKi86XG4gICAgICAgICAgICBjYXNlIDEyNCAvKiBCYXIgKi86XG4gICAgICAgICAgICBjYXNlIDk0IC8qIENhcmV0ICovOlxuICAgICAgICAgICAgY2FzZSA2MSAvKiBFcXVhbCAqLzpcbiAgICAgICAgICAgIGNhc2UgMzMgLyogRXhjbGFtYXRpb25NYXJrICovOlxuICAgICAgICAgICAgY2FzZSAzNyAvKiBQZXJjZW50ICovOlxuICAgICAgICAgICAgY2FzZSAxMjYgLyogVGlsZGUgKi86XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gbmV4dENoYXIgPT09IDYxIC8qIEVxdWFsICovID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ1IC8qIEh5cGhlbiAqLzpcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0Q2hhciA9PT0gNjEgLyogRXF1YWwgKi8gfHwgbmV4dENoYXIgPT09IDYyIC8qIEdyZWF0ZXIgKi8gPyAyIDogMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDIgLyogQXN0ZXJpc2sgKi86XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyID09PSA0MiAvKiBBc3RlcmlzayAqLykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gNjEgLyogRXF1YWwgKi8gPyAzIDogMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG5leHRDaGFyID09PSA2MSAvKiBFcXVhbCAqLyA/IDIgOiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDcgLyogU2xhc2ggKi86XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyID09PSA0NyAvKiBTbGFzaCAqLykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gNjEgLyogRXF1YWwgKi8gPyAzIDogMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG5leHRDaGFyID09PSA2MSAvKiBFcXVhbCAqLyA/IDIgOiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjAgLyogTGVzcyAqLzpcbiAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPT09IDYyIC8qIEdyZWF0ZXIgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dENoYXIgPT09IDYwIC8qIExlc3MgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5jcy5sb29rQWhlYWQoMikgPT09IDYxIC8qIEVxdWFsICovID8gMyA6IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0Q2hhciA9PT0gNjEgLyogRXF1YWwgKi8gPyAyIDogMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDYyIC8qIEdyZWF0ZXIgKi86XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyID09PSA2MiAvKiBHcmVhdGVyICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuY3MubG9va0FoZWFkKDIpID09PSA2MSAvKiBFcXVhbCAqLyA/IDMgOiAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbmV4dENoYXIgPT09IDYxIC8qIEVxdWFsICovID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2NCAvKiBBdCAqLzpcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0Q2hhciA9PT0gNjEgLyogRXF1YWwgKi8gPyAyIDogMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2gobmV3IFRva2VuKHR5cGVzXzEuVG9rZW5UeXBlLk9wZXJhdG9yLCB0aGlzLmNzLnBvc2l0aW9uLCBsZW5ndGgpKTtcbiAgICAgICAgdGhpcy5jcy5hZHZhbmNlKGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBsZW5ndGggPiAwO1xuICAgIH1cbiAgICBoYW5kbGVVbmtub3duKCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY3MucG9zaXRpb247XG4gICAgICAgIHRoaXMuY3Muc2tpcFRvV2hpdGVzcGFjZSgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNzLnBvc2l0aW9uIC0gc3RhcnQ7XG4gICAgICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKG5ldyBUb2tlbih0eXBlc18xLlRva2VuVHlwZS5Vbmtub3duLCBzdGFydCwgbGVuZ3RoKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhbmRsZUNvbW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jcy5wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jcy5za2lwVG9Fb2woKTtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuQ29tbWVudCwgc3RhcnQsIHRoaXMuY3MucG9zaXRpb24gLSBzdGFydCkpO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG4gICAgZ2V0U3RyaW5nUHJlZml4TGVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi8gfHwgdGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBTaW1wbGUgc3RyaW5nLCBubyBwcmVmaXhcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcy5uZXh0Q2hhciA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi8gfHwgdGhpcy5jcy5uZXh0Q2hhciA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi8pIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jcy5jdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgMTAyIC8qIGYgKi86XG4gICAgICAgICAgICAgICAgY2FzZSA3MCAvKiBGICovOlxuICAgICAgICAgICAgICAgIGNhc2UgMTE0IC8qIHIgKi86XG4gICAgICAgICAgICAgICAgY2FzZSA4MiAvKiBSICovOlxuICAgICAgICAgICAgICAgIGNhc2UgOTggLyogYiAqLzpcbiAgICAgICAgICAgICAgICBjYXNlIDY2IC8qIEIgKi86XG4gICAgICAgICAgICAgICAgY2FzZSAxMTcgLyogdSAqLzpcbiAgICAgICAgICAgICAgICBjYXNlIDg1IC8qIFUgKi86XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyAvLyBzaW5nbGUtY2hhciBwcmVmaXggbGlrZSB1XCJcIiBvciByXCJcIlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi8gfHwgdGhpcy5jcy5sb29rQWhlYWQoMikgPT09IDM0IC8qIERvdWJsZVF1b3RlICovKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmNzLmdldFRleHQoKS5zdWJzdHIodGhpcy5jcy5wb3NpdGlvbiwgMikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncmYnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3VyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgZ2V0UXVvdGVUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy5jcy5jdXJyZW50Q2hhciA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzLm5leHRDaGFyID09PSAzOSAvKiBTaW5nbGVRdW90ZSAqLyAmJiB0aGlzLmNzLmxvb2tBaGVhZCgyKSA9PT0gMzkgLyogU2luZ2xlUXVvdGUgKi9cbiAgICAgICAgICAgICAgICA/IFF1b3RlVHlwZS5UcmlwbGVTaW5nbGVcbiAgICAgICAgICAgICAgICA6IFF1b3RlVHlwZS5TaW5nbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDM0IC8qIERvdWJsZVF1b3RlICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcy5uZXh0Q2hhciA9PT0gMzQgLyogRG91YmxlUXVvdGUgKi8gJiYgdGhpcy5jcy5sb29rQWhlYWQoMikgPT09IDM0IC8qIERvdWJsZVF1b3RlICovXG4gICAgICAgICAgICAgICAgPyBRdW90ZVR5cGUuVHJpcGxlRG91YmxlXG4gICAgICAgICAgICAgICAgOiBRdW90ZVR5cGUuRG91YmxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBRdW90ZVR5cGUuTm9uZTtcbiAgICB9XG4gICAgaGFuZGxlU3RyaW5nKHF1b3RlVHlwZSwgc3RyaW5nUHJlZml4TGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jcy5wb3NpdGlvbiAtIHN0cmluZ1ByZWZpeExlbmd0aDtcbiAgICAgICAgaWYgKHF1b3RlVHlwZSA9PT0gUXVvdGVUeXBlLlNpbmdsZSB8fCBxdW90ZVR5cGUgPT09IFF1b3RlVHlwZS5Eb3VibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2tpcFRvU2luZ2xlRW5kUXVvdGUocXVvdGVUeXBlID09PSBRdW90ZVR5cGUuU2luZ2xlXG4gICAgICAgICAgICAgICAgPyAzOSAvKiBTaW5nbGVRdW90ZSAqL1xuICAgICAgICAgICAgICAgIDogMzQgLyogRG91YmxlUXVvdGUgKi8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcy5hZHZhbmNlKDMpO1xuICAgICAgICAgICAgdGhpcy5za2lwVG9UcmlwbGVFbmRRdW90ZShxdW90ZVR5cGUgPT09IFF1b3RlVHlwZS5UcmlwbGVTaW5nbGVcbiAgICAgICAgICAgICAgICA/IDM5IC8qIFNpbmdsZVF1b3RlICovXG4gICAgICAgICAgICAgICAgOiAzNCAvKiBEb3VibGVRdW90ZSAqLyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChuZXcgVG9rZW4odHlwZXNfMS5Ub2tlblR5cGUuU3RyaW5nLCBzdGFydCwgdGhpcy5jcy5wb3NpdGlvbiAtIHN0YXJ0KSk7XG4gICAgfVxuICAgIHNraXBUb1NpbmdsZUVuZFF1b3RlKHF1b3RlKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy5jcy5pc0VuZE9mU3RyZWFtKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAxMCAvKiBMaW5lRmVlZCAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAxMyAvKiBDYXJyaWFnZVJldHVybiAqLykge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gVW50ZXJtaW5hdGVkIHNpbmdsZS1saW5lIHN0cmluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDkyIC8qIEJhY2tzbGFzaCAqLyAmJiB0aGlzLmNzLm5leHRDaGFyID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3MuYWR2YW5jZSgyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTtcbiAgICB9XG4gICAgc2tpcFRvVHJpcGxlRW5kUXVvdGUocXVvdGUpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmNzLmlzRW5kT2ZTdHJlYW0oKSAmJiAodGhpcy5jcy5jdXJyZW50Q2hhciAhPT0gcXVvdGUgfHwgdGhpcy5jcy5uZXh0Q2hhciAhPT0gcXVvdGUgfHwgdGhpcy5jcy5sb29rQWhlYWQoMikgIT09IHF1b3RlKSkge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3MuYWR2YW5jZSgzKTtcbiAgICB9XG4gICAgc2tpcEZsb2F0aW5nUG9pbnRDYW5kaWRhdGUoYWxsb3dTaWduKSB7XG4gICAgICAgIC8vIERldGVybWluZSBlbmQgb2YgdGhlIHBvdGVudGlhbCBmbG9hdGluZyBwb2ludCBudW1iZXJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNzLnBvc2l0aW9uO1xuICAgICAgICB0aGlzLnNraXBGcmFjdGlvbmFsTnVtYmVyKGFsbG93U2lnbik7XG4gICAgICAgIGlmICh0aGlzLmNzLnBvc2l0aW9uID4gc3RhcnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNzLmN1cnJlbnRDaGFyID09PSAxMDEgLyogZSAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA2OSAvKiBFICovKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpOyAvLyBPcHRpb25hbCBleHBvbmVudCBzaWduXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNraXBEZWNpbWFsTnVtYmVyKHRydWUpOyAvLyBza2lwIGV4cG9uZW50IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3MucG9zaXRpb24gPiBzdGFydDtcbiAgICB9XG4gICAgc2tpcEZyYWN0aW9uYWxOdW1iZXIoYWxsb3dTaWduKSB7XG4gICAgICAgIHRoaXMuc2tpcERlY2ltYWxOdW1iZXIoYWxsb3dTaWduKTtcbiAgICAgICAgaWYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ2IC8qIFBlcmlvZCAqLykge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpOyAvLyBPcHRpb25hbCBwZXJpb2RcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNraXBEZWNpbWFsTnVtYmVyKGZhbHNlKTtcbiAgICB9XG4gICAgc2tpcERlY2ltYWxOdW1iZXIoYWxsb3dTaWduKSB7XG4gICAgICAgIGlmIChhbGxvd1NpZ24gJiYgKHRoaXMuY3MuY3VycmVudENoYXIgPT09IDQ1IC8qIEh5cGhlbiAqLyB8fCB0aGlzLmNzLmN1cnJlbnRDaGFyID09PSA0MyAvKiBQbHVzICovKSkge1xuICAgICAgICAgICAgdGhpcy5jcy5tb3ZlTmV4dCgpOyAvLyBPcHRpb25hbCBzaWduXG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnNfMS5pc0RlY2ltYWwodGhpcy5jcy5jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgIHRoaXMuY3MubW92ZU5leHQoKTsgLy8gc2tpcCBpbnRlZ2VyIHBhcnRcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9rZW5pemVyLmpzLm1hcCJdfQ== \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index e570a607..6c8c8291 100644 --- a/dist/main.js +++ b/dist/main.js @@ -33,7 +33,7 @@ class PythonLanguageClient extends AutoLanguageClient { require("atom-package-deps").install("ide-python", true).then(() => { // enable if disabled atom.packages.enablePackage("atom-ide-base"); - atom.notifications.addSuccess("ide-pyhon: atom-ide-base was installed and enabled..."); + atom.notifications.addSuccess("ide-python: atom-ide-base was installed and enabled..."); }); } // Remove deprecated option @@ -61,8 +61,9 @@ class PythonLanguageClient extends AutoLanguageClient { } mapConfigurationObject(configuration) { + const lsp = configuration.pyls || "pylsp"; return { - pyls: { + [lsp]: { configurationSources: configuration.pylsConfigurationSources, rope: sanitizeConfig(configuration.rope), plugins: configuration.pylsPlugins @@ -157,4 +158,4 @@ const pythonClient = new PythonLanguageClient(); pythonClient.createDebuggerProvider = _main.createDebuggerProvider; // add the debugger module.exports = pythonClient; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiXSwibmFtZXMiOlsic2hlbGwiLCJyZXF1aXJlIiwid2hpY2hTeW5jIiwic3luYyIsIkF1dG9MYW5ndWFnZUNsaWVudCIsImRldGVjdFZpcnR1YWxFbnYiLCJkZXRlY3RQaXBFbnYiLCJyZXBsYWNlUGlwRW52UGF0aFZhciIsInNhbml0aXplQ29uZmlnIiwiUFlUSE9OX1JFR0VYIiwiUHl0aG9uTGFuZ3VhZ2VDbGllbnQiLCJhY3RpdmF0ZSIsImF0b20iLCJwYWNrYWdlcyIsImlzUGFja2FnZUxvYWRlZCIsImluc3RhbGwiLCJ0aGVuIiwiZW5hYmxlUGFja2FnZSIsIm5vdGlmaWNhdGlvbnMiLCJhZGRTdWNjZXNzIiwiY29uZmlnIiwidW5zZXQiLCJnZXRHcmFtbWFyU2NvcGVzIiwiZ2V0TGFuZ3VhZ2VOYW1lIiwiZ2V0U2VydmVyTmFtZSIsImdldFJvb3RDb25maWd1cmF0aW9uS2V5IiwibWFwQ29uZmlndXJhdGlvbk9iamVjdCIsImNvbmZpZ3VyYXRpb24iLCJweWxzIiwiY29uZmlndXJhdGlvblNvdXJjZXMiLCJweWxzQ29uZmlndXJhdGlvblNvdXJjZXMiLCJyb3BlIiwicGx1Z2lucyIsInB5bHNQbHVnaW5zIiwic3RhcnRTZXJ2ZXJQcm9jZXNzIiwicHJvamVjdFBhdGgiLCJ2ZW52UGF0aCIsInB5bHNFbnZpcm9ubWVudCIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJlbnYiLCJWSVJUVUFMX0VOViIsInB5dGhvbkJpbiIsImdldCIsIm5vdGhyb3ciLCJweXRob24iLCJjaGlsZFByb2Nlc3MiLCJzcGF3biIsImN3ZCIsIm9uU3Bhd25FcnJvciIsImVyciIsImRlc2NyaXB0aW9uIiwiY29kZSIsImFkZEVycm9yIiwiZGlzbWlzc2FibGUiLCJvblNwYXduQ2xvc2UiLCJzaWduYWwiLCJidXR0b25zIiwidGV4dCIsIm9uRGlkQ2xpY2siLCJ3b3Jrc3BhY2UiLCJvcGVuIiwib3BlbkV4dGVybmFsIiwiZ2V0U3VnZ2VzdGlvbnMiLCJyZXF1ZXN0IiwidGVzdCIsInByZWZpeCIsImRlYWN0aXZhdGUiLCJQcm9taXNlIiwicmFjZSIsImNyZWF0ZVRpbWVvdXRQcm9taXNlIiwibWlsbGlzZWNvbmRzIiwicmVzb2x2ZSIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwibG9nZ2VyIiwiZXJyb3IiLCJweXRob25DbGllbnQiLCJjcmVhdGVEZWJ1Z2dlclByb3ZpZGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFLQTs7QUFMQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBWUMsT0FBTyxDQUFDLFVBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsT0FBRCxDQUFQLENBQWlCRSxJQUFuQzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBeUJILE9BQU8sQ0FBQyxxQkFBRCxDQUF0Qzs7QUFDQSxNQUFNO0FBQUVJLEVBQUFBLGdCQUFGO0FBQW9CQyxFQUFBQSxZQUFwQjtBQUFrQ0MsRUFBQUEsb0JBQWxDO0FBQXdEQyxFQUFBQTtBQUF4RCxJQUEyRVAsT0FBTyxDQUFDLFNBQUQsQ0FBeEY7O0FBSUE7QUFDQTtBQUNBLE1BQU1RLFlBQVksR0FBRyxvREFBckI7O0FBRUEsTUFBTUMsb0JBQU4sU0FBbUNOLGtCQUFuQyxDQUFzRDtBQUNwRE8sRUFBQUEsUUFBUSxHQUFHO0FBQ1QsVUFBTUEsUUFBTjs7QUFDQSxRQUFJLENBQUNDLElBQUksQ0FBQ0MsUUFBTCxDQUFjQyxlQUFkLENBQThCLGVBQTlCLENBQUwsRUFBcUQ7QUFDbkQ7QUFDQTtBQUNBYixNQUFBQSxPQUFPLENBQUMsbUJBQUQsQ0FBUCxDQUNHYyxPQURILENBQ1csWUFEWCxFQUN5QixJQUR6QixFQUVHQyxJQUZILENBRVEsTUFBTTtBQUNWO0FBQ0FKLFFBQUFBLElBQUksQ0FBQ0MsUUFBTCxDQUFjSSxhQUFkLENBQTRCLGVBQTVCO0FBQ0FMLFFBQUFBLElBQUksQ0FBQ00sYUFBTCxDQUFtQkMsVUFBbkIsQ0FB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QixZQUFNQyxPQUFPLEdBQUdDLFVBQVUsQ0FBQyxNQUFNO0FBQy9CQyxRQUFBQSxZQUFZLENBQUNGLE9BQUQsQ0FBWjtBQUNBLGFBQUtHLE1BQUwsQ0FBWUMsS0FBWixDQUFtQixnQ0FBK0JOLFlBQWEseUJBQS9EO0FBQ0FDLFFBQUFBLE9BQU87QUFDUixPQUp5QixFQUl2QkQsWUFKdUIsQ0FBMUI7QUFLRCxLQU5NLENBQVA7QUFPRDs7QUFqSW1EOztBQW9JdEQsTUFBTU8sWUFBWSxHQUFHLElBQUlyRSxvQkFBSixFQUFyQjtBQUNBcUUsWUFBWSxDQUFDQyxzQkFBYixHQUFzQ0EsNEJBQXRDLEMsQ0FBNkQ7O0FBQzdEQyxNQUFNLENBQUNDLE9BQVAsR0FBaUJILFlBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBzaGVsbCB9ID0gcmVxdWlyZShcImVsZWN0cm9uXCIpXG5jb25zdCB3aGljaFN5bmMgPSByZXF1aXJlKFwid2hpY2hcIikuc3luY1xuY29uc3QgeyBBdXRvTGFuZ3VhZ2VDbGllbnQgfSA9IHJlcXVpcmUoXCJhdG9tLWxhbmd1YWdlY2xpZW50XCIpXG5jb25zdCB7IGRldGVjdFZpcnR1YWxFbnYsIGRldGVjdFBpcEVudiwgcmVwbGFjZVBpcEVudlBhdGhWYXIsIHNhbml0aXplQ29uZmlnIH0gPSByZXF1aXJlKFwiLi91dGlsc1wiKVxuXG5pbXBvcnQgeyBjcmVhdGVEZWJ1Z2dlclByb3ZpZGVyLCBhY3RpdmF0ZSBhcyBkZWJ1Z2dlckFjdGl2YXRlLCBkaXNwb3NlIGFzIGRlYnVnZ2VyRGlzcG9zZSB9IGZyb20gXCIuL2RlYnVnZ2VyL21haW5cIlxuXG4vLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9udGVyYWN0L2h5ZHJvZ2VuL2Jsb2IvbWFzdGVyL2xpYi9hdXRvY29tcGxldGUtcHJvdmlkZXIuanMjTDMzXG4vLyBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvNTQ3NDAwOFxuY29uc3QgUFlUSE9OX1JFR0VYID0gLygoW15cXFdcXGRdfFtcXHUwMEEwLVxcdUZGRkZdKVtcXHcuXFx1MDBBMC1cXHVGRkZGXSopfFxcLiQvXG5cbmNsYXNzIFB5dGhvbkxhbmd1YWdlQ2xpZW50IGV4dGVuZHMgQXV0b0xhbmd1YWdlQ2xpZW50IHtcbiAgYWN0aXZhdGUoKSB7XG4gICAgc3VwZXIuYWN0aXZhdGUoKVxuICAgIGlmICghYXRvbS5wYWNrYWdlcy5pc1BhY2thZ2VMb2FkZWQoXCJhdG9tLWlkZS1iYXNlXCIpKSB7XG4gICAgICAvLyBpbnN0YWxsIGlmIG5vdCBpbnN0YWxsZWRcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZXF1aXJlKFwiYXRvbS1wYWNrYWdlLWRlcHNcIilcbiAgICAgICAgLmluc3RhbGwoXCJpZGUtcHl0aG9uXCIsIHRydWUpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBlbmFibGUgaWYgZGlzYWJsZWRcbiAgICAgICAgICBhdG9tLnBhY2thZ2VzLmVuYWJsZVBhY2thZ2UoXCJhdG9tLWlkZS1iYXNlXCIpXG4gICAgICAgICAgYXRvbS5ub3RpZmljYXRpb25zLmFkZFN1Y2Nlc3MoXCJpZGUtcHlob246IGF0b20taWRlLWJhc2Ugd2FzIGluc3RhbGxlZCBhbmQgZW5hYmxlZC4uLlwiKVxuICAgICAgICB9KVxuICAgIH1cbiAgICAvLyBSZW1vdmUgZGVwcmVjYXRlZCBvcHRpb25cbiAgICBhdG9tLmNvbmZpZy51bnNldChcImlkZS1weXRob24ucHlsc1BhdGhcIilcbiAgICBkZWJ1Z2dlckFjdGl2YXRlKClcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbiAgZ2V0R3JhbW1hclNjb3BlcygpIHtcbiAgICByZXR1cm4gW1wic291cmNlLnB5dGhvblwiLCBcInB5dGhvblwiXVxuICB9XG5cbiAgZ2V0TGFuZ3VhZ2VOYW1lKCkge1xuICAgIHJldHVybiBcIlB5dGhvblwiXG4gIH1cblxuICBnZXRTZXJ2ZXJOYW1lKCkge1xuICAgIHJldHVybiBcInB5bHNcIlxuICB9XG5cbiAgZ2V0Um9vdENvbmZpZ3VyYXRpb25LZXkoKSB7XG4gICAgcmV0dXJuIFwiaWRlLXB5dGhvblwiXG4gIH1cblxuICBtYXBDb25maWd1cmF0aW9uT2JqZWN0KGNvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHlsczoge1xuICAgICAgICBjb25maWd1cmF0aW9uU291cmNlczogY29uZmlndXJhdGlvbi5weWxzQ29uZmlndXJhdGlvblNvdXJjZXMsXG4gICAgICAgIHJvcGU6IHNhbml0aXplQ29uZmlnKGNvbmZpZ3VyYXRpb24ucm9wZSksXG4gICAgICAgIHBsdWdpbnM6IGNvbmZpZ3VyYXRpb24ucHlsc1BsdWdpbnMsXG4gICAgICB9LFxuICAgIH1cbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuICBhc3luYyBzdGFydFNlcnZlclByb2Nlc3MocHJvamVjdFBhdGgpIHtcbiAgICBjb25zdCB2ZW52UGF0aCA9IChhd2FpdCBkZXRlY3RQaXBFbnYocHJvamVjdFBhdGgpKSB8fCAoYXdhaXQgZGV0ZWN0VmlydHVhbEVudihwcm9qZWN0UGF0aCkpXG4gICAgY29uc3QgcHlsc0Vudmlyb25tZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYpXG4gICAgaWYgKHZlbnZQYXRoKSB7XG4gICAgICBweWxzRW52aXJvbm1lbnQuVklSVFVBTF9FTlYgPSB2ZW52UGF0aFxuICAgIH1cblxuICAgIGxldCBweXRob25CaW4gPSBhdG9tLmNvbmZpZy5nZXQoXCJpZGUtcHl0aG9uLnB5dGhvblwiKSB8fCBcInB5dGhvbjNcIlxuICAgIGlmICh3aGljaFN5bmMocHl0aG9uQmluLCB7IG5vdGhyb3c6IHRydWUgfSkgPT09IG51bGwpIHtcbiAgICAgIHB5dGhvbkJpbiA9IFwicHl0aG9uXCJcbiAgICB9XG5cbiAgICB0aGlzLnB5dGhvbiA9IHJlcGxhY2VQaXBFbnZQYXRoVmFyKHB5dGhvbkJpbiwgdmVudlBhdGgpXG5cbiAgICBsZXQgcHlscyA9IGF0b20uY29uZmlnLmdldChcImlkZS1weXRob24ucHlsc1wiKSB8fCBcInB5bHNwXCJcbiAgICAvLyBjaGVjayBpZiBpdCBleGlzdHNcbiAgICBpZiAod2hpY2hTeW5jKHB5bHMsIHsgbm90aHJvdzogdHJ1ZSB9KSA9PT0gbnVsbCkge1xuICAgICAgcHlscyA9IFwicHlsc1wiXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gc3VwZXIuc3Bhd24odGhpcy5weXRob24sIFtcIi1tXCIsIHB5bHNdLCB7XG4gICAgICBjd2Q6IHByb2plY3RQYXRoLFxuICAgICAgZW52OiBweWxzRW52aXJvbm1lbnQsXG4gICAgfSlcbiAgICByZXR1cm4gY2hpbGRQcm9jZXNzXG4gIH1cblxuICBvblNwYXduRXJyb3IoZXJyKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgICAgZXJyLmNvZGUgPT09IFwiRU5PRU5UXCJcbiAgICAgICAgPyBgTm8gUHl0aG9uIGludGVycHJldGVyIGZvdW5kIGF0IFxcYCR7dGhpcy5weXRob259XFxgLmBcbiAgICAgICAgOiBgQ291bGQgbm90IHNwYXduIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgXFxgJHt0aGlzLnB5dGhvbn1cXGAuYFxuICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihcImBpZGUtcHl0aG9uYCBjb3VsZCBub3QgbGF1bmNoIHlvdXIgUHl0aG9uIHJ1bnRpbWUuXCIsIHtcbiAgICAgIGRpc21pc3NhYmxlOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246IGAke2Rlc2NyaXB0aW9ufTxwPklmIHlvdSBoYXZlIFB5dGhvbiBpbnN0YWxsZWQgcGxlYXNlIHNldCBcIlB5dGhvbiBFeGVjdXRhYmxlXCIgc2V0dGluZyBjb3JyZWN0bHkuIElmIHlvdSBkbyBub3QgcGxlYXNlIGluc3RhbGwgUHl0aG9uLjwvcD5gLFxuICAgIH0pXG4gIH1cblxuICBvblNwYXduQ2xvc2UoY29kZSwgc2lnbmFsKSB7XG4gICAgaWYgKGNvZGUgIT09IDAgJiYgc2lnbmFsID09PSBudWxsKSB7XG4gICAgICBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkRXJyb3IoXCJVbmFibGUgdG8gc3RhcnQgdGhlIFB5dGhvbiBsYW5ndWFnZSBzZXJ2ZXIuXCIsIHtcbiAgICAgICAgZGlzbWlzc2FibGU6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiBcIkluc3RhbGwgSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgICBvbkRpZENsaWNrOiAoKSA9PiBhdG9tLndvcmtzcGFjZS5vcGVuKFwiYXRvbTovL2NvbmZpZy9wYWNrYWdlcy9pZGUtcHl0aG9uXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogXCJEb3dubG9hZCBQeXRob25cIixcbiAgICAgICAgICAgIG9uRGlkQ2xpY2s6ICgpID0+IHNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL1wiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIk1ha2Ugc3VyZSB0byBpbnN0YWxsIGBweWxzcGAgMC4xOSBvciBuZXdlciBieSBydW5uaW5nOlxcblwiICtcbiAgICAgICAgICBcImBgYFxcblwiICtcbiAgICAgICAgICBgJHt0aGlzLnB5dGhvbn0gLW0gcGlwIGluc3RhbGwgJ3B5dGhvbi1sc3Atc2VydmVyW2FsbF0nXFxuYCArXG4gICAgICAgICAgYCR7dGhpcy5weXRob259IC1tIHBpcCBpbnN0YWxsIGdpdCtodHRwczovL2dpdGh1Yi5jb20vdG9tdjU2NC9weWxzLW15cHkuZ2l0XFxuYCArXG4gICAgICAgICAgXCJgYGBcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0U3VnZ2VzdGlvbnMocmVxdWVzdCkge1xuICAgIGlmICghUFlUSE9OX1JFR0VYLnRlc3QocmVxdWVzdC5wcmVmaXgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZ2V0U3VnZ2VzdGlvbnMocmVxdWVzdClcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgZGVidWdnZXJEaXNwb3NlKClcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzdXBlci5kZWFjdGl2YXRlKCksIHRoaXMuY3JlYXRlVGltZW91dFByb21pc2UoMjAwMCldKVxuICB9XG5cbiAgY3JlYXRlVGltZW91dFByb21pc2UobWlsbGlzZWNvbmRzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgU2VydmVyIGZhaWxlZCB0byBzaHV0ZG93biBpbiAke21pbGxpc2Vjb25kc31tcywgZm9yY2luZyB0ZXJtaW5hdGlvbmApXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbWlsbGlzZWNvbmRzKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgcHl0aG9uQ2xpZW50ID0gbmV3IFB5dGhvbkxhbmd1YWdlQ2xpZW50KClcbnB5dGhvbkNsaWVudC5jcmVhdGVEZWJ1Z2dlclByb3ZpZGVyID0gY3JlYXRlRGVidWdnZXJQcm92aWRlciAvLyBhZGQgdGhlIGRlYnVnZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IHB5dGhvbkNsaWVudFxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiXSwibmFtZXMiOlsic2hlbGwiLCJyZXF1aXJlIiwid2hpY2hTeW5jIiwic3luYyIsIkF1dG9MYW5ndWFnZUNsaWVudCIsImRldGVjdFZpcnR1YWxFbnYiLCJkZXRlY3RQaXBFbnYiLCJyZXBsYWNlUGlwRW52UGF0aFZhciIsInNhbml0aXplQ29uZmlnIiwiUFlUSE9OX1JFR0VYIiwiUHl0aG9uTGFuZ3VhZ2VDbGllbnQiLCJhY3RpdmF0ZSIsImF0b20iLCJwYWNrYWdlcyIsImlzUGFja2FnZUxvYWRlZCIsImluc3RhbGwiLCJ0aGVuIiwiZW5hYmxlUGFja2FnZSIsIm5vdGlmaWNhdGlvbnMiLCJhZGRTdWNjZXNzIiwiY29uZmlnIiwidW5zZXQiLCJnZXRHcmFtbWFyU2NvcGVzIiwiZ2V0TGFuZ3VhZ2VOYW1lIiwiZ2V0U2VydmVyTmFtZSIsImdldFJvb3RDb25maWd1cmF0aW9uS2V5IiwibWFwQ29uZmlndXJhdGlvbk9iamVjdCIsImNvbmZpZ3VyYXRpb24iLCJsc3AiLCJweWxzIiwiY29uZmlndXJhdGlvblNvdXJjZXMiLCJweWxzQ29uZmlndXJhdGlvblNvdXJjZXMiLCJyb3BlIiwicGx1Z2lucyIsInB5bHNQbHVnaW5zIiwic3RhcnRTZXJ2ZXJQcm9jZXNzIiwicHJvamVjdFBhdGgiLCJ2ZW52UGF0aCIsInB5bHNFbnZpcm9ubWVudCIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJlbnYiLCJWSVJUVUFMX0VOViIsInB5dGhvbkJpbiIsImdldCIsIm5vdGhyb3ciLCJweXRob24iLCJjaGlsZFByb2Nlc3MiLCJzcGF3biIsImN3ZCIsIm9uU3Bhd25FcnJvciIsImVyciIsImRlc2NyaXB0aW9uIiwiY29kZSIsImFkZEVycm9yIiwiZGlzbWlzc2FibGUiLCJvblNwYXduQ2xvc2UiLCJzaWduYWwiLCJidXR0b25zIiwidGV4dCIsIm9uRGlkQ2xpY2siLCJ3b3Jrc3BhY2UiLCJvcGVuIiwib3BlbkV4dGVybmFsIiwiZ2V0U3VnZ2VzdGlvbnMiLCJyZXF1ZXN0IiwidGVzdCIsInByZWZpeCIsImRlYWN0aXZhdGUiLCJQcm9taXNlIiwicmFjZSIsImNyZWF0ZVRpbWVvdXRQcm9taXNlIiwibWlsbGlzZWNvbmRzIiwicmVzb2x2ZSIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwibG9nZ2VyIiwiZXJyb3IiLCJweXRob25DbGllbnQiLCJjcmVhdGVEZWJ1Z2dlclByb3ZpZGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFLQTs7QUFMQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBWUMsT0FBTyxDQUFDLFVBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsT0FBRCxDQUFQLENBQWlCRSxJQUFuQzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBeUJILE9BQU8sQ0FBQyxxQkFBRCxDQUF0Qzs7QUFDQSxNQUFNO0FBQUVJLEVBQUFBLGdCQUFGO0FBQW9CQyxFQUFBQSxZQUFwQjtBQUFrQ0MsRUFBQUEsb0JBQWxDO0FBQXdEQyxFQUFBQTtBQUF4RCxJQUEyRVAsT0FBTyxDQUFDLFNBQUQsQ0FBeEY7O0FBSUE7QUFDQTtBQUNBLE1BQU1RLFlBQVksR0FBRyxvREFBckI7O0FBRUEsTUFBTUMsb0JBQU4sU0FBbUNOLGtCQUFuQyxDQUFzRDtBQUNwRE8sRUFBQUEsUUFBUSxHQUFHO0FBQ1QsVUFBTUEsUUFBTjs7QUFDQSxRQUFJLENBQUNDLElBQUksQ0FBQ0MsUUFBTCxDQUFjQyxlQUFkLENBQThCLGVBQTlCLENBQUwsRUFBcUQ7QUFDbkQ7QUFDQTtBQUNBYixNQUFBQSxPQUFPLENBQUMsbUJBQUQsQ0FBUCxDQUNHYyxPQURILENBQ1csWUFEWCxFQUN5QixJQUR6QixFQUVHQyxJQUZILENBRVEsTUFBTTtBQUNWO0FBQ0FKLFFBQUFBLElBQUksQ0FBQ0MsUUFBTCxDQUFjSSxhQUFkLENBQTRCLGVBQTVCO0FBQ0FMLFFBQUFBLElBQUksQ0FBQ00sYUFBTCxDQUFtQkMsVUFB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QyxZQUFELEVBQWU7QUFDakMsV0FBTyxJQUFJSCxPQUFKLENBQWFJLE9BQUQsSUFBYTtBQUM5QixZQUFNQyxPQUFPLEdBQUdDLFVBQVUsQ0FBQyxNQUFNO0FBQy9CQyxRQUFBQSxZQUFZLENBQUNGLE9BQUQsQ0FBWjtBQUNBLGFBQUtHLE1BQUwsQ0FBWUMsS0FBWixDQUFtQixnQ0FBK0JOLFlBQWEseUJBQS9EO0FBQ0FDLFFBQUFBLE9BQU87QUFDUixPQUp5QixFQUl2QkQsWUFKdUIsQ0FBMUI7QUFLRCxLQU5NLENBQVA7QUFPRDs7QUFsSW1EOztBQXFJdEQsTUFBTU8sWUFBWSxHQUFHLElBQUl0RSxvQkFBSixFQUFyQjtBQUNBc0UsWUFBWSxDQUFDQyxzQkFBYixHQUFzQ0EsNEJBQXRDLEMsQ0FBNkQ7O0FBQzdEQyxNQUFNLENBQUNDLE9BQVAsR0FBaUJILFlBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBzaGVsbCB9ID0gcmVxdWlyZShcImVsZWN0cm9uXCIpXG5jb25zdCB3aGljaFN5bmMgPSByZXF1aXJlKFwid2hpY2hcIikuc3luY1xuY29uc3QgeyBBdXRvTGFuZ3VhZ2VDbGllbnQgfSA9IHJlcXVpcmUoXCJhdG9tLWxhbmd1YWdlY2xpZW50XCIpXG5jb25zdCB7IGRldGVjdFZpcnR1YWxFbnYsIGRldGVjdFBpcEVudiwgcmVwbGFjZVBpcEVudlBhdGhWYXIsIHNhbml0aXplQ29uZmlnIH0gPSByZXF1aXJlKFwiLi91dGlsc1wiKVxuXG5pbXBvcnQgeyBjcmVhdGVEZWJ1Z2dlclByb3ZpZGVyLCBhY3RpdmF0ZSBhcyBkZWJ1Z2dlckFjdGl2YXRlLCBkaXNwb3NlIGFzIGRlYnVnZ2VyRGlzcG9zZSB9IGZyb20gXCIuL2RlYnVnZ2VyL21haW5cIlxuXG4vLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9udGVyYWN0L2h5ZHJvZ2VuL2Jsb2IvbWFzdGVyL2xpYi9hdXRvY29tcGxldGUtcHJvdmlkZXIuanMjTDMzXG4vLyBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvNTQ3NDAwOFxuY29uc3QgUFlUSE9OX1JFR0VYID0gLygoW15cXFdcXGRdfFtcXHUwMEEwLVxcdUZGRkZdKVtcXHcuXFx1MDBBMC1cXHVGRkZGXSopfFxcLiQvXG5cbmNsYXNzIFB5dGhvbkxhbmd1YWdlQ2xpZW50IGV4dGVuZHMgQXV0b0xhbmd1YWdlQ2xpZW50IHtcbiAgYWN0aXZhdGUoKSB7XG4gICAgc3VwZXIuYWN0aXZhdGUoKVxuICAgIGlmICghYXRvbS5wYWNrYWdlcy5pc1BhY2thZ2VMb2FkZWQoXCJhdG9tLWlkZS1iYXNlXCIpKSB7XG4gICAgICAvLyBpbnN0YWxsIGlmIG5vdCBpbnN0YWxsZWRcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZXF1aXJlKFwiYXRvbS1wYWNrYWdlLWRlcHNcIilcbiAgICAgICAgLmluc3RhbGwoXCJpZGUtcHl0aG9uXCIsIHRydWUpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBlbmFibGUgaWYgZGlzYWJsZWRcbiAgICAgICAgICBhdG9tLnBhY2thZ2VzLmVuYWJsZVBhY2thZ2UoXCJhdG9tLWlkZS1iYXNlXCIpXG4gICAgICAgICAgYXRvbS5ub3RpZmljYXRpb25zLmFkZFN1Y2Nlc3MoXCJpZGUtcHl0aG9uOiBhdG9tLWlkZS1iYXNlIHdhcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuLi5cIilcbiAgICAgICAgfSlcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGRlcHJlY2F0ZWQgb3B0aW9uXG4gICAgYXRvbS5jb25maWcudW5zZXQoXCJpZGUtcHl0aG9uLnB5bHNQYXRoXCIpXG4gICAgZGVidWdnZXJBY3RpdmF0ZSgpXG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4gIGdldEdyYW1tYXJTY29wZXMoKSB7XG4gICAgcmV0dXJuIFtcInNvdXJjZS5weXRob25cIiwgXCJweXRob25cIl1cbiAgfVxuXG4gIGdldExhbmd1YWdlTmFtZSgpIHtcbiAgICByZXR1cm4gXCJQeXRob25cIlxuICB9XG5cbiAgZ2V0U2VydmVyTmFtZSgpIHtcbiAgICByZXR1cm4gXCJweWxzXCJcbiAgfVxuXG4gIGdldFJvb3RDb25maWd1cmF0aW9uS2V5KCkge1xuICAgIHJldHVybiBcImlkZS1weXRob25cIlxuICB9XG5cbiAgbWFwQ29uZmlndXJhdGlvbk9iamVjdChjb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbHNwID0gY29uZmlndXJhdGlvbi5weWxzIHx8IFwicHlsc3BcIlxuICAgIHJldHVybiB7XG4gICAgICBbbHNwXToge1xuICAgICAgICBjb25maWd1cmF0aW9uU291cmNlczogY29uZmlndXJhdGlvbi5weWxzQ29uZmlndXJhdGlvblNvdXJjZXMsXG4gICAgICAgIHJvcGU6IHNhbml0aXplQ29uZmlnKGNvbmZpZ3VyYXRpb24ucm9wZSksXG4gICAgICAgIHBsdWdpbnM6IGNvbmZpZ3VyYXRpb24ucHlsc1BsdWdpbnMsXG4gICAgICB9LFxuICAgIH1cbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuICBhc3luYyBzdGFydFNlcnZlclByb2Nlc3MocHJvamVjdFBhdGgpIHtcbiAgICBjb25zdCB2ZW52UGF0aCA9IChhd2FpdCBkZXRlY3RQaXBFbnYocHJvamVjdFBhdGgpKSB8fCAoYXdhaXQgZGV0ZWN0VmlydHVhbEVudihwcm9qZWN0UGF0aCkpXG4gICAgY29uc3QgcHlsc0Vudmlyb25tZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYpXG4gICAgaWYgKHZlbnZQYXRoKSB7XG4gICAgICBweWxzRW52aXJvbm1lbnQuVklSVFVBTF9FTlYgPSB2ZW52UGF0aFxuICAgIH1cblxuICAgIGxldCBweXRob25CaW4gPSBhdG9tLmNvbmZpZy5nZXQoXCJpZGUtcHl0aG9uLnB5dGhvblwiKSB8fCBcInB5dGhvbjNcIlxuICAgIGlmICh3aGljaFN5bmMocHl0aG9uQmluLCB7IG5vdGhyb3c6IHRydWUgfSkgPT09IG51bGwpIHtcbiAgICAgIHB5dGhvbkJpbiA9IFwicHl0aG9uXCJcbiAgICB9XG5cbiAgICB0aGlzLnB5dGhvbiA9IHJlcGxhY2VQaXBFbnZQYXRoVmFyKHB5dGhvbkJpbiwgdmVudlBhdGgpXG5cbiAgICBsZXQgcHlscyA9IGF0b20uY29uZmlnLmdldChcImlkZS1weXRob24ucHlsc1wiKSB8fCBcInB5bHNwXCJcbiAgICAvLyBjaGVjayBpZiBpdCBleGlzdHNcbiAgICBpZiAod2hpY2hTeW5jKHB5bHMsIHsgbm90aHJvdzogdHJ1ZSB9KSA9PT0gbnVsbCkge1xuICAgICAgcHlscyA9IFwicHlsc1wiXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gc3VwZXIuc3Bhd24odGhpcy5weXRob24sIFtcIi1tXCIsIHB5bHNdLCB7XG4gICAgICBjd2Q6IHByb2plY3RQYXRoLFxuICAgICAgZW52OiBweWxzRW52aXJvbm1lbnQsXG4gICAgfSlcbiAgICByZXR1cm4gY2hpbGRQcm9jZXNzXG4gIH1cblxuICBvblNwYXduRXJyb3IoZXJyKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgICAgZXJyLmNvZGUgPT09IFwiRU5PRU5UXCJcbiAgICAgICAgPyBgTm8gUHl0aG9uIGludGVycHJldGVyIGZvdW5kIGF0IFxcYCR7dGhpcy5weXRob259XFxgLmBcbiAgICAgICAgOiBgQ291bGQgbm90IHNwYXduIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgXFxgJHt0aGlzLnB5dGhvbn1cXGAuYFxuICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihcImBpZGUtcHl0aG9uYCBjb3VsZCBub3QgbGF1bmNoIHlvdXIgUHl0aG9uIHJ1bnRpbWUuXCIsIHtcbiAgICAgIGRpc21pc3NhYmxlOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246IGAke2Rlc2NyaXB0aW9ufTxwPklmIHlvdSBoYXZlIFB5dGhvbiBpbnN0YWxsZWQgcGxlYXNlIHNldCBcIlB5dGhvbiBFeGVjdXRhYmxlXCIgc2V0dGluZyBjb3JyZWN0bHkuIElmIHlvdSBkbyBub3QgcGxlYXNlIGluc3RhbGwgUHl0aG9uLjwvcD5gLFxuICAgIH0pXG4gIH1cblxuICBvblNwYXduQ2xvc2UoY29kZSwgc2lnbmFsKSB7XG4gICAgaWYgKGNvZGUgIT09IDAgJiYgc2lnbmFsID09PSBudWxsKSB7XG4gICAgICBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkRXJyb3IoXCJVbmFibGUgdG8gc3RhcnQgdGhlIFB5dGhvbiBsYW5ndWFnZSBzZXJ2ZXIuXCIsIHtcbiAgICAgICAgZGlzbWlzc2FibGU6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiBcIkluc3RhbGwgSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgICBvbkRpZENsaWNrOiAoKSA9PiBhdG9tLndvcmtzcGFjZS5vcGVuKFwiYXRvbTovL2NvbmZpZy9wYWNrYWdlcy9pZGUtcHl0aG9uXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogXCJEb3dubG9hZCBQeXRob25cIixcbiAgICAgICAgICAgIG9uRGlkQ2xpY2s6ICgpID0+IHNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL1wiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIk1ha2Ugc3VyZSB0byBpbnN0YWxsIGBweWxzcGAgMC4xOSBvciBuZXdlciBieSBydW5uaW5nOlxcblwiICtcbiAgICAgICAgICBcImBgYFxcblwiICtcbiAgICAgICAgICBgJHt0aGlzLnB5dGhvbn0gLW0gcGlwIGluc3RhbGwgJ3B5dGhvbi1sc3Atc2VydmVyW2FsbF0nXFxuYCArXG4gICAgICAgICAgYCR7dGhpcy5weXRob259IC1tIHBpcCBpbnN0YWxsIGdpdCtodHRwczovL2dpdGh1Yi5jb20vdG9tdjU2NC9weWxzLW15cHkuZ2l0XFxuYCArXG4gICAgICAgICAgXCJgYGBcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0U3VnZ2VzdGlvbnMocmVxdWVzdCkge1xuICAgIGlmICghUFlUSE9OX1JFR0VYLnRlc3QocmVxdWVzdC5wcmVmaXgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZ2V0U3VnZ2VzdGlvbnMocmVxdWVzdClcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgZGVidWdnZXJEaXNwb3NlKClcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzdXBlci5kZWFjdGl2YXRlKCksIHRoaXMuY3JlYXRlVGltZW91dFByb21pc2UoMjAwMCldKVxuICB9XG5cbiAgY3JlYXRlVGltZW91dFByb21pc2UobWlsbGlzZWNvbmRzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgU2VydmVyIGZhaWxlZCB0byBzaHV0ZG93biBpbiAke21pbGxpc2Vjb25kc31tcywgZm9yY2luZyB0ZXJtaW5hdGlvbmApXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbWlsbGlzZWNvbmRzKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgcHl0aG9uQ2xpZW50ID0gbmV3IFB5dGhvbkxhbmd1YWdlQ2xpZW50KClcbnB5dGhvbkNsaWVudC5jcmVhdGVEZWJ1Z2dlclByb3ZpZGVyID0gY3JlYXRlRGVidWdnZXJQcm92aWRlciAvLyBhZGQgdGhlIGRlYnVnZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IHB5dGhvbkNsaWVudFxuIl19 \ No newline at end of file diff --git a/package.json b/package.json index 51447134..1015dd10 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ide-python", "main": "./dist/main", - "version": "1.9.4", + "version": "1.9.5", "description": "Python language support for Atom-IDE", "keywords": [ "ide",