@the-trybe/formula-engine 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +35 -0
- package/.github/workflows/publish.yml +38 -0
- package/PRD_FORMULA_ENGINE.md +55 -1
- package/dist/dependency-extractor.js +6 -1
- package/dist/evaluator.js +8 -1
- package/dist/formula-engine.d.ts +6 -2
- package/dist/formula-engine.js +20 -5
- package/dist/functions.js +146 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lexer.js +7 -1
- package/dist/parser.d.ts +1 -0
- package/dist/parser.js +31 -2
- package/dist/types.d.ts +19 -1
- package/dist/types.js +3 -1
- package/package.json +3 -2
- package/src/dependency-extractor.ts +6 -0
- package/src/dependency-graph.test.ts +24 -0
- package/src/evaluator.ts +8 -0
- package/src/formula-engine.test.ts +532 -0
- package/src/functions.ts +151 -0
- package/src/index.ts +2 -0
- package/src/lexer.test.ts +61 -0
- package/src/lexer.ts +6 -0
- package/src/parser.test.ts +109 -0
- package/src/parser.ts +40 -1
- package/src/types.ts +13 -0
- package/.claude/settings.local.json +0 -6
package/dist/lexer.js
CHANGED
|
@@ -101,6 +101,12 @@ class Lexer {
|
|
|
101
101
|
case ']':
|
|
102
102
|
this.addToken(types_1.TokenType.RBRACKET, ']');
|
|
103
103
|
break;
|
|
104
|
+
case '{':
|
|
105
|
+
this.addToken(types_1.TokenType.LBRACE, '{');
|
|
106
|
+
break;
|
|
107
|
+
case '}':
|
|
108
|
+
this.addToken(types_1.TokenType.RBRACE, '}');
|
|
109
|
+
break;
|
|
104
110
|
case ',':
|
|
105
111
|
this.addToken(types_1.TokenType.COMMA, ',');
|
|
106
112
|
break;
|
|
@@ -354,4 +360,4 @@ class Lexer {
|
|
|
354
360
|
}
|
|
355
361
|
}
|
|
356
362
|
exports.Lexer = Lexer;
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGV4ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTJDO0FBQzNDLHFDQUFvRjtBQUVwRixNQUFNLFFBQVEsR0FBOEI7SUFDMUMsTUFBTSxFQUFFLGlCQUFTLENBQUMsT0FBTztJQUN6QixPQUFPLEVBQUUsaUJBQVMsQ0FBQyxPQUFPO0lBQzFCLE1BQU0sRUFBRSxpQkFBUyxDQUFDLElBQUk7SUFDdEIsS0FBSyxFQUFFLGlCQUFTLENBQUMsR0FBRztJQUNwQixJQUFJLEVBQUUsaUJBQVMsQ0FBQyxFQUFFO0lBQ2xCLEtBQUssRUFBRSxpQkFBUyxDQUFDLEdBQUc7Q0FDckIsQ0FBQztBQUVGLE1BQWEsS0FBSztJQU9oQixZQUFZLEtBQWE7UUFMakIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFZLEVBQUUsQ0FBQztRQUczQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lB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QkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE3WEQsc0JBNlhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4sIFRva2VuVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU3ludGF4RXJyb3IsIFVudGVybWluYXRlZFN0cmluZ0Vycm9yLCBJbnZhbGlkTnVtYmVyRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmNvbnN0IEtFWVdPUkRTOiBSZWNvcmQ8c3RyaW5nLCBUb2tlblR5cGU+ID0ge1xuICAndHJ1ZSc6IFRva2VuVHlwZS5CT09MRUFOLFxuICAnZmFsc2UnOiBUb2tlblR5cGUuQk9PTEVBTixcbiAgJ251bGwnOiBUb2tlblR5cGUuTlVMTCxcbiAgJ0FORCc6IFRva2VuVHlwZS5BTkQsXG4gICdPUic6IFRva2VuVHlwZS5PUixcbiAgJ05PVCc6IFRva2VuVHlwZS5OT1QsXG59O1xuXG5leHBvcnQgY2xhc3MgTGV4ZXIge1xuICBwcml2YXRlIGlucHV0OiBzdHJpbmc7XG4gIHByaXZhdGUgcG9zaXRpb246IG51bWJlciA9IDA7XG4gIHByaXZhdGUgbGluZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBjb2x1bW46IG51bWJlciA9IDE7XG4gIHByaXZhdGUgdG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoaW5wdXQ6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgfVxuXG4gIHRva2VuaXplKCk6IFRva2VuW10ge1xuICAgIHRoaXMudG9rZW5zID0gW107XG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gICAgdGhpcy5saW5lID0gMTtcbiAgICB0aGlzLmNvbHVtbiA9IDE7XG5cbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICBpZiAoIXRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICAgIHRoaXMuc2NhblRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICB0eXBlOiBUb2tlblR5cGUuRU9GLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBwcml2YXRlIGlzQXRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9zaXRpb24gPj0gdGhpcy5pbnB1dC5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHBlZWsoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0F0RW5kKCkpIHJldHVybiAnXFwwJztcbiAgICByZXR1cm4gdGhpcy5pbnB1dFt0aGlzLnBvc2l0aW9uXTtcbiAgfVxuXG4gIHByaXZhdGUgcGVla05leHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wb3NpdGlvbiArIDEgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHJldHVybiAnXFwwJztcbiAgICByZXR1cm4gdGhpcy5pbnB1dFt0aGlzLnBvc2l0aW9uICsgMV07XG4gIH1cblxuICBwcml2YXRlIGFkdmFuY2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjaGFyID0gdGhpcy5pbnB1dFt0aGlzLnBvc2l0aW9uKytdO1xuICAgIGlmIChjaGFyID09PSAnXFxuJykge1xuICAgICAgdGhpcy5saW5lKys7XG4gICAgICB0aGlzLmNvbHVtbiA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1uKys7XG4gICAgfVxuICAgIHJldHVybiBjaGFyO1xuICB9XG5cbiAgcHJpdmF0ZSBza2lwV2hpdGVzcGFjZSgpOiB2b2lkIHtcbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICBjb25zdCBjaGFyID0gdGhpcy5wZWVrKCk7XG4gICAgICBpZiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb2tlbih0eXBlOiBUb2tlblR5cGUsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuVG9rZW4oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG4gICAgY29uc3Qgc3RhcnRMaW5lID0gdGhpcy5saW5lO1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uID0gdGhpcy5jb2x1bW47XG4gICAgY29uc3QgY2hhciA9IHRoaXMuYWR2YW5jZSgpO1xuXG4gICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICBjYXNlICcoJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTFBBUkVOLCAnKCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyknOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5SUEFSRU4sICcpJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkxCUkFDS0VULCAnWycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ10nOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5SQlJBQ0tFVCwgJ10nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcsJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuQ09NTUEsICcsJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLic6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkRPVCwgJy4nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc/JzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuUVVFU1RJT04sICc/Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnOic6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkNPTE9OLCAnOicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJysnOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5QTFVTLCAnKycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5NSU5VUywgJy0nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTVVMVElQTFksICcqJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLyc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkRJVklERSwgJy8nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTU9EVUxPLCAnJScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ14nOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5QT1dFUiwgJ14nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnPScpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5FUSwgJz09Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICcke2NoYXJ9J2AsXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICB0aGlzLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyEnOlxuICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICc9Jykge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLk5FUSwgJyE9Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTk9ULCAnIScpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJz0nKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTFRFLCAnPD0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5MVCwgJzwnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz4nOlxuICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICc9Jykge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkdURSwgJz49Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuR1QsICc+Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcmJzpcbiAgICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnJicpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5BTkQsICcmJicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtjaGFyfSdgLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICAgICAgdGhpcy5pbnB1dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd8JzpcbiAgICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnfCcpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5PUiwgJ3x8Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICcke2NoYXJ9J2AsXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICB0aGlzLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyQnOlxuICAgICAgICB0aGlzLnNjYW5WYXJpYWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0AnOlxuICAgICAgICB0aGlzLnNjYW5Db250ZXh0VmFyaWFibGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdcIic6XG4gICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICB0aGlzLnNjYW5TdHJpbmcoY2hhcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNEaWdpdChjaGFyKSkge1xuICAgICAgICAgIHRoaXMuc2Nhbk51bWJlcihjaGFyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQWxwaGEoY2hhcikpIHtcbiAgICAgICAgICB0aGlzLnNjYW5JZGVudGlmaWVyKGNoYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtjaGFyfSdgLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICAgICAgdGhpcy5pbnB1dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGlnaXQoY2hhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoYXIgPj0gJzAnICYmIGNoYXIgPD0gJzknO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FscGhhKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoY2hhciA+PSAnYScgJiYgY2hhciA8PSAneicpIHx8XG4gICAgICAgICAgIChjaGFyID49ICdBJyAmJiBjaGFyIDw9ICdaJykgfHxcbiAgICAgICAgICAgY2hhciA9PT0gJ18nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FscGhhTnVtZXJpYyhjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FscGhhKGNoYXIpIHx8IHRoaXMuaXNEaWdpdChjaGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhblZhcmlhYmxlKCk6IHZvaWQge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSAmJiB0aGlzLmlzQWxwaGFOdW1lcmljKHRoaXMucGVlaygpKSkge1xuICAgICAgbmFtZSArPSB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCB2YXJpYWJsZSBuYW1lIGFmdGVyICQnLFxuICAgICAgICB0aGlzLnBvc2l0aW9uLFxuICAgICAgICB0aGlzLmxpbmUsXG4gICAgICAgIHRoaXMuY29sdW1uLFxuICAgICAgICB0aGlzLmlucHV0XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5WQVJJQUJMRSwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW5Db250ZXh0VmFyaWFibGUoKTogdm9pZCB7XG4gICAgbGV0IG5hbWUgPSAnJztcbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNBbHBoYU51bWVyaWModGhpcy5wZWVrKCkpKSB7XG4gICAgICBuYW1lICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIHZhcmlhYmxlIG5hbWUgYWZ0ZXIgQCcsXG4gICAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgICAgIHRoaXMubGluZSxcbiAgICAgICAgdGhpcy5jb2x1bW4sXG4gICAgICAgIHRoaXMuaW5wdXRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkNPTlRFWFRfVkFSLCBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhblN0cmluZyhxdW90ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gLSAxO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuXG4gICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSAmJiB0aGlzLnBlZWsoKSAhPT0gcXVvdGUpIHtcbiAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICBpZiAoIXRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHN3aXRjaCAoZXNjYXBlZCkge1xuICAgICAgICAgICAgY2FzZSAnbic6IHZhbHVlICs9ICdcXG4nOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3QnOiB2YWx1ZSArPSAnXFx0JzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyJzogdmFsdWUgKz0gJ1xccic7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnXFxcXCc6IHZhbHVlICs9ICdcXFxcJzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdcIic6IHZhbHVlICs9ICdcIic7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIidcIjogdmFsdWUgKz0gXCInXCI7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogdmFsdWUgKz0gZXNjYXBlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgdGhyb3cgbmV3IFVudGVybWluYXRlZFN0cmluZ0Vycm9yKHN0YXJ0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuYWR2YW5jZSgpOyAvLyBDb25zdW1lIGNsb3NpbmcgcXVvdGVcbiAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5TVFJJTkcsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nhbk51bWJlcihmaXJzdENoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gMTtcbiAgICBsZXQgbnVtU3RyID0gZmlyc3RDaGFyO1xuICAgIGxldCBpc0Zsb2F0ID0gZmFsc2U7XG5cbiAgICAvLyBJbnRlZ2VyIHBhcnRcbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNEaWdpdCh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIG51bVN0ciArPSB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG5cbiAgICAvLyBEZWNpbWFsIHBhcnRcbiAgICBpZiAodGhpcy5wZWVrKCkgPT09ICcuJyAmJiB0aGlzLmlzRGlnaXQodGhpcy5wZWVrTmV4dCgpKSkge1xuICAgICAgbnVtU3RyICs9IHRoaXMuYWR2YW5jZSgpOyAvLyBjb25zdW1lICcuJ1xuICAgICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSAmJiB0aGlzLmlzRGlnaXQodGhpcy5wZWVrKCkpKSB7XG4gICAgICAgIG51bVN0ciArPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvbmVudCBwYXJ0XG4gICAgaWYgKHRoaXMucGVlaygpID09PSAnZScgfHwgdGhpcy5wZWVrKCkgPT09ICdFJykge1xuICAgICAgbnVtU3RyICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnKycgfHwgdGhpcy5wZWVrKCkgPT09ICctJykge1xuICAgICAgICBudW1TdHIgKz0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNEaWdpdCh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWROdW1iZXJFcnJvcihudW1TdHIsIHN0YXJ0UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSAmJiB0aGlzLmlzRGlnaXQodGhpcy5wZWVrKCkpKSB7XG4gICAgICAgIG51bVN0ciArPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlzRmxvYXQgPSB0cnVlOyAvLyBTY2llbnRpZmljIG5vdGF0aW9uIGlzIHRyZWF0ZWQgYXMgZmxvYXRcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZmxvYXQgc3VmZml4ICdmJ1xuICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJ2YnIHx8IHRoaXMucGVlaygpID09PSAnRicpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgaXNGbG9hdCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgc3VmZml4ICdkJ1xuICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJ2QnIHx8IHRoaXMucGVlaygpID09PSAnRCcpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgaXNGbG9hdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0Zsb2F0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQobnVtU3RyKTtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWROdW1iZXJFcnJvcihudW1TdHIsIHN0YXJ0UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTlVNQkVSLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3JlIGFzIHN0cmluZyB0byBwcmVzZXJ2ZSBwcmVjaXNpb24gZm9yIERlY2ltYWxcbiAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLk5VTUJFUiwgbnVtU3RyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjYW5JZGVudGlmaWVyKGZpcnN0Q2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IG5hbWUgPSBmaXJzdENoYXI7XG5cbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNBbHBoYU51bWVyaWModGhpcy5wZWVrKCkpKSB7XG4gICAgICBuYW1lICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBrZXl3b3JkXG4gICAgY29uc3Qga2V5d29yZFR5cGUgPSBLRVlXT1JEU1tuYW1lXSB8fCBLRVlXT1JEU1tuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmIChrZXl3b3JkVHlwZSkge1xuICAgICAgaWYgKGtleXdvcmRUeXBlID09PSBUb2tlblR5cGUuQk9PTEVBTikge1xuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5CT09MRUFOLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyk7XG4gICAgICB9IGVsc2UgaWYgKGtleXdvcmRUeXBlID09PSBUb2tlblR5cGUuTlVMTCkge1xuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5OVUxMLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oa2V5d29yZFR5cGUsIG5hbWUudG9VcHBlckNhc2UoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLklERU5USUZJRVIsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGV4ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTJDO0FBQzNDLHFDQUFvRjtBQUVwRixNQUFNLFFBQVEsR0FBOEI7SUFDMUMsTUFBTSxFQUFFLGlCQUFTLENBQUMsT0FBTztJQUN6QixPQUFPLEVBQUUsaUJBQVMsQ0FBQyxPQUFPO0lBQzFCLE1BQU0sRUFBRSxpQkFBUyxDQUFDLElBQUk7SUFDdEIsS0FBSyxFQUFFLGlCQUFTLENBQUMsR0FBRztJQUNwQixJQUFJLEVBQUUsaUJBQVMsQ0FBQyxFQUFFO0lBQ2xCLEtBQUssRUFBRSxpQkFBUyxDQUFDLEdBQUc7Q0FDckIsQ0FBQztBQUVGLE1BQWEsS0FBSztJQU9oQixZQUFZLEtBQWE7UUFMakIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFZLEVBQUUsQ0FBQztRQUczQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLGlCQUFTLENBQUMsR0FBRztZQUNuQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxPQUFPO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLE9BQU87UUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFlLEVBQUUsS0FBdUM7UUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJO1lBQ0osS0FBSztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFNUIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sSUFBSSxvQkFBVyxDQUNuQix5QkFBeUIsSUFBSSxHQUFHLEVBQ2hDLGFBQWEsRUFDYixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDSixDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLG9CQUFXLENBQ25CLHlCQUF5QixJQUFJLEdBQUcsRUFDaEMsYUFBYSxFQUNiLFNBQVMsRUFDVCxXQUFXLEVBQ1gsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksb0JBQVcsQ0FDbkIseUJBQXlCLElBQUksR0FBRyxFQUNoQyxhQUFhLEVBQ2IsU0FBUyxFQUNULFdBQVcsRUFDWCxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUjtnQkFDRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sSUFBSSxvQkFBVyxDQUNuQix5QkFBeUIsSUFBSSxHQUFHLEVBQ2hDLGFBQWEsRUFDYixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDSixDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBRU8sT0FBTyxDQUFDLElBQVk7UUFDMUIsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUM1QixDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUM1QixJQUFJLEtBQUssR0FBRyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksb0JBQVcsQ0FDbkIsZ0NBQWdDLEVBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLG9CQUFXLENBQ25CLGdDQUFnQyxFQUNoQyxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWYsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDL0IsUUFBUSxPQUFPLEVBQUUsQ0FBQzt3QkFDaEIsS0FBSyxHQUFHOzRCQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7NEJBQUMsTUFBTTt3QkFDL0IsS0FBSyxHQUFHOzRCQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7NEJBQUMsTUFBTTt3QkFDL0IsS0FBSyxHQUFHOzRCQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7NEJBQUMsTUFBTTt3QkFDL0IsS0FBSyxJQUFJOzRCQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7NEJBQUMsTUFBTTt3QkFDaEMsS0FBSyxHQUFHOzRCQUFFLEtBQUssSUFBSSxHQUFHLENBQUM7NEJBQUMsTUFBTTt3QkFDOUIsS0FBSyxHQUFHOzRCQUFFLEtBQUssSUFBSSxHQUFHLENBQUM7NEJBQUMsTUFBTTt3QkFDOUIsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztvQkFDNUIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsd0JBQXdCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxTQUFpQjtRQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsY0FBYztZQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLDJCQUFrQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQywwQ0FBMEM7UUFDNUQsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLDJCQUFrQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNOLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3RDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUVyQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksV0FBVyxLQUFLLGlCQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLENBQUM7aUJBQU0sSUFBSSxXQUFXLEtBQUssaUJBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbllELHNCQW1ZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFN5bnRheEVycm9yLCBVbnRlcm1pbmF0ZWRTdHJpbmdFcnJvciwgSW52YWxpZE51bWJlckVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5jb25zdCBLRVlXT1JEUzogUmVjb3JkPHN0cmluZywgVG9rZW5UeXBlPiA9IHtcbiAgJ3RydWUnOiBUb2tlblR5cGUuQk9PTEVBTixcbiAgJ2ZhbHNlJzogVG9rZW5UeXBlLkJPT0xFQU4sXG4gICdudWxsJzogVG9rZW5UeXBlLk5VTEwsXG4gICdBTkQnOiBUb2tlblR5cGUuQU5ELFxuICAnT1InOiBUb2tlblR5cGUuT1IsXG4gICdOT1QnOiBUb2tlblR5cGUuTk9ULFxufTtcblxuZXhwb3J0IGNsYXNzIExleGVyIHtcbiAgcHJpdmF0ZSBpbnB1dDogc3RyaW5nO1xuICBwcml2YXRlIHBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGxpbmU6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgY29sdW1uOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIHRva2VuczogVG9rZW5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gIH1cblxuICB0b2tlbml6ZSgpOiBUb2tlbltdIHtcbiAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMubGluZSA9IDE7XG4gICAgdGhpcy5jb2x1bW4gPSAxO1xuXG4gICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgaWYgKCF0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgICB0aGlzLnNjYW5Ub2tlbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgdHlwZTogVG9rZW5UeXBlLkVPRixcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F0RW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uID49IHRoaXMuaW5wdXQubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNBdEVuZCgpKSByZXR1cm4gJ1xcMCc7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5wb3NpdGlvbl07XG4gIH1cblxuICBwcml2YXRlIHBlZWtOZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gKyAxID49IHRoaXMuaW5wdXQubGVuZ3RoKSByZXR1cm4gJ1xcMCc7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5wb3NpdGlvbiArIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBhZHZhbmNlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2hhciA9IHRoaXMuaW5wdXRbdGhpcy5wb3NpdGlvbisrXTtcbiAgICBpZiAoY2hhciA9PT0gJ1xcbicpIHtcbiAgICAgIHRoaXMubGluZSsrO1xuICAgICAgdGhpcy5jb2x1bW4gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbisrO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcjtcbiAgfVxuXG4gIHByaXZhdGUgc2tpcFdoaXRlc3BhY2UoKTogdm9pZCB7XG4gICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgY29uc3QgY2hhciA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJykge1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9rZW4odHlwZTogVG9rZW5UeXBlLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgbGluZTogdGhpcy5saW5lLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhblRva2VuKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuICAgIGNvbnN0IHN0YXJ0TGluZSA9IHRoaXMubGluZTtcbiAgICBjb25zdCBzdGFydENvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgIGNvbnN0IGNoYXIgPSB0aGlzLmFkdmFuY2UoKTtcblxuICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgY2FzZSAnKCc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkxQQVJFTiwgJygnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcpJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuUlBBUkVOLCAnKScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5MQlJBQ0tFVCwgJ1snKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICddJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuUkJSQUNLRVQsICddJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkxCUkFDRSwgJ3snKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd9JzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuUkJSQUNFLCAnfScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJywnOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5DT01NQSwgJywnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuRE9ULCAnLicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz8nOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5RVUVTVElPTiwgJz8nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc6JzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuQ09MT04sICc6Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnKyc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLlBMVVMsICcrJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLk1JTlVTLCAnLScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5NVUxUSVBMWSwgJyonKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcvJzpcbiAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuRElWSURFLCAnLycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyUnOlxuICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5NT0RVTE8sICclJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnXic6XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLlBPV0VSLCAnXicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz0nOlxuICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICc9Jykge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkVRLCAnPT0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgICAgICBgVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nYCxcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydENvbHVtbixcbiAgICAgICAgICAgIHRoaXMuaW5wdXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnISc6XG4gICAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJz0nKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTkVRLCAnIT0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5OT1QsICchJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnPScpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5MVEUsICc8PScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkxULCAnPCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnPic6XG4gICAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJz0nKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuR1RFLCAnPj0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5HVCwgJz4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyYnOlxuICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICcmJykge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkFORCwgJyYmJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICcke2NoYXJ9J2AsXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICB0aGlzLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3wnOlxuICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICd8Jykge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLk9SLCAnfHwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgICAgICBgVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nYCxcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydENvbHVtbixcbiAgICAgICAgICAgIHRoaXMuaW5wdXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJCc6XG4gICAgICAgIHRoaXMuc2NhblZhcmlhYmxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQCc6XG4gICAgICAgIHRoaXMuc2NhbkNvbnRleHRWYXJpYWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgIHRoaXMuc2NhblN0cmluZyhjaGFyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc0RpZ2l0KGNoYXIpKSB7XG4gICAgICAgICAgdGhpcy5zY2FuTnVtYmVyKGNoYXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBbHBoYShjaGFyKSkge1xuICAgICAgICAgIHRoaXMuc2NhbklkZW50aWZpZXIoY2hhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICcke2NoYXJ9J2AsXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICB0aGlzLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNEaWdpdChjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2hhciA+PSAnMCcgJiYgY2hhciA8PSAnOSc7XG4gIH1cblxuICBwcml2YXRlIGlzQWxwaGEoY2hhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjaGFyID49ICdhJyAmJiBjaGFyIDw9ICd6JykgfHxcbiAgICAgICAgICAgKGNoYXIgPj0gJ0EnICYmIGNoYXIgPD0gJ1onKSB8fFxuICAgICAgICAgICBjaGFyID09PSAnXyc7XG4gIH1cblxuICBwcml2YXRlIGlzQWxwaGFOdW1lcmljKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQWxwaGEoY2hhcikgfHwgdGhpcy5pc0RpZ2l0KGNoYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuVmFyaWFibGUoKTogdm9pZCB7XG4gICAgbGV0IG5hbWUgPSAnJztcbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNBbHBoYU51bWVyaWModGhpcy5wZWVrKCkpKSB7XG4gICAgICBuYW1lICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIHZhcmlhYmxlIG5hbWUgYWZ0ZXIgJCcsXG4gICAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgICAgIHRoaXMubGluZSxcbiAgICAgICAgdGhpcy5jb2x1bW4sXG4gICAgICAgIHRoaXMuaW5wdXRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLlZBUklBQkxFLCBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhbkNvbnRleHRWYXJpYWJsZSgpOiB2b2lkIHtcbiAgICBsZXQgbmFtZSA9ICcnO1xuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkgJiYgdGhpcy5pc0FscGhhTnVtZXJpYyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIG5hbWUgKz0gdGhpcy5hZHZhbmNlKCk7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgdmFyaWFibGUgbmFtZSBhZnRlciBAJyxcbiAgICAgICAgdGhpcy5wb3NpdGlvbixcbiAgICAgICAgdGhpcy5saW5lLFxuICAgICAgICB0aGlzLmNvbHVtbixcbiAgICAgICAgdGhpcy5pbnB1dFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuQ09OVEVYVF9WQVIsIG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuU3RyaW5nKHF1b3RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiAtIDE7XG4gICAgbGV0IHZhbHVlID0gJyc7XG5cbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMucGVlaygpICE9PSBxdW90ZSkge1xuICAgICAgaWYgKHRoaXMucGVlaygpID09PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIGlmICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgICAgICBjb25zdCBlc2NhcGVkID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgc3dpdGNoIChlc2NhcGVkKSB7XG4gICAgICAgICAgICBjYXNlICduJzogdmFsdWUgKz0gJ1xcbic7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndCc6IHZhbHVlICs9ICdcXHQnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3InOiB2YWx1ZSArPSAnXFxyJzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdcXFxcJzogdmFsdWUgKz0gJ1xcXFwnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1wiJzogdmFsdWUgKz0gJ1wiJzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiJ1wiOiB2YWx1ZSArPSBcIidcIjsgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiB2YWx1ZSArPSBlc2NhcGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW50ZXJtaW5hdGVkU3RyaW5nRXJyb3Ioc3RhcnRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIENvbnN1bWUgY2xvc2luZyBxdW90ZVxuICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLlNUUklORywgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuTnVtYmVyKGZpcnN0Q2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gLSAxO1xuICAgIGxldCBudW1TdHIgPSBmaXJzdENoYXI7XG4gICAgbGV0IGlzRmxvYXQgPSBmYWxzZTtcblxuICAgIC8vIEludGVnZXIgcGFydFxuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkgJiYgdGhpcy5pc0RpZ2l0KHRoaXMucGVlaygpKSkge1xuICAgICAgbnVtU3RyICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cblxuICAgIC8vIERlY2ltYWwgcGFydFxuICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJy4nICYmIHRoaXMuaXNEaWdpdCh0aGlzLnBlZWtOZXh0KCkpKSB7XG4gICAgICBudW1TdHIgKz0gdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJy4nXG4gICAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNEaWdpdCh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgbnVtU3RyICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9uZW50IHBhcnRcbiAgICBpZiAodGhpcy5wZWVrKCkgPT09ICdlJyB8fCB0aGlzLnBlZWsoKSA9PT0gJ0UnKSB7XG4gICAgICBudW1TdHIgKz0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICcrJyB8fCB0aGlzLnBlZWsoKSA9PT0gJy0nKSB7XG4gICAgICAgIG51bVN0ciArPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0RpZ2l0KHRoaXMucGVlaygpKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE51bWJlckVycm9yKG51bVN0ciwgc3RhcnRQb3NpdGlvbik7XG4gICAgICB9XG4gICAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHRoaXMuaXNEaWdpdCh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgbnVtU3RyICs9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgaXNGbG9hdCA9IHRydWU7IC8vIFNjaWVudGlmaWMgbm90YXRpb24gaXMgdHJlYXRlZCBhcyBmbG9hdFxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmbG9hdCBzdWZmaXggJ2YnXG4gICAgaWYgKHRoaXMucGVlaygpID09PSAnZicgfHwgdGhpcy5wZWVrKCkgPT09ICdGJykge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBpc0Zsb2F0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZGVjaW1hbCBzdWZmaXggJ2QnXG4gICAgaWYgKHRoaXMucGVlaygpID09PSAnZCcgfHwgdGhpcy5wZWVrKCkgPT09ICdEJykge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBpc0Zsb2F0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzRmxvYXQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChudW1TdHIpO1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE51bWJlckVycm9yKG51bVN0ciwgc3RhcnRQb3NpdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFRva2VuKFRva2VuVHlwZS5OVU1CRVIsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RvcmUgYXMgc3RyaW5nIHRvIHByZXNlcnZlIHByZWNpc2lvbiBmb3IgRGVjaW1hbFxuICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuTlVNQkVSLCBudW1TdHIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NhbklkZW50aWZpZXIoZmlyc3RDaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgbmFtZSA9IGZpcnN0Q2hhcjtcblxuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkgJiYgdGhpcy5pc0FscGhhTnVtZXJpYyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIG5hbWUgKz0gdGhpcy5hZHZhbmNlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGtleXdvcmRcbiAgICBjb25zdCBrZXl3b3JkVHlwZSA9IEtFWVdPUkRTW25hbWVdIHx8IEtFWVdPUkRTW25hbWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKGtleXdvcmRUeXBlKSB7XG4gICAgICBpZiAoa2V5d29yZFR5cGUgPT09IFRva2VuVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLkJPT0xFQU4sIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5d29yZFR5cGUgPT09IFRva2VuVHlwZS5OVUxMKSB7XG4gICAgICAgIHRoaXMuYWRkVG9rZW4oVG9rZW5UeXBlLk5VTEwsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRUb2tlbihrZXl3b3JkVHlwZSwgbmFtZS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRUb2tlbihUb2tlblR5cGUuSURFTlRJRklFUiwgbmFtZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/dist/parser.d.ts
CHANGED
package/dist/parser.js
CHANGED
|
@@ -65,11 +65,13 @@ class Parser {
|
|
|
65
65
|
return this.parseGroupedExpression();
|
|
66
66
|
case types_1.TokenType.LBRACKET:
|
|
67
67
|
return this.parseArrayLiteral();
|
|
68
|
+
case types_1.TokenType.LBRACE:
|
|
69
|
+
return this.parseObjectLiteral();
|
|
68
70
|
case types_1.TokenType.MINUS:
|
|
69
71
|
case types_1.TokenType.NOT:
|
|
70
72
|
return this.parseUnaryExpression();
|
|
71
73
|
default:
|
|
72
|
-
throw new errors_1.UnexpectedTokenError(String(token.value), ['number', 'string', 'boolean', 'null', 'variable', 'identifier', '(', '[', '-', '!'], token.position);
|
|
74
|
+
throw new errors_1.UnexpectedTokenError(String(token.value), ['number', 'string', 'boolean', 'null', 'variable', 'identifier', '(', '[', '{', '-', '!'], token.position);
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
77
|
parseInfixExpression(left) {
|
|
@@ -218,6 +220,33 @@ class Parser {
|
|
|
218
220
|
elements,
|
|
219
221
|
};
|
|
220
222
|
}
|
|
223
|
+
parseObjectLiteral() {
|
|
224
|
+
this.advance(); // consume '{'
|
|
225
|
+
const properties = [];
|
|
226
|
+
if (this.peek().type !== types_1.TokenType.RBRACE) {
|
|
227
|
+
do {
|
|
228
|
+
if (this.peek().type === types_1.TokenType.COMMA) {
|
|
229
|
+
this.advance();
|
|
230
|
+
}
|
|
231
|
+
// Key must be an identifier
|
|
232
|
+
const keyToken = this.peek();
|
|
233
|
+
if (keyToken.type !== types_1.TokenType.IDENTIFIER) {
|
|
234
|
+
throw new errors_1.UnexpectedTokenError(String(keyToken.value), ['identifier (property name)'], keyToken.position);
|
|
235
|
+
}
|
|
236
|
+
const key = String(this.advance().value);
|
|
237
|
+
// Expect colon
|
|
238
|
+
this.expect(types_1.TokenType.COLON, ':');
|
|
239
|
+
// Value is any expression
|
|
240
|
+
const value = this.parseExpression(PRECEDENCE.LOWEST);
|
|
241
|
+
properties.push({ key, value });
|
|
242
|
+
} while (this.peek().type === types_1.TokenType.COMMA);
|
|
243
|
+
}
|
|
244
|
+
this.expect(types_1.TokenType.RBRACE, '}');
|
|
245
|
+
return {
|
|
246
|
+
type: 'ObjectLiteral',
|
|
247
|
+
properties,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
221
250
|
parseUnaryExpression() {
|
|
222
251
|
const token = this.advance();
|
|
223
252
|
const operator = this.getOperatorSymbol(token.type);
|
|
@@ -369,4 +398,4 @@ class Parser {
|
|
|
369
398
|
}
|
|
370
399
|
}
|
|
371
400
|
exports.Parser = Parser;
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFDaEMsbUNBQW9EO0FBQ3BELHFDQUE2RDtBQUU3RCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLEdBQUc7SUFDakIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsQ0FBQyxFQUFNLE1BQU07SUFDdEIsRUFBRSxFQUFFLENBQUMsRUFBVyxRQUFRO0lBQ3hCLEdBQUcsRUFBRSxDQUFDLEVBQVUsU0FBUztJQUN6QixRQUFRLEVBQUUsQ0FBQyxFQUFLLFFBQVE7SUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRyxZQUFZO0lBQzVCLElBQUksRUFBRSxDQUFDLEVBQVMsTUFBTTtJQUN0QixNQUFNLEVBQUUsQ0FBQyxFQUFPLFFBQVE7SUFDeEIsS0FBSyxFQUFFLENBQUMsRUFBUSxJQUFJO0lBQ3BCLEtBQUssRUFBRSxFQUFFLEVBQU8sVUFBVTtJQUMxQixJQUFJLEVBQUUsRUFBRSxFQUFRLGlCQUFpQjtJQUNqQyxNQUFNLEVBQUUsRUFBRSxFQUFNLE9BQU87Q0FDeEIsQ0FBQztBQUVGLE1BQWEsTUFBTTtJQUFuQjtRQUNVLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLENBQUMsQ0FBQztRQUNwQixlQUFVLEdBQVcsRUFBRSxDQUFDO0lBeWFsQyxDQUFDO0lBdmFDLEtBQUssQ0FBQyxVQUFrQjtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUVqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVB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UyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO1lBQy9CLEtBQUssaUJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQztZQUMvQixPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVPLElBQUk7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLE9BQU87UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssaUJBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFlLEVBQUUsUUFBZ0I7UUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxNQUFNLElBQUksNkJBQW9CLENBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQ3pCLENBQUMsUUFBUSxDQUFDLEVBQ1YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FDckIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVhRCx3QkE0YUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMZXhlciB9IGZyb20gJy4vbGV4ZXInO1xuaW1wb3J0IHsgVG9rZW4sIFRva2VuVHlwZSwgQVNUTm9kZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU3ludGF4RXJyb3IsIFVuZXhwZWN0ZWRUb2tlbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vLyBPcGVyYXRvciBwcmVjZWRlbmNlIGxldmVscyAoaGlnaGVyID0gdGlnaHRlciBiaW5kaW5nKVxuY29uc3QgUFJFQ0VERU5DRSA9IHtcbiAgTE9XRVNUOiAxLFxuICBURVJOQVJZOiAyLCAgICAgLy8gPyA6XG4gIE9SOiAzLCAgICAgICAgICAvLyB8fCBPUlxuICBBTkQ6IDQsICAgICAgICAgLy8gJiYgQU5EXG4gIEVRVUFMSVRZOiA1LCAgICAvLyA9PSAhPVxuICBDT01QQVJJU09OOiA2LCAgLy8gPCA+IDw9ID49XG4gIFRFUk06IDcsICAgICAgICAvLyArIC1cbiAgRkFDVE9SOiA4LCAgICAgIC8vICogLyAlXG4gIFBPV0VSOiA5LCAgICAgICAvLyBeXG4gIFVOQVJZOiAxMCwgICAgICAvLyAtICEgTk9UXG4gIENBTEw6IDExLCAgICAgICAvLyBmdW5jdGlvbiBjYWxsc1xuICBNRU1CRVI6IDEyLCAgICAgLy8gLiBbXVxufTtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG4gIHByaXZhdGUgdG9rZW5zOiBUb2tlbltdID0gW107XG4gIHByaXZhdGUgY3VycmVudDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBleHByZXNzaW9uOiBzdHJpbmcgPSAnJztcblxuICBwYXJzZShleHByZXNzaW9uOiBzdHJpbmcpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIGNvbnN0IGxleGVyID0gbmV3IExleGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMudG9rZW5zID0gbGV4ZXIudG9rZW5pemUoKTtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuXG4gICAgY29uc3QgYXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oUFJFQ0VERU5DRS5MT1dFU1QpO1xuXG4gICAgaWYgKCF0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcihcbiAgICAgICAgU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICAgICAgWydlbmQgb2YgZXhwcmVzc2lvbiddLFxuICAgICAgICB0b2tlbi5wb3NpdGlvblxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUV4cHJlc3Npb24ocHJlY2VkZW5jZTogbnVtYmVyKTogQVNUTm9kZSB7XG4gICAgbGV0IGxlZnQgPSB0aGlzLnBhcnNlUHJlZml4RXhwcmVzc2lvbigpO1xuXG4gICAgd2hpbGUgKCF0aGlzLmlzQXRFbmQoKSAmJiBwcmVjZWRlbmNlIDwgdGhpcy5nZXRQcmVjZWRlbmNlKCkpIHtcbiAgICAgIGxlZnQgPSB0aGlzLnBhcnNlSW5maXhFeHByZXNzaW9uKGxlZnQpO1xuICAgIH1cblxuICAgIHJldHVybiBsZWZ0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVByZWZpeEV4cHJlc3Npb24oKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcblxuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgY2FzZSBUb2tlblR5cGUuTlVNQkVSOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU51bWJlcigpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0cmluZygpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VCb29sZWFuKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5OVUxMOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU51bGwoKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlZBUklBQkxFOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVZhcmlhYmxlKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5DT05URVhUX1ZBUjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb250ZXh0VmFyaWFibGUoKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLklERU5USUZJRVI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlSWRlbnRpZmllck9yRnVuY3Rpb25DYWxsKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MUEFSRU46XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXBlZEV4cHJlc3Npb24oKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxCUkFDS0VUOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFycmF5TGl0ZXJhbCgpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTUlOVVM6XG4gICAgICBjYXNlIFRva2VuVHlwZS5OT1Q6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IoXG4gICAgICAgICAgU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICAgICAgICBbJ251bWJlcicsICdzdHJpbmcnLCAnYm9vbGVhbicsICdudWxsJywgJ3ZhcmlhYmxlJywgJ2lkZW50aWZpZXInLCAnKCcsICdbJywgJy0nLCAnISddLFxuICAgICAgICAgIHRva2VuLnBvc2l0aW9uXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUluZml4RXhwcmVzc2lvbihsZWZ0OiBBU1ROb2RlKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcblxuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgY2FzZSBUb2tlblR5cGUuUExVUzpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1JTlVTOlxuICAgICAgY2FzZSBUb2tlblR5cGUuTVVMVElQTFk6XG4gICAgICBjYXNlIFRva2VuVHlwZS5ESVZJREU6XG4gICAgICBjYXNlIFRva2VuVHlwZS5NT0RVTE86XG4gICAgICBjYXNlIFRva2VuVHlwZS5QT1dFUjpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkVROlxuICAgICAgY2FzZSBUb2tlblR5cGUuTkVROlxuICAgICAgY2FzZSBUb2tlblR5cGUuTFQ6XG4gICAgICBjYXNlIFRva2VuVHlwZS5HVDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxURTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdURTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkFORDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk9SOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJpbmFyeUV4cHJlc3Npb24obGVmdCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5RVUVTVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUZXJuYXJ5RXhwcmVzc2lvbihsZWZ0KTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkRPVDpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNZW1iZXJBY2Nlc3MobGVmdCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MQlJBQ0tFVDpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbmRleEFjY2VzcyhsZWZ0KTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxQQVJFTjpcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgYW4gaWRlbnRpZmllciBmb2xsb3dlZCBieSAoXG4gICAgICAgIC8vIEJ1dCBhY3R1YWxseSB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGluIHBhcnNlSWRlbnRpZmllck9yRnVuY3Rpb25DYWxsXG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU51bWJlcigpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGNvbnN0IHZhbHVlID0gdG9rZW4udmFsdWU7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gSXQncyBhIGZsb2F0XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnTnVtYmVyTGl0ZXJhbCcsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEl0J3MgYSBkZWNpbWFsIChzdG9yZWQgYXMgc3RyaW5nKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ0RlY2ltYWxMaXRlcmFsJyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyh2YWx1ZSksXG4gICAgICAgIHJhdzogU3RyaW5nKHZhbHVlKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVN0cmluZygpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICB2YWx1ZTogU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJvb2xlYW4oKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0Jvb2xlYW5MaXRlcmFsJyxcbiAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSA9PT0gdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU51bGwoKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdOdWxsTGl0ZXJhbCcsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYXJpYWJsZSgpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVmFyaWFibGVSZWZlcmVuY2UnLFxuICAgICAgcHJlZml4OiAnJCcsXG4gICAgICBuYW1lOiBTdHJpbmcodG9rZW4udmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ29udGV4dFZhcmlhYmxlKCk6IEFTVE5vZGUge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdWYXJpYWJsZVJlZmVyZW5jZScsXG4gICAgICBwcmVmaXg6ICdAJyxcbiAgICAgIG5hbWU6IFN0cmluZyh0b2tlbi52YWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJZGVudGlmaWVyT3JGdW5jdGlvbkNhbGwoKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHRva2VuLnZhbHVlKTtcblxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBmdW5jdGlvbiBjYWxsXG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IFRva2VuVHlwZS5MUEFSRU4pIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25DYWxsKG5hbWUpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgZm9yIGtleXdvcmRzIEFORC9PUi9OT1QgdXNlZCBhcyBzdGFuZGFsb25lIGlkZW50aWZpZXJzXG4gICAgY29uc3QgdXBwZXJOYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICh1cHBlck5hbWUgPT09ICdBTkQnIHx8IHVwcGVyTmFtZSA9PT0gJ09SJykge1xuICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYXMgb3BlcmF0b3JzLCBidXQgaWYgd2UgcmVhY2ggaGVyZSxcbiAgICAgIC8vIGl0IG1lYW5zIHRoZXkgd2VyZSB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dFxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICBgJyR7bmFtZX0nIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXJgLFxuICAgICAgICB0b2tlbi5wb3NpdGlvbixcbiAgICAgICAgdG9rZW4ubGluZSxcbiAgICAgICAgdG9rZW4uY29sdW1uLFxuICAgICAgICB0aGlzLmV4cHJlc3Npb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSXQncyBhIGJhcmUgaWRlbnRpZmllciAtIGNvdWxkIGJlIGEgdmFyaWFibGUgd2l0aG91dCBwcmVmaXhcbiAgICAvLyBGb3Igbm93LCB0cmVhdCBpdCBhcyBhbiBlcnJvciAtIHJlcXVpcmUgZXhwbGljaXQgcHJlZml4XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgYFVua25vd24gaWRlbnRpZmllciAnJHtuYW1lfScuIFZhcmlhYmxlcyBtdXN0IGJlIHByZWZpeGVkIHdpdGggJCBvciBAYCxcbiAgICAgIHRva2VuLnBvc2l0aW9uLFxuICAgICAgdG9rZW4ubGluZSxcbiAgICAgIHRva2VuLmNvbHVtbixcbiAgICAgIHRoaXMuZXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRnVuY3Rpb25DYWxsKG5hbWU6IHN0cmluZyk6IEFTVE5vZGUge1xuICAgIHRoaXMuYWR2YW5jZSgpOyAvLyBjb25zdW1lICcoJ1xuICAgIGNvbnN0IGFyZ3M6IEFTVE5vZGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgIT09IFRva2VuVHlwZS5SUEFSRU4pIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IFRva2VuVHlwZS5DT01NQSkge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3MucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCkpO1xuICAgICAgfSB3aGlsZSAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkNPTU1BKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGVjdChUb2tlblR5cGUuUlBBUkVOLCAnKScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdGdW5jdGlvbkNhbGwnLFxuICAgICAgbmFtZTogbmFtZS50b1VwcGVyQ2FzZSgpLCAvLyBGdW5jdGlvbnMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUdyb3VwZWRFeHByZXNzaW9uKCk6IEFTVE5vZGUge1xuICAgIHRoaXMuYWR2YW5jZSgpOyAvLyBjb25zdW1lICcoJ1xuICAgIGNvbnN0IGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCk7XG4gICAgdGhpcy5leHBlY3QoVG9rZW5UeXBlLlJQQVJFTiwgJyknKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VBcnJheUxpdGVyYWwoKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJ1snXG4gICAgY29uc3QgZWxlbWVudHM6IEFTVE5vZGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgIT09IFRva2VuVHlwZS5SQlJBQ0tFVCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkNPTU1BKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCkpO1xuICAgICAgfSB3aGlsZSAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkNPTU1BKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGVjdChUb2tlblR5cGUuUkJSQUNLRVQsICddJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0FycmF5TGl0ZXJhbCcsXG4gICAgICBlbGVtZW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5nZXRPcGVyYXRvclN5bWJvbCh0b2tlbi50eXBlKTtcbiAgICBjb25zdCBvcGVyYW5kID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oUFJFQ0VERU5DRS5VTkFSWSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1VuYXJ5T3BlcmF0aW9uJyxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgb3BlcmFuZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJpbmFyeUV4cHJlc3Npb24obGVmdDogQVNUTm9kZSk6IEFTVE5vZGUge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yU3ltYm9sKHRva2VuLnR5cGUpO1xuICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLmdldFRva2VuUHJlY2VkZW5jZSh0b2tlbi50eXBlKTtcblxuICAgIC8vIFJpZ2h0IGFzc29jaWF0aXZpdHkgZm9yIHBvd2VyIG9wZXJhdG9yXG4gICAgY29uc3QgbmV4dFByZWNlZGVuY2UgPSB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUE9XRVIgPyBwcmVjZWRlbmNlIC0gMSA6IHByZWNlZGVuY2U7XG4gICAgY29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihuZXh0UHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0JpbmFyeU9wZXJhdGlvbicsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIGxlZnQsXG4gICAgICByaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRlcm5hcnlFeHByZXNzaW9uKGNvbmRpdGlvbjogQVNUTm9kZSk6IEFTVE5vZGUge1xuICAgIHRoaXMuYWR2YW5jZSgpOyAvLyBjb25zdW1lICc/J1xuICAgIGNvbnN0IGNvbnNlcXVlbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCk7XG4gICAgdGhpcy5leHBlY3QoVG9rZW5UeXBlLkNPTE9OLCAnOicpO1xuICAgIGNvbnN0IGFsdGVybmF0ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuVEVSTkFSWSAtIDEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLFxuICAgICAgY29uZGl0aW9uLFxuICAgICAgY29uc2VxdWVudCxcbiAgICAgIGFsdGVybmF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1lbWJlckFjY2VzcyhvYmplY3Q6IEFTVE5vZGUpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTsgLy8gY29uc3VtZSAnLidcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5JREVOVElGSUVSICYmIHRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5WQVJJQUJMRSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKFxuICAgICAgICBTdHJpbmcodG9rZW4udmFsdWUpLFxuICAgICAgICBbJ2lkZW50aWZpZXInXSxcbiAgICAgICAgdG9rZW4ucG9zaXRpb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgY29uc3QgcHJvcGVydHkgPSBTdHJpbmcodG9rZW4udmFsdWUpO1xuXG4gICAgY29uc3Qgbm9kZTogQVNUTm9kZSA9IHtcbiAgICAgIHR5cGU6ICdNZW1iZXJBY2Nlc3MnLFxuICAgICAgb2JqZWN0LFxuICAgICAgcHJvcGVydHksXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGZvciBjaGFpbmVkIGFjY2Vzc1xuICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuRE9UKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZU1lbWJlckFjY2Vzcyhub2RlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0tFVCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbmRleEFjY2Vzcyhub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmRleEFjY2VzcyhvYmplY3Q6IEFTVE5vZGUpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTsgLy8gY29uc3VtZSAnWydcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuTE9XRVNUKTtcbiAgICB0aGlzLmV4cGVjdChUb2tlblR5cGUuUkJSQUNLRVQsICddJyk7XG5cbiAgICBjb25zdCBub2RlOiBBU1ROb2RlID0ge1xuICAgICAgdHlwZTogJ0luZGV4QWNjZXNzJyxcbiAgICAgIG9iamVjdCxcbiAgICAgIGluZGV4LFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBmb3IgY2hhaW5lZCBhY2Nlc3NcbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkRPVCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VNZW1iZXJBY2Nlc3Mobm9kZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuTEJSQUNLRVQpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlSW5kZXhBY2Nlc3Mobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcml2YXRlIGdldFByZWNlZGVuY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlblByZWNlZGVuY2UodGhpcy5wZWVrKCkudHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRva2VuUHJlY2VkZW5jZSh0eXBlOiBUb2tlblR5cGUpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUb2tlblR5cGUuT1I6XG4gICAgICAgIHJldHVybiBQUkVDRURFTkNFLk9SO1xuICAgICAgY2FzZSBUb2tlblR5cGUuQU5EOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5BTkQ7XG4gICAgICBjYXNlIFRva2VuVHlwZS5FUTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk5FUTpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuRVFVQUxJVFk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MVDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdUOlxuICAgICAgY2FzZSBUb2tlblR5cGUuTFRFOlxuICAgICAgY2FzZSBUb2tlblR5cGUuR1RFOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5DT01QQVJJU09OO1xuICAgICAgY2FzZSBUb2tlblR5cGUuUExVUzpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1JTlVTOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5URVJNO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTVVMVElQTFk6XG4gICAgICBjYXNlIFRva2VuVHlwZS5ESVZJREU6XG4gICAgICBjYXNlIFRva2VuVHlwZS5NT0RVTE86XG4gICAgICAgIHJldHVybiBQUkVDRURFTkNFLkZBQ1RPUjtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlBPV0VSOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5QT1dFUjtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkRPVDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxCUkFDS0VUOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5NRU1CRVI7XG4gICAgICBjYXNlIFRva2VuVHlwZS5RVUVTVElPTjpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuVEVSTkFSWTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQUkVDRURFTkNFLkxPV0VTVDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9wZXJhdG9yU3ltYm9sKHR5cGU6IFRva2VuVHlwZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFRva2VuVHlwZS5QTFVTOiByZXR1cm4gJysnO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTUlOVVM6IHJldHVybiAnLSc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5NVUxUSVBMWTogcmV0dXJuICcqJztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkRJVklERTogcmV0dXJuICcvJztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1PRFVMTzogcmV0dXJuICclJztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlBPV0VSOiByZXR1cm4gJ14nO1xuICAgICAgY2FzZSBUb2tlblR5cGUuRVE6IHJldHVybiAnPT0nO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTkVROiByZXR1cm4gJyE9JztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxUOiByZXR1cm4gJzwnO1xuICAgICAgY2FzZSBUb2tlblR5cGUuR1Q6IHJldHVybiAnPic7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MVEU6IHJldHVybiAnPD0nO1xuICAgICAgY2FzZSBUb2tlblR5cGUuR1RFOiByZXR1cm4gJz49JztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkFORDogcmV0dXJuICcmJic7XG4gICAgICBjYXNlIFRva2VuVHlwZS5PUjogcmV0dXJuICd8fCc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5OT1Q6IHJldHVybiAnISc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKCk6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5jdXJyZW50XTtcbiAgfVxuXG4gIHByaXZhdGUgYWR2YW5jZSgpOiBUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzQXRFbmQoKSkge1xuICAgICAgdGhpcy5jdXJyZW50Kys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmN1cnJlbnQgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBdEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkVPRjtcbiAgfVxuXG4gIHByaXZhdGUgZXhwZWN0KHR5cGU6IFRva2VuVHlwZSwgZXhwZWN0ZWQ6IHN0cmluZyk6IFRva2VuIHtcbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gdHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IoXG4gICAgICBTdHJpbmcodGhpcy5wZWVrKCkudmFsdWUpLFxuICAgICAgW2V4cGVjdGVkXSxcbiAgICAgIHRoaXMucGVlaygpLnBvc2l0aW9uXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFDaEMsbUNBQW9EO0FBQ3BELHFDQUE2RDtBQUU3RCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLEdBQUc7SUFDakIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsQ0FBQyxFQUFNLE1BQU07SUFDdEIsRUFBRSxFQUFFLENBQUMsRUFBVyxRQUFRO0lBQ3hCLEdBQUcsRUFBRSxDQUFDLEVBQVUsU0FBUztJQUN6QixRQUFRLEVBQUUsQ0FBQyxFQUFLLFFBQVE7SUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRyxZQUFZO0lBQzVCLElBQUksRUFBRSxDQUFDLEVBQVMsTUFBTTtJQUN0QixNQUFNLEVBQUUsQ0FBQyxFQUFPLFFBQVE7SUFDeEIsS0FBSyxFQUFFLENBQUMsRUFBUSxJQUFJO0lBQ3BCLEtBQUssRUFBRSxFQUFFLEVBQU8sVUFBVTtJQUMxQixJQUFJLEVBQUUsRUFBRSxFQUFRLGlCQUFpQjtJQUNqQyxNQUFNLEVBQUUsRUFBRSxFQUFNLE9BQU87Q0FDeEIsQ0FBQztBQUVGLE1BQWEsTUFBTTtJQUFuQjtRQUNVLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLENBQUMsQ0FBQztRQUNwQixlQUFVLEdBQVcsRUFBRSxDQUFDO0lBZ2RsQyxDQUFDO0lBOWNDLEtBQUssQ0FBQyxVQUFrQjtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUVqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVB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ekIsQ0FBQyxRQUFRLENBQUMsRUFDVixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUNyQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbmRELHdCQW1kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExleGVyIH0gZnJvbSAnLi9sZXhlcic7XG5pbXBvcnQgeyBUb2tlbiwgVG9rZW5UeXBlLCBBU1ROb2RlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTeW50YXhFcnJvciwgVW5leHBlY3RlZFRva2VuRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbi8vIE9wZXJhdG9yIHByZWNlZGVuY2UgbGV2ZWxzIChoaWdoZXIgPSB0aWdodGVyIGJpbmRpbmcpXG5jb25zdCBQUkVDRURFTkNFID0ge1xuICBMT1dFU1Q6IDEsXG4gIFRFUk5BUlk6IDIsICAgICAvLyA/IDpcbiAgT1I6IDMsICAgICAgICAgIC8vIHx8IE9SXG4gIEFORDogNCwgICAgICAgICAvLyAmJiBBTkRcbiAgRVFVQUxJVFk6IDUsICAgIC8vID09ICE9XG4gIENPTVBBUklTT046IDYsICAvLyA8ID4gPD0gPj1cbiAgVEVSTTogNywgICAgICAgIC8vICsgLVxuICBGQUNUT1I6IDgsICAgICAgLy8gKiAvICVcbiAgUE9XRVI6IDksICAgICAgIC8vIF5cbiAgVU5BUlk6IDEwLCAgICAgIC8vIC0gISBOT1RcbiAgQ0FMTDogMTEsICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxzXG4gIE1FTUJFUjogMTIsICAgICAvLyAuIFtdXG59O1xuXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcbiAgcHJpdmF0ZSB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGV4cHJlc3Npb246IHN0cmluZyA9ICcnO1xuXG4gIHBhcnNlKGV4cHJlc3Npb246IHN0cmluZyk6IEFTVE5vZGUge1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy50b2tlbnMgPSBsZXhlci50b2tlbml6ZSgpO1xuICAgIHRoaXMuY3VycmVudCA9IDA7XG5cbiAgICBjb25zdCBhc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCk7XG5cbiAgICBpZiAoIXRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKFxuICAgICAgICBTdHJpbmcodG9rZW4udmFsdWUpLFxuICAgICAgICBbJ2VuZCBvZiBleHByZXNzaW9uJ10sXG4gICAgICAgIHRva2VuLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhc3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRXhwcmVzc2lvbihwcmVjZWRlbmNlOiBudW1iZXIpOiBBU1ROb2RlIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMucGFyc2VQcmVmaXhFeHByZXNzaW9uKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuaXNBdEVuZCgpICYmIHByZWNlZGVuY2UgPCB0aGlzLmdldFByZWNlZGVuY2UoKSkge1xuICAgICAgbGVmdCA9IHRoaXMucGFyc2VJbmZpeEV4cHJlc3Npb24obGVmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUHJlZml4RXhwcmVzc2lvbigpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuXG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICBjYXNlIFRva2VuVHlwZS5OVU1CRVI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTnVtYmVyKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5TVFJJTkc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU3RyaW5nKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5CT09MRUFOOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJvb2xlYW4oKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk5VTEw6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTnVsbCgpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuVkFSSUFCTEU6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVmFyaWFibGUoKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkNPTlRFWFRfVkFSOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNvbnRleHRWYXJpYWJsZSgpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuSURFTlRJRklFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VJZGVudGlmaWVyT3JGdW5jdGlvbkNhbGwoKTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxQQVJFTjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VHcm91cGVkRXhwcmVzc2lvbigpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTEJSQUNLRVQ6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXJyYXlMaXRlcmFsKCk7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MQlJBQ0U6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT2JqZWN0TGl0ZXJhbCgpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTUlOVVM6XG4gICAgICBjYXNlIFRva2VuVHlwZS5OT1Q6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IoXG4gICAgICAgICAgU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICAgICAgICBbJ251bWJlcicsICdzdHJpbmcnLCAnYm9vbGVhbicsICdudWxsJywgJ3ZhcmlhYmxlJywgJ2lkZW50aWZpZXInLCAnKCcsICdbJywgJ3snLCAnLScsICchJ10sXG4gICAgICAgICAgdG9rZW4ucG9zaXRpb25cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5maXhFeHByZXNzaW9uKGxlZnQ6IEFTVE5vZGUpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuXG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICBjYXNlIFRva2VuVHlwZS5QTFVTOlxuICAgICAgY2FzZSBUb2tlblR5cGUuTUlOVVM6XG4gICAgICBjYXNlIFRva2VuVHlwZS5NVUxUSVBMWTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkRJVklERTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1PRFVMTzpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlBPV0VSOlxuICAgICAgY2FzZSBUb2tlblR5cGUuRVE6XG4gICAgICBjYXNlIFRva2VuVHlwZS5ORVE6XG4gICAgICBjYXNlIFRva2VuVHlwZS5MVDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdUOlxuICAgICAgY2FzZSBUb2tlblR5cGUuTFRFOlxuICAgICAgY2FzZSBUb2tlblR5cGUuR1RFOlxuICAgICAgY2FzZSBUb2tlblR5cGUuQU5EOlxuICAgICAgY2FzZSBUb2tlblR5cGUuT1I6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQmluYXJ5RXhwcmVzc2lvbihsZWZ0KTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlFVRVNUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRlcm5hcnlFeHByZXNzaW9uKGxlZnQpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuRE9UOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU1lbWJlckFjY2VzcyhsZWZ0KTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxCUkFDS0VUOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUluZGV4QWNjZXNzKGxlZnQpO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTFBBUkVOOlxuICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhbiBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IChcbiAgICAgICAgLy8gQnV0IGFjdHVhbGx5IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gcGFyc2VJZGVudGlmaWVyT3JGdW5jdGlvbkNhbGxcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbGVmdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTnVtYmVyKCk6IEFTVE5vZGUge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSB0b2tlbi52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBJdCdzIGEgZmxvYXRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdOdW1iZXJMaXRlcmFsJyxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSXQncyBhIGRlY2ltYWwgKHN0b3JlZCBhcyBzdHJpbmcpXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnRGVjaW1hbExpdGVyYWwnLFxuICAgICAgICB2YWx1ZTogU3RyaW5nKHZhbHVlKSxcbiAgICAgICAgcmF3OiBTdHJpbmcodmFsdWUpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlU3RyaW5nKCk6IEFTVE5vZGUge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgIHZhbHVlOiBTdHJpbmcodG9rZW4udmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQm9vbGVhbigpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnQm9vbGVhbkxpdGVyYWwnLFxuICAgICAgdmFsdWU6IHRva2VuLnZhbHVlID09PSB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTnVsbCgpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ051bGxMaXRlcmFsJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhcmlhYmxlKCk6IEFTVE5vZGUge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdWYXJpYWJsZVJlZmVyZW5jZScsXG4gICAgICBwcmVmaXg6ICckJyxcbiAgICAgIG5hbWU6IFN0cmluZyh0b2tlbi52YWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb250ZXh0VmFyaWFibGUoKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1ZhcmlhYmxlUmVmZXJlbmNlJyxcbiAgICAgIHByZWZpeDogJ0AnLFxuICAgICAgbmFtZTogU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlkZW50aWZpZXJPckZ1bmN0aW9uQ2FsbCgpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcodG9rZW4udmFsdWUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZ1bmN0aW9uIGNhbGxcbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTikge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbkNhbGwobmFtZSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBmb3Iga2V5d29yZHMgQU5EL09SL05PVCB1c2VkIGFzIHN0YW5kYWxvbmUgaWRlbnRpZmllcnNcbiAgICBjb25zdCB1cHBlck5hbWUgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHVwcGVyTmFtZSA9PT0gJ0FORCcgfHwgdXBwZXJOYW1lID09PSAnT1InKSB7XG4gICAgICAvLyBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBvcGVyYXRvcnMsIGJ1dCBpZiB3ZSByZWFjaCBoZXJlLFxuICAgICAgLy8gaXQgbWVhbnMgdGhleSB3ZXJlIHVzZWQgaW4gYW4gaW52YWxpZCBjb250ZXh0XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgIGAnJHtuYW1lfScgY2Fubm90IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllcmAsXG4gICAgICAgIHRva2VuLnBvc2l0aW9uLFxuICAgICAgICB0b2tlbi5saW5lLFxuICAgICAgICB0b2tlbi5jb2x1bW4sXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJdCdzIGEgYmFyZSBpZGVudGlmaWVyIC0gY291bGQgYmUgYSB2YXJpYWJsZSB3aXRob3V0IHByZWZpeFxuICAgIC8vIEZvciBub3csIHRyZWF0IGl0IGFzIGFuIGVycm9yIC0gcmVxdWlyZSBleHBsaWNpdCBwcmVmaXhcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBgVW5rbm93biBpZGVudGlmaWVyICcke25hbWV9Jy4gVmFyaWFibGVzIG11c3QgYmUgcHJlZml4ZWQgd2l0aCAkIG9yIEBgLFxuICAgICAgdG9rZW4ucG9zaXRpb24sXG4gICAgICB0b2tlbi5saW5lLFxuICAgICAgdG9rZW4uY29sdW1uLFxuICAgICAgdGhpcy5leHByZXNzaW9uXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VGdW5jdGlvbkNhbGwobmFtZTogc3RyaW5nKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJygnXG4gICAgY29uc3QgYXJnczogQVNUTm9kZVtdID0gW107XG5cbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSAhPT0gVG9rZW5UeXBlLlJQQVJFTikge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkNPTU1BKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuTE9XRVNUKSk7XG4gICAgICB9IHdoaWxlICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuQ09NTUEpO1xuICAgIH1cblxuICAgIHRoaXMuZXhwZWN0KFRva2VuVHlwZS5SUEFSRU4sICcpJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0Z1bmN0aW9uQ2FsbCcsXG4gICAgICBuYW1lOiBuYW1lLnRvVXBwZXJDYXNlKCksIC8vIEZ1bmN0aW9ucyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlR3JvdXBlZEV4cHJlc3Npb24oKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJygnXG4gICAgY29uc3QgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuTE9XRVNUKTtcbiAgICB0aGlzLmV4cGVjdChUb2tlblR5cGUuUlBBUkVOLCAnKScpO1xuICAgIHJldHVybiBleHByO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUFycmF5TGl0ZXJhbCgpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTsgLy8gY29uc3VtZSAnWydcbiAgICBjb25zdCBlbGVtZW50czogQVNUTm9kZVtdID0gW107XG5cbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSAhPT0gVG9rZW5UeXBlLlJCUkFDS0VUKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuQ09NTUEpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuTE9XRVNUKSk7XG4gICAgICB9IHdoaWxlICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuQ09NTUEpO1xuICAgIH1cblxuICAgIHRoaXMuZXhwZWN0KFRva2VuVHlwZS5SQlJBQ0tFVCwgJ10nKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnQXJyYXlMaXRlcmFsJyxcbiAgICAgIGVsZW1lbnRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlT2JqZWN0TGl0ZXJhbCgpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTsgLy8gY29uc3VtZSAneydcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogQVNUTm9kZSB9W10gPSBbXTtcblxuICAgIGlmICh0aGlzLnBlZWsoKS50eXBlICE9PSBUb2tlblR5cGUuUkJSQUNFKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuQ09NTUEpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBLZXkgbXVzdCBiZSBhbiBpZGVudGlmaWVyXG4gICAgICAgIGNvbnN0IGtleVRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgICAgIGlmIChrZXlUb2tlbi50eXBlICE9PSBUb2tlblR5cGUuSURFTlRJRklFUikge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcihcbiAgICAgICAgICAgIFN0cmluZyhrZXlUb2tlbi52YWx1ZSksXG4gICAgICAgICAgICBbJ2lkZW50aWZpZXIgKHByb3BlcnR5IG5hbWUpJ10sXG4gICAgICAgICAgICBrZXlUb2tlbi5wb3NpdGlvblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHRoaXMuYWR2YW5jZSgpLnZhbHVlKTtcblxuICAgICAgICAvLyBFeHBlY3QgY29sb25cbiAgICAgICAgdGhpcy5leHBlY3QoVG9rZW5UeXBlLkNPTE9OLCAnOicpO1xuXG4gICAgICAgIC8vIFZhbHVlIGlzIGFueSBleHByZXNzaW9uXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oUFJFQ0VERU5DRS5MT1dFU1QpO1xuICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeyBrZXksIHZhbHVlIH0pO1xuICAgICAgfSB3aGlsZSAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkNPTU1BKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGVjdChUb2tlblR5cGUuUkJSQUNFLCAnfScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdPYmplY3RMaXRlcmFsJyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VVbmFyeUV4cHJlc3Npb24oKTogQVNUTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZ2V0T3BlcmF0b3JTeW1ib2wodG9rZW4udHlwZSk7XG4gICAgY29uc3Qgb3BlcmFuZCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKFBSRUNFREVOQ0UuVU5BUlkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdVbmFyeU9wZXJhdGlvbicsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIG9wZXJhbmQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaW5hcnlFeHByZXNzaW9uKGxlZnQ6IEFTVE5vZGUpOiBBU1ROb2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5nZXRPcGVyYXRvclN5bWJvbCh0b2tlbi50eXBlKTtcbiAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRUb2tlblByZWNlZGVuY2UodG9rZW4udHlwZSk7XG5cbiAgICAvLyBSaWdodCBhc3NvY2lhdGl2aXR5IGZvciBwb3dlciBvcGVyYXRvclxuICAgIGNvbnN0IG5leHRQcmVjZWRlbmNlID0gdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlBPV0VSID8gcHJlY2VkZW5jZSAtIDEgOiBwcmVjZWRlbmNlO1xuICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24obmV4dFByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdCaW5hcnlPcGVyYXRpb24nLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBsZWZ0LFxuICAgICAgcmlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUZXJuYXJ5RXhwcmVzc2lvbihjb25kaXRpb246IEFTVE5vZGUpOiBBU1ROb2RlIHtcbiAgICB0aGlzLmFkdmFuY2UoKTsgLy8gY29uc3VtZSAnPydcbiAgICBjb25zdCBjb25zZXF1ZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oUFJFQ0VERU5DRS5MT1dFU1QpO1xuICAgIHRoaXMuZXhwZWN0KFRva2VuVHlwZS5DT0xPTiwgJzonKTtcbiAgICBjb25zdCBhbHRlcm5hdGUgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLlRFUk5BUlkgLSAxKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJyxcbiAgICAgIGNvbmRpdGlvbixcbiAgICAgIGNvbnNlcXVlbnQsXG4gICAgICBhbHRlcm5hdGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNZW1iZXJBY2Nlc3Mob2JqZWN0OiBBU1ROb2RlKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJy4nXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblR5cGUuSURFTlRJRklFUiAmJiB0b2tlbi50eXBlICE9PSBUb2tlblR5cGUuVkFSSUFCTEUpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcihcbiAgICAgICAgU3RyaW5nKHRva2VuLnZhbHVlKSxcbiAgICAgICAgWydpZGVudGlmaWVyJ10sXG4gICAgICAgIHRva2VuLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gU3RyaW5nKHRva2VuLnZhbHVlKTtcblxuICAgIGNvbnN0IG5vZGU6IEFTVE5vZGUgPSB7XG4gICAgICB0eXBlOiAnTWVtYmVyQWNjZXNzJyxcbiAgICAgIG9iamVjdCxcbiAgICAgIHByb3BlcnR5LFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBmb3IgY2hhaW5lZCBhY2Nlc3NcbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkRPVCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VNZW1iZXJBY2Nlc3Mobm9kZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlblR5cGUuTEJSQUNLRVQpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlSW5kZXhBY2Nlc3Mobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5kZXhBY2Nlc3Mob2JqZWN0OiBBU1ROb2RlKTogQVNUTm9kZSB7XG4gICAgdGhpcy5hZHZhbmNlKCk7IC8vIGNvbnN1bWUgJ1snXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihQUkVDRURFTkNFLkxPV0VTVCk7XG4gICAgdGhpcy5leHBlY3QoVG9rZW5UeXBlLlJCUkFDS0VULCAnXScpO1xuXG4gICAgY29uc3Qgbm9kZTogQVNUTm9kZSA9IHtcbiAgICAgIHR5cGU6ICdJbmRleEFjY2VzcycsXG4gICAgICBvYmplY3QsXG4gICAgICBpbmRleCxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgZm9yIGNoYWluZWQgYWNjZXNzXG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IFRva2VuVHlwZS5ET1QpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTWVtYmVyQWNjZXNzKG5vZGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wZWVrKCkudHlwZSA9PT0gVG9rZW5UeXBlLkxCUkFDS0VUKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUluZGV4QWNjZXNzKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVjZWRlbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5QcmVjZWRlbmNlKHRoaXMucGVlaygpLnR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlblByZWNlZGVuY2UodHlwZTogVG9rZW5UeXBlKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk9SOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5PUjtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkFORDpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuQU5EO1xuICAgICAgY2FzZSBUb2tlblR5cGUuRVE6XG4gICAgICBjYXNlIFRva2VuVHlwZS5ORVE6XG4gICAgICAgIHJldHVybiBQUkVDRURFTkNFLkVRVUFMSVRZO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTFQ6XG4gICAgICBjYXNlIFRva2VuVHlwZS5HVDpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkxURTpcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdURTpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuQ09NUEFSSVNPTjtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLlBMVVM6XG4gICAgICBjYXNlIFRva2VuVHlwZS5NSU5VUzpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuVEVSTTtcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1VTFRJUExZOlxuICAgICAgY2FzZSBUb2tlblR5cGUuRElWSURFOlxuICAgICAgY2FzZSBUb2tlblR5cGUuTU9EVUxPOlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5GQUNUT1I7XG4gICAgICBjYXNlIFRva2VuVHlwZS5QT1dFUjpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuUE9XRVI7XG4gICAgICBjYXNlIFRva2VuVHlwZS5ET1Q6XG4gICAgICBjYXNlIFRva2VuVHlwZS5MQlJBQ0tFVDpcbiAgICAgICAgcmV0dXJuIFBSRUNFREVOQ0UuTUVNQkVSO1xuICAgICAgY2FzZSBUb2tlblR5cGUuUVVFU1RJT046XG4gICAgICAgIHJldHVybiBQUkVDRURFTkNFLlRFUk5BUlk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUFJFQ0VERU5DRS5MT1dFU1Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvclN5bWJvbCh0eXBlOiBUb2tlblR5cGUpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUb2tlblR5cGUuUExVUzogcmV0dXJuICcrJztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk1JTlVTOiByZXR1cm4gJy0nO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTVVMVElQTFk6IHJldHVybiAnKic7XG4gICAgICBjYXNlIFRva2VuVHlwZS5ESVZJREU6IHJldHVybiAnLyc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5NT0RVTE86IHJldHVybiAnJSc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5QT1dFUjogcmV0dXJuICdeJztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkVROiByZXR1cm4gJz09JztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLk5FUTogcmV0dXJuICchPSc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5MVDogcmV0dXJuICc8JztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdUOiByZXR1cm4gJz4nO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTFRFOiByZXR1cm4gJzw9JztcbiAgICAgIGNhc2UgVG9rZW5UeXBlLkdURTogcmV0dXJuICc+PSc7XG4gICAgICBjYXNlIFRva2VuVHlwZS5BTkQ6IHJldHVybiAnJiYnO1xuICAgICAgY2FzZSBUb2tlblR5cGUuT1I6IHJldHVybiAnfHwnO1xuICAgICAgY2FzZSBUb2tlblR5cGUuTk9UOiByZXR1cm4gJyEnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVlaygpOiBUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuY3VycmVudF07XG4gIH1cblxuICBwcml2YXRlIGFkdmFuY2UoKTogVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudCsrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5jdXJyZW50IC0gMV07XG4gIH1cblxuICBwcml2YXRlIGlzQXRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVlaygpLnR5cGUgPT09IFRva2VuVHlwZS5FT0Y7XG4gIH1cblxuICBwcml2YXRlIGV4cGVjdCh0eXBlOiBUb2tlblR5cGUsIGV4cGVjdGVkOiBzdHJpbmcpOiBUb2tlbiB7XG4gICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKFxuICAgICAgU3RyaW5nKHRoaXMucGVlaygpLnZhbHVlKSxcbiAgICAgIFtleHBlY3RlZF0sXG4gICAgICB0aGlzLnBlZWsoKS5wb3NpdGlvblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/types.d.ts
CHANGED
|
@@ -95,6 +95,14 @@ export interface ArrayLiteral {
|
|
|
95
95
|
type: 'ArrayLiteral';
|
|
96
96
|
elements: ASTNode[];
|
|
97
97
|
}
|
|
98
|
+
export interface ObjectLiteralProperty {
|
|
99
|
+
key: string;
|
|
100
|
+
value: ASTNode;
|
|
101
|
+
}
|
|
102
|
+
export interface ObjectLiteral {
|
|
103
|
+
type: 'ObjectLiteral';
|
|
104
|
+
properties: ObjectLiteralProperty[];
|
|
105
|
+
}
|
|
98
106
|
export interface VariableReference {
|
|
99
107
|
type: 'VariableReference';
|
|
100
108
|
prefix: '$' | '@';
|
|
@@ -132,7 +140,7 @@ export interface IndexAccess {
|
|
|
132
140
|
object: ASTNode;
|
|
133
141
|
index: ASTNode;
|
|
134
142
|
}
|
|
135
|
-
export type ASTNode = DecimalLiteral | NumberLiteral | StringLiteral | BooleanLiteral | NullLiteral | ArrayLiteral | VariableReference | BinaryOperation | UnaryOperation | ConditionalExpression | FunctionCall | MemberAccess | IndexAccess;
|
|
143
|
+
export type ASTNode = DecimalLiteral | NumberLiteral | StringLiteral | BooleanLiteral | NullLiteral | ArrayLiteral | ObjectLiteral | VariableReference | BinaryOperation | UnaryOperation | ConditionalExpression | FunctionCall | MemberAccess | IndexAccess;
|
|
136
144
|
export interface ArgumentType {
|
|
137
145
|
name: string;
|
|
138
146
|
type: ValueType;
|
|
@@ -173,6 +181,14 @@ export interface EvaluationResultSet {
|
|
|
173
181
|
totalExecutionTimeMs: number;
|
|
174
182
|
evaluationOrder: string[];
|
|
175
183
|
}
|
|
184
|
+
export interface EvaluateAllOptions {
|
|
185
|
+
/**
|
|
186
|
+
* When true, disables automatic intermediate rounding even if defaultRounding
|
|
187
|
+
* is configured in the engine. Per-formula rounding configurations are still applied.
|
|
188
|
+
* @default false
|
|
189
|
+
*/
|
|
190
|
+
disableIntermediateRounding?: boolean;
|
|
191
|
+
}
|
|
176
192
|
export interface ValidationResult {
|
|
177
193
|
valid: boolean;
|
|
178
194
|
errors: Error[];
|
|
@@ -213,6 +229,8 @@ export declare enum TokenType {
|
|
|
213
229
|
RPAREN = "RPAREN",
|
|
214
230
|
LBRACKET = "LBRACKET",
|
|
215
231
|
RBRACKET = "RBRACKET",
|
|
232
|
+
LBRACE = "LBRACE",
|
|
233
|
+
RBRACE = "RBRACE",
|
|
216
234
|
COMMA = "COMMA",
|
|
217
235
|
DOT = "DOT",
|
|
218
236
|
QUESTION = "QUESTION",
|
package/dist/types.js
CHANGED
|
@@ -52,6 +52,8 @@ var TokenType;
|
|
|
52
52
|
TokenType["RPAREN"] = "RPAREN";
|
|
53
53
|
TokenType["LBRACKET"] = "LBRACKET";
|
|
54
54
|
TokenType["RBRACKET"] = "RBRACKET";
|
|
55
|
+
TokenType["LBRACE"] = "LBRACE";
|
|
56
|
+
TokenType["RBRACE"] = "RBRACE";
|
|
55
57
|
TokenType["COMMA"] = "COMMA";
|
|
56
58
|
TokenType["DOT"] = "DOT";
|
|
57
59
|
TokenType["QUESTION"] = "QUESTION";
|
|
@@ -59,4 +61,4 @@ var TokenType;
|
|
|
59
61
|
// Special
|
|
60
62
|
TokenType["EOF"] = "EOF";
|
|
61
63
|
})(TokenType || (exports.TokenType = TokenType = {}));
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsK0VBQStFO0FBQy9FLHdCQUF3QjtBQUN4QiwrRUFBK0U7QUFFL0UsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCLG9DQUFhLENBQUE7SUFDYixzQ0FBZSxDQUFBO0lBQ2Ysb0NBQWEsQ0FBQTtJQUNiLGdDQUFTLENBQUE7SUFDVCwwQ0FBbUIsQ0FBQTtJQUNuQiw4Q0FBdUIsQ0FBQTtJQUN2Qiw4Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUEwUUQsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0UsSUFBWSxTQTZDWDtBQTdDRCxXQUFZLFNBQVM7SUFDbkIsV0FBVztJQUNYLDhCQUFpQixDQUFBO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLGdDQUFtQixDQUFBO0lBQ25CLDBCQUFhLENBQUE7SUFFYiw0QkFBNEI7SUFDNUIsc0NBQXlCLENBQUE7SUFDekIsa0NBQXFCLENBQUE7SUFDckIsd0NBQTJCLENBQUE7SUFFM0IsWUFBWTtJQUNaLDBCQUFhLENBQUE7SUFDYiw0QkFBZSxDQUFBO0lBQ2Ysa0NBQXFCLENBQUE7SUFDckIsOEJBQWlCLENBQUE7SUFDakIsOEJBQWlCLENBQUE7SUFDakIsNEJBQWUsQ0FBQTtJQUVmLGFBQWE7SUFDYixzQkFBUyxDQUFBO0lBQ1Qsd0JBQVcsQ0FBQTtJQUNYLHNCQUFTLENBQUE7SUFDVCxzQkFBUyxDQUFBO0lBQ1Qsd0JBQVcsQ0FBQTtJQUNYLHdCQUFXLENBQUE7SUFFWCxVQUFVO0lBQ1Ysd0JBQVcsQ0FBQTtJQUNYLHNCQUFTLENBQUE7SUFDVCx3QkFBVyxDQUFBO0lBRVgsY0FBYztJQUNkLDhCQUFpQixDQUFBO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLGtDQUFxQixDQUFBO0lBQ3JCLGtDQUFxQixDQUFBO0lBQ3JCLDRCQUFlLENBQUE7SUFDZix3QkFBVyxDQUFBO0lBQ1gsa0NBQXFCLENBQUE7SUFDckIsNEJBQWUsQ0FBQTtJQUVmLFVBQVU7SUFDVix3QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQTdDVyxTQUFTLHlCQUFULFNBQVMsUUE2Q3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjaW1hbCB9IGZyb20gJ2RlY2ltYWwuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWYWx1ZSBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBWYWx1ZVR5cGUgPSAnbnVtYmVyJyB8ICdkZWNpbWFsJyB8ICdzdHJpbmcnIHwgJ2Jvb2xlYW4nIHwgJ2FycmF5JyB8ICdvYmplY3QnIHwgJ251bGwnIHwgJ2FueSc7XG5cbmV4cG9ydCB0eXBlIEZvcm11bGFWYWx1ZSA9IERlY2ltYWwgfCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IEZvcm11bGFWYWx1ZVtdIHwgeyBba2V5OiBzdHJpbmddOiBGb3JtdWxhVmFsdWUgfTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaW1hbCBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBlbnVtIERlY2ltYWxSb3VuZGluZ01vZGUge1xuICBDRUlMID0gJ0NFSUwnLFxuICBGTE9PUiA9ICdGTE9PUicsXG4gIERPV04gPSAnRE9XTicsXG4gIFVQID0gJ1VQJyxcbiAgSEFMRl9VUCA9ICdIQUxGX1VQJyxcbiAgSEFMRl9ET1dOID0gJ0hBTEZfRE9XTicsXG4gIEhBTEZfRVZFTiA9ICdIQUxGX0VWRU4nLFxuICBIQUxGX09ERCA9ICdIQUxGX09ERCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjaW1hbENvbmZpZyB7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgcm91bmRpbmdNb2RlPzogRGVjaW1hbFJvdW5kaW5nTW9kZTtcbiAgZGl2aXNpb25TY2FsZT86IG51bWJlcjtcbiAgcHJlc2VydmVUcmFpbGluZ1plcm9zPzogYm9vbGVhbjtcbiAgYXV0b0NvbnZlcnRGbG9hdHM/OiBib29sZWFuO1xuICBtYXhFeHBvbmVudD86IG51bWJlcjtcbiAgbWluRXhwb25lbnQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJvdW5kaW5nIENvbmZpZ3VyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSb3VuZGluZ0NvbmZpZyB7XG4gIG1vZGU6ICdIQUxGX1VQJyB8ICdIQUxGX0RPV04nIHwgJ0ZMT09SJyB8ICdDRUlMJyB8ICdOT05FJztcbiAgcHJlY2lzaW9uOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVycm9yIEJlaGF2aW9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JCZWhhdmlvciB7XG4gIHR5cGU6ICdUSFJPVycgfCAnTlVMTCcgfCAnWkVSTycgfCAnREVGQVVMVCcgfCAnU0tJUCc7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZvcm11bGEgRGVmaW5pdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm11bGFEZWZpbml0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbiAgb25FcnJvcj86IEVycm9yQmVoYXZpb3I7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG4gIHJvdW5kaW5nPzogUm91bmRpbmdDb25maWc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2YWx1YXRpb24gQ29udGV4dFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRpb25Db250ZXh0IHtcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29sbGVjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xuICBleHRyYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmdpbmUgQ29uZmlndXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdG9yRGVmaW5pdGlvbiB7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBwcmVjZWRlbmNlOiBudW1iZXI7XG4gIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyB8ICdyaWdodCc7XG4gIGhhbmRsZXI6IChsZWZ0OiB1bmtub3duLCByaWdodDogdW5rbm93bikgPT4gdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUNvbmZpZyB7XG4gIG1heEV4cHJlc3Npb25MZW5ndGg/OiBudW1iZXI7XG4gIG1heFJlY3Vyc2lvbkRlcHRoPzogbnVtYmVyO1xuICBtYXhJdGVyYXRpb25zPzogbnVtYmVyO1xuICBtYXhFeGVjdXRpb25UaW1lPzogbnVtYmVyO1xuICBhbGxvd2VkRnVuY3Rpb25zPzogc3RyaW5nW107XG4gIGJsb2NrZWRGdW5jdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtdWxhRW5naW5lQ29uZmlnIHtcbiAgZW5hYmxlQ2FjaGU/OiBib29sZWFuO1xuICBtYXhDYWNoZVNpemU/OiBudW1iZXI7XG4gIGRlZmF1bHRFcnJvckJlaGF2aW9yPzogRXJyb3JCZWhhdmlvcjtcbiAgZGVmYXVsdFJvdW5kaW5nPzogUm91bmRpbmdDb25maWc7XG4gIHZhcmlhYmxlUHJlZml4Pzogc3RyaW5nO1xuICBjb250ZXh0UHJlZml4Pzogc3RyaW5nO1xuICBzdHJpY3RNb2RlPzogYm9vbGVhbjtcbiAgb3BlcmF0b3JzPzogT3BlcmF0b3JEZWZpbml0aW9uW107XG4gIGZ1bmN0aW9ucz86IEZ1bmN0aW9uRGVmaW5pdGlvbltdO1xuICBkZWNpbWFsPzogRGVjaW1hbENvbmZpZztcbiAgc2VjdXJpdHk/OiBTZWN1cml0eUNvbmZpZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVNUIE5vZGUgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNpbWFsTGl0ZXJhbCB7XG4gIHR5cGU6ICdEZWNpbWFsTGl0ZXJhbCc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHJhdzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckxpdGVyYWwge1xuICB0eXBlOiAnTnVtYmVyTGl0ZXJhbCc7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTGl0ZXJhbCB7XG4gIHR5cGU6ICdTdHJpbmdMaXRlcmFsJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb29sZWFuTGl0ZXJhbCB7XG4gIHR5cGU6ICdCb29sZWFuTGl0ZXJhbCc7XG4gIHZhbHVlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bGxMaXRlcmFsIHtcbiAgdHlwZTogJ051bGxMaXRlcmFsJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnJheUxpdGVyYWwge1xuICB0eXBlOiAnQXJyYXlMaXRlcmFsJztcbiAgZWxlbWVudHM6IEFTVE5vZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZVJlZmVyZW5jZSB7XG4gIHR5cGU6ICdWYXJpYWJsZVJlZmVyZW5jZSc7XG4gIHByZWZpeDogJyQnIHwgJ0AnO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BlcmF0aW9uIHtcbiAgdHlwZTogJ0JpbmFyeU9wZXJhdGlvbic7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIGxlZnQ6IEFTVE5vZGU7XG4gIHJpZ2h0OiBBU1ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuYXJ5T3BlcmF0aW9uIHtcbiAgdHlwZTogJ1VuYXJ5T3BlcmF0aW9uJztcbiAgb3BlcmF0b3I6IHN0cmluZztcbiAgb3BlcmFuZDogQVNUTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25hbEV4cHJlc3Npb24ge1xuICB0eXBlOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJztcbiAgY29uZGl0aW9uOiBBU1ROb2RlO1xuICBjb25zZXF1ZW50OiBBU1ROb2RlO1xuICBhbHRlcm5hdGU6IEFTVE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DYWxsIHtcbiAgdHlwZTogJ0Z1bmN0aW9uQ2FsbCc7XG4gIG5hbWU6IHN0cmluZztcbiAgYXJndW1lbnRzOiBBU1ROb2RlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyQWNjZXNzIHtcbiAgdHlwZTogJ01lbWJlckFjY2Vzcyc7XG4gIG9iamVjdDogQVNUTm9kZTtcbiAgcHJvcGVydHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleEFjY2VzcyB7XG4gIHR5cGU6ICdJbmRleEFjY2Vzcyc7XG4gIG9iamVjdDogQVNUTm9kZTtcbiAgaW5kZXg6IEFTVE5vZGU7XG59XG5cbmV4cG9ydCB0eXBlIEFTVE5vZGUgPVxuICB8IERlY2ltYWxMaXRlcmFsXG4gIHwgTnVtYmVyTGl0ZXJhbFxuICB8IFN0cmluZ0xpdGVyYWxcbiAgfCBCb29sZWFuTGl0ZXJhbFxuICB8IE51bGxMaXRlcmFsXG4gIHwgQXJyYXlMaXRlcmFsXG4gIHwgVmFyaWFibGVSZWZlcmVuY2VcbiAgfCBCaW5hcnlPcGVyYXRpb25cbiAgfCBVbmFyeU9wZXJhdGlvblxuICB8IENvbmRpdGlvbmFsRXhwcmVzc2lvblxuICB8IEZ1bmN0aW9uQ2FsbFxuICB8IE1lbWJlckFjY2Vzc1xuICB8IEluZGV4QWNjZXNzO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGdW5jdGlvbiBEZWZpbml0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJndW1lbnRUeXBlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBWYWx1ZVR5cGU7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25JbXBsZW1lbnRhdGlvbiA9IChcbiAgYXJnczogdW5rbm93bltdLFxuICBjb250ZXh0OiBFdmFsdWF0aW9uQ29udGV4dCxcbiAgZW5naW5lOiB1bmtub3duXG4pID0+IHVua25vd247XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25EZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtaW5BcmdzOiBudW1iZXI7XG4gIG1heEFyZ3M6IG51bWJlcjtcbiAgYXJnVHlwZXM/OiBBcmd1bWVudFR5cGVbXTtcbiAgcmV0dXJuVHlwZTogVmFsdWVUeXBlO1xuICBpbXBsZW1lbnRhdGlvbjogRnVuY3Rpb25JbXBsZW1lbnRhdGlvbjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlcGVuZGVuY3kgR3JhcGhcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBlbmRlbmN5R3JhcGgge1xuICBub2RlczogU2V0PHN0cmluZz47XG4gIGVkZ2VzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj47XG4gIGhhc0N5Y2xlcygpOiBib29sZWFuO1xuICBnZXRSb290cygpOiBTZXQ8c3RyaW5nPjtcbiAgZ2V0RGVwZW5kZW50cyhub2RlSWQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuICBnZXREZXBlbmRlbmNpZXMobm9kZUlkOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPjtcbiAgZ2V0VHJhbnNpdGl2ZURlcGVuZGVuY2llcyhub2RlSWQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuICB0b3BvbG9naWNhbFNvcnQoKTogc3RyaW5nW107XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2YWx1YXRpb24gUmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRpb25SZXN1bHQge1xuICB2YWx1ZTogdW5rbm93bjtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvcjtcbiAgZXhlY3V0aW9uVGltZU1zOiBudW1iZXI7XG4gIGFjY2Vzc2VkVmFyaWFibGVzOiBTZXQ8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0aW9uUmVzdWx0U2V0IHtcbiAgcmVzdWx0czogTWFwPHN0cmluZywgRXZhbHVhdGlvblJlc3VsdD47XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGVycm9yczogRXJyb3JbXTtcbiAgdG90YWxFeGVjdXRpb25UaW1lTXM6IG51bWJlcjtcbiAgZXZhbHVhdGlvbk9yZGVyOiBzdHJpbmdbXTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmFsaWRhdGlvbiBSZXN1bHRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yczogRXJyb3JbXTtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICBkZXBlbmRlbmN5R3JhcGg6IERlcGVuZGVuY3lHcmFwaDtcbiAgZXZhbHVhdGlvbk9yZGVyOiBzdHJpbmdbXTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2FjaGUgU3RhdGlzdGljc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlU3RhdHMge1xuICBzaXplOiBudW1iZXI7XG4gIGhpdHM6IG51bWJlcjtcbiAgbWlzc2VzOiBudW1iZXI7XG4gIGhpdFJhdGU6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9rZW4gVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgLy8gTGl0ZXJhbHNcbiAgTlVNQkVSID0gJ05VTUJFUicsXG4gIFNUUklORyA9ICdTVFJJTkcnLFxuICBCT09MRUFOID0gJ0JPT0xFQU4nLFxuICBOVUxMID0gJ05VTEwnLFxuXG4gIC8vIElkZW50aWZpZXJzIGFuZCBWYXJpYWJsZXNcbiAgSURFTlRJRklFUiA9ICdJREVOVElGSUVSJyxcbiAgVkFSSUFCTEUgPSAnVkFSSUFCTEUnLFxuICBDT05URVhUX1ZBUiA9ICdDT05URVhUX1ZBUicsXG5cbiAgLy8gT3BlcmF0b3JzXG4gIFBMVVMgPSAnUExVUycsXG4gIE1JTlVTID0gJ01JTlVTJyxcbiAgTVVMVElQTFkgPSAnTVVMVElQTFknLFxuICBESVZJREUgPSAnRElWSURFJyxcbiAgTU9EVUxPID0gJ01PRFVMTycsXG4gIFBPV0VSID0gJ1BPV0VSJyxcblxuICAvLyBDb21wYXJpc29uXG4gIEVRID0gJ0VRJyxcbiAgTkVRID0gJ05FUScsXG4gIExUID0gJ0xUJyxcbiAgR1QgPSAnR1QnLFxuICBMVEUgPSAnTFRFJyxcbiAgR1RFID0gJ0dURScsXG5cbiAgLy8gTG9naWNhbFxuICBBTkQgPSAnQU5EJyxcbiAgT1IgPSAnT1InLFxuICBOT1QgPSAnTk9UJyxcblxuICAvLyBQdW5jdHVhdGlvblxuICBMUEFSRU4gPSAnTFBBUkVOJyxcbiAgUlBBUkVOID0gJ1JQQVJFTicsXG4gIExCUkFDS0VUID0gJ0xCUkFDS0VUJyxcbiAgUkJSQUNLRVQgPSAnUkJSQUNLRVQnLFxuICBDT01NQSA9ICdDT01NQScsXG4gIERPVCA9ICdET1QnLFxuICBRVUVTVElPTiA9ICdRVUVTVElPTicsXG4gIENPTE9OID0gJ0NPTE9OJyxcblxuICAvLyBTcGVjaWFsXG4gIEVPRiA9ICdFT0YnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIHtcbiAgdHlwZTogVG9rZW5UeXBlO1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG4gIGxpbmU6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG59XG4iXX0=
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsK0VBQStFO0FBQy9FLHdCQUF3QjtBQUN4QiwrRUFBK0U7QUFFL0UsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCLG9DQUFhLENBQUE7SUFDYixzQ0FBZSxDQUFBO0lBQ2Ysb0NBQWEsQ0FBQTtJQUNiLGdDQUFTLENBQUE7SUFDVCwwQ0FBbUIsQ0FBQTtJQUNuQiw4Q0FBdUIsQ0FBQTtJQUN2Qiw4Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUFrU0QsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0UsSUFBWSxTQStDWDtBQS9DRCxXQUFZLFNBQVM7SUFDbkIsV0FBVztJQUNYLDhCQUFpQixDQUFBO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLGdDQUFtQixDQUFBO0lBQ25CLDBCQUFhLENBQUE7SUFFYiw0QkFBNEI7SUFDNUIsc0NBQXlCLENBQUE7SUFDekIsa0NBQXFCLENBQUE7SUFDckIsd0NBQTJCLENBQUE7SUFFM0IsWUFBWTtJQUNaLDBCQUFhLENBQUE7SUFDYiw0QkFBZSxDQUFBO0lBQ2Ysa0NBQXFCLENBQUE7SUFDckIsOEJBQWlCLENBQUE7SUFDakIsOEJBQWlCLENBQUE7SUFDakIsNEJBQWUsQ0FBQTtJQUVmLGFBQWE7SUFDYixzQkFBUyxDQUFBO0lBQ1Qsd0JBQVcsQ0FBQTtJQUNYLHNCQUFTLENBQUE7SUFDVCxzQkFBUyxDQUFBO0lBQ1Qsd0JBQVcsQ0FBQTtJQUNYLHdCQUFXLENBQUE7SUFFWCxVQUFVO0lBQ1Ysd0JBQVcsQ0FBQTtJQUNYLHNCQUFTLENBQUE7SUFDVCx3QkFBVyxDQUFBO0lBRVgsY0FBYztJQUNkLDhCQUFpQixDQUFBO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLGtDQUFxQixDQUFBO0lBQ3JCLGtDQUFxQixDQUFBO0lBQ3JCLDhCQUFpQixDQUFBO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLDRCQUFlLENBQUE7SUFDZix3QkFBVyxDQUFBO0lBQ1gsa0NBQXFCLENBQUE7SUFDckIsNEJBQWUsQ0FBQTtJQUVmLFVBQVU7SUFDVix3QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQS9DVyxTQUFTLHlCQUFULFNBQVMsUUErQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjaW1hbCB9IGZyb20gJ2RlY2ltYWwuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWYWx1ZSBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBWYWx1ZVR5cGUgPSAnbnVtYmVyJyB8ICdkZWNpbWFsJyB8ICdzdHJpbmcnIHwgJ2Jvb2xlYW4nIHwgJ2FycmF5JyB8ICdvYmplY3QnIHwgJ251bGwnIHwgJ2FueSc7XG5cbmV4cG9ydCB0eXBlIEZvcm11bGFWYWx1ZSA9IERlY2ltYWwgfCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IEZvcm11bGFWYWx1ZVtdIHwgeyBba2V5OiBzdHJpbmddOiBGb3JtdWxhVmFsdWUgfTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaW1hbCBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBlbnVtIERlY2ltYWxSb3VuZGluZ01vZGUge1xuICBDRUlMID0gJ0NFSUwnLFxuICBGTE9PUiA9ICdGTE9PUicsXG4gIERPV04gPSAnRE9XTicsXG4gIFVQID0gJ1VQJyxcbiAgSEFMRl9VUCA9ICdIQUxGX1VQJyxcbiAgSEFMRl9ET1dOID0gJ0hBTEZfRE9XTicsXG4gIEhBTEZfRVZFTiA9ICdIQUxGX0VWRU4nLFxuICBIQUxGX09ERCA9ICdIQUxGX09ERCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjaW1hbENvbmZpZyB7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgcm91bmRpbmdNb2RlPzogRGVjaW1hbFJvdW5kaW5nTW9kZTtcbiAgZGl2aXNpb25TY2FsZT86IG51bWJlcjtcbiAgcHJlc2VydmVUcmFpbGluZ1plcm9zPzogYm9vbGVhbjtcbiAgYXV0b0NvbnZlcnRGbG9hdHM/OiBib29sZWFuO1xuICBtYXhFeHBvbmVudD86IG51bWJlcjtcbiAgbWluRXhwb25lbnQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJvdW5kaW5nIENvbmZpZ3VyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSb3VuZGluZ0NvbmZpZyB7XG4gIG1vZGU6ICdIQUxGX1VQJyB8ICdIQUxGX0RPV04nIHwgJ0ZMT09SJyB8ICdDRUlMJyB8ICdOT05FJztcbiAgcHJlY2lzaW9uOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVycm9yIEJlaGF2aW9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JCZWhhdmlvciB7XG4gIHR5cGU6ICdUSFJPVycgfCAnTlVMTCcgfCAnWkVSTycgfCAnREVGQVVMVCcgfCAnU0tJUCc7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZvcm11bGEgRGVmaW5pdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm11bGFEZWZpbml0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbiAgb25FcnJvcj86IEVycm9yQmVoYXZpb3I7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG4gIHJvdW5kaW5nPzogUm91bmRpbmdDb25maWc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2YWx1YXRpb24gQ29udGV4dFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRpb25Db250ZXh0IHtcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29sbGVjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xuICBleHRyYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmdpbmUgQ29uZmlndXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdG9yRGVmaW5pdGlvbiB7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBwcmVjZWRlbmNlOiBudW1iZXI7XG4gIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyB8ICdyaWdodCc7XG4gIGhhbmRsZXI6IChsZWZ0OiB1bmtub3duLCByaWdodDogdW5rbm93bikgPT4gdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUNvbmZpZyB7XG4gIG1heEV4cHJlc3Npb25MZW5ndGg/OiBudW1iZXI7XG4gIG1heFJlY3Vyc2lvbkRlcHRoPzogbnVtYmVyO1xuICBtYXhJdGVyYXRpb25zPzogbnVtYmVyO1xuICBtYXhFeGVjdXRpb25UaW1lPzogbnVtYmVyO1xuICBhbGxvd2VkRnVuY3Rpb25zPzogc3RyaW5nW107XG4gIGJsb2NrZWRGdW5jdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtdWxhRW5naW5lQ29uZmlnIHtcbiAgZW5hYmxlQ2FjaGU/OiBib29sZWFuO1xuICBtYXhDYWNoZVNpemU/OiBudW1iZXI7XG4gIGRlZmF1bHRFcnJvckJlaGF2aW9yPzogRXJyb3JCZWhhdmlvcjtcbiAgZGVmYXVsdFJvdW5kaW5nPzogUm91bmRpbmdDb25maWc7XG4gIHZhcmlhYmxlUHJlZml4Pzogc3RyaW5nO1xuICBjb250ZXh0UHJlZml4Pzogc3RyaW5nO1xuICBzdHJpY3RNb2RlPzogYm9vbGVhbjtcbiAgb3BlcmF0b3JzPzogT3BlcmF0b3JEZWZpbml0aW9uW107XG4gIGZ1bmN0aW9ucz86IEZ1bmN0aW9uRGVmaW5pdGlvbltdO1xuICBkZWNpbWFsPzogRGVjaW1hbENvbmZpZztcbiAgc2VjdXJpdHk/OiBTZWN1cml0eUNvbmZpZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVNUIE5vZGUgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNpbWFsTGl0ZXJhbCB7XG4gIHR5cGU6ICdEZWNpbWFsTGl0ZXJhbCc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHJhdzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckxpdGVyYWwge1xuICB0eXBlOiAnTnVtYmVyTGl0ZXJhbCc7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTGl0ZXJhbCB7XG4gIHR5cGU6ICdTdHJpbmdMaXRlcmFsJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb29sZWFuTGl0ZXJhbCB7XG4gIHR5cGU6ICdCb29sZWFuTGl0ZXJhbCc7XG4gIHZhbHVlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bGxMaXRlcmFsIHtcbiAgdHlwZTogJ051bGxMaXRlcmFsJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnJheUxpdGVyYWwge1xuICB0eXBlOiAnQXJyYXlMaXRlcmFsJztcbiAgZWxlbWVudHM6IEFTVE5vZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RMaXRlcmFsUHJvcGVydHkge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IEFTVE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TGl0ZXJhbCB7XG4gIHR5cGU6ICdPYmplY3RMaXRlcmFsJztcbiAgcHJvcGVydGllczogT2JqZWN0TGl0ZXJhbFByb3BlcnR5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVSZWZlcmVuY2Uge1xuICB0eXBlOiAnVmFyaWFibGVSZWZlcmVuY2UnO1xuICBwcmVmaXg6ICckJyB8ICdAJztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmFyeU9wZXJhdGlvbiB7XG4gIHR5cGU6ICdCaW5hcnlPcGVyYXRpb24nO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICBsZWZ0OiBBU1ROb2RlO1xuICByaWdodDogQVNUTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmFyeU9wZXJhdGlvbiB7XG4gIHR5cGU6ICdVbmFyeU9wZXJhdGlvbic7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIG9wZXJhbmQ6IEFTVE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uYWxFeHByZXNzaW9uIHtcbiAgdHlwZTogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbic7XG4gIGNvbmRpdGlvbjogQVNUTm9kZTtcbiAgY29uc2VxdWVudDogQVNUTm9kZTtcbiAgYWx0ZXJuYXRlOiBBU1ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2FsbCB7XG4gIHR5cGU6ICdGdW5jdGlvbkNhbGwnO1xuICBuYW1lOiBzdHJpbmc7XG4gIGFyZ3VtZW50czogQVNUTm9kZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlckFjY2VzcyB7XG4gIHR5cGU6ICdNZW1iZXJBY2Nlc3MnO1xuICBvYmplY3Q6IEFTVE5vZGU7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhBY2Nlc3Mge1xuICB0eXBlOiAnSW5kZXhBY2Nlc3MnO1xuICBvYmplY3Q6IEFTVE5vZGU7XG4gIGluZGV4OiBBU1ROb2RlO1xufVxuXG5leHBvcnQgdHlwZSBBU1ROb2RlID1cbiAgfCBEZWNpbWFsTGl0ZXJhbFxuICB8IE51bWJlckxpdGVyYWxcbiAgfCBTdHJpbmdMaXRlcmFsXG4gIHwgQm9vbGVhbkxpdGVyYWxcbiAgfCBOdWxsTGl0ZXJhbFxuICB8IEFycmF5TGl0ZXJhbFxuICB8IE9iamVjdExpdGVyYWxcbiAgfCBWYXJpYWJsZVJlZmVyZW5jZVxuICB8IEJpbmFyeU9wZXJhdGlvblxuICB8IFVuYXJ5T3BlcmF0aW9uXG4gIHwgQ29uZGl0aW9uYWxFeHByZXNzaW9uXG4gIHwgRnVuY3Rpb25DYWxsXG4gIHwgTWVtYmVyQWNjZXNzXG4gIHwgSW5kZXhBY2Nlc3M7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZ1bmN0aW9uIERlZmluaXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBcmd1bWVudFR5cGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFZhbHVlVHlwZTtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufVxuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkltcGxlbWVudGF0aW9uID0gKFxuICBhcmdzOiB1bmtub3duW10sXG4gIGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0LFxuICBlbmdpbmU6IHVua25vd25cbikgPT4gdW5rbm93bjtcblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkRlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG1pbkFyZ3M6IG51bWJlcjtcbiAgbWF4QXJnczogbnVtYmVyO1xuICBhcmdUeXBlcz86IEFyZ3VtZW50VHlwZVtdO1xuICByZXR1cm5UeXBlOiBWYWx1ZVR5cGU7XG4gIGltcGxlbWVudGF0aW9uOiBGdW5jdGlvbkltcGxlbWVudGF0aW9uO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVwZW5kZW5jeSBHcmFwaFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lHcmFwaCB7XG4gIG5vZGVzOiBTZXQ8c3RyaW5nPjtcbiAgZWRnZXM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PjtcbiAgaGFzQ3ljbGVzKCk6IGJvb2xlYW47XG4gIGdldFJvb3RzKCk6IFNldDxzdHJpbmc+O1xuICBnZXREZXBlbmRlbnRzKG5vZGVJZDogc3RyaW5nKTogU2V0PHN0cmluZz47XG4gIGdldERlcGVuZGVuY2llcyhub2RlSWQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuICBnZXRUcmFuc2l0aXZlRGVwZW5kZW5jaWVzKG5vZGVJZDogc3RyaW5nKTogU2V0PHN0cmluZz47XG4gIHRvcG9sb2dpY2FsU29ydCgpOiBzdHJpbmdbXTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXZhbHVhdGlvbiBSZXN1bHRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGlvblJlc3VsdCB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICBleGVjdXRpb25UaW1lTXM6IG51bWJlcjtcbiAgYWNjZXNzZWRWYXJpYWJsZXM6IFNldDxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRpb25SZXN1bHRTZXQge1xuICByZXN1bHRzOiBNYXA8c3RyaW5nLCBFdmFsdWF0aW9uUmVzdWx0PjtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZXJyb3JzOiBFcnJvcltdO1xuICB0b3RhbEV4ZWN1dGlvblRpbWVNczogbnVtYmVyO1xuICBldmFsdWF0aW9uT3JkZXI6IHN0cmluZ1tdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYXRjaCBFdmFsdWF0aW9uIE9wdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUFsbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBkaXNhYmxlcyBhdXRvbWF0aWMgaW50ZXJtZWRpYXRlIHJvdW5kaW5nIGV2ZW4gaWYgZGVmYXVsdFJvdW5kaW5nXG4gICAqIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGVuZ2luZS4gUGVyLWZvcm11bGEgcm91bmRpbmcgY29uZmlndXJhdGlvbnMgYXJlIHN0aWxsIGFwcGxpZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSW50ZXJtZWRpYXRlUm91bmRpbmc/OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWYWxpZGF0aW9uIFJlc3VsdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBFcnJvcltdO1xuICB3YXJuaW5nczogc3RyaW5nW107XG4gIGRlcGVuZGVuY3lHcmFwaDogRGVwZW5kZW5jeUdyYXBoO1xuICBldmFsdWF0aW9uT3JkZXI6IHN0cmluZ1tdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDYWNoZSBTdGF0aXN0aWNzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVTdGF0cyB7XG4gIHNpemU6IG51bWJlcjtcbiAgaGl0czogbnVtYmVyO1xuICBtaXNzZXM6IG51bWJlcjtcbiAgaGl0UmF0ZTogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb2tlbiBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZW51bSBUb2tlblR5cGUge1xuICAvLyBMaXRlcmFsc1xuICBOVU1CRVIgPSAnTlVNQkVSJyxcbiAgU1RSSU5HID0gJ1NUUklORycsXG4gIEJPT0xFQU4gPSAnQk9PTEVBTicsXG4gIE5VTEwgPSAnTlVMTCcsXG5cbiAgLy8gSWRlbnRpZmllcnMgYW5kIFZhcmlhYmxlc1xuICBJREVOVElGSUVSID0gJ0lERU5USUZJRVInLFxuICBWQVJJQUJMRSA9ICdWQVJJQUJMRScsXG4gIENPTlRFWFRfVkFSID0gJ0NPTlRFWFRfVkFSJyxcblxuICAvLyBPcGVyYXRvcnNcbiAgUExVUyA9ICdQTFVTJyxcbiAgTUlOVVMgPSAnTUlOVVMnLFxuICBNVUxUSVBMWSA9ICdNVUxUSVBMWScsXG4gIERJVklERSA9ICdESVZJREUnLFxuICBNT0RVTE8gPSAnTU9EVUxPJyxcbiAgUE9XRVIgPSAnUE9XRVInLFxuXG4gIC8vIENvbXBhcmlzb25cbiAgRVEgPSAnRVEnLFxuICBORVEgPSAnTkVRJyxcbiAgTFQgPSAnTFQnLFxuICBHVCA9ICdHVCcsXG4gIExURSA9ICdMVEUnLFxuICBHVEUgPSAnR1RFJyxcblxuICAvLyBMb2dpY2FsXG4gIEFORCA9ICdBTkQnLFxuICBPUiA9ICdPUicsXG4gIE5PVCA9ICdOT1QnLFxuXG4gIC8vIFB1bmN0dWF0aW9uXG4gIExQQVJFTiA9ICdMUEFSRU4nLFxuICBSUEFSRU4gPSAnUlBBUkVOJyxcbiAgTEJSQUNLRVQgPSAnTEJSQUNLRVQnLFxuICBSQlJBQ0tFVCA9ICdSQlJBQ0tFVCcsXG4gIExCUkFDRSA9ICdMQlJBQ0UnLFxuICBSQlJBQ0UgPSAnUkJSQUNFJyxcbiAgQ09NTUEgPSAnQ09NTUEnLFxuICBET1QgPSAnRE9UJyxcbiAgUVVFU1RJT04gPSAnUVVFU1RJT04nLFxuICBDT0xPTiA9ICdDT0xPTicsXG5cbiAgLy8gU3BlY2lhbFxuICBFT0YgPSAnRU9GJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlbiB7XG4gIHR5cGU6IFRva2VuVHlwZTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsO1xuICBwb3NpdGlvbjogbnVtYmVyO1xuICBsaW5lOiBudW1iZXI7XG4gIGNvbHVtbjogbnVtYmVyO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-trybe/formula-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Configuration-driven expression evaluation system with dependency resolution and decimal precision",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"test:watch": "jest --watch",
|
|
11
11
|
"test:coverage": "jest --coverage",
|
|
12
12
|
"lint": "eslint src --ext .ts",
|
|
13
|
-
"clean": "rm -rf dist"
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"prepublishOnly": "npm run clean && npm run build && npm test"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [
|
|
16
17
|
"formula",
|
|
@@ -77,6 +77,12 @@ export class DependencyExtractor {
|
|
|
77
77
|
}
|
|
78
78
|
break;
|
|
79
79
|
|
|
80
|
+
case 'ObjectLiteral':
|
|
81
|
+
for (const prop of node.properties) {
|
|
82
|
+
this.visit(prop.value, dependencies);
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
|
|
80
86
|
// Literals don't have dependencies
|
|
81
87
|
case 'DecimalLiteral':
|
|
82
88
|
case 'NumberLiteral':
|
|
@@ -57,6 +57,30 @@ describe('DependencyExtractor', () => {
|
|
|
57
57
|
expect(deps).toEqual(new Set(['a']));
|
|
58
58
|
expect(deps.size).toBe(1);
|
|
59
59
|
});
|
|
60
|
+
|
|
61
|
+
it('should extract dependencies from object literal values', () => {
|
|
62
|
+
const deps = extractor.extract('LOOKUP($table, { region: $region, zone: $zone }, "rate")');
|
|
63
|
+
|
|
64
|
+
expect(deps).toEqual(new Set(['table', 'region', 'zone']));
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should not extract dependencies from object with only literals', () => {
|
|
68
|
+
const deps = extractor.extract('{ a: 1, b: "x" }');
|
|
69
|
+
|
|
70
|
+
expect(deps).toEqual(new Set());
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('should extract dependencies from nested object literals', () => {
|
|
74
|
+
const deps = extractor.extract('{ inner: { val: $x } }');
|
|
75
|
+
|
|
76
|
+
expect(deps).toEqual(new Set(['x']));
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('should extract dependencies from object literal with expressions', () => {
|
|
80
|
+
const deps = extractor.extract('{ total: $a + $b, name: "test" }');
|
|
81
|
+
|
|
82
|
+
expect(deps).toEqual(new Set(['a', 'b']));
|
|
83
|
+
});
|
|
60
84
|
});
|
|
61
85
|
|
|
62
86
|
describe('DependencyGraph', () => {
|
package/src/evaluator.ts
CHANGED
|
@@ -97,6 +97,14 @@ export class Evaluator {
|
|
|
97
97
|
case 'ArrayLiteral':
|
|
98
98
|
return node.elements.map(el => this.evaluateNode(el, context));
|
|
99
99
|
|
|
100
|
+
case 'ObjectLiteral': {
|
|
101
|
+
const obj: Record<string, unknown> = {};
|
|
102
|
+
for (const prop of node.properties) {
|
|
103
|
+
obj[prop.key] = this.evaluateNode(prop.value, context);
|
|
104
|
+
}
|
|
105
|
+
return obj;
|
|
106
|
+
}
|
|
107
|
+
|
|
100
108
|
case 'VariableReference':
|
|
101
109
|
return this.evaluateVariable(node.prefix, node.name, context);
|
|
102
110
|
|