handlebars-jaylinski 4.7.8
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/LICENSE +19 -0
- package/README.markdown +169 -0
- package/bin/.eslintrc.js +6 -0
- package/bin/handlebars +176 -0
- package/dist/amd/handlebars/base.js +106 -0
- package/dist/amd/handlebars/compiler/ast.js +31 -0
- package/dist/amd/handlebars/compiler/base.js +45 -0
- package/dist/amd/handlebars/compiler/code-gen.js +165 -0
- package/dist/amd/handlebars/compiler/compiler.js +562 -0
- package/dist/amd/handlebars/compiler/helpers.js +228 -0
- package/dist/amd/handlebars/compiler/javascript-compiler.js +1150 -0
- package/dist/amd/handlebars/compiler/parser.js +737 -0
- package/dist/amd/handlebars/compiler/printer.js +186 -0
- package/dist/amd/handlebars/compiler/visitor.js +138 -0
- package/dist/amd/handlebars/compiler/whitespace-control.js +219 -0
- package/dist/amd/handlebars/decorators/inline.js +25 -0
- package/dist/amd/handlebars/decorators.js +16 -0
- package/dist/amd/handlebars/exception.js +64 -0
- package/dist/amd/handlebars/helpers/block-helper-missing.js +35 -0
- package/dist/amd/handlebars/helpers/each.js +99 -0
- package/dist/amd/handlebars/helpers/helper-missing.js +22 -0
- package/dist/amd/handlebars/helpers/if.js +41 -0
- package/dist/amd/handlebars/helpers/log.js +24 -0
- package/dist/amd/handlebars/helpers/lookup.js +14 -0
- package/dist/amd/handlebars/helpers/with.js +38 -0
- package/dist/amd/handlebars/helpers.js +44 -0
- package/dist/amd/handlebars/internal/create-new-lookup-object.js +22 -0
- package/dist/amd/handlebars/internal/proto-access.js +71 -0
- package/dist/amd/handlebars/internal/wrapHelper.js +21 -0
- package/dist/amd/handlebars/logger.js +44 -0
- package/dist/amd/handlebars/no-conflict.js +28 -0
- package/dist/amd/handlebars/runtime.js +356 -0
- package/dist/amd/handlebars/safe-string.js +15 -0
- package/dist/amd/handlebars/utils.js +126 -0
- package/dist/amd/handlebars.js +52 -0
- package/dist/amd/handlebars.runtime.js +44 -0
- package/dist/amd/precompiler.js +314 -0
- package/dist/cjs/handlebars/base.js +116 -0
- package/dist/cjs/handlebars/compiler/ast.js +31 -0
- package/dist/cjs/handlebars/compiler/base.js +57 -0
- package/dist/cjs/handlebars/compiler/code-gen.js +168 -0
- package/dist/cjs/handlebars/compiler/compiler.js +566 -0
- package/dist/cjs/handlebars/compiler/helpers.js +228 -0
- package/dist/cjs/handlebars/compiler/javascript-compiler.js +1158 -0
- package/dist/cjs/handlebars/compiler/parser.js +737 -0
- package/dist/cjs/handlebars/compiler/printer.js +186 -0
- package/dist/cjs/handlebars/compiler/visitor.js +140 -0
- package/dist/cjs/handlebars/compiler/whitespace-control.js +221 -0
- package/dist/cjs/handlebars/decorators/inline.js +29 -0
- package/dist/cjs/handlebars/decorators.js +16 -0
- package/dist/cjs/handlebars/exception.js +64 -0
- package/dist/cjs/handlebars/helpers/block-helper-missing.js +39 -0
- package/dist/cjs/handlebars/helpers/each.js +104 -0
- package/dist/cjs/handlebars/helpers/helper-missing.js +25 -0
- package/dist/cjs/handlebars/helpers/if.js +46 -0
- package/dist/cjs/handlebars/helpers/log.js +26 -0
- package/dist/cjs/handlebars/helpers/lookup.js +16 -0
- package/dist/cjs/handlebars/helpers/with.js +43 -0
- package/dist/cjs/handlebars/helpers.js +56 -0
- package/dist/cjs/handlebars/internal/create-new-lookup-object.js +22 -0
- package/dist/cjs/handlebars/internal/proto-access.js +73 -0
- package/dist/cjs/handlebars/internal/wrapHelper.js +19 -0
- package/dist/cjs/handlebars/logger.js +47 -0
- package/dist/cjs/handlebars/no-conflict.js +30 -0
- package/dist/cjs/handlebars/runtime.js +372 -0
- package/dist/cjs/handlebars/safe-string.js +15 -0
- package/dist/cjs/handlebars/utils.js +124 -0
- package/dist/cjs/handlebars.js +66 -0
- package/dist/cjs/handlebars.runtime.js +66 -0
- package/dist/cjs/precompiler.js +328 -0
- package/dist/handlebars.amd.js +4639 -0
- package/dist/handlebars.amd.min.js +29 -0
- package/dist/handlebars.js +5972 -0
- package/dist/handlebars.min.js +29 -0
- package/dist/handlebars.runtime.amd.js +1302 -0
- package/dist/handlebars.runtime.amd.min.js +27 -0
- package/dist/handlebars.runtime.js +2563 -0
- package/dist/handlebars.runtime.min.js +27 -0
- package/lib/.eslintrc.js +8 -0
- package/lib/handlebars/base.js +94 -0
- package/lib/handlebars/compiler/ast.js +32 -0
- package/lib/handlebars/compiler/base.js +34 -0
- package/lib/handlebars/compiler/code-gen.js +171 -0
- package/lib/handlebars/compiler/compiler.js +594 -0
- package/lib/handlebars/compiler/helpers.js +219 -0
- package/lib/handlebars/compiler/javascript-compiler.js +1293 -0
- package/lib/handlebars/compiler/parser.js +622 -0
- package/lib/handlebars/compiler/printer.js +178 -0
- package/lib/handlebars/compiler/visitor.js +136 -0
- package/lib/handlebars/compiler/whitespace-control.js +234 -0
- package/lib/handlebars/decorators/inline.js +22 -0
- package/lib/handlebars/decorators.js +5 -0
- package/lib/handlebars/exception.js +68 -0
- package/lib/handlebars/helpers/block-helper-missing.js +35 -0
- package/lib/handlebars/helpers/each.js +101 -0
- package/lib/handlebars/helpers/helper-missing.js +15 -0
- package/lib/handlebars/helpers/if.js +33 -0
- package/lib/handlebars/helpers/log.js +19 -0
- package/lib/handlebars/helpers/lookup.js +9 -0
- package/lib/handlebars/helpers/with.js +39 -0
- package/lib/handlebars/helpers.js +26 -0
- package/lib/handlebars/internal/create-new-lookup-object.js +11 -0
- package/lib/handlebars/internal/proto-access.js +70 -0
- package/lib/handlebars/internal/wrapHelper.js +13 -0
- package/lib/handlebars/logger.js +39 -0
- package/lib/handlebars/no-conflict.js +23 -0
- package/lib/handlebars/runtime.js +450 -0
- package/lib/handlebars/safe-string.js +10 -0
- package/lib/handlebars/utils.js +116 -0
- package/lib/handlebars.js +46 -0
- package/lib/handlebars.runtime.js +37 -0
- package/lib/index.js +26 -0
- package/lib/precompiler.js +341 -0
- package/package.json +135 -0
- package/release-notes.md +1101 -0
- package/runtime.d.ts +5 -0
- package/runtime.js +3 -0
- package/types/index.d.ts +422 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.SourceLocation = SourceLocation;
|
|
5
|
+
exports.id = id;
|
|
6
|
+
exports.stripFlags = stripFlags;
|
|
7
|
+
exports.stripComment = stripComment;
|
|
8
|
+
exports.preparePath = preparePath;
|
|
9
|
+
exports.prepareMustache = prepareMustache;
|
|
10
|
+
exports.prepareRawBlock = prepareRawBlock;
|
|
11
|
+
exports.prepareBlock = prepareBlock;
|
|
12
|
+
exports.prepareProgram = prepareProgram;
|
|
13
|
+
exports.preparePartialBlock = preparePartialBlock;
|
|
14
|
+
// istanbul ignore next
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
17
|
+
|
|
18
|
+
var _exception = require('../exception');
|
|
19
|
+
|
|
20
|
+
var _exception2 = _interopRequireDefault(_exception);
|
|
21
|
+
|
|
22
|
+
function validateClose(open, close) {
|
|
23
|
+
close = close.path ? close.path.original : close;
|
|
24
|
+
|
|
25
|
+
if (open.path.original !== close) {
|
|
26
|
+
var errorNode = { loc: open.path.loc };
|
|
27
|
+
|
|
28
|
+
throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function SourceLocation(source, locInfo) {
|
|
33
|
+
this.source = source;
|
|
34
|
+
this.start = {
|
|
35
|
+
line: locInfo.first_line,
|
|
36
|
+
column: locInfo.first_column
|
|
37
|
+
};
|
|
38
|
+
this.end = {
|
|
39
|
+
line: locInfo.last_line,
|
|
40
|
+
column: locInfo.last_column
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function id(token) {
|
|
45
|
+
if (/^\[.*\]$/.test(token)) {
|
|
46
|
+
return token.substring(1, token.length - 1);
|
|
47
|
+
} else {
|
|
48
|
+
return token;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function stripFlags(open, close) {
|
|
53
|
+
return {
|
|
54
|
+
open: open.charAt(2) === '~',
|
|
55
|
+
close: close.charAt(close.length - 3) === '~'
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function stripComment(comment) {
|
|
60
|
+
return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, '');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function preparePath(data, parts, loc) {
|
|
64
|
+
loc = this.locInfo(loc);
|
|
65
|
+
|
|
66
|
+
var original = data ? '@' : '',
|
|
67
|
+
dig = [],
|
|
68
|
+
depth = 0;
|
|
69
|
+
|
|
70
|
+
for (var i = 0, l = parts.length; i < l; i++) {
|
|
71
|
+
var part = parts[i].part,
|
|
72
|
+
|
|
73
|
+
// If we have [] syntax then we do not treat path references as operators,
|
|
74
|
+
// i.e. foo.[this] resolves to approximately context.foo['this']
|
|
75
|
+
isLiteral = parts[i].original !== part;
|
|
76
|
+
original += (parts[i].separator || '') + part;
|
|
77
|
+
|
|
78
|
+
if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
|
|
79
|
+
if (dig.length > 0) {
|
|
80
|
+
throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
|
|
81
|
+
} else if (part === '..') {
|
|
82
|
+
depth++;
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
dig.push(part);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
type: 'PathExpression',
|
|
91
|
+
data: data,
|
|
92
|
+
depth: depth,
|
|
93
|
+
parts: dig,
|
|
94
|
+
original: original,
|
|
95
|
+
loc: loc
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function prepareMustache(path, params, hash, open, strip, locInfo) {
|
|
100
|
+
// Must use charAt to support IE pre-10
|
|
101
|
+
var escapeFlag = open.charAt(3) || open.charAt(2),
|
|
102
|
+
escaped = escapeFlag !== '{' && escapeFlag !== '&';
|
|
103
|
+
|
|
104
|
+
var decorator = /\*/.test(open);
|
|
105
|
+
return {
|
|
106
|
+
type: decorator ? 'Decorator' : 'MustacheStatement',
|
|
107
|
+
path: path,
|
|
108
|
+
params: params,
|
|
109
|
+
hash: hash,
|
|
110
|
+
escaped: escaped,
|
|
111
|
+
strip: strip,
|
|
112
|
+
loc: this.locInfo(locInfo)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function prepareRawBlock(openRawBlock, contents, close, locInfo) {
|
|
117
|
+
validateClose(openRawBlock, close);
|
|
118
|
+
|
|
119
|
+
locInfo = this.locInfo(locInfo);
|
|
120
|
+
var program = {
|
|
121
|
+
type: 'Program',
|
|
122
|
+
body: contents,
|
|
123
|
+
strip: {},
|
|
124
|
+
loc: locInfo
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
type: 'BlockStatement',
|
|
129
|
+
path: openRawBlock.path,
|
|
130
|
+
params: openRawBlock.params,
|
|
131
|
+
hash: openRawBlock.hash,
|
|
132
|
+
program: program,
|
|
133
|
+
openStrip: {},
|
|
134
|
+
inverseStrip: {},
|
|
135
|
+
closeStrip: {},
|
|
136
|
+
loc: locInfo
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
|
|
141
|
+
if (close && close.path) {
|
|
142
|
+
validateClose(openBlock, close);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var decorator = /\*/.test(openBlock.open);
|
|
146
|
+
|
|
147
|
+
program.blockParams = openBlock.blockParams;
|
|
148
|
+
|
|
149
|
+
var inverse = undefined,
|
|
150
|
+
inverseStrip = undefined;
|
|
151
|
+
|
|
152
|
+
if (inverseAndProgram) {
|
|
153
|
+
if (decorator) {
|
|
154
|
+
throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (inverseAndProgram.chain) {
|
|
158
|
+
inverseAndProgram.program.body[0].closeStrip = close.strip;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
inverseStrip = inverseAndProgram.strip;
|
|
162
|
+
inverse = inverseAndProgram.program;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (inverted) {
|
|
166
|
+
inverted = inverse;
|
|
167
|
+
inverse = program;
|
|
168
|
+
program = inverted;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
type: decorator ? 'DecoratorBlock' : 'BlockStatement',
|
|
173
|
+
path: openBlock.path,
|
|
174
|
+
params: openBlock.params,
|
|
175
|
+
hash: openBlock.hash,
|
|
176
|
+
program: program,
|
|
177
|
+
inverse: inverse,
|
|
178
|
+
openStrip: openBlock.strip,
|
|
179
|
+
inverseStrip: inverseStrip,
|
|
180
|
+
closeStrip: close && close.strip,
|
|
181
|
+
loc: this.locInfo(locInfo)
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function prepareProgram(statements, loc) {
|
|
186
|
+
if (!loc && statements.length) {
|
|
187
|
+
var firstLoc = statements[0].loc,
|
|
188
|
+
lastLoc = statements[statements.length - 1].loc;
|
|
189
|
+
|
|
190
|
+
/* istanbul ignore else */
|
|
191
|
+
if (firstLoc && lastLoc) {
|
|
192
|
+
loc = {
|
|
193
|
+
source: firstLoc.source,
|
|
194
|
+
start: {
|
|
195
|
+
line: firstLoc.start.line,
|
|
196
|
+
column: firstLoc.start.column
|
|
197
|
+
},
|
|
198
|
+
end: {
|
|
199
|
+
line: lastLoc.end.line,
|
|
200
|
+
column: lastLoc.end.column
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return {
|
|
207
|
+
type: 'Program',
|
|
208
|
+
body: statements,
|
|
209
|
+
strip: {},
|
|
210
|
+
loc: loc
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function preparePartialBlock(open, program, close, locInfo) {
|
|
215
|
+
validateClose(open, close);
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
type: 'PartialBlockStatement',
|
|
219
|
+
name: open.path,
|
|
220
|
+
params: open.params,
|
|
221
|
+
hash: open.hash,
|
|
222
|
+
program: program,
|
|
223
|
+
openStrip: open.strip,
|
|
224
|
+
closeStrip: close && close.strip,
|
|
225
|
+
loc: this.locInfo(locInfo)
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdDLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN0QyxTQUFPO0FBQ0wsUUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUM1QixTQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7R0FDOUMsQ0FBQztDQUNIOztBQUVNLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUNwQyxTQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdkU7O0FBRU0sU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDNUMsS0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRXhCLE1BQUksUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRTtNQUM1QixHQUFHLEdBQUcsRUFBRTtNQUNSLEtBQUssR0FBRyxDQUFDLENBQUM7O0FBRVosT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxRQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTs7OztBQUd0QixhQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDekMsWUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUEsR0FBSSxJQUFJLENBQUM7O0FBRTlDLFFBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUEsQUFBQyxFQUFFO0FBQ3BFLFVBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEIsY0FBTSwyQkFBYyxnQkFBZ0IsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLENBQUMsQ0FBQztPQUMzRCxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN4QixhQUFLLEVBQUUsQ0FBQztPQUNUO0tBQ0YsTUFBTTtBQUNMLFNBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEI7R0FDRjs7QUFFRCxTQUFPO0FBQ0wsUUFBSSxFQUFFLGdCQUFnQjtBQUN0QixRQUFJLEVBQUosSUFBSTtBQUNKLFNBQUssRUFBTCxLQUFLO0FBQ0wsU0FBSyxFQUFFLEdBQUc7QUFDVixZQUFRLEVBQVIsUUFBUTtBQUNSLE9BQUcsRUFBSCxHQUFHO0dBQ0osQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUV4RSxNQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQy9DLE9BQU8sR0FBRyxVQUFVLEtBQUssR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHLENBQUM7O0FBRXJELE1BQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTLEdBQUcsV0FBVyxHQUFHLG1CQUFtQjtBQUNuRCxRQUFJLEVBQUosSUFBSTtBQUNKLFVBQU0sRUFBTixNQUFNO0FBQ04sUUFBSSxFQUFKLElBQUk7QUFDSixXQUFPLEVBQVAsT0FBTztBQUNQLFNBQUssRUFBTCxLQUFLO0FBQ0wsT0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0dBQzNCLENBQUM7Q0FDSDs7QUFFTSxTQUFTLGVBQWUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdEUsZUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFbkMsU0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsTUFBSSxPQUFPLEdBQUc7QUFDWixRQUFJLEVBQUUsU0FBUztBQUNmLFFBQUksRUFBRSxRQUFRO0FBQ2QsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsT0FBTztHQUNiLENBQUM7O0FBRUYsU0FBTztBQUNMLFFBQUksRUFBRSxnQkFBZ0I7QUFDdEIsUUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJO0FBQ3ZCLFVBQU0sRUFBRSxZQUFZLENBQUMsTUFBTTtBQUMzQixRQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7QUFDdkIsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsRUFBRTtBQUNiLGdCQUFZLEVBQUUsRUFBRTtBQUNoQixjQUFVLEVBQUUsRUFBRTtBQUNkLE9BQUcsRUFBRSxPQUFPO0dBQ2IsQ0FBQztDQUNIOztBQUVNLFNBQVMsWUFBWSxDQUMxQixTQUFTLEVBQ1QsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sRUFDUDtBQUNBLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdkIsaUJBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDakM7O0FBRUQsTUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTFDLFNBQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQzs7QUFFNUMsTUFBSSxPQUFPLFlBQUE7TUFBRSxZQUFZLFlBQUEsQ0FBQzs7QUFFMUIsTUFBSSxpQkFBaUIsRUFBRTtBQUNyQixRQUFJLFNBQVMsRUFBRTtBQUNiLFlBQU0sMkJBQ0osdUNBQXVDLEVBQ3ZDLGlCQUFpQixDQUNsQixDQUFDO0tBQ0g7O0FBRUQsUUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDM0IsdUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUM1RDs7QUFFRCxnQkFBWSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztBQUN2QyxXQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDO0dBQ3JDOztBQUVELE1BQUksUUFBUSxFQUFFO0FBQ1osWUFBUSxHQUFHLE9BQU8sQ0FBQztBQUNuQixXQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ2xCLFdBQU8sR0FBRyxRQUFRLENBQUM7R0FDcEI7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTLEdBQUcsZ0JBQWdCLEdBQUcsZ0JBQWdCO0FBQ3JELFFBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtBQUNwQixVQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07QUFDeEIsUUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO0FBQ3BCLFdBQU8sRUFBUCxPQUFPO0FBQ1AsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUs7QUFDMUIsZ0JBQVksRUFBWixZQUFZO0FBQ1osY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIOztBQUVNLFNBQVMsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7QUFDOUMsTUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQzdCLFFBQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQ2hDLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=
|