occam-nominal 1.0.573 → 1.0.575
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/lib/context/cladic.js +31 -31
- package/lib/context/file/nominal.js +3 -3
- package/lib/context/metexic.js +3 -3
- package/lib/context/mnemic.js +36 -36
- package/lib/context.js +10 -10
- package/lib/element/fact/premise.js +14 -11
- package/lib/element/fact/step.js +3 -3
- package/lib/element/fact/supposition.js +14 -11
- package/lib/element/fact.js +12 -12
- package/lib/element/hypothesis.js +20 -20
- package/lib/element/label.js +6 -3
- package/lib/element/procedureReference.js +179 -0
- package/lib/example/nominal/bnf.js +5 -5
- package/lib/node/fact/premise.js +4 -4
- package/lib/node/fact/supposition.js +4 -4
- package/lib/node/hypothesis.js +4 -4
- package/lib/node/procedureReference.js +39 -0
- package/lib/nonTerminalNodeMap.js +3 -3
- package/lib/preamble.js +2 -2
- package/lib/process/instantiate.js +7 -7
- package/lib/ruleNames.js +4 -4
- package/lib/utilities/element.js +64 -64
- package/lib/utilities/json.js +19 -19
- package/lib/utilities/string.js +7 -7
- package/package.json +1 -1
- package/src/context/cladic.js +34 -34
- package/src/context/file/nominal.js +2 -2
- package/src/context/metexic.js +2 -2
- package/src/context/mnemic.js +42 -42
- package/src/context.js +9 -9
- package/src/element/fact/premise.js +16 -11
- package/src/element/fact/step.js +2 -2
- package/src/element/fact/supposition.js +16 -11
- package/src/element/fact.js +11 -11
- package/src/element/hypothesis.js +20 -20
- package/src/element/label.js +7 -1
- package/src/element/{procedureCall.js → procedureReference.js} +55 -55
- package/src/example/nominal/bnf.js +4 -4
- package/src/node/fact/premise.js +5 -5
- package/src/node/fact/supposition.js +5 -5
- package/src/node/hypothesis.js +5 -5
- package/src/node/{procedureCall.js → procedureReference.js} +2 -2
- package/src/nonTerminalNodeMap.js +2 -3
- package/src/preamble.js +1 -1
- package/src/process/instantiate.js +4 -4
- package/src/ruleNames.js +1 -1
- package/src/utilities/element.js +79 -79
- package/src/utilities/json.js +21 -21
- package/src/utilities/string.js +7 -7
- package/lib/element/procedureCall.js +0 -179
- package/lib/node/procedureCall.js +0 -39
package/lib/context/cladic.js
CHANGED
|
@@ -17,7 +17,7 @@ function _interop_require_default(obj) {
|
|
|
17
17
|
}
|
|
18
18
|
const { push, extract } = _necessary.arrayUtilities;
|
|
19
19
|
class CladicContext extends _context.default {
|
|
20
|
-
constructor(context, terms, links, frames, equalities, assertions, statements, parameters, assumptions, metavariables,
|
|
20
|
+
constructor(context, terms, links, frames, equalities, assertions, statements, parameters, assumptions, metavariables, procedureReferences){
|
|
21
21
|
super(context);
|
|
22
22
|
this.terms = terms;
|
|
23
23
|
this.links = links;
|
|
@@ -28,7 +28,7 @@ class CladicContext extends _context.default {
|
|
|
28
28
|
this.parameters = parameters;
|
|
29
29
|
this.assumptions = assumptions;
|
|
30
30
|
this.metavariables = metavariables;
|
|
31
|
-
this.
|
|
31
|
+
this.procedureReferences = procedureReferences;
|
|
32
32
|
}
|
|
33
33
|
getTerms(terms = []) {
|
|
34
34
|
const context = this.getContext();
|
|
@@ -84,11 +84,11 @@ class CladicContext extends _context.default {
|
|
|
84
84
|
context.getMetavariables(metavariables);
|
|
85
85
|
return metavariables;
|
|
86
86
|
}
|
|
87
|
-
|
|
87
|
+
getProcedureReferences(procedureReferences = []) {
|
|
88
88
|
const context = this.getContext();
|
|
89
|
-
push(
|
|
90
|
-
context.
|
|
91
|
-
return
|
|
89
|
+
push(procedureReferences, this.procedureReferences);
|
|
90
|
+
context.getProcedureReferences(procedureReferences);
|
|
91
|
+
return procedureReferences;
|
|
92
92
|
}
|
|
93
93
|
addTerm(term) {
|
|
94
94
|
const context = this, termString = term.getString();
|
|
@@ -229,20 +229,20 @@ class CladicContext extends _context.default {
|
|
|
229
229
|
const context = this.getContext();
|
|
230
230
|
context.addSubstitution(substitution);
|
|
231
231
|
}
|
|
232
|
-
|
|
233
|
-
const context = this,
|
|
234
|
-
context.trace(`Adding the '${
|
|
235
|
-
const
|
|
236
|
-
extract(this.
|
|
237
|
-
const
|
|
238
|
-
if (
|
|
239
|
-
const
|
|
240
|
-
context.trace(`Removed the existing '${
|
|
232
|
+
addProcedureReference(procedureReference) {
|
|
233
|
+
const context = this, procedureReferenceString = procedureReference.getString();
|
|
234
|
+
context.trace(`Adding the '${procedureReferenceString}' procedure call to the cladic context...`);
|
|
235
|
+
const procedureReferenceA = procedureReference; ///
|
|
236
|
+
extract(this.procedureReferences, (procedureReference)=>{
|
|
237
|
+
const procedureReferenceB = procedureReference, procedureReferenceAEqualToProcedureallB = procedureReferenceA.isEqualTo(procedureReferenceB);
|
|
238
|
+
if (procedureReferenceAEqualToProcedureallB) {
|
|
239
|
+
const procedureReferenceString = procedureReference.getString();
|
|
240
|
+
context.trace(`Removed the existing '${procedureReferenceString}' procedure call from the cladic context...`);
|
|
241
241
|
return true;
|
|
242
242
|
}
|
|
243
243
|
});
|
|
244
|
-
this.
|
|
245
|
-
context.debug(`...added the '${
|
|
244
|
+
this.procedureReferences.push(procedureReference);
|
|
245
|
+
context.debug(`...added the '${procedureReferenceString}' procedure call to the cladic context.`);
|
|
246
246
|
}
|
|
247
247
|
addAssignment(assignment) {
|
|
248
248
|
const context = this.getContext();
|
|
@@ -293,9 +293,9 @@ class CladicContext extends _context.default {
|
|
|
293
293
|
this.addMetavariable(metavariable);
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
this.
|
|
296
|
+
addProcedureReferences(procedureReferences) {
|
|
297
|
+
procedureReferences.forEach((procedureReference)=>{
|
|
298
|
+
this.addProcedureReference(procedureReference);
|
|
299
299
|
});
|
|
300
300
|
}
|
|
301
301
|
findTermByTermNode(termNode) {
|
|
@@ -379,14 +379,14 @@ class CladicContext extends _context.default {
|
|
|
379
379
|
}) || null;
|
|
380
380
|
return metavariable;
|
|
381
381
|
}
|
|
382
|
-
|
|
383
|
-
const
|
|
384
|
-
const
|
|
385
|
-
if (
|
|
382
|
+
findProcedureReferenceByProcedureReferenceNode(procedureReferenceNode) {
|
|
383
|
+
const procedureReferences = this.getProcedureReferences(), procedureReference = procedureReferences.find((procedureReference)=>{
|
|
384
|
+
const procedureReferenceNodeMatches = procedureReference.matchProcedureReferenceNode(procedureReferenceNode);
|
|
385
|
+
if (procedureReferenceNodeMatches) {
|
|
386
386
|
return true;
|
|
387
387
|
}
|
|
388
388
|
}) || null;
|
|
389
|
-
return
|
|
389
|
+
return procedureReference;
|
|
390
390
|
}
|
|
391
391
|
isTermPresentByTermNode(termNode) {
|
|
392
392
|
const term = this.findTermByTermNode(termNode), termPresent = term !== null;
|
|
@@ -424,9 +424,9 @@ class CladicContext extends _context.default {
|
|
|
424
424
|
const metavariablen = this.findMetavariableByMetavariableNode(metavariableNode), metavariablenPresent = metavariablen !== null;
|
|
425
425
|
return metavariablenPresent;
|
|
426
426
|
}
|
|
427
|
-
|
|
428
|
-
const
|
|
429
|
-
return
|
|
427
|
+
isProcedureReferencePresentByProcedureReferenceNode(procedureReferenceNode) {
|
|
428
|
+
const procedureReference = this.findProcedureReferenceByProcedureReferenceNode(procedureReferenceNode), procedureReferencePresent = procedureReference !== null;
|
|
429
|
+
return procedureReferencePresent;
|
|
430
430
|
}
|
|
431
431
|
merge(context) {
|
|
432
432
|
context.debug(`Merging the cladic context`);
|
|
@@ -439,12 +439,12 @@ class CladicContext extends _context.default {
|
|
|
439
439
|
context.addParameters(this.parameters);
|
|
440
440
|
context.addAssumptions(this.assumptions);
|
|
441
441
|
context.addMetavariables(this.metavariables);
|
|
442
|
-
context.
|
|
442
|
+
context.addProcedureReferences(this.procedureReferences);
|
|
443
443
|
}
|
|
444
444
|
static fromNothing(context) {
|
|
445
|
-
const terms = [], links = [], frames = [], equalities = [], statements = [], parameters = [], assertions = [], assumptions = [], metavariables = [],
|
|
445
|
+
const terms = [], links = [], frames = [], equalities = [], statements = [], parameters = [], assertions = [], assumptions = [], metavariables = [], procedureReferences = [], cladicContext = new CladicContext(context, terms, links, frames, equalities, assertions, statements, parameters, assumptions, metavariables, procedureReferences);
|
|
446
446
|
return cladicContext;
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
449
|
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBwcm9jZWR1cmVDYWxscykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMubGlua3MgPSBsaW5rcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMucHJvY2VkdXJlQ2FsbHMgPSBwcm9jZWR1cmVDYWxscztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobGlua3MsIHRoaXMubGlua3MpO1xuXG4gICAgY29udGV4dC5nZXRMaW5rcyhsaW5rcyk7XG5cbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMocGFyYW1ldGVycyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwYXJhbWV0ZXJzLCB0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5nZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbHMocHJvY2VkdXJlQ2FsbHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocHJvY2VkdXJlQ2FsbHMsIHRoaXMucHJvY2VkdXJlQ2FsbHMpO1xuXG4gICAgY29udGV4dC5nZXRQcm9jZWR1cmVDYWxscyhwcm9jZWR1cmVDYWxscyk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbHM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUEgPSB0ZXJtOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy50ZXJtcywgKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHt0ZXJtU3RyaW5nfScgdGVybSBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZExpbmsobGluaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBsaW5rQSA9IGxpbms7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmxpbmtzLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0IgPSBsaW5rLCAvLy9cbiAgICAgICAgICAgIGxpbmtBRXF1YWxUb0xpbmtCID0gbGlua0EuaXNFcXVhbFRvKGxpbmtCKTtcblxuICAgICAgaWYgKGxpbmtBRXF1YWxUb0xpbmtCKSB7XG4gICAgICAgIGNvbnN0IGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2xpbmtTdHJpbmd9JyBsaW5rIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZXF1YWxpdGllcywgKGVxdWFsaXR5KSA9PiB7XG4gICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgICAgICBlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCID0gZXF1YWxpdHlBLmlzRXF1YWxUbyhlcXVhbGl0eUIpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudEEgPSBzdGF0ZW1lbnQ7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudEIgPSBzdGF0ZW1lbnQsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQYXJhbWV0ZXIocGFyYW10ZXIpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcGFyYW10ZXJTdHJpbmcgPSBwYXJhbXRlci5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHBhcmFtdGVyQSA9IHBhcmFtdGVyOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5wYXJhbXRlcnMsIChwYXJhbXRlcikgPT4ge1xuICAgICAgY29uc3QgcGFyYW10ZXJCID0gcGFyYW10ZXIsIC8vL1xuICAgICAgICAgICAgcGFyYW10ZXJBRXF1YWxUb1BhcmFtZXRlckIgPSBwYXJhbXRlckEuaXNFcXVhbFRvKHBhcmFtdGVyQik7XG5cbiAgICAgIGlmIChwYXJhbXRlckFFcXVhbFRvUGFyYW1ldGVyQikge1xuICAgICAgICBjb25zdCBwYXJhbXRlclN0cmluZyA9IHBhcmFtdGVyLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3BhcmFtdGVyU3RyaW5nfScgcGFyYW10ZXIgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucGFyYW10ZXJzLnB1c2gocGFyYW10ZXIpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3BhcmFtdGVyU3RyaW5nfScgcGFyYW10ZXIgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25BID0gYXNzdW1wdGlvbjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3N1bXB0aW9uQiA9IGFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgICAgYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uQS5pc0VxdWFsVG8oYXNzdW1wdGlvbkIpO1xuXG4gICAgICBpZiAoYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzdW1wdGlvbnMucHVzaChhc3N1bXB0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlQSA9IG1ldGF2YXJpYWJsZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMubWV0YXZhcmlhYmxlcywgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZSwgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgfVxuXG4gIGFkZFByb2NlZHVyZUNhbGwocHJvY2VkdXJlQ2FsbCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gcHJvY2VkdXJlQ2FsbC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbEEgPSBwcm9jZWR1cmVDYWxsOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5wcm9jZWR1cmVDYWxscywgKHByb2NlZHVyZUNhbGwpID0+IHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxCID0gcHJvY2VkdXJlQ2FsbCwgLy8vXG4gICAgICAgICAgICBwcm9jZWR1cmVDYWxsQUVxdWFsVG9Qcm9jZWR1cmVhbGxCID0gcHJvY2VkdXJlQ2FsbEEuaXNFcXVhbFRvKHByb2NlZHVyZUNhbGxCKTtcblxuICAgICAgaWYgKHByb2NlZHVyZUNhbGxBRXF1YWxUb1Byb2NlZHVyZWFsbEIpIHtcbiAgICAgICAgY29uc3QgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGwuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2NlZHVyZUNhbGxzLnB1c2gocHJvY2VkdXJlQ2FsbCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChhc3NpZ25tZW50KTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTGlua3MobGlua3MpIHtcbiAgICBsaW5rcy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICB0aGlzLmFkZExpbmsobGluayk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRGcmFtZXMoZnJhbWVzKSB7XG4gICAgZnJhbWVzLmZvckVhY2goKGZyYW1lKSA9PiB7XG4gICAgICB0aGlzLmFkZEZyYW1lKGZyYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEVxdWFsaXRpZXMoZXF1YWxpdGllcykge1xuICAgIGVxdWFsaXRpZXMuZm9yRWFjaCgoZXF1YWxpdHkpID0+IHtcbiAgICAgIHRoaXMuYWRkRXF1YWxpdHkoZXF1YWxpdHkpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9ucyhhc3NlcnRpb25zKSB7XG4gICAgYXNzZXJ0aW9ucy5mb3JFYWNoKChhc3NlcnRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpIHtcbiAgICBzdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFBhcmFtZXRlcnMocGFyYW1ldGVycykge1xuICAgIHBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICB0aGlzLmFkZFBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgICBhc3N1bXB0aW9ucy5mb3JFYWNoKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpIHtcbiAgICBtZXRhdmFyaWFibGVzLmZvckVhY2goKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgdGhpcy5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFByb2NlZHVyZUNhbGxzKHByb2NlZHVyZUNhbGxzKSB7XG4gICAgcHJvY2VkdXJlQ2FsbHMuZm9yRWFjaCgocHJvY2VkdXJlQ2FsbCkgPT4ge1xuICAgICAgdGhpcy5hZGRQcm9jZWR1cmVDYWxsKHByb2NlZHVyZUNhbGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgICAgdGVybSA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKSB7XG4gICAgY29uc3QgbGlua3MgPSB0aGlzLmdldExpbmtzKCksXG4gICAgICAgICAgbGluayA9IGxpbmtzLmZpbmQoKGxpbmspID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtOb2RlTWF0Y2hlcyA9IGxpbmsubWF0Y2hMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChsaW5rTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcXVhbGl0eU5vZGVNYXRjaGVzID0gZXF1YWxpdHkubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycygpLFxuICAgICAgICAgIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJOb2RlTWF0Y2hlcyA9IHBhcmFtZXRlci5tYXRjaFBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQ2FsbEJ5UHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVDYWxscyA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbHMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbHMuZmluZCgocHJvY2VkdXJlQ2FsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGVNYXRjaGVzID0gcHJvY2VkdXJlQ2FsbC5tYXRjaFByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUNhbGxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJQcmVzZW50ID0gKHBhcmFtZXRlciAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlQ2FsbFByZXNlbnRCeVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZmluZFByb2NlZHVyZUNhbGxCeVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsUHJlc2VudCA9IChwcm9jZWR1cmVDYWxsICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVDYWxsUHJlc2VudDtcbiAgfVxuXG4gIG1lcmdlKGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGBNZXJnaW5nIHRoZSBjbGFkaWMgY29udGV4dGApO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuYWRkTGlua3ModGhpcy5saW5rcyk7XG5cbiAgICBjb250ZXh0LmFkZEZyYW1lcyh0aGlzLmZyYW1lcyk7XG5cbiAgICBjb250ZXh0LmFkZEVxdWFsaXRpZXModGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9ucyh0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5hZGRTdGF0ZW1lbnRzKHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmFkZFBhcmFtZXRlcnModGhpcy5wYXJhbWV0ZXJzKTtcblxuICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbnModGhpcy5hc3N1bXB0aW9ucyk7XG5cbiAgICBjb250ZXh0LmFkZE1ldGF2YXJpYWJsZXModGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuYWRkUHJvY2VkdXJlQ2FsbHModGhpcy5wcm9jZWR1cmVDYWxscyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgbGlua3MgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbHMgPSBbXSxcbiAgICAgICAgICBjbGFkaWNDb250ZXh0ID0gbmV3IENsYWRpY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBwcm9jZWR1cmVDYWxscyk7XG5cbiAgICByZXR1cm4gY2xhZGljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsYWRpY0NvbnRleHQiLCJwdXNoIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImxpbmtzIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicGFyYW1ldGVycyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInByb2NlZHVyZUNhbGxzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0U3RhdGVtZW50cyIsImdldFBhcmFtZXRlcnMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0UHJvY2VkdXJlQ2FsbHMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVBIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QSIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwiYWRkUGFyYW1ldGVyIiwicGFyYW10ZXIiLCJwYXJhbXRlclN0cmluZyIsInBhcmFtdGVyQSIsInBhcmFtdGVycyIsInBhcmFtdGVyQiIsInBhcmFtdGVyQUVxdWFsVG9QYXJhbWV0ZXJCIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYXNzdW1wdGlvbkEiLCJhc3N1bXB0aW9uQiIsImFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJhZGRQcm9jZWR1cmVDYWxsIiwicHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsQSIsInByb2NlZHVyZUNhbGxCIiwicHJvY2VkdXJlQ2FsbEFFcXVhbFRvUHJvY2VkdXJlYWxsQiIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiYWRkTGlua3MiLCJhZGRGcmFtZXMiLCJhZGRFcXVhbGl0aWVzIiwiYWRkQXNzZXJ0aW9ucyIsImFkZFN0YXRlbWVudHMiLCJhZGRQYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiYWRkQXNzdW1wdGlvbnMiLCJhZGRNZXRhdmFyaWFibGVzIiwiYWRkUHJvY2VkdXJlQ2FsbHMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlTWF0Y2hlcyIsIm1hdGNoUGFyYW1ldGVyTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUHJvY2VkdXJlQ2FsbEJ5UHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlQ2FsbE5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNMaW5rUHJlc2VudEJ5TGlua05vZGUiLCJsaW5rUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJQcmVzZW50IiwiaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZW4iLCJtZXRhdmFyaWFibGVuUHJlc2VudCIsImlzUHJvY2VkdXJlQ2FsbFByZXNlbnRCeVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbFByZXNlbnQiLCJtZXJnZSIsImZyb21Ob3RoaW5nIiwiY2xhZGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFxQkE7OzsyQkFOVTtnRUFFWDs7Ozs7O0FBRXBCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsQ0FBRTtRQUNySSxLQUFLLENBQUNWO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBO0lBQ3hCO0lBRUFDLFNBQVNWLFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1ELFVBQVUsSUFBSSxDQUFDWSxVQUFVO1FB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
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9ucztcbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzID0gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobGlua3MsIHRoaXMubGlua3MpO1xuXG4gICAgY29udGV4dC5nZXRMaW5rcyhsaW5rcyk7XG5cbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMocGFyYW1ldGVycyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwYXJhbWV0ZXJzLCB0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5nZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHByb2NlZHVyZVJlZmVyZW5jZXMsIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFByb2NlZHVyZVJlZmVyZW5jZXMocHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtQSA9IHRlcm07IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTGluayhsaW5rKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGxpbmtBID0gbGluazsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMubGlua3MsIChsaW5rKSA9PiB7XG4gICAgICBjb25zdCBsaW5rQiA9IGxpbmssIC8vL1xuICAgICAgICAgICAgbGlua0FFcXVhbFRvTGlua0IgPSBsaW5rQS5pc0VxdWFsVG8obGlua0IpO1xuXG4gICAgICBpZiAobGlua0FFcXVhbFRvTGlua0IpIHtcbiAgICAgICAgY29uc3QgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7bGlua1N0cmluZ30nIGxpbmsgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVBID0gZnJhbWU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmZyYW1lcywgKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5QSA9IGVxdWFsaXR5OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5lcXVhbGl0aWVzLCAoZXF1YWxpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICAgIGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG5cbiAgICAgIGlmIChlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCKSB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGFzc2VydGlvbkEgPSBhc3NlcnRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zLnB1c2goYXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50QSA9IHN0YXRlbWVudDsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFBhcmFtZXRlcihwYXJhbXRlcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwYXJhbXRlclN0cmluZyA9IHBhcmFtdGVyLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwYXJhbXRlclN0cmluZ30nIHBhcmFtdGVyIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcGFyYW10ZXJBID0gcGFyYW10ZXI7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnBhcmFtdGVycywgKHBhcmFtdGVyKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXRlckIgPSBwYXJhbXRlciwgLy8vXG4gICAgICAgICAgICBwYXJhbXRlckFFcXVhbFRvUGFyYW1ldGVyQiA9IHBhcmFtdGVyQS5pc0VxdWFsVG8ocGFyYW10ZXJCKTtcblxuICAgICAgaWYgKHBhcmFtdGVyQUVxdWFsVG9QYXJhbWV0ZXJCKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtdGVyU3RyaW5nID0gcGFyYW10ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXJhbXRlcnMucHVzaChwYXJhbXRlcik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbkEgPSBhc3N1bXB0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25CID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IGFzc3VtcHRpb25BLmlzRXF1YWxUbyhhc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIHByb2NlZHVyZSBjYWxsIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlQSA9IHByb2NlZHVyZVJlZmVyZW5jZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcywgKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlQiA9IHByb2NlZHVyZVJlZmVyZW5jZSwgLy8vXG4gICAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VBRXF1YWxUb1Byb2NlZHVyZWFsbEIgPSBwcm9jZWR1cmVSZWZlcmVuY2VBLmlzRXF1YWxUbyhwcm9jZWR1cmVSZWZlcmVuY2VCKTtcblxuICAgICAgaWYgKHByb2NlZHVyZVJlZmVyZW5jZUFFcXVhbFRvUHJvY2VkdXJlYWxsQikge1xuICAgICAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcy5wdXNoKHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZyYW1lcyhmcmFtZXMpIHtcbiAgICBmcmFtZXMuZm9yRWFjaCgoZnJhbWUpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJhbWUoZnJhbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXF1YWxpdGllcyhlcXVhbGl0aWVzKSB7XG4gICAgZXF1YWxpdGllcy5mb3JFYWNoKChlcXVhbGl0eSkgPT4ge1xuICAgICAgdGhpcy5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudHMoc3RhdGVtZW50cykge1xuICAgIHN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gICAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgIHRoaXMuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICAgIGFzc3VtcHRpb25zLmZvckVhY2goKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcykge1xuICAgIG1ldGF2YXJpYWJsZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICB0aGlzLmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgcHJvY2VkdXJlUmVmZXJlbmNlcy5mb3JFYWNoKChwcm9jZWR1cmVSZWZlcmVuY2UpID0+IHtcbiAgICAgIHRoaXMuYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgICBsaW5rID0gbGlua3MuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua05vZGVNYXRjaGVzID0gbGluay5tYXRjaExpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZXRQYXJhbWV0ZXJzKCksXG4gICAgICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlck5vZGVNYXRjaGVzID0gcGFyYW1ldGVyLm1hdGNoUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VzLmZpbmQoKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2UubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJQcmVzZW50ID0gKHBhcmFtZXRlciAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudEJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gdGhpcy5maW5kUHJvY2VkdXJlUmVmZXJlbmNlQnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVByZXNlbnQgPSAocHJvY2VkdXJlUmVmZXJlbmNlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGNsYWRpYyBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm1zKHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5hZGRMaW5rcyh0aGlzLmxpbmtzKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWVzKHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuYWRkRXF1YWxpdGllcyh0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5hZGRBc3NlcnRpb25zKHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmFkZFN0YXRlbWVudHModGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuYWRkUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9ucyh0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlcyh0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5hZGRQcm9jZWR1cmVSZWZlcmVuY2VzKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgbGlua3MgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGNsYWRpY0NvbnRleHQgPSBuZXcgQ2xhZGljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcGFyYW1ldGVycywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIGNsYWRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDbGFkaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJsaW5rcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInBhcmFtZXRlcnMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0U3RhdGVtZW50cyIsImdldFBhcmFtZXRlcnMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRMaW5rIiwibGluayIsImxpbmtTdHJpbmciLCJsaW5rQSIsImxpbmtCIiwibGlua0FFcXVhbFRvTGlua0IiLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVTdHJpbmciLCJmcmFtZUEiLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50QSIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJhZGRQYXJhbWV0ZXIiLCJwYXJhbXRlciIsInBhcmFtdGVyU3RyaW5nIiwicGFyYW10ZXJBIiwicGFyYW10ZXJzIiwicGFyYW10ZXJCIiwicGFyYW10ZXJBRXF1YWxUb1BhcmFtZXRlckIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImFkZFByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZUEiLCJwcm9jZWR1cmVSZWZlcmVuY2VCIiwicHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJhZGRUZXJtcyIsImZvckVhY2giLCJhZGRMaW5rcyIsImFkZEZyYW1lcyIsImFkZEVxdWFsaXRpZXMiLCJhZGRBc3NlcnRpb25zIiwiYWRkU3RhdGVtZW50cyIsImFkZFBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJhZGRQcm9jZWR1cmVSZWZlcmVuY2VzIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImxpbmtOb2RlIiwibGlua05vZGVNYXRjaGVzIiwibWF0Y2hMaW5rTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyTm9kZU1hdGNoZXMiLCJtYXRjaFBhcmFtZXRlck5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzdW1wdGlvbk5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlclByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCIsIm1lcmdlIiwiZnJvbU5vdGhpbmciLCJjbGFkaWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXFCQTs7OzJCQU5VO2dFQUVYOzs7Ozs7QUFFcEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyx5QkFBYztBQUV6QixNQUFNSCxzQkFBc0JJLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUs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
|