occam-verify-cli 1.0.923 → 1.0.931
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/bounded.js +19 -18
- package/lib/context/file/nominal.js +1 -13
- package/lib/context/mnemic.js +1 -5
- package/lib/context.js +17 -26
- package/lib/element/assertion/contained.js +4 -6
- package/lib/element/assertion/defined.js +19 -21
- package/lib/element/assertion/type.js +43 -14
- package/lib/element/constructor/bracketed.js +3 -2
- package/lib/element/constructor.js +5 -3
- package/lib/element/declaration/variable.js +2 -1
- package/lib/element/hypothesis.js +55 -40
- package/lib/element/metavariable.js +13 -7
- package/lib/element/proofAssertion/step.js +1 -5
- package/lib/element/section.js +21 -27
- package/lib/element/statement.js +8 -3
- package/lib/element/substitution/statement.js +14 -15
- package/lib/element/substitution.js +17 -1
- package/lib/element/term.js +22 -13
- package/lib/element/topLevelAssertion.js +6 -2
- package/lib/element/type.js +4 -4
- package/lib/element/variable.js +29 -13
- package/lib/utilities/assignment.js +25 -9
- package/lib/utilities/element.js +37 -23
- package/lib/utilities/equivalences.js +2 -2
- package/lib/utilities/string.js +36 -35
- package/lib/utilities/substitutions.js +14 -26
- package/lib/utilities/unification.js +45 -44
- package/lib/utilities/validation.js +5 -3
- package/package.json +1 -1
- package/src/context/bounded.js +19 -17
- package/src/context/file/nominal.js +0 -18
- package/src/context/mnemic.js +0 -7
- package/src/context.js +24 -43
- package/src/element/assertion/contained.js +6 -11
- package/src/element/assertion/defined.js +32 -36
- package/src/element/assertion/type.js +61 -18
- package/src/element/constructor/bracketed.js +4 -1
- package/src/element/constructor.js +7 -2
- package/src/element/declaration/variable.js +2 -0
- package/src/element/hypothesis.js +71 -54
- package/src/element/metavariable.js +20 -11
- package/src/element/proofAssertion/step.js +0 -6
- package/src/element/section.js +24 -31
- package/src/element/statement.js +11 -1
- package/src/element/substitution/statement.js +23 -21
- package/src/element/substitution.js +24 -0
- package/src/element/term.js +29 -11
- package/src/element/topLevelAssertion.js +8 -2
- package/src/element/type.js +4 -4
- package/src/element/variable.js +42 -14
- package/src/utilities/assignment.js +34 -8
- package/src/utilities/element.js +44 -29
- package/src/utilities/equivalences.js +1 -1
- package/src/utilities/string.js +59 -53
- package/src/utilities/substitutions.js +14 -40
- package/src/utilities/unification.js +60 -60
- package/src/utilities/validation.js +7 -2
|
@@ -34,48 +34,23 @@ async function unifyStepWithRule(step, context) {
|
|
|
34
34
|
}
|
|
35
35
|
return stepUnifiesWithRule;
|
|
36
36
|
}
|
|
37
|
-
async function unifyStepWithReference(step, context) {
|
|
38
|
-
let stepUnifiesWithReference = false;
|
|
39
|
-
const reference = step.getReference();
|
|
40
|
-
if (reference !== null) {
|
|
41
|
-
const stepString = step.getString(), referenceString = reference.getString();
|
|
42
|
-
context.trace(`Unifying the '${stepString}' step with the '${referenceString}' reference...`);
|
|
43
|
-
const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
|
|
44
|
-
if (topLevelAssertion !== null) {
|
|
45
|
-
const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await topLevelAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
|
|
46
|
-
if (stepAndSubproofOrProofAssertionsUnify) {
|
|
47
|
-
stepUnifiesWithReference = true;
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
const metaLevel = context.isMetaLevel();
|
|
51
|
-
if (metaLevel) {
|
|
52
|
-
(0, _context.descend)((context)=>{
|
|
53
|
-
const { MetaLevelAssumption } = _elements.default, metaLevelAssumption = MetaLevelAssumption.fromStep(step, context);
|
|
54
|
-
metaLevelAssumption.validate(context);
|
|
55
|
-
stepUnifiesWithReference = true;
|
|
56
|
-
}, context);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (stepUnifiesWithReference) {
|
|
60
|
-
context.debug(`...unified the '${stepString}' step with the '${referenceString}' reference.`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return stepUnifiesWithReference;
|
|
64
|
-
}
|
|
65
37
|
async function unifyStepWithTopLevelAssertion(step, context) {
|
|
66
38
|
let stepUnifiesWithTopLevelAssertion = false;
|
|
67
39
|
const reference = step.getReference();
|
|
68
40
|
if (reference !== null) {
|
|
69
41
|
const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
|
|
70
42
|
if (topLevelAssertion !== null) {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
43
|
+
const satisfiable = topLevelAssertion.isSatisfiable();
|
|
44
|
+
if (!satisfiable) {
|
|
45
|
+
const stepString = step.getString(), topLevelAssertionString = reference.getString();
|
|
46
|
+
context.trace(`Unifying the '${stepString}' step with the '${topLevelAssertionString}' top level assertion...`);
|
|
47
|
+
const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await topLevelAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
|
|
48
|
+
if (stepAndSubproofOrProofAssertionsUnify) {
|
|
49
|
+
stepUnifiesWithTopLevelAssertion = true;
|
|
50
|
+
}
|
|
51
|
+
if (stepUnifiesWithTopLevelAssertion) {
|
|
52
|
+
context.debug(`...unified the '${stepString}' step with the '${topLevelAssertionString}' top level assertion.`);
|
|
53
|
+
}
|
|
79
54
|
}
|
|
80
55
|
}
|
|
81
56
|
}
|
|
@@ -177,8 +152,34 @@ async function unifyStepAsUnqualifiedSignatureAssertion(step, context) {
|
|
|
177
152
|
}
|
|
178
153
|
return stepUnifiesAsUnqualifiedSignatureAssertion;
|
|
179
154
|
}
|
|
180
|
-
async function
|
|
181
|
-
let
|
|
155
|
+
async function validateStepAsMetaLevelAssumption(step, context) {
|
|
156
|
+
let stepValidatesAsMetaLevelAssumption = false;
|
|
157
|
+
const metaLevel = context.isMetaLevel();
|
|
158
|
+
if (metaLevel) {
|
|
159
|
+
const reference = step.getReference();
|
|
160
|
+
if (reference !== null) {
|
|
161
|
+
const stepString = step.getString(), topLevelAssertion = context.findTopLevelAssertionByReference(reference);
|
|
162
|
+
if (topLevelAssertion === null) {
|
|
163
|
+
context.trace(`Validating the '${stepString}' step as a meta-level assumption...`);
|
|
164
|
+
(0, _context.descend)((context)=>{
|
|
165
|
+
let metaLevelAssumption;
|
|
166
|
+
const { MetaLevelAssumption } = _elements.default;
|
|
167
|
+
metaLevelAssumption = MetaLevelAssumption.fromStep(step, context);
|
|
168
|
+
metaLevelAssumption = metaLevelAssumption.validate(context); ///
|
|
169
|
+
if (metaLevelAssumption !== null) {
|
|
170
|
+
stepValidatesAsMetaLevelAssumption = true;
|
|
171
|
+
}
|
|
172
|
+
}, context);
|
|
173
|
+
if (stepValidatesAsMetaLevelAssumption) {
|
|
174
|
+
context.debug(`...validated the '${stepString}' step as a meta-level assumption.`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return stepValidatesAsMetaLevelAssumption;
|
|
180
|
+
}
|
|
181
|
+
async function unifyStepAsSignatureAssertion(step, context) {
|
|
182
|
+
let stepUnifiesAsSignatureAssertion = false;
|
|
182
183
|
const reference = step.getReference();
|
|
183
184
|
if (reference !== null) {
|
|
184
185
|
const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
|
|
@@ -189,15 +190,15 @@ async function unifyStepAsSignatureAssertionWithReference(step, context) {
|
|
|
189
190
|
context.trace(`Unifying the '${stepString}' step as a signature assertion with the '${referenceString}' reference...`);
|
|
190
191
|
const unifyTopLevelAssertion = await signatureAssertion.unifyTopLevelAssertion(topLevelAssertion, context);
|
|
191
192
|
if (unifyTopLevelAssertion) {
|
|
192
|
-
|
|
193
|
+
stepUnifiesAsSignatureAssertion = true;
|
|
193
194
|
}
|
|
194
|
-
if (
|
|
195
|
+
if (stepUnifiesAsSignatureAssertion) {
|
|
195
196
|
context.debug(`...unified the '${stepString}' step as a signature assertion with the '${referenceString}' reference.`);
|
|
196
197
|
}
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
200
|
}
|
|
200
|
-
return
|
|
201
|
+
return stepUnifiesAsSignatureAssertion;
|
|
201
202
|
}
|
|
202
203
|
async function compareStepWithSubproofOrProofAssertions(step, context) {
|
|
203
204
|
let stepComparesToSubproofOrProofAssertions = false;
|
|
@@ -217,7 +218,6 @@ async function compareStepWithSubproofOrProofAssertions(step, context) {
|
|
|
217
218
|
}
|
|
218
219
|
const unifySteps = [
|
|
219
220
|
unifyStepWithRule,
|
|
220
|
-
unifyStepWithReference,
|
|
221
221
|
unifyStepWithTopLevelAssertion,
|
|
222
222
|
unifyStepWithSignatureAssertion,
|
|
223
223
|
unifyStepAsUnqualifiedEquality,
|
|
@@ -225,8 +225,9 @@ const unifySteps = [
|
|
|
225
225
|
unifyStepAsUnqualifiedTypeAssertion,
|
|
226
226
|
unifyStepAsUnqualifiedPropertyAssertion,
|
|
227
227
|
unifyStepAsUnqualifiedSignatureAssertion,
|
|
228
|
-
|
|
228
|
+
validateStepAsMetaLevelAssumption,
|
|
229
|
+
unifyStepAsSignatureAssertion,
|
|
229
230
|
compareStepWithSubproofOrProofAssertions
|
|
230
231
|
];
|
|
231
232
|
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVzY2VuZCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFJ1bGUoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJ1bGUgPSBjb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHJ1bGUudW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoUmVmZXJlbmNlKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFJlZmVyZW5jZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gICAgICBpZiAobWV0YUxldmVsKSB7XG4gICAgICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IE1ldGFMZXZlbEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBNZXRhTGV2ZWxBc3N1bXB0aW9uLmZyb21TdGVwKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbi52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICAgIHN0ZXBVbmlmaWVzV2l0aFJlZmVyZW5jZSA9IHRydWU7XG4gICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGVwVW5pZmllc1dpdGhSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNXaXRoUmVmZXJlbmNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBzdGVwLmdldFNpZ25hdHVyZUFzc2VydGlvbigpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBhd2FpdCBzaWduYXR1cmVBc3NlcnRpb24udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICBzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5KHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VOcXVhbGlmaWVkSnVkZ2VtZW50KHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IFNpZ25hdHVyZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbldpdGhSZWZlcmVuY2Uoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1NpZ25hdHVyZUFzc2VydGlvbldpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXAuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgICAgICBjb25zdCB1bmlmeVRvcExldmVsQXNzZXJ0aW9uID0gYXdhaXQgc2lnbmF0dXJlQXNzZXJ0aW9uLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh1bmlmeVRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgc3RlcFVuaWZpZXNBc1NpZ25hdHVyZUFzc2VydGlvbldpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb25XaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzU2lnbmF0dXJlQXNzZXJ0aW9uV2l0aFJlZmVyZW5jZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBjb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHN0ZXAuY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpIHtcbiAgICAgIHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcENvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgdW5pZnlTdGVwcyA9IFtcbiAgdW5pZnlTdGVwV2l0aFJ1bGUsXG4gIHVuaWZ5U3RlcFdpdGhSZWZlcmVuY2UsXG4gIHVuaWZ5U3RlcFdpdGhUb3BMZXZlbEFzc2VydGlvbixcbiAgdW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5LFxuICB1bmlmeVN0ZXBBc1VOcXVhbGlmaWVkSnVkZ2VtZW50LFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbldpdGhSZWZlcmVuY2UsXG4gIGNvbXBhcmVTdGVwV2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNcbl07XG4iXSwibmFtZXMiOlsidW5pZnlTdGVwcyIsInVuaWZ5U3RlcFdpdGhSdWxlIiwic3RlcCIsImNvbnRleHQiLCJzdGVwVW5pZmllc1dpdGhSdWxlIiwicmVmZXJlbmNlIiwiZ2V0UmVmZXJlbmNlIiwicnVsZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJzdGVwU3RyaW5nIiwiZ2V0U3RyaW5nIiwicnVsZVN0cmluZyIsInRyYWNlIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5IiwidW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImRlYnVnIiwidW5pZnlTdGVwV2l0aFJlZmVyZW5jZSIsInN0ZXBVbmlmaWVzV2l0aFJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJtZXRhTGV2ZWwiLCJpc01ldGFMZXZlbCIsImRlc2NlbmQiLCJNZXRhTGV2ZWxBc3N1bXB0aW9uIiwiZWxlbWVudHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwiZnJvbVN0ZXAiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RlcFdpdGhUb3BMZXZlbEFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJ1bmlmeVN0ZXBXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5Iiwic3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSIsInVucXVhbGlmaWVkIiwiaXNVbnF1YWxpZmllZCIsIkVxdWFsaXR5Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZXF1YWxpdHkiLCJmcm9tU3RhdGVtZW50IiwidW5pZnlTdGVwQXNVTnF1YWxpZmllZEp1ZGdlbWVudCIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCIsIkp1ZGdlbWVudCIsImp1ZGdlbWVudCIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiIsIlNpZ25hdHVyZUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzU2lnbmF0dXJlQXNzZXJ0aW9uV2l0aFJlZmVyZW5jZSIsInN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb25XaXRoUmVmZXJlbmNlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwiY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXFVYUE7OztlQUFBQTs7O2lFQW5VUTt5QkFFRzs7Ozs7O0FBRXhCLGVBQWVDLGtCQUFrQkMsSUFBSSxFQUFFQyxPQUFPO0lBQzVDLElBQUlDLHNCQUFzQjtJQUUxQixNQUFNQyxZQUFZSCxLQUFLSSxZQUFZO0lBRW5DLElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxPQUFPSixRQUFRSyxtQkFBbUIsQ0FBQ0g7UUFFekMsSUFBSUUsU0FBUyxN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
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVzY2VuZCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFJ1bGUoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJ1bGUgPSBjb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHJ1bGUudW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSB0b3BMZXZlbEFzc2VydGlvbi5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgIGlmICghc2F0aXNmaWFibGUpIHtcbiAgICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBhd2FpdCB0b3BMZXZlbEFzc2VydGlvbi51bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IHN0ZXAuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVU5xdWFsaWZpZWRKdWRnZW1lbnQoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gU2lnbmF0dXJlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlU3RlcEFzTWV0YUxldmVsQXNzdW1wdGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gIGlmIChtZXRhTGV2ZWwpIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgbWV0YS1sZXZlbCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICAgICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuXG4gICAgICAgICAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cztcblxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBNZXRhTGV2ZWxBc3N1bXB0aW9uLmZyb21TdGVwKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IG1ldGFMZXZlbEFzc3VtcHRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgICAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIG1ldGEtbGV2ZWwgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICAgICAgY29uc3QgdW5pZnlUb3BMZXZlbEFzc2VydGlvbiA9IGF3YWl0IHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeVRvcExldmVsQXNzZXJ0aW9uKHRvcExldmVsQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAodW5pZnlUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICAgIHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhcmVTdGVwV2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcENvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBzdGVwLmNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKSB7XG4gICAgICBzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RlcHMgPSBbXG4gIHVuaWZ5U3RlcFdpdGhSdWxlLFxuICB1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRFcXVhbGl0eSxcbiAgdW5pZnlTdGVwQXNVTnF1YWxpZmllZEp1ZGdlbWVudCxcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGVwQXNNZXRhTGV2ZWxBc3N1bXB0aW9uLFxuICB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbixcbiAgY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0ZXBzIiwidW5pZnlTdGVwV2l0aFJ1bGUiLCJzdGVwIiwiY29udGV4dCIsInN0ZXBVbmlmaWVzV2l0aFJ1bGUiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJydWxlU3RyaW5nIiwidHJhY2UiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZGVidWciLCJ1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJzdGVwVW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJzYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJnZXRTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkiLCJzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5IiwidW5xdWFsaWZpZWQiLCJpc1VucXVhbGlmaWVkIiwiRXF1YWxpdHkiLCJlbGVtZW50cyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImVxdWFsaXR5IiwiZnJvbVN0YXRlbWVudCIsInVuaWZ5U3RlcEFzVU5xdWFsaWZpZWRKdWRnZW1lbnQiLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24iLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0ZXBBc01ldGFMZXZlbEFzc3VtcHRpb24iLCJzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsIiwiaXNNZXRhTGV2ZWwiLCJkZXNjZW5kIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsIk1ldGFMZXZlbEFzc3VtcHRpb24iLCJmcm9tU3RlcCIsInZhbGlkYXRlIiwidW5pZnlTdGVwQXNTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZVN0cmluZyIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwiY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXFVYUE7OztlQUFBQTs7O2lFQW5VUTt5QkFFRzs7Ozs7O0FBRXhCLGVBQWVDLGtCQUFrQkMsSUFBSSxFQUFFQyxPQUFPO0lBQzVDLElBQUlDLHNCQUFzQjtJQUUxQixNQUFNQyxZQUFZSCxLQUFLSSxZQUFZO0lBRW5DLElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxPQUFPSixRQUFRSyxtQkFBbUIsQ0FBQ0g7UUFFekMsSUFBSUUsU0FBUyxNQUFNO1lBQ2pCLE1BQU1FLGFBQWFQLEtBQUtRLFNBQVMsSUFDM0JDLGFBQWFKLEtBQUtHLFNBQVM7WUFFakNQLFFBQVFTLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUgsV0FBVyxpQkFBaUIsRUFBRUUsV0FBVyxTQUFTLENBQUM7WUFFbEYsTUFBTUUsNEJBQTRCVixRQUFRVyw0QkFBNEIs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
|
|
@@ -18,6 +18,7 @@ _export(exports, {
|
|
|
18
18
|
});
|
|
19
19
|
const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
20
20
|
const _context = require("./context");
|
|
21
|
+
const _string = require("./string");
|
|
21
22
|
const _instance = require("../utilities/instance");
|
|
22
23
|
function _interop_require_default(obj) {
|
|
23
24
|
return obj && obj.__esModule ? obj : {
|
|
@@ -34,9 +35,10 @@ function validateTermAsVariable(term, context, validateForwards) {
|
|
|
34
35
|
context.trace(`Validating the '${termString}' term as a variable...`);
|
|
35
36
|
variable = variable.validate(context);
|
|
36
37
|
if (variable !== null) {
|
|
37
|
-
const type = variable.getType(), typeString = type.getString();
|
|
38
|
-
context.trace(`Setting the '${termString}' term's type to the '${typeString}' type.`);
|
|
38
|
+
const type = variable.getType(), typeString = type.getString(), provisional = variable.isProvisional(), provisionallyString = (0, _string.provisionallyStringFromProvisional)(provisional);
|
|
39
|
+
context.trace(`Setting the '${termString}' term's type to the '${typeString}' type${provisionallyString}.`);
|
|
39
40
|
term.setType(type);
|
|
41
|
+
term.setProvisional(provisional);
|
|
40
42
|
const validatesForwards = validateForwards(term);
|
|
41
43
|
if (validatesForwards) {
|
|
42
44
|
termValidatesAsVariable = true;
|
|
@@ -286,4 +288,4 @@ const validateStatements = [
|
|
|
286
288
|
validateStatementAsSignatureAssertion
|
|
287
289
|
];
|
|
288
290
|
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cztcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS5gKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHModGVybSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNGb3J3YXJkcykge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICB0ZXJtVW5pZmllcyA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBtZXRhdmFyaWFibGU7XG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBzdHJpY3QgPSB0cnVlOyAgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUudmFsaWRhdGUoc3RyaWN0LCBjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcblxuICAgICAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgICAgIGxldCBzdWJzdGl0dXRpb247XG5cbiAgICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBmYWxzZTtcblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKTtcblxuICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBlcXVhbGl0eTtcblxuICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHkudmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBsZXQganVkZ2VtZW50O1xuXG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cztcblxuICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudC52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IHR5cGVBc3NlcnRpb247XG5cbiAgdHlwZUFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgZGVmaW5lZEFzc2VydGlvbjtcblxuICBkZWZpbmVkQXNzZXJ0aW9uID0gRGVmaW5lZEFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbjtcblxuICBwcm9wZXJ0eUFzc2VydGlvbiA9IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbiA9IENvbnRhaW5lZEFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1NpZ25hdHVyZUFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb247XG5cbiAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gU2lnbmF0dXJlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJWYXJpYWJsZSIsImVsZW1lbnRzIiwidmFyaWFibGUiLCJmcm9tVGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlIiwidHlwZSIsImdldFR5cGUiLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXMiLCJjaG9vc2UiLCJ1bmlmeVRlcm0iLCJjb21taXQiLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdHJpY3QiLCJUZXJtU3Vic3RpdHV0aW9uIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwiY29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXMiLCJkZXNjZW5kIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJFcXVhbGl0eSIsImVxdWFsaXR5IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwiSnVkZ2VtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiRGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NpZ25hdHVyZUFzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJl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
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIH0gZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cztcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gdmFyaWFibGUuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBTZXR0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSdzIHR5cGUgdG8gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlJHtwcm92aXNpb25hbGx5U3RyaW5nfS5gKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVzRm9yd2FyZHMgPSB2YWxpZGF0ZUZvcndhcmRzKHRlcm0pO1xuXG4gICAgICBpZiAodmFsaWRhdGVzRm9yd2FyZHMpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBhcyBhIHZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGxldCB0ZXJtVW5pZmllcztcblxuICAgIGNob29zZSgoY29udGV4dCkgPT4ge1xuICAgICAgdGVybVVuaWZpZXMgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cztcblxuICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3Qgc3RyaWN0ID0gdHJ1ZTsgIC8vL1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0cmljdCwgY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuXG4gICAgICBsZXQgc3Vic3RpdHV0aW9uO1xuXG4gICAgICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gZmFsc2U7XG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgc3RhdGVtZW50VW5pZmllcyA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCk7XG5cbiAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cztcblxuICBsZXQgZXF1YWxpdHk7XG5cbiAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgbGV0IGp1ZGdlbWVudDtcblxuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHM7XG5cbiAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnQudmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCB0eXBlQXNzZXJ0aW9uO1xuXG4gIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IGRlZmluZWRBc3NlcnRpb247XG5cbiAgZGVmaW5lZEFzc2VydGlvbiA9IERlZmluZWRBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgcHJvcGVydHlBc3NlcnRpb247XG5cbiAgcHJvcGVydHlBc3NlcnRpb24gPSBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbjtcblxuICBjb250YWluZWRBc3NlcnRpb24gPSBDb250YWluZWRBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uO1xuXG4gIHNpZ25hdHVyZUFzc2VydGlvbiA9IFNpZ25hdHVyZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NpZ25hdHVyZUFzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwiVmFyaWFibGUiLCJlbGVtZW50cyIsInZhcmlhYmxlIiwiZnJvbVRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwidHlwZVN0cmluZyIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmciLCJwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwidmFsaWRhdGVzRm9yd2FyZHMiLCJkZWJ1ZyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJzb21lIiwiY29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllcyIsImNob29zZSIsInVuaWZ5VGVybSIsImNvbW1pdCIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0cmljdCIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwic3RhdGVtZW50VW5pZmllcyIsImRlc2NlbmQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsIkVxdWFsaXR5IiwiZXF1YWxpdHkiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZZYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7aUVBcllRO3lCQUVXO3dCQUNtQjswQkFDNkI7Ozs7OztBQUVoRixTQUFTQyx1QkFBdUJDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxnQkFBZ0I7SUFDN0QsSUFBSUMsMEJBQTBCO0lBRTlCLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGlCQUFRO0lBRTdCLElBQUlDO0lBRUpBLFdBQVdGLFNBQVNHLFFBQVEsQ0FBQ1AsTUFBTUM7SUFFbkMsSUFBSUssYUFBYSxNQUFNO1FBQ3JCLE1BQU1FLGFBQWFSLEtBQUtTLFNBQVM7UUFFakNSLFFBQVFTLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHVCQUF1QixDQUFDO1FBRXBFRixXQUFXQSxTQUFTSyxRQUFRLENBQUNWO1FBRTdCLElBQUlLLGFBQWEsTUFBTTtZQUNyQixNQUFNTSxPQUFPTixTQUFTTyxPQUFPLElBQ3ZCQyxhQUFhRixLQUFLSCxTQUFTLElBQzNCTSxjQUFjVCxTQUFTVSxhQUFhLElBQ3BDQyxzQkFBc0JDLElBQUFBLDBDQUFrQyxFQUFDSDtZ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
|
package/package.json
CHANGED
package/src/context/bounded.js
CHANGED
|
@@ -6,7 +6,7 @@ import Context from "../context";
|
|
|
6
6
|
|
|
7
7
|
import { mergeEquivalences, equivalencesFromEquality, separateGroundedTermsAndDefinedVariables } from "../utilities/equivalences";
|
|
8
8
|
|
|
9
|
-
const { last, filter } = arrayUtilities;
|
|
9
|
+
const { last, clear, filter } = arrayUtilities;
|
|
10
10
|
|
|
11
11
|
class BoundedContext extends Context {
|
|
12
12
|
constructor(context, assignments, equivalences, declaredVariables, declaredJudgements, metaLevelAssumptions, subproofOrProofAssertions) {
|
|
@@ -118,9 +118,9 @@ class BoundedContext extends Context {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
isMetaLevel() {
|
|
121
|
-
let metaLevel
|
|
121
|
+
let metaLevel;
|
|
122
122
|
|
|
123
|
-
if (this.
|
|
123
|
+
if (this.metaLevelAssumptions !== null) {
|
|
124
124
|
metaLevel = true;
|
|
125
125
|
} else {
|
|
126
126
|
const context = this.getContext();
|
|
@@ -135,18 +135,18 @@ class BoundedContext extends Context {
|
|
|
135
135
|
const context = this, ///
|
|
136
136
|
equalityString = equality.getString();
|
|
137
137
|
|
|
138
|
-
context.trace(`Adding the '${equalityString}' equality to the
|
|
138
|
+
context.trace(`Adding the '${equalityString}' equality to the bounded context...`);
|
|
139
139
|
|
|
140
140
|
const equalityRelfexive = equality.isReflexive();
|
|
141
141
|
|
|
142
142
|
if (!equalityRelfexive) {
|
|
143
|
-
const
|
|
143
|
+
const equivalences = equivalencesFromEquality(equality, context);
|
|
144
144
|
|
|
145
|
-
this.equivalences = mergeEquivalences(this.equivalences,
|
|
145
|
+
this.equivalences = mergeEquivalences(this.equivalences, equivalences, context);
|
|
146
146
|
|
|
147
|
-
context.debug(`...added the '${equalityString}' equality to the
|
|
147
|
+
context.debug(`...added the '${equalityString}' equality to the bounded context.`);
|
|
148
148
|
} else {
|
|
149
|
-
context.debug(`The reflexive '${equalityString}' equality has not been added to the
|
|
149
|
+
context.debug(`The reflexive '${equalityString}' equality has not been added to the bounded context.`);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -160,28 +160,30 @@ class BoundedContext extends Context {
|
|
|
160
160
|
this.assignments.forEach((assignment) => {
|
|
161
161
|
assignment(context);
|
|
162
162
|
});
|
|
163
|
+
|
|
164
|
+
clear(this.assignments);
|
|
163
165
|
}
|
|
164
166
|
|
|
165
167
|
addDeclaredVariable(declaredVariable) {
|
|
166
168
|
const context = this, ///
|
|
167
169
|
declaredVariableString = declaredVariable.getString();
|
|
168
170
|
|
|
169
|
-
context.trace(`Adding the '${declaredVariableString}' declared variable to the
|
|
171
|
+
context.trace(`Adding the '${declaredVariableString}' declared variable to the bounded context...`);
|
|
170
172
|
|
|
171
173
|
this.declaredVariables.push(declaredVariable);
|
|
172
174
|
|
|
173
|
-
context.debug(`...added the '${declaredVariableString}' declared variable to the
|
|
175
|
+
context.debug(`...added the '${declaredVariableString}' declared variable to the bounded context.`);
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
addDeclaredJudgement(declaredJudgement) {
|
|
177
179
|
const context = this, ///
|
|
178
180
|
declaredJudgementString = declaredJudgement.getString();
|
|
179
181
|
|
|
180
|
-
context.trace(`Adding the '${declaredJudgementString}' declared judgement to the
|
|
182
|
+
context.trace(`Adding the '${declaredJudgementString}' declared judgement to the bounded context...`);
|
|
181
183
|
|
|
182
184
|
this.declaredJudgements.push(declaredJudgement);
|
|
183
185
|
|
|
184
|
-
context.debug(`...added the '${declaredJudgementString}' declared judgement to the
|
|
186
|
+
context.debug(`...added the '${declaredJudgementString}' declared judgement to the bounded context.`);
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
addMetaLevelAssumption(metaLevelAssumption) {
|
|
@@ -195,7 +197,7 @@ class BoundedContext extends Context {
|
|
|
195
197
|
metaLevelAssumptionA = metaLevelAssumption, ///
|
|
196
198
|
metaLevelAssumptionString = metaLevelAssumption.getString();
|
|
197
199
|
|
|
198
|
-
context.trace(`Adding the '${metaLevelAssumptionString}' meta-level assumption to the
|
|
200
|
+
context.trace(`Adding the '${metaLevelAssumptionString}' meta-level assumption to the bounded context...`);
|
|
199
201
|
|
|
200
202
|
const metaLevelAssumptionB = this.metaLevelAssumptions.find((metaLevelAssumption) => {
|
|
201
203
|
const metaLevelAssumptionB = metaLevelAssumption, ///
|
|
@@ -207,23 +209,23 @@ class BoundedContext extends Context {
|
|
|
207
209
|
}) || null;
|
|
208
210
|
|
|
209
211
|
if (metaLevelAssumptionB !== null) {
|
|
210
|
-
context.debug(`The '${metaLevelAssumptionString}' metaLevelAssumption has already been added to the
|
|
212
|
+
context.debug(`The '${metaLevelAssumptionString}' metaLevelAssumption has already been added to the bounded context.`);
|
|
211
213
|
} else {
|
|
212
214
|
this.metaLevelAssumptions.push(metaLevelAssumption);
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
context.debug(`...added the '${metaLevelAssumptionString}' meta-level assumption to the
|
|
217
|
+
context.debug(`...added the '${metaLevelAssumptionString}' meta-level assumption to the bounded context.`);
|
|
216
218
|
}
|
|
217
219
|
|
|
218
220
|
addSubproofOrProofAssertion(subproofOrProofAssertion) {
|
|
219
221
|
const context = this, ///
|
|
220
222
|
subproofOrProofAssertionString = subproofOrProofAssertion.getString();
|
|
221
223
|
|
|
222
|
-
context.trace(`Adding the '${subproofOrProofAssertionString}' subproof or proof assertion to the
|
|
224
|
+
context.trace(`Adding the '${subproofOrProofAssertionString}' subproof or proof assertion to the bounded context...`);
|
|
223
225
|
|
|
224
226
|
this.subproofOrProofAssertions.push(subproofOrProofAssertion);
|
|
225
227
|
|
|
226
|
-
context.debug(`...added the '${subproofOrProofAssertionString}' subproof or proof assertion to the
|
|
228
|
+
context.debug(`...added the '${subproofOrProofAssertionString}' subproof or proof assertion to the bounded context.`);
|
|
227
229
|
}
|
|
228
230
|
|
|
229
231
|
compareTermAndPropertyRelation(term, propertyRelation) {
|
|
@@ -670,36 +670,18 @@ export default class NominalFileContext extends FileContext {
|
|
|
670
670
|
return statement;
|
|
671
671
|
}
|
|
672
672
|
|
|
673
|
-
findSubstitutionByVariableNode(variableNode) {
|
|
674
|
-
const substitution = null;
|
|
675
|
-
|
|
676
|
-
return substitution;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
673
|
findMetavariableByMetavariableNode(metavariableNode) {
|
|
680
674
|
const metavariable = null;
|
|
681
675
|
|
|
682
676
|
return metavariable;
|
|
683
677
|
}
|
|
684
678
|
|
|
685
|
-
findSubstitutionByMetavariableNode(metavariableNode) {
|
|
686
|
-
const substitution = null;
|
|
687
|
-
|
|
688
|
-
return substitution;
|
|
689
|
-
}
|
|
690
|
-
|
|
691
679
|
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
692
680
|
const substitution = null;
|
|
693
681
|
|
|
694
682
|
return substitution;
|
|
695
683
|
}
|
|
696
684
|
|
|
697
|
-
findSimpleSubstitutionByMetavariableNode(metavariableNode) {
|
|
698
|
-
const simpleSubstitution = null;
|
|
699
|
-
|
|
700
|
-
return simpleSubstitution;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
685
|
findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode) {
|
|
704
686
|
const metaLevelAssumption = null;
|
|
705
687
|
|
package/src/context/mnemic.js
CHANGED
|
@@ -637,13 +637,6 @@ export default class MnemicContext extends Context {
|
|
|
637
637
|
return metavariablenPresent;
|
|
638
638
|
}
|
|
639
639
|
|
|
640
|
-
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
641
|
-
const substitution = this.findSubstitutionBySubstitutionNode(substitutionNode),
|
|
642
|
-
substitutionPresent = (substitution !== null);
|
|
643
|
-
|
|
644
|
-
return substitutionPresent;
|
|
645
|
-
}
|
|
646
|
-
|
|
647
640
|
isPropertyRelationresentByPropertyRelationNode(propertyRelationNode) {
|
|
648
641
|
const propertyRelation = this.findPropertyRelationByPropertyRelationNode(propertyRelationNode),
|
|
649
642
|
propertyRelationresent = (propertyRelation !== null);
|