occam-verify-cli 1.0.956 → 1.0.973
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 +11 -7
- package/lib/context.js +17 -5
- package/lib/element/assertion/signature.js +17 -19
- package/lib/element/assertion/subproof.js +36 -39
- package/lib/element/assertion/type.js +20 -1
- package/lib/element/assumption/metaLevel.js +18 -17
- package/lib/element/assumption.js +52 -3
- package/lib/element/combinator.js +10 -12
- package/lib/element/conclusion.js +33 -33
- package/lib/element/constructor.js +7 -11
- package/lib/element/deduction.js +33 -33
- package/lib/element/equivalence.js +11 -7
- package/lib/element/hypothesis.js +45 -19
- package/lib/element/judgement.js +1 -1
- package/lib/element/label.js +9 -11
- package/lib/element/proofAssertion/premise.js +98 -87
- package/lib/element/proofAssertion/step.js +27 -27
- package/lib/element/proofAssertion/supposition.js +99 -88
- package/lib/element/proofAssertion.js +3 -3
- package/lib/element/reference.js +30 -38
- package/lib/element/signature.js +38 -47
- package/lib/element/statement.js +18 -58
- package/lib/element/substitution/frame.js +34 -42
- package/lib/element/substitution/reference.js +12 -13
- package/lib/element/substitution/statement.js +26 -31
- package/lib/element/substitution/term.js +32 -37
- package/lib/element/term.js +2 -2
- package/lib/element/topLevelAssertion/axiom.js +33 -34
- package/lib/element/topLevelAssertion.js +30 -7
- package/lib/element/topLevelMetaAssertion.js +2 -2
- package/lib/process/discharge.js +38 -0
- package/lib/process/unification.js +228 -0
- package/lib/process/unify.js +9 -5
- package/lib/process/validation.js +291 -0
- package/lib/utilities/context.js +69 -105
- package/lib/utilities/element.js +2 -4
- package/lib/utilities/string.js +4 -4
- package/package.json +1 -1
- package/src/context/bounded.js +19 -7
- package/src/context.js +26 -6
- package/src/element/assertion/signature.js +21 -26
- package/src/element/assertion/subproof.js +43 -45
- package/src/element/assertion/type.js +30 -1
- package/src/element/assumption/metaLevel.js +26 -22
- package/src/element/assumption.js +80 -2
- package/src/element/combinator.js +11 -14
- package/src/element/conclusion.js +38 -37
- package/src/element/constructor.js +8 -13
- package/src/element/deduction.js +38 -37
- package/src/element/equivalence.js +17 -13
- package/src/element/hypothesis.js +59 -19
- package/src/element/judgement.js +1 -1
- package/src/element/label.js +10 -12
- package/src/element/proofAssertion/premise.js +123 -107
- package/src/element/proofAssertion/step.js +29 -29
- package/src/element/proofAssertion/supposition.js +124 -108
- package/src/element/proofAssertion.js +2 -2
- package/src/element/reference.js +36 -47
- package/src/element/signature.js +42 -53
- package/src/element/statement.js +18 -89
- package/src/element/substitution/frame.js +45 -58
- package/src/element/substitution/reference.js +13 -16
- package/src/element/substitution/statement.js +27 -34
- package/src/element/substitution/term.js +37 -46
- package/src/element/term.js +1 -1
- package/src/element/topLevelAssertion/axiom.js +43 -45
- package/src/element/topLevelAssertion.js +42 -6
- package/src/element/topLevelMetaAssertion.js +2 -2
- package/src/process/discharge.js +33 -0
- package/src/{utilities → process}/unification.js +21 -27
- package/src/process/unify.js +9 -5
- package/src/{utilities → process}/validation.js +2 -2
- package/src/utilities/context.js +77 -128
- package/src/utilities/element.js +2 -5
- package/src/utilities/string.js +6 -6
- package/lib/context/ephemeral.js +0 -28
- package/lib/context/synoptic.js +0 -255
- package/lib/utilities/unification.js +0 -233
- package/lib/utilities/validation.js +0 -291
- package/src/context/ephemeral.js +0 -17
- package/src/context/synoptic.js +0 -361
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get validateStatements () {
|
|
13
|
-
return validateStatements;
|
|
14
|
-
},
|
|
15
|
-
get validateTerms () {
|
|
16
|
-
return validateTerms;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
20
|
-
const _context = require("./context");
|
|
21
|
-
const _string = require("./string");
|
|
22
|
-
const _instance = require("../utilities/instance");
|
|
23
|
-
function _interop_require_default(obj) {
|
|
24
|
-
return obj && obj.__esModule ? obj : {
|
|
25
|
-
default: obj
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function validateTermAsVariable(term, context, validateForwards) {
|
|
29
|
-
let termValidatesAsVariable = false;
|
|
30
|
-
const { Variable } = _elements.default;
|
|
31
|
-
let variable;
|
|
32
|
-
variable = Variable.fromTerm(term, context);
|
|
33
|
-
if (variable !== null) {
|
|
34
|
-
const termString = term.getString();
|
|
35
|
-
context.trace(`Validating the '${termString}' term as a variable...`);
|
|
36
|
-
variable = variable.validate(context);
|
|
37
|
-
if (variable !== null) {
|
|
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}.`);
|
|
40
|
-
term.setType(type);
|
|
41
|
-
term.setProvisional(provisional);
|
|
42
|
-
const validatesForwards = validateForwards(term, context);
|
|
43
|
-
if (validatesForwards) {
|
|
44
|
-
termValidatesAsVariable = true;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (termValidatesAsVariable) {
|
|
48
|
-
context.debug(`...validated the '${termString}' term as a variable.`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return termValidatesAsVariable;
|
|
52
|
-
}
|
|
53
|
-
function unifyTermWithConstructors(term, context, validateForwards) {
|
|
54
|
-
let termUnifiesWithConstructors;
|
|
55
|
-
const constructors = context.getConstructors();
|
|
56
|
-
termUnifiesWithConstructors = constructors.some((constructor)=>{
|
|
57
|
-
let termUnifiesWithConstructor = false;
|
|
58
|
-
(0, _context.choose)((context)=>{
|
|
59
|
-
const termUnifies = constructor.unifyTerm(term, context, validateForwards);
|
|
60
|
-
if (termUnifies) {
|
|
61
|
-
termUnifiesWithConstructor = true;
|
|
62
|
-
context.commit();
|
|
63
|
-
}
|
|
64
|
-
}, context);
|
|
65
|
-
if (termUnifiesWithConstructor) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return termUnifiesWithConstructors;
|
|
70
|
-
}
|
|
71
|
-
function unifyTermWithBracketedConstructor(term, context, validateForwards) {
|
|
72
|
-
let termUnifiesWithBracketedConstructor;
|
|
73
|
-
const bracketedConstructor = (0, _instance.bracketedConstructorFromNothing)();
|
|
74
|
-
termUnifiesWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, validateForwards);
|
|
75
|
-
return termUnifiesWithBracketedConstructor;
|
|
76
|
-
}
|
|
77
|
-
function validateStatementAsMetavariable(statement, context) {
|
|
78
|
-
let statementValidatesAsMetavariable = false;
|
|
79
|
-
const { Metavariable } = _elements.default;
|
|
80
|
-
let metavariable;
|
|
81
|
-
metavariable = Metavariable.fromStatement(statement, context);
|
|
82
|
-
if (metavariable !== null) {
|
|
83
|
-
const statementString = statement.getString();
|
|
84
|
-
context.trace(`Validating the '${statementString}' statement as a metavariable...`);
|
|
85
|
-
const strict = true; ///
|
|
86
|
-
metavariable = metavariable.validate(strict, context);
|
|
87
|
-
if (metavariable !== null) {
|
|
88
|
-
const { TermSubstitution, FrameSubstitution } = _elements.default;
|
|
89
|
-
let substitution;
|
|
90
|
-
const termSubstitution = TermSubstitution.fromStatement(statement, context), frameSubstitution = FrameSubstitution.fromStatement(statement, context);
|
|
91
|
-
substitution = termSubstitution || frameSubstitution;
|
|
92
|
-
if (substitution === null) {
|
|
93
|
-
statementValidatesAsMetavariable = true;
|
|
94
|
-
} else {
|
|
95
|
-
substitution = substitution.validate(context); ///
|
|
96
|
-
if (substitution !== null) {
|
|
97
|
-
statementValidatesAsMetavariable = true;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (statementValidatesAsMetavariable) {
|
|
102
|
-
context.debug(`...validated the '${statementString}' statement as a metavariable.`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return statementValidatesAsMetavariable;
|
|
106
|
-
}
|
|
107
|
-
function unifyStatementWithCombinators(statement, context) {
|
|
108
|
-
let statementUnifiesWithCombinators = false;
|
|
109
|
-
const combinators = context.getCombinators();
|
|
110
|
-
combinators.some((combinator)=>{
|
|
111
|
-
let statementUnifies;
|
|
112
|
-
(0, _context.descend)((context)=>{
|
|
113
|
-
statementUnifies = combinator.unifyStatement(statement, context);
|
|
114
|
-
}, context);
|
|
115
|
-
if (statementUnifies) {
|
|
116
|
-
statementUnifiesWithCombinators = true;
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
return statementUnifiesWithCombinators;
|
|
121
|
-
}
|
|
122
|
-
function unifyStatementWithBracketedCombinator(statement, context) {
|
|
123
|
-
let statementUnifiesWithBracketedCombinator;
|
|
124
|
-
const bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)();
|
|
125
|
-
statementUnifiesWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, context);
|
|
126
|
-
return statementUnifiesWithBracketedCombinator;
|
|
127
|
-
}
|
|
128
|
-
function validateStatementAsEquality(statement, context) {
|
|
129
|
-
let statementValidatesAsEquality = false;
|
|
130
|
-
const { Equality } = _elements.default;
|
|
131
|
-
let equality;
|
|
132
|
-
equality = Equality.fromStatement(statement, context);
|
|
133
|
-
if (equality !== null) {
|
|
134
|
-
const statementString = statement.getString();
|
|
135
|
-
context.trace(`Validating the '${statementString}' statement as an equality...`);
|
|
136
|
-
equality = equality.validate(context); ///
|
|
137
|
-
if (equality !== null) {
|
|
138
|
-
statementValidatesAsEquality = true;
|
|
139
|
-
}
|
|
140
|
-
if (statementValidatesAsEquality) {
|
|
141
|
-
context.debug(`...validated the '${statementString}' statement as an equality.`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return statementValidatesAsEquality;
|
|
145
|
-
}
|
|
146
|
-
function validateStatementAsJudgement(statement, context) {
|
|
147
|
-
let validatesStatementAsJudgement = false;
|
|
148
|
-
let judgement;
|
|
149
|
-
const { Judgement } = _elements.default;
|
|
150
|
-
judgement = Judgement.fromStatement(statement, context);
|
|
151
|
-
if (judgement !== null) {
|
|
152
|
-
const statementString = statement.getString();
|
|
153
|
-
context.trace(`Validating the '${statementString}' statement as a judgement...`);
|
|
154
|
-
judgement = judgement.validate(context); ///
|
|
155
|
-
if (judgement !== null) {
|
|
156
|
-
validatesStatementAsJudgement = true;
|
|
157
|
-
}
|
|
158
|
-
if (validatesStatementAsJudgement) {
|
|
159
|
-
context.debug(`...validated the '${statementString}' statement as a judgement.`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return validatesStatementAsJudgement;
|
|
163
|
-
}
|
|
164
|
-
function validateStatementAsTypeAssertion(statement, context) {
|
|
165
|
-
let validatesStatementAsTypeAssertion = false;
|
|
166
|
-
const { TypeAssertion } = _elements.default;
|
|
167
|
-
let typeAssertion;
|
|
168
|
-
typeAssertion = TypeAssertion.fromStatement(statement, context);
|
|
169
|
-
if (typeAssertion !== null) {
|
|
170
|
-
const statementString = statement.getString();
|
|
171
|
-
context.trace(`Validating the '${statementString}' statement as a type assertion...`);
|
|
172
|
-
typeAssertion = typeAssertion.validate(context); ///
|
|
173
|
-
if (typeAssertion !== null) {
|
|
174
|
-
validatesStatementAsTypeAssertion = true;
|
|
175
|
-
}
|
|
176
|
-
if (validatesStatementAsTypeAssertion) {
|
|
177
|
-
context.debug(`...validated the '${statementString}' statement as a type assertion.`);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return validatesStatementAsTypeAssertion;
|
|
181
|
-
}
|
|
182
|
-
function validateStatementAsDefinedAssertion(statement, context) {
|
|
183
|
-
let validatesStatementAsDefinedAssertion = false;
|
|
184
|
-
const { DefinedAssertion } = _elements.default;
|
|
185
|
-
let definedAssertion;
|
|
186
|
-
definedAssertion = DefinedAssertion.fromStatement(statement, context);
|
|
187
|
-
if (definedAssertion !== null) {
|
|
188
|
-
const statementString = statement.getString();
|
|
189
|
-
context.trace(`Validating the '${statementString}' statement as a defined assertion...`);
|
|
190
|
-
definedAssertion = definedAssertion.validate(context); ///
|
|
191
|
-
if (definedAssertion !== null) {
|
|
192
|
-
validatesStatementAsDefinedAssertion = true;
|
|
193
|
-
}
|
|
194
|
-
if (validatesStatementAsDefinedAssertion) {
|
|
195
|
-
context.debug(`...validated the '${statementString}' statement as a defined assertion.`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return validatesStatementAsDefinedAssertion;
|
|
199
|
-
}
|
|
200
|
-
function validateStatementAsPropertyAssertion(statement, context) {
|
|
201
|
-
let statementValidatesAsPropertyAssertion = false;
|
|
202
|
-
const { PropertyAssertion } = _elements.default;
|
|
203
|
-
let propertyAssertion;
|
|
204
|
-
propertyAssertion = PropertyAssertion.fromStatement(statement, context);
|
|
205
|
-
if (propertyAssertion !== null) {
|
|
206
|
-
const statementString = statement.getString();
|
|
207
|
-
context.trace(`Validating the '${statementString}' statement as a property assertion...`);
|
|
208
|
-
propertyAssertion = propertyAssertion.validate(context); ///
|
|
209
|
-
if (propertyAssertion !== null) {
|
|
210
|
-
statementValidatesAsPropertyAssertion = true;
|
|
211
|
-
}
|
|
212
|
-
if (statementValidatesAsPropertyAssertion) {
|
|
213
|
-
context.debug(`...validated the '${statementString}' statement as a property assertion.`);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return statementValidatesAsPropertyAssertion;
|
|
217
|
-
}
|
|
218
|
-
function validateStatementAsSubproofAssertion(statement, context) {
|
|
219
|
-
let statementValidatesAsSubproofAssertion = false;
|
|
220
|
-
const { SubproofAssertion } = _elements.default;
|
|
221
|
-
let subproofAssertion;
|
|
222
|
-
subproofAssertion = SubproofAssertion.fromStatement(statement, context);
|
|
223
|
-
if (subproofAssertion !== null) {
|
|
224
|
-
const statementString = statement.getString();
|
|
225
|
-
context.trace(`Validating the '${statementString}' statement as a subproof assertion...`);
|
|
226
|
-
subproofAssertion = subproofAssertion.validate(context); ///
|
|
227
|
-
if (subproofAssertion !== null) {
|
|
228
|
-
statementValidatesAsSubproofAssertion = true;
|
|
229
|
-
}
|
|
230
|
-
if (statementValidatesAsSubproofAssertion) {
|
|
231
|
-
context.debug(`...validated the '${statementString}' statement as a subproof assertion.`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
return statementValidatesAsSubproofAssertion;
|
|
235
|
-
}
|
|
236
|
-
function validateStatementAsContainedAssertion(statement, context) {
|
|
237
|
-
let validatesStatementAsContainedAssertion = false;
|
|
238
|
-
const { ContainedAssertion } = _elements.default;
|
|
239
|
-
let containedAssertion;
|
|
240
|
-
containedAssertion = ContainedAssertion.fromStatement(statement, context);
|
|
241
|
-
if (containedAssertion !== null) {
|
|
242
|
-
const statementString = statement.getString();
|
|
243
|
-
context.trace(`Validating the '${statementString}' statement as a contained assertion...`);
|
|
244
|
-
containedAssertion = containedAssertion.validate(context); ///
|
|
245
|
-
if (containedAssertion !== null) {
|
|
246
|
-
validatesStatementAsContainedAssertion = true;
|
|
247
|
-
}
|
|
248
|
-
if (validatesStatementAsContainedAssertion) {
|
|
249
|
-
context.debug(`...validated the '${statementString}' statement as a contained assertion.`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
return validatesStatementAsContainedAssertion;
|
|
253
|
-
}
|
|
254
|
-
function validateStatementAsSignatureAssertion(statement, context) {
|
|
255
|
-
let validatesAStatementsSignatureAssertion = false;
|
|
256
|
-
const { SignatureAssertion } = _elements.default;
|
|
257
|
-
let signatureAssertion;
|
|
258
|
-
signatureAssertion = SignatureAssertion.fromStatement(statement, context);
|
|
259
|
-
if (signatureAssertion !== null) {
|
|
260
|
-
const statementString = statement.getString();
|
|
261
|
-
context.trace(`Validating the '${statementString}' statement as a signature assertion...`);
|
|
262
|
-
signatureAssertion = signatureAssertion.validate(context); ///
|
|
263
|
-
if (signatureAssertion !== null) {
|
|
264
|
-
validatesAStatementsSignatureAssertion = true;
|
|
265
|
-
}
|
|
266
|
-
if (validatesAStatementsSignatureAssertion) {
|
|
267
|
-
context.debug(`...validated the '${statementString}' statement as a signature assertion.`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return validatesAStatementsSignatureAssertion;
|
|
271
|
-
}
|
|
272
|
-
const validateTerms = [
|
|
273
|
-
validateTermAsVariable,
|
|
274
|
-
unifyTermWithConstructors,
|
|
275
|
-
unifyTermWithBracketedConstructor
|
|
276
|
-
];
|
|
277
|
-
const validateStatements = [
|
|
278
|
-
validateStatementAsMetavariable,
|
|
279
|
-
unifyStatementWithCombinators,
|
|
280
|
-
unifyStatementWithBracketedCombinator,
|
|
281
|
-
validateStatementAsEquality,
|
|
282
|
-
validateStatementAsJudgement,
|
|
283
|
-
validateStatementAsTypeAssertion,
|
|
284
|
-
validateStatementAsDefinedAssertion,
|
|
285
|
-
validateStatementAsPropertyAssertion,
|
|
286
|
-
validateStatementAsSubproofAssertion,
|
|
287
|
-
validateStatementAsContainedAssertion,
|
|
288
|
-
validateStatementAsSignatureAssertion
|
|
289
|
-
];
|
|
290
|
-
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIH0gZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cztcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gdmFyaWFibGUuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBTZXR0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSdzIHR5cGUgdG8gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlJHtwcm92aXNpb25hbGx5U3RyaW5nfS5gKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVzRm9yd2FyZHMgPSB2YWxpZGF0ZUZvcndhcmRzKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzRm9yd2FyZHMpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBhcyBhIHZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnMuc29tZSgoY29uc3RydWN0b3IpID0+IHtcbiAgICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBmYWxzZTtcblxuICAgIGNob29zZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdGVybVVuaWZpZXMgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IG1ldGF2YXJpYWJsZTtcblxuICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHN0cmljdCA9IHRydWU7ICAvLy9cblxuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZS52YWxpZGF0ZShzdHJpY3QsIGNvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cztcblxuICAgICAgbGV0IHN1YnN0aXR1dGlvbjtcblxuICAgICAgY29uc3QgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvbiA9ICh0ZXJtU3Vic3RpdHV0aW9uIHx8IGZyYW1lU3Vic3RpdHV0aW9uKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpO1xuXG4gIGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBsZXQgc3RhdGVtZW50VW5pZmllcztcblxuICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpO1xuXG4gIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IGVxdWFsaXR5O1xuXG4gIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eS52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGxldCBqdWRnZW1lbnQ7XG5cbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzO1xuXG4gIGp1ZGdlbWVudCA9IEp1ZGdlbWVudC5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgdHlwZUFzc2VydGlvbjtcblxuICB0eXBlQXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uO1xuXG4gIGRlZmluZWRBc3NlcnRpb24gPSBEZWZpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uO1xuXG4gIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBsZXQgc3VicHJvb2ZBc3NlcnRpb247XG5cbiAgc3VicHJvb2ZBc3NlcnRpb24gPSBTdWJwcm9vZkFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIGxldCBjb250YWluZWRBc3NlcnRpb247XG5cbiAgY29udGFpbmVkQXNzZXJ0aW9uID0gQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbjtcblxuICBzaWduYXR1cmVBc3NlcnRpb24gPSBTaWduYXR1cmVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtcyIsInZhbGlkYXRlVGVybUFzVmFyaWFibGUiLCJ0ZXJtIiwiY29udGV4dCIsInZhbGlkYXRlRm9yd2FyZHMiLCJ0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ2YXJpYWJsZSIsImZyb21UZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ0eXBlIiwiZ2V0VHlwZSIsInR5cGVTdHJpbmciLCJwcm92aXNpb25hbCIsImlzUHJvdmlzaW9uYWwiLCJwcm92aXNpb25hbGx5U3RyaW5nIiwicHJvdmlzaW9uYWxseVN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInNldFR5cGUiLCJzZXRQcm92aXNpb25hbCIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJjaG9vc2UiLCJ0ZXJtVW5pZmllcyIsInVuaWZ5VGVybSIsImNvbW1pdCIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0cmljdCIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwic3RhdGVtZW50VW5pZmllcyIsImRlc2NlbmQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsIkVxdWFsaXR5IiwiZXF1YWxpdHkiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZZYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7aUVBcllRO3lCQUVXO3dCQUNtQjswQkFDNkI7Ozs7OztBQUVoRixTQUFTQyx1QkFBdUJDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxnQkFBZ0I7SUFDN0QsSUFBSUMsMEJBQTBCO0lBRTlCLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGlCQUFRO0lBRTdCLElBQUlDO0lBRUpBLFdBQVdGLFNBQVNHLFFBQVEsQ0FBQ1AsTUFBTUM7SUFFbkMsSUFBSUssYUFBYSxNQUFNO1FBQ3JCLE1BQU1FLGFBQWFSLEtBQUtTLFNBQVM7UUFFakNSLFFBQVFTLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHVCQUF1QixDQUFDO1FBRXBFRixXQUFXQSxTQUFTSyxRQUFRLENBQUNWO1FBRTdCLElBQUlLLGFBQWEsTUFBTTtZQUNyQixN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
|
package/src/context/ephemeral.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Context from "../context";
|
|
4
|
-
|
|
5
|
-
export default class EphemeralContext extends Context {
|
|
6
|
-
isStated() {
|
|
7
|
-
const stated = true;
|
|
8
|
-
|
|
9
|
-
return stated;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static fromNothing(context) {
|
|
13
|
-
const ephemeralContext = new EphemeralContext(context);
|
|
14
|
-
|
|
15
|
-
return ephemeralContext;
|
|
16
|
-
}
|
|
17
|
-
}
|