occam-nominal 1.0.503 → 1.0.506
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 +44 -3
- package/lib/context/mnemic.js +49 -53
- package/lib/element/assumption.js +32 -41
- package/lib/element/fact/premise.js +17 -14
- package/lib/element/fact/supposition.js +19 -16
- package/lib/element/label.js +1 -11
- package/lib/element/metavariable.js +1 -38
- package/lib/element/reference.js +3 -24
- package/lib/element/resolution/conclusion.js +20 -2
- package/lib/element/resolution/deduction.js +20 -2
- package/lib/element/resolution.js +2 -17
- package/lib/element/signature.js +19 -20
- package/lib/element/substitution/frame.js +16 -37
- package/lib/element/substitution/statement.js +22 -18
- package/lib/element/substitution/term.js +21 -17
- package/lib/element/substitution.js +1 -5
- package/lib/example/nominal/bnf.js +1 -3
- package/lib/node/statement.js +2 -6
- package/lib/node/substitution/statement.js +1 -5
- package/lib/nonTerminalNodeMap.js +1 -3
- package/lib/preamble.js +1 -2
- package/lib/process/instantiate.js +2 -8
- package/lib/ruleNames.js +1 -5
- package/lib/utilities/element.js +5 -30
- package/lib/utilities/json.js +24 -24
- package/lib/utilities/string.js +1 -8
- package/package.json +3 -3
- package/src/context/cladic.js +73 -7
- package/src/context/mnemic.js +75 -82
- package/src/element/assumption.js +34 -48
- package/src/element/fact/premise.js +20 -18
- package/src/element/fact/supposition.js +19 -17
- package/src/element/label.js +2 -17
- package/src/element/metavariable.js +0 -63
- package/src/element/reference.js +5 -39
- package/src/element/resolution/conclusion.js +27 -3
- package/src/element/resolution/deduction.js +26 -2
- package/src/element/resolution.js +3 -26
- package/src/element/signature.js +18 -22
- package/src/element/substitution/frame.js +17 -51
- package/src/element/substitution/statement.js +23 -19
- package/src/element/substitution/term.js +24 -29
- package/src/element/substitution.js +0 -6
- package/src/example/nominal/bnf.js +0 -2
- package/src/node/statement.js +2 -11
- package/src/node/substitution/statement.js +0 -7
- package/src/nonTerminalNodeMap.js +0 -3
- package/src/preamble.js +0 -1
- package/src/process/instantiate.js +2 -6
- package/src/ruleNames.js +0 -1
- package/src/utilities/element.js +6 -52
- package/src/utilities/json.js +29 -32
- package/src/utilities/string.js +0 -8
- package/lib/element/substitution/reference.js +0 -195
- package/lib/node/substitution/reference.js +0 -40
- package/src/element/substitution/reference.js +0 -279
- package/src/node/substitution/reference.js +0 -38
package/lib/context/cladic.js
CHANGED
|
@@ -17,9 +17,10 @@ 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, assertions, metavariables){
|
|
20
|
+
constructor(context, terms, links, assertions, metavariables){
|
|
21
21
|
super(context);
|
|
22
22
|
this.terms = terms;
|
|
23
|
+
this.links = links;
|
|
23
24
|
this.assertions = assertions;
|
|
24
25
|
this.metavariables = metavariables;
|
|
25
26
|
}
|
|
@@ -29,6 +30,12 @@ class CladicContext extends _context.default {
|
|
|
29
30
|
context.getTerms(terms);
|
|
30
31
|
return terms;
|
|
31
32
|
}
|
|
33
|
+
getLinks(links = []) {
|
|
34
|
+
const context = this.getContext();
|
|
35
|
+
push(links, this.links);
|
|
36
|
+
context.getLinks(links);
|
|
37
|
+
return links;
|
|
38
|
+
}
|
|
32
39
|
getAssertions(assertions = []) {
|
|
33
40
|
const context = this.getContext();
|
|
34
41
|
push(assertions, this.assertions);
|
|
@@ -56,6 +63,21 @@ class CladicContext extends _context.default {
|
|
|
56
63
|
this.terms.push(term);
|
|
57
64
|
context.debug(`...added the '${termString}' term to the cladic context.`);
|
|
58
65
|
}
|
|
66
|
+
addLink(link) {
|
|
67
|
+
const context = this, linkString = link.getString();
|
|
68
|
+
context.trace(`Adding the '${linkString}' link to the cladic context...`);
|
|
69
|
+
const linkA = link; ///
|
|
70
|
+
extract(this.links, (link)=>{
|
|
71
|
+
const linkB = link, linkAEqualToLinkB = linkA.isEqualTo(linkB);
|
|
72
|
+
if (linkAEqualToLinkB) {
|
|
73
|
+
const linkString = link.getString();
|
|
74
|
+
context.trace(`Removed the existing '${linkString}' link from the cladic context...`);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
this.links.push(link);
|
|
79
|
+
context.debug(`...added the '${linkString}' link to the cladic context.`);
|
|
80
|
+
}
|
|
59
81
|
addAssertion(assertion) {
|
|
60
82
|
const context = this, assertionString = assertion.getString();
|
|
61
83
|
context.trace(`Adding the '${assertionString}' assertion to the cladic context...`);
|
|
@@ -91,6 +113,11 @@ class CladicContext extends _context.default {
|
|
|
91
113
|
this.addTerm(term);
|
|
92
114
|
});
|
|
93
115
|
}
|
|
116
|
+
addLinks(links) {
|
|
117
|
+
links.forEach((link)=>{
|
|
118
|
+
this.addLink(link);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
94
121
|
addAssertions(assertions) {
|
|
95
122
|
assertions.forEach((assertion)=>{
|
|
96
123
|
this.addAssertion(assertion);
|
|
@@ -110,6 +137,15 @@ class CladicContext extends _context.default {
|
|
|
110
137
|
}) || null;
|
|
111
138
|
return term;
|
|
112
139
|
}
|
|
140
|
+
findLinkByLinkNode(linkNode) {
|
|
141
|
+
const links = this.getLinks(), link = links.find((link)=>{
|
|
142
|
+
const linkNodeMatches = link.matchLinkNode(linkNode);
|
|
143
|
+
if (linkNodeMatches) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
}) || null;
|
|
147
|
+
return link;
|
|
148
|
+
}
|
|
113
149
|
findAssertionByAssertionNode(assertionNode) {
|
|
114
150
|
const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
|
|
115
151
|
const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
|
|
@@ -132,6 +168,10 @@ class CladicContext extends _context.default {
|
|
|
132
168
|
const term = this.findTermByTermNode(termNode), termPresent = term !== null;
|
|
133
169
|
return termPresent;
|
|
134
170
|
}
|
|
171
|
+
isLinkPresentByLinkNode(linkNode) {
|
|
172
|
+
const link = this.findLinkByLinkNode(linkNode), linkPresent = link !== null;
|
|
173
|
+
return linkPresent;
|
|
174
|
+
}
|
|
135
175
|
isAssertionPresentByAssertionNode(assertionNode) {
|
|
136
176
|
const assertion = this.findAssertionByAssertionNode(assertionNode), assertionPresent = assertion !== null;
|
|
137
177
|
return assertionPresent;
|
|
@@ -143,13 +183,14 @@ class CladicContext extends _context.default {
|
|
|
143
183
|
merge(context) {
|
|
144
184
|
context.debug(`Merging the cladic context`);
|
|
145
185
|
context.addTerms(this.terms);
|
|
186
|
+
context.addLinks(this.links);
|
|
146
187
|
context.addAssertions(this.assertions);
|
|
147
188
|
context.addMetavariables(this.metavariables);
|
|
148
189
|
}
|
|
149
190
|
static fromNothing(context) {
|
|
150
|
-
const terms = [], assertions = [], metavariables = [], cladicContext = new CladicContext(context, terms, assertions, metavariables);
|
|
191
|
+
const terms = [], links = [], assertions = [], metavariables = [], cladicContext = new CladicContext(context, links, terms, assertions, metavariables);
|
|
151
192
|
return cladicContext;
|
|
152
193
|
}
|
|
153
194
|
}
|
|
154
195
|
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGFzc2VydGlvbnMsIG1ldGF2YXJpYWJsZXMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1BID0gdGVybTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMudGVybXMsICh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7dGVybVN0cmluZ30nIHRlcm0gZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzZXJ0aW9uQSA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuYXNzZXJ0aW9ucywgKGFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uQiA9IGFzc2VydGlvbiwgLy8vXG4gICAgICAgICAgICBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICBjb25zdCBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlQSA9IG1ldGF2YXJpYWJsZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMubWV0YXZhcmlhYmxlcywgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZSwgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIHRlcm1zLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgIHRoaXMuYWRkVGVybSh0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbnMoYXNzZXJ0aW9ucykge1xuICAgIGFzc2VydGlvbnMuZm9yRWFjaCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKSB7XG4gICAgbWV0YXZhcmlhYmxlcy5mb3JFYWNoKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIHRoaXMuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybSA9IHRoaXMuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9ICh0ZXJtICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0ZXJtUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVuID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGNsYWRpYyBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm1zKHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5hZGRBc3NlcnRpb25zKHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmFkZE1ldGF2YXJpYWJsZXModGhpcy5tZXRhdmFyaWFibGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGNsYWRpY0NvbnRleHQgPSBuZXcgQ2xhZGljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgYXNzZXJ0aW9ucyAsbWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gY2xhZGljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsYWRpY0NvbnRleHQiLCJwdXNoIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImFzc2VydGlvbnMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0QXNzZXJ0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYXNzZXJ0aW9uQSIsImFzc2VydGlvbkIiLCJhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZEFzc2VydGlvbnMiLCJhZGRNZXRhdmFyaWFibGVzIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJtZXJnZSIsImZyb21Ob3RoaW5nIiwiY2xhZGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFxQkE7OzsyQkFOVTtnRUFFWDs7Ozs7O0FBRXBCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsVUFBVSxFQUFFQyxhQUFhLENBQUU7UUFDckQsS0FBSyxDQUFD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
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGxpbmtzLCBhc3NlcnRpb25zLCBtZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobGlua3MsIHRoaXMubGlua3MpO1xuXG4gICAgY29udGV4dC5nZXRMaW5rcyhsaW5rcyk7XG5cbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtQSA9IHRlcm07IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7dGVybVN0cmluZ30nIHRlcm0gZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRMaW5rKGxpbmspIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbGlua0EgPSBsaW5rOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5saW5rcywgKGxpbmspID0+IHtcbiAgICAgIGNvbnN0IGxpbmtCID0gbGluaywgLy8vXG4gICAgICAgICAgICBsaW5rQUVxdWFsVG9MaW5rQiA9IGxpbmtBLmlzRXF1YWxUbyhsaW5rQik7XG5cbiAgICAgIGlmIChsaW5rQUVxdWFsVG9MaW5rQikge1xuICAgICAgICBjb25zdCBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtsaW5rU3RyaW5nfScgbGluayBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5saW5rcy5wdXNoKGxpbmspO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTGlua3MobGlua3MpIHtcbiAgICBsaW5rcy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICB0aGlzLmFkZExpbmsobGluayk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcykge1xuICAgIG1ldGF2YXJpYWJsZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICB0aGlzLmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKSB7XG4gICAgY29uc3QgbGlua3MgPSB0aGlzLmdldExpbmtzKCksXG4gICAgICAgICAgbGluayA9IGxpbmtzLmZpbmQoKGxpbmspID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtOb2RlTWF0Y2hlcyA9IGxpbmsubWF0Y2hMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChsaW5rTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gKGFzc2VydGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIG1lcmdlKGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGBNZXJnaW5nIHRoZSBjbGFkaWMgY29udGV4dGApO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuYWRkTGlua3ModGhpcy5saW5rcyk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2VydGlvbnModGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlcyh0aGlzLm1ldGF2YXJpYWJsZXMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGxpbmtzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBjbGFkaWNDb250ZXh0ID0gbmV3IENsYWRpY0NvbnRleHQoY29udGV4dCwgbGlua3MsIHRlcm1zLCBhc3NlcnRpb25zICxtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBjbGFkaWNDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ2xhZGljQ29udGV4dCIsInB1c2giLCJleHRyYWN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsInRlcm1zIiwibGlua3MiLCJhc3NlcnRpb25zIiwibWV0YXZhcmlhYmxlcyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImdldExpbmtzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYXNzZXJ0aW9uQSIsImFzc2VydGlvbkIiLCJhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZExpbmtzIiwiYWRkQXNzZXJ0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNMaW5rUHJlc2VudEJ5TGlua05vZGUiLCJsaW5rUHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJtZXJnZSIsImZyb21Ob3RoaW5nIiwiY2xhZGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFxQkE7OzsyQkFOVTtnRUFFWDs7Ozs7O0FBRXBCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxVQUFVLEVBQUVDLGFBQWEsQ0FBRTtRQUM1RCxLQUFLLENBQUNKO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsYUFBYSxHQUFHQTtJQUN2QjtJQUVBQyxTQUFTSixRQUFRLEVBQUUsRUFBRTtRQUNuQixNQUFNRCxVQUFVLElBQUksQ0FBQ00sVUFBVTtRQUUvQlYsS0FBS0ssT0FBTyxJQUFJLENBQUNBLEtBQUs7UUFFdEJELFFBQVFLLFFBQVEsQ0FBQ0o7UUFFakIsT0FBT0E7SUFDVDtJQUVBTSxTQUFTTCxRQUFRLEVBQUUsRUFBRTtRQUNuQixNQUFNRixVQUFVLElBQUksQ0FBQ00sVUFBVTtRQUUvQlYsS0FBS00sT0FBTyxJQUFJLENBQUNBLEtBQUs7UUFFdEJGLFFBQVFPLFFBQVEsQ0FBQ0w7UUFFakIsT0FBT0E7SUFDVDtJQUVBTSxjQUFjTCxhQUFhLEVBQUUsRUFBRTtRQUM3QixNQUFNSCxVQUFVLElBQUksQ0FBQ00sVUFBVTtRQUUvQlYsS0FBS08sWUFBWSxJQUFJLENBQUNBLFVBQVU7UUFFaENILFFBQVFRLGFBQWEsQ0FBQ0w7UUFFdEIsT0FBT0E7SUFDVDtJQUVBTSxpQkFBaUJMLGdCQUFnQixFQUFFLEVBQUU7UUFDbkMsTUFBTUosVUFBVSxJQUFJLENBQUNNLFVBQVU7UUFFL0JWLEtBQUtRLGVBQWUsSUFBSSxDQUFDQSxhQUFhO1FBRXRDSixRQUFRUyxnQkFBZ0IsQ0FBQ0w7UUFFekIsT0FBT0E7SUFDVDtJQUVBTSxRQUFRQyxJQUFJLEVBQUU7UUFDWixNQUFNWCxVQUFVLElBQUksRUFDZFksYUFBYUQsS0FBS0UsU0FBUztRQUVqQ2IsUUFBUWMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFRixXQUFXLCtCQUErQixDQUFDO1FBRXhFLE1BQU1HLFFBQVFKLE1BQU0sR0FBRztRQUV2QmQsUUFBUSxJQUFJLENBQUNJLEtBQUssRUFBRSxDQUFDVTtZQUNuQixNQUFNSyxRQUFRTCxNQUNaTSxvQkFBb0JGLE1BQU1HLFNBQVMsQ0FBQ0Y7WUFFdEMsSUFBSUMsbUJBQW1CO2dCQUNyQixNQUFNTCxhQUFhRCxLQUFLRSxTQUFTO2dCQUVqQ2IsUUFBUWMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUVGLFdBQVcsaUNBQWlDLENBQUM7Z0JBRXBGLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSSxDQUFDWCxLQUFLLENBQUNMLElBQUksQ0FBQ2U7UUFFaEJYLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVQLFdBQVcsNkJBQTZCLENBQUM7SUFDMUU7SUFFQVEsUUFBUUMsSUFBSSxFQUFFO1FBQ1osTUFBTXJCLFVBQVUsSUFBSSxFQUNkc0IsYUFBYUQsS0FBS1IsU0FBUztRQUVqQ2IsUUFBUWMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFUSxXQUFXLCtCQUErQixDQUFDO1FBRXhFLE1BQU1DLFFBQVFGLE1BQU0sR0FBRztRQUV2QnhCLFFBQVEsSUFBSSxDQUFDSyxLQUFLLEVBQUUsQ0FBQ21CO1lBQ25CLE1BQU1HLFFBQVFILE1BQ1JJLG9CQUFvQkYsTUFBTUwsU0FBUyxDQUFDTTtZQUUxQyxJQUFJQyxtQkFBbUI7Z0JBQ3JCLE1BQU1ILGFBQWFELEtBQUtSLFNBQVM7Z0JBRWpDYixRQUFRYyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRVEsV0FBVyxpQ0FBaUMsQ0FBQztnQkFFcEYsT0FBTztZQUNUO1FBQ0Y7UUFFQSxJQUFJLENBQUNwQixLQUFLLENBQUNOLElBQUksQ0FBQ3lCO1FBRWhCckIsUUFBUW1CLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUcsV0FBVyw2QkFBNkIsQ0FBQztJQUMxRTtJQUVBSSxhQUFhQyxTQUFTLEVBQUU7UUFDdEIsTUFBTTNCLFVBQVUsSUFBSSxFQUNkNEIsa0JBQWtCRCxVQUFVZCxTQUFTO1FBRTNDYixRQUFRYyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVjLGdCQUFnQixvQ0FBb0MsQ0FBQztRQUVsRixNQUFNQyxhQUFhRixXQUFXLEdBQUc7UUFFakM5QixRQUFRLElBQUksQ0FBQ00sVUFBVSxFQUFFLENBQUN3QjtZQUN4QixNQUFNRyxhQUFhSCxXQUNiSSw4QkFBOEJGLFdBQVdYLFNBQVMsQ0FBQ1k7WUFFekQsSUFBSUMsNkJBQTZCO2dCQUMvQixNQUFNSCxrQkFBa0JELFVBQVVkLFNBQVM7Z0JBRTNDYixRQUFRYyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRWMsZ0JBQWdCLHNDQUFzQyxDQUFDO2dCQUU5RixPQUFPO1lBQ1Q7UUFDRjtRQUVBLElBQUksQ0FBQ3pCLFVBQVUsQ0FBQ1AsSUFBSSxDQUFDK0I7UUFFckIzQixRQUFRbUIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUyxnQkFBZ0Isa0NBQWtDLENBQUM7SUFDcEY7SUFFQUksZ0JBQWdCQyxZQUFZLEVBQUU7UUFDNUIsTUFBTWpDLFVBQVUsSUFBSSxFQUNka0MscUJBQXFCRCxhQUFhcEIsU0FBUztRQUVqRGIsUUFBUWMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFb0IsbUJBQW1CLHVDQUF1QyxDQUFDO1FBRXhGLE1BQU1DLGdCQUFnQkYsY0FBYyxHQUFHO1FBRXZDcEMsUUFBUSxJQUFJLENBQUNPLGFBQWEsRUFBRSxDQUFDNkI7WUFDM0IsTUFBTUcsZ0JBQWdCSCxjQUNoQkksb0NBQW9DRixjQUFjakIsU0FBUyxDQUFDa0I7WUFFbEUsSUFBSUMsbUNBQW1DO2dCQUNyQyxNQUFNSCxxQkFBcUJELGFBQWFwQixTQUFTO2dCQUVqRGIsUUFBUWMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUVvQixtQkFBbUIseUNBQXlDLENBQUM7Z0JBRXBHLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSSxDQUFDOUIsYUFBYSxDQUFDUixJQUFJLENBQUNxQztRQUV4QmpDLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVlLG1CQUFtQixxQ0FBcUMsQ0FBQztJQUMxRjtJQUVBSSxTQUFTckMsS0FBSyxFQUFFO1FBQ2RBLE1BQU1zQyxPQUFPLENBQUMsQ0FBQzVCO1lBQ2IsSUFBSSxDQUFDRCxPQUFPLENBQUNDO1FBQ2Y7SUFDRjtJQUVBNkIsU0FBU3RDLEtBQUssRUFBRTtRQUNkQSxNQUFNcUMsT0FBTyxDQUFDLENBQUNsQjtZQUNiLElBQUksQ0FBQ0QsT0FBTyxDQUFDQztRQUNmO0lBQ0Y7SUFFQW9CLGNBQWN0QyxVQUFVLEVBQUU7UUFDeEJBLFdBQVdvQyxPQUFPLENBQUMsQ0FBQ1o7WUFDbEIsSUFBSSxDQUFDRCxZQUFZLENBQUNDO1FBQ3BCO0lBQ0Y7SUFFQWUsaUJBQWlCdEMsYUFBYSxFQUFFO1FBQzlCQSxjQUFjbUMsT0FBTyxDQUFDLENBQUNOO1lBQ3JCLElBQUksQ0FBQ0QsZUFBZSxDQUFDQztRQUN2QjtJQUNGO0lBRUFVLG1CQUFtQkMsUUFBUSxFQUFFO1FBQzNCLE1BQU0zQyxRQUFRLElBQUksQ0FBQ0ksUUFBUSxJQUN6Qk0sT0FBT1YsTUFBTTRDLElBQUksQ0FBQyxDQUFDbEM7WUFDakIsTUFBTW1DLGtCQUFrQm5DLEtBQUtvQyxhQUFhLENBQUNIO1lBRTNDLElBQUlFLGlCQUFpQjtnQkFDbkIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVSLE9BQU9uQztJQUNUO0lBRUFxQyxtQkFBbUJDLFFBQVEsRUFBRTtRQUMzQixNQUFNL0MsUUFBUSxJQUFJLENBQUNLLFFBQVEsSUFDckJjLE9BQU9uQixNQUFNMkMsSUFBSSxDQUFDLENBQUN4QjtZQUNqQixNQUFNNkIsa0JBQWtCN0IsS0FBSzhCLGFBQWEsQ0FBQ0Y7WUFFM0MsSUFBSUMsaUJBQWlCO2dCQUNuQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBTzdCO0lBQ1Q7SUFFQStCLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLE1BQU1sRCxhQUFhLElBQUksQ0FBQ0ssYUFBYSxJQUMvQm1CLFlBQVl4QixXQUFXMEMsSUFBSSxDQUFDLENBQUNsQjtZQUMzQixNQUFNMkIsdUJBQXVCM0IsVUFBVTRCLGtCQUFrQixDQUFDRjtZQUUxRCxJQUFJQyxzQkFBc0I7Z0JBQ3hCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPM0I7SUFDVDtJQUVBNkIsbUNBQW1DQyxnQkFBZ0IsRUFBRTtRQUNuRCxNQUFNckQsZ0JBQWdCLElBQUksQ0FBQ0ssZ0JBQWdCLElBQ3JDd0IsZUFBZTdCLGNBQWN5QyxJQUFJLENBQUMsQ0FBQ1o7WUFDakMsTUFBTXlCLDBCQUEwQnpCLGFBQWEwQixxQkFBcUIsQ0FBQ0Y7WUFFbkUsSUFBSUMseUJBQXlCO2dCQUMzQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT3pCO0lBQ1Q7SUFFQTJCLHdCQUF3QmhCLFFBQVEsRUFBRTtRQUNoQyxNQUFNakMsT0FBTyxJQUFJLENBQUNnQyxrQkFBa0IsQ0FBQ0MsV0FDL0JpQixjQUFlbEQsU0FBUztRQUU5QixPQUFPa0Q7SUFDVDtJQUVBQyx3QkFBd0JiLFFBQVEsRUFBRTtRQUNoQyxNQUFNNUIsT0FBTyxJQUFJLENBQUMyQixrQkFBa0IsQ0FBQ0MsV0FDL0JjLGNBQWUxQyxTQUFTO1FBRTlCLE9BQU8wQztJQUNUO0lBRUFDLGtDQUFrQ1gsYUFBYSxFQUFFO1FBQy9DLE1BQU0xQixZQUFZLElBQUksQ0FBQ3lCLDRCQUE0QixDQUFDQyxnQkFDOUNZLG1CQUFvQnRDLGNBQWM7UUFFeEMsT0FBT3NDO0lBQ1Q7SUFFQUMsd0NBQXdDVCxnQkFBZ0IsRUFBRTtRQUN4RCxNQUFNVSxnQkFBZ0IsSUFBSSxDQUFDWCxrQ0FBa0MsQ0FBQ0MsbUJBQ3hEVyx1QkFBd0JELGtCQUFrQjtRQUVoRCxPQUFPQztJQUNUO0lBRUFDLE1BQU1yRSxPQUFPLEVBQUU7UUFDYkEsUUFBUW1CLEtBQUssQ0FBQyxDQUFDLDBCQUEwQixDQUFDO1FBRTFDbkIsUUFBUXNDLFFBQVEsQ0FBQyxJQUFJLENBQUNyQyxLQUFLO1FBRTNCRCxRQUFRd0MsUUFBUSxDQUFDLElBQUksQ0FBQ3RDLEtBQUs7UUFFM0JGLFFBQVF5QyxhQUFhLENBQUMsSUFBSSxDQUFDdEMsVUFBVTtRQUVyQ0gsUUFBUTBDLGdCQUFnQixDQUFDLElBQUksQ0FBQ3RDLGFBQWE7SUFDN0M7SUFFQSxPQUFPa0UsWUFBWXRFLE9BQU8sRUFBRTtRQUMxQixNQUFNQyxRQUFRLEVBQUUsRUFDVkMsUUFBUSxFQUFFLEVBQ1ZDLGFBQWEsRUFBRSxFQUNmQyxnQkFBZ0IsRUFBRSxFQUNsQm1FLGdCQUFnQixJQUFJNUUsY0FBY0ssU0FBU0UsT0FBT0QsT0FBT0UsWUFBWUM7UUFFM0UsT0FBT21FO0lBQ1Q7QUFDRiJ9
|
package/lib/context/mnemic.js
CHANGED
|
@@ -18,14 +18,14 @@ function _interop_require_default(obj) {
|
|
|
18
18
|
}
|
|
19
19
|
const { push, extract } = _necessary.arrayUtilities;
|
|
20
20
|
class MnemicContext extends _context.default {
|
|
21
|
-
constructor(context, terms, frames, equalities, assertions, statements,
|
|
21
|
+
constructor(context, terms, links, frames, equalities, assertions, statements, assumptions, metavariables, substitutions){
|
|
22
22
|
super(context);
|
|
23
23
|
this.terms = terms;
|
|
24
|
+
this.links = links;
|
|
24
25
|
this.frames = frames;
|
|
25
26
|
this.equalities = equalities;
|
|
26
27
|
this.assertions = assertions;
|
|
27
28
|
this.statements = statements;
|
|
28
|
-
this.references = references;
|
|
29
29
|
this.assumptions = assumptions;
|
|
30
30
|
this.metavariables = metavariables;
|
|
31
31
|
this.substitutions = substitutions;
|
|
@@ -36,6 +36,12 @@ class MnemicContext extends _context.default {
|
|
|
36
36
|
context.getTerms(terms);
|
|
37
37
|
return terms;
|
|
38
38
|
}
|
|
39
|
+
getLinks(links = []) {
|
|
40
|
+
const context = this.getContext();
|
|
41
|
+
push(links, this.links);
|
|
42
|
+
context.getLinks(links);
|
|
43
|
+
return links;
|
|
44
|
+
}
|
|
39
45
|
getFrames(frames = []) {
|
|
40
46
|
const context = this.getContext();
|
|
41
47
|
push(frames, this.frames);
|
|
@@ -60,12 +66,6 @@ class MnemicContext extends _context.default {
|
|
|
60
66
|
context.getAssertions(assertions);
|
|
61
67
|
return assertions;
|
|
62
68
|
}
|
|
63
|
-
getReferences(references = []) {
|
|
64
|
-
const context = this.getContext();
|
|
65
|
-
push(references, this.references);
|
|
66
|
-
context.getReferences(references);
|
|
67
|
-
return references;
|
|
68
|
-
}
|
|
69
69
|
getAssumptions(assumptions = []) {
|
|
70
70
|
const context = this.getContext();
|
|
71
71
|
push(assumptions, this.assumptions);
|
|
@@ -99,6 +99,21 @@ class MnemicContext extends _context.default {
|
|
|
99
99
|
this.terms.push(term);
|
|
100
100
|
context.debug(`...added the '${termString}' term to the mnemic context.`);
|
|
101
101
|
}
|
|
102
|
+
addLink(link) {
|
|
103
|
+
const context = this, linkString = link.getString();
|
|
104
|
+
context.trace(`Adding the '${linkString}' link to the mnemic context...`);
|
|
105
|
+
const linkA = link; ///
|
|
106
|
+
extract(this.links, (link)=>{
|
|
107
|
+
const linkB = link, linkAEqualToLinkB = linkA.isEqualTo(linkB);
|
|
108
|
+
if (linkAEqualToLinkB) {
|
|
109
|
+
const linkString = link.getString();
|
|
110
|
+
context.trace(`Removed the existing '${linkString}' link from the mnemic context...`);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
this.links.push(link);
|
|
115
|
+
context.debug(`...added the '${linkString}' link to the mnemic context.`);
|
|
116
|
+
}
|
|
102
117
|
addFrame(frame) {
|
|
103
118
|
const context = this, frameString = frame.getString();
|
|
104
119
|
context.trace(`Adding the '${frameString}' frame to the mnemic context...`);
|
|
@@ -159,21 +174,6 @@ class MnemicContext extends _context.default {
|
|
|
159
174
|
this.statements.push(statement);
|
|
160
175
|
context.debug(`...added the '${statementString}' statement to the mnemic context.`);
|
|
161
176
|
}
|
|
162
|
-
addReference(reference) {
|
|
163
|
-
const context = this, referenceString = reference.getString();
|
|
164
|
-
context.trace(`Adding the '${referenceString}' reference to the mnemic context...`);
|
|
165
|
-
const referenceA = reference; ///
|
|
166
|
-
extract(this.references, (reference)=>{
|
|
167
|
-
const referenceB = reference, referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
|
|
168
|
-
if (referenceAEqualToReferenceB) {
|
|
169
|
-
const referenceString = reference.getString();
|
|
170
|
-
context.trace(`Removed the existing '${referenceString}' reference from the mnemic context...`);
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
this.references.push(reference);
|
|
175
|
-
context.debug(`...added the '${referenceString}' reference to the mnemic context.`);
|
|
176
|
-
}
|
|
177
177
|
addAssumption(assumption) {
|
|
178
178
|
const context = this, assumptionString = assumption.getString();
|
|
179
179
|
context.trace(`Adding the '${assumptionString}' assumption to the mnemic context...`);
|
|
@@ -227,6 +227,11 @@ class MnemicContext extends _context.default {
|
|
|
227
227
|
this.addTerm(term);
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
|
+
addLinks(links) {
|
|
231
|
+
links.forEach((link)=>{
|
|
232
|
+
this.addLink(link);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
230
235
|
addAssertions(assertions) {
|
|
231
236
|
assertions.forEach((assertion)=>{
|
|
232
237
|
this.addAssertion(assertion);
|
|
@@ -246,6 +251,15 @@ class MnemicContext extends _context.default {
|
|
|
246
251
|
}) || null;
|
|
247
252
|
return term;
|
|
248
253
|
}
|
|
254
|
+
findLinkByLinkNode(linkNode) {
|
|
255
|
+
const links = this.getLinks(), link = links.find((link)=>{
|
|
256
|
+
const linkNodeMatches = link.matchLinkNode(linkNode);
|
|
257
|
+
if (linkNodeMatches) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
}) || null;
|
|
261
|
+
return link;
|
|
262
|
+
}
|
|
249
263
|
findFrameByFrameNode(frameNode) {
|
|
250
264
|
const frames = this.getFrames(), frame = frames.find((frame)=>{
|
|
251
265
|
const frameNodeMatches = frame.matchFrameNode(frameNode);
|
|
@@ -282,15 +296,6 @@ class MnemicContext extends _context.default {
|
|
|
282
296
|
}) || null;
|
|
283
297
|
return statement;
|
|
284
298
|
}
|
|
285
|
-
findReferenceByReferenceNode(referenceNode) {
|
|
286
|
-
const references = this.getReferences(), reference = references.find((reference)=>{
|
|
287
|
-
const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
|
|
288
|
-
if (referenceMatcheReferenceNode) {
|
|
289
|
-
return true;
|
|
290
|
-
}
|
|
291
|
-
}) || null;
|
|
292
|
-
return reference;
|
|
293
|
-
}
|
|
294
299
|
findAssumptionByAssumptionNode(assumptionNode) {
|
|
295
300
|
const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
|
|
296
301
|
const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
|
|
@@ -300,15 +305,6 @@ class MnemicContext extends _context.default {
|
|
|
300
305
|
}) || null;
|
|
301
306
|
return assumption;
|
|
302
307
|
}
|
|
303
|
-
findReferenceByMetavariableNode(metavariableNode) {
|
|
304
|
-
const references = this.getReferences(), reference = references.find((reference)=>{
|
|
305
|
-
const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
|
|
306
|
-
if (referenceMatcheMetavariableNode) {
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
}) || null;
|
|
310
|
-
return reference;
|
|
311
|
-
}
|
|
312
308
|
findMetavariableByMetavariableNode(metavariableNode) {
|
|
313
309
|
const metavariables = this.getMetavariables(), metavariable = metavariables.find((metavariable)=>{
|
|
314
310
|
const metavariableNodeMatches = metavariable.matchMetavariableNode(metavariableNode);
|
|
@@ -331,6 +327,10 @@ class MnemicContext extends _context.default {
|
|
|
331
327
|
const term = this.findTermByTermNode(termNode), termPresent = term !== null;
|
|
332
328
|
return termPresent;
|
|
333
329
|
}
|
|
330
|
+
isLinkPresentByLinkNode(linkNode) {
|
|
331
|
+
const link = this.findLinkByLinkNode(linkNode), linkPresent = link !== null;
|
|
332
|
+
return linkPresent;
|
|
333
|
+
}
|
|
334
334
|
isFramePresentByFrameNode(frameNode) {
|
|
335
335
|
const frame = this.findFrameByFrameNode(frameNode), framePresent = frame !== null;
|
|
336
336
|
return framePresent;
|
|
@@ -351,10 +351,6 @@ class MnemicContext extends _context.default {
|
|
|
351
351
|
const assumption = this.findAssumptionByAssumptionNode(assumptionNode), assumptionPresent = assumption !== null;
|
|
352
352
|
return assumptionPresent;
|
|
353
353
|
}
|
|
354
|
-
isReferencePresentByMetavariableNode(metavariableNode) {
|
|
355
|
-
const reference = this.findReferenceByMetavariableNode(metavariableNode), referencePresent = reference !== null;
|
|
356
|
-
return referencePresent;
|
|
357
|
-
}
|
|
358
354
|
isMetavariablePresentByMetavariableNode(metavariableNode) {
|
|
359
355
|
const metavariablen = this.findMetavariableByMetavariableNode(metavariableNode), metavariablenPresent = metavariablen !== null;
|
|
360
356
|
return metavariablenPresent;
|
|
@@ -364,9 +360,9 @@ class MnemicContext extends _context.default {
|
|
|
364
360
|
this.terms = (0, _json.termsFromJSON)(json, context);
|
|
365
361
|
this.metavariables = (0, _json.metavariablesFromJSON)(json, context);
|
|
366
362
|
this.statements = (0, _json.statementsFromJSON)(json, context);
|
|
367
|
-
this.references = (0, _json.referencesFromJSON)(json, context);
|
|
368
363
|
this.equalities = (0, _json.equalitiesFromJSON)(json, context);
|
|
369
364
|
this.assumptions = (0, _json.assumptionsFromJSON)(json, context);
|
|
365
|
+
this.links = (0, _json.linksFromJSON)(json, context);
|
|
370
366
|
this.frames = (0, _json.framesFromJSON)(json, context);
|
|
371
367
|
this.assertions = (0, _json.assertionsFromJSON)(json, context);
|
|
372
368
|
this.substitutions = (0, _json.substitutionsFromJSON)(json, context);
|
|
@@ -377,24 +373,24 @@ class MnemicContext extends _context.default {
|
|
|
377
373
|
return context;
|
|
378
374
|
}
|
|
379
375
|
toJSON() {
|
|
380
|
-
let terms = this.getTerms(),
|
|
381
|
-
const termsJSON = (0, _json.termsToTermsJSON)(terms),
|
|
376
|
+
let terms = this.getTerms(), links = this.getLinks(), frames = this.getFrames(), equalities = this.getEqualities(), assertions = this.getAssertions(), statements = this.getStatements(), assumptions = this.getAssumptions(), metavariables = this.getMetavariables(), substitutions = this.getSubstitutions();
|
|
377
|
+
const termsJSON = (0, _json.termsToTermsJSON)(terms), linksJSON = (0, _json.linksToLinksJSON)(links), framesJSON = (0, _json.framesToFramesJSON)(frames), equalitiesJSON = (0, _json.equalitiesToEqualitiesJSON)(equalities), assertionsJSON = (0, _json.assertionsToAssertionsJSON)(assertions), statementsJSON = (0, _json.statementsToStatementsJSON)(statements), assumptionsJSON = (0, _json.assumptionsToAssumptionsJSON)(assumptions), metavariablesJSON = (0, _json.metavariablesToMetavariablesJSON)(metavariables), substitutionsJSON = (0, _json.substitutionsToSubstitutionsJSON)(substitutions);
|
|
382
378
|
terms = termsJSON; ///
|
|
379
|
+
links = linksJSON; ///
|
|
383
380
|
frames = framesJSON; ///
|
|
384
381
|
equalities = equalitiesJSON; ///
|
|
385
382
|
assertions = assertionsJSON; ///
|
|
386
383
|
statements = statementsJSON; ///
|
|
387
|
-
references = referencesJSON; ///
|
|
388
384
|
assumptions = assumptionsJSON; ///
|
|
389
385
|
metavariables = metavariablesJSON; //
|
|
390
386
|
substitutions = substitutionsJSON; ///
|
|
391
387
|
const json = {
|
|
392
388
|
terms,
|
|
389
|
+
links,
|
|
393
390
|
frames,
|
|
394
391
|
equalities,
|
|
395
392
|
assertions,
|
|
396
393
|
statements,
|
|
397
|
-
references,
|
|
398
394
|
assumptions,
|
|
399
395
|
metavariables,
|
|
400
396
|
substitutions
|
|
@@ -402,14 +398,14 @@ class MnemicContext extends _context.default {
|
|
|
402
398
|
return json;
|
|
403
399
|
}
|
|
404
400
|
static fromJSON(json, context) {
|
|
405
|
-
const terms = null,
|
|
401
|
+
const terms = null, links = null, frames = null, equalities = null, statements = null, assertions = null, assumptions = null, metavariables = null, substitutions = null, mnemicContext = new MnemicContext(context, terms, links, frames, equalities, assertions, statements, assumptions, metavariables, substitutions);
|
|
406
402
|
mnemicContext.initialise(json);
|
|
407
403
|
return mnemicContext;
|
|
408
404
|
}
|
|
409
405
|
static fromNothing(context) {
|
|
410
|
-
const terms = [],
|
|
406
|
+
const terms = [], links = [], frames = [], equalities = [], statements = [], assertions = [], assumptions = [], metavariables = [], substitutions = [], mnemicContext = new MnemicContext(context, terms, links, frames, equalities, assertions, statements, assumptions, metavariables, substitutions);
|
|
411
407
|
return mnemicContext;
|
|
412
408
|
}
|
|
413
409
|
}
|
|
414
410
|
|
|
415
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IHRlcm1zRnJvbUpTT04sXG4gICAgICAgICBmcmFtZXNGcm9tSlNPTixcbiAgICAgICAgIHRlcm1zVG9UZXJtc0pTT04sXG4gICAgICAgICBmcmFtZXNUb0ZyYW1lc0pTT04sXG4gICAgICAgICBlcXVhbGl0aWVzRnJvbUpTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzRnJvbUpTT04sXG4gICAgICAgICBhc3NlcnRpb25zRnJvbUpTT04sXG4gICAgICAgICByZWZlcmVuY2VzRnJvbUpTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc0Zyb21KU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgc3Vic3RpdHV0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OLFxuICAgICAgICAgcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2gsIGV4dHJhY3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlcztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2godGVybXMsIHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN1YnN0aXR1dGlvbnMsIHRoaXMuc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtQSA9IHRlcm07IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZXF1YWxpdGllcywgKGVxdWFsaXR5KSA9PiB7XG4gICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgICAgICBlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCID0gZXF1YWxpdHlBLmlzRXF1YWxUbyhlcXVhbGl0eUIpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRBID0gc3RhdGVtZW50OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRCID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VBID0gcmVmZXJlbmNlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5yZWZlcmVuY2VzLCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2VCID0gcmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICAgIHJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQiA9IHJlZmVyZW5jZUEuaXNFcXVhbFRvKHJlZmVyZW5jZUIpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uQSA9IGFzc3VtcHRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLm1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlQS5pc0VxdWFsVG8obWV0YXZhcmlhYmxlQik7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcykge1xuICAgIG1ldGF2YXJpYWJsZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICB0aGlzLmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgICAgdGVybSA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlLm1hdGNoUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICByZWZlcmVuY2VQcmVzZW50ID0gKHJlZmVyZW5jZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIHRoaXMudGVybXMgPSB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGVkIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSxcbiAgICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpLFxuICAgICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cyksXG4gICAgICAgICAgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTihyZWZlcmVuY2VzKSxcbiAgICAgICAgICBhc3N1bXB0aW9uc0pTT04gPSBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OKGFzc3VtcHRpb25zKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucyk7XG5cbiAgICB0ZXJtcyA9IHRlcm1zSlNPTjsgLy8vXG4gICAgZnJhbWVzID0gZnJhbWVzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT047IC8vL1xuICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTjsgLy8vXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNKU09OOyAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHRlcm1zLFxuICAgICAgZnJhbWVzLFxuICAgICAgZXF1YWxpdGllcyxcbiAgICAgIGFzc2VydGlvbnMsXG4gICAgICBzdGF0ZW1lbnRzLFxuICAgICAgcmVmZXJlbmNlcyxcbiAgICAgIGFzc3VtcHRpb25zLFxuICAgICAgbWV0YXZhcmlhYmxlcyxcbiAgICAgIHN1YnN0aXR1dGlvbnNcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbW5lbWljQ29udGV4dC5pbml0aWFsaXNlKGpzb24pO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJmcmFtZXMiLCJlcXVhbGl0aWVzIiwiYXNzZXJ0aW9ucyIsInN0YXRlbWVudHMiLCJyZWZlcmVuY2VzIiwiYXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGVzIiwic3Vic3RpdHV0aW9ucyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImdldEZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJnZXRTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldFJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwiYWRkVGVybSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtQSIsInRlcm1CIiwidGVybUFFcXVhbFRvVGVybUIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZEZyYW1lIiwiZnJhbWUiLCJmcmFtZVN0cmluZyIsImZyYW1lQSIsImZyYW1lQiIsImZyYW1lQUVxdWFsVG9GcmFtZUIiLCJhZGRFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlTdHJpbmciLCJlcXVhbGl0eUEiLCJlcXVhbGl0eUIiLCJlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCIiwiYWRkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYXNzZXJ0aW9uQSIsImFzc2VydGlvbkIiLCJhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIiLCJhZGRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdGF0ZW1lbnRBIiwic3RhdGVtZW50QiIsInN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiIsImFkZFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsInJlZmVyZW5jZUEiLCJyZWZlcmVuY2VCIiwicmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYXNzdW1wdGlvbkEiLCJhc3N1bXB0aW9uQiIsImFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImluZmVycmVkU3Vic3RpdHV0aW9ucyIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZEFzc2VydGlvbnMiLCJhZGRNZXRhdmFyaWFibGVzIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSIsIm1hdGNoUmVmZXJlbmNlTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvblByZXNlbnQiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0ZXJtc0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwicmVmZXJlbmNlc0Zyb21KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImZyYW1lc0Zyb21KU09OIiwiYXNzZXJ0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwiY29tbWl0IiwidG9KU09OIiwidGVybXNKU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJyZWZlcmVuY2VzSlNPTiIsInJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwiZnJvbUpTT04iLCJtbmVtaWNDb250ZXh0IiwiZnJvbU5vdGhpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTJCQTs7O2VBQXFCQTs7OzJCQXpCVTtnRUFFWDtzQkFtQjZCOzs7Ozs7QUFFakQsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyx5QkFBYztBQUV6QixNQUFNSCxzQkFBc0JJLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsQ0FBRTtRQUM3SCxLQUFLLENBQUNUO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLFNBQVNU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
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IHRlcm1zRnJvbUpTT04sXG4gICAgICAgICBsaW5rc0Zyb21KU09OLFxuICAgICAgICAgZnJhbWVzRnJvbUpTT04sXG4gICAgICAgICB0ZXJtc1RvVGVybXNKU09OLFxuICAgICAgICAgbGlua3NUb0xpbmtzSlNPTixcbiAgICAgICAgIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNGcm9tSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2gsIGV4dHJhY3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMubGlua3MgPSBsaW5rcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2godGVybXMsIHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRMaW5rcyhsaW5rcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChsaW5rcywgdGhpcy5saW5rcyk7XG5cbiAgICBjb250ZXh0LmdldExpbmtzKGxpbmtzKTtcblxuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZnJhbWVzLCB0aGlzLmZyYW1lcyk7XG5cbiAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc2VydGlvbnMsIHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUEgPSB0ZXJtOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy50ZXJtcywgKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHt0ZXJtU3RyaW5nfScgdGVybSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZExpbmsobGluaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBsaW5rQSA9IGxpbms7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmxpbmtzLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0IgPSBsaW5rLCAvLy9cbiAgICAgICAgICAgIGxpbmtBRXF1YWxUb0xpbmtCID0gbGlua0EuaXNFcXVhbFRvKGxpbmtCKTtcblxuICAgICAgaWYgKGxpbmtBRXF1YWxUb0xpbmtCKSB7XG4gICAgICAgIGNvbnN0IGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2xpbmtTdHJpbmd9JyBsaW5rIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZXF1YWxpdGllcywgKGVxdWFsaXR5KSA9PiB7XG4gICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgICAgICBlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCID0gZXF1YWxpdHlBLmlzRXF1YWxUbyhlcXVhbGl0eUIpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRBID0gc3RhdGVtZW50OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRCID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uQSA9IGFzc3VtcHRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLm1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlQS5pc0VxdWFsVG8obWV0YXZhcmlhYmxlQik7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbnMoYXNzZXJ0aW9ucykge1xuICAgIGFzc2VydGlvbnMuZm9yRWFjaCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKSB7XG4gICAgbWV0YXZhcmlhYmxlcy5mb3JFYWNoKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIHRoaXMuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgICBsaW5rID0gbGlua3MuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua05vZGVNYXRjaGVzID0gbGluay5tYXRjaExpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdGllcy5maW5kKChlcXVhbGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBlcXVhbGl0eU5vZGVNYXRjaGVzID0gZXF1YWxpdHkubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybSA9IHRoaXMuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgIHRlcm1QcmVzZW50ID0gKHRlcm0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNMaW5rUHJlc2VudEJ5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGxpbmtQcmVzZW50ID0gKGxpbmsgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGxpbmtQcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICBmcmFtZVByZXNlbnQgPSAoZnJhbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlQcmVzZW50ID0gKGVxdWFsaXR5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gKGFzc2VydGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudFByZXNlbnQgPSAoc3RhdGVtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGFzc3VtcHRpb25QcmVzZW50ID0gKGFzc3VtcHRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVuID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaW5pdGlhbGlzZShqc29uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmxpbmtzID0gbGlua3NGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbW1pdCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcztcblxuICAgIGNvbnRleHQuZGVidWcoYENvbW1pdHRlZCB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgIGxpbmtzID0gdGhpcy5nZXRMaW5rcygpLFxuICAgICAgICBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgIGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBsaW5rc0pTT04gPSBsaW5rc1RvTGlua3NKU09OKGxpbmtzKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSxcbiAgICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpLFxuICAgICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cyksXG4gICAgICAgICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTihhc3N1bXB0aW9ucyksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGxpbmtzID0gbGlua3NKU09OOyAvLy9cbiAgICBmcmFtZXMgPSBmcmFtZXNKU09OOyAvLy9cbiAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHRlcm1zLFxuICAgICAgbGlua3MsXG4gICAgICBmcmFtZXMsXG4gICAgICBlcXVhbGl0aWVzLFxuICAgICAgYXNzZXJ0aW9ucyxcbiAgICAgIHN0YXRlbWVudHMsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIG1ldGF2YXJpYWJsZXMsXG4gICAgICBzdWJzdGl0dXRpb25zXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IG51bGwsXG4gICAgICAgICAgbGlua3MgPSBudWxsLFxuICAgICAgICAgIGZyYW1lcyA9IG51bGwsXG4gICAgICAgICAgZXF1YWxpdGllcyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IG51bGwsXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IG51bGwsXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbW5lbWljQ29udGV4dC5pbml0aWFsaXNlKGpzb24pO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgbGlua3MgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbW5lbWljQ29udGV4dCA9IG5ldyBNbmVtaWNDb250ZXh0KGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk1uZW1pY0NvbnRleHQiLCJwdXNoIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImxpbmtzIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwiYXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGVzIiwic3Vic3RpdHV0aW9ucyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImdldExpbmtzIiwiZ2V0RnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImdldFN0YXRlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRMaW5rIiwibGluayIsImxpbmtTdHJpbmciLCJsaW5rQSIsImxpbmtCIiwibGlua0FFcXVhbFRvTGlua0IiLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVTdHJpbmciLCJmcmFtZUEiLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50QSIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25CIiwic3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiYWRkTGlua3MiLCJhZGRBc3NlcnRpb25zIiwiYWRkTWV0YXZhcmlhYmxlcyIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwiZmluZCIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJmaW5kTGlua0J5TGlua05vZGUiLCJsaW5rTm9kZSIsImxpbmtOb2RlTWF0Y2hlcyIsIm1hdGNoTGlua05vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzdW1wdGlvbk5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvblByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJpbml0aWFsaXNlIiwianNvbiIsInRlcm1zRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJzdGF0ZW1lbnRzRnJvbUpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJhc3N1bXB0aW9uc0Zyb21KU09OIiwibGlua3NGcm9tSlNPTiIsImZyYW1lc0Zyb21KU09OIiwiYXNzZXJ0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwiY29tbWl0IiwidG9KU09OIiwidGVybXNKU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsImxpbmtzSlNPTiIsImxpbmtzVG9MaW5rc0pTT04iLCJmcmFtZXNKU09OIiwiZnJhbWVzVG9GcmFtZXNKU09OIiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsImFzc2VydGlvbnNKU09OIiwiYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04iLCJzdGF0ZW1lbnRzSlNPTiIsInN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwiZnJvbUpTT04iLCJtbmVtaWNDb250ZXh0IiwiZnJvbU5vdGhpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTJCQTs7O2VBQXFCQTs7OzJCQXpCVTtnRUFFWDtzQkFtQjZCOzs7Ozs7QUFFakQsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyx5QkFBYztBQUV6QixNQUFNSCxzQkFBc0JJLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsQ0FBRTtRQUN4SCxLQUFLLENBQUNUO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsYUFBYSxHQUFHQTtRQUNyQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsU0FBU1QsUUFBUSxFQUFF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
|