occam-verify-cli 1.0.842 → 1.0.847
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 +18 -18
- package/lib/context/branching.js +8 -3
- package/lib/context/ephemeral.js +44 -71
- package/lib/context/file/nominal.js +18 -24
- package/lib/context/synoptic.js +135 -128
- package/lib/context.js +49 -31
- package/lib/element/assertion/contained.js +6 -3
- package/lib/element/assertion/defined.js +11 -4
- package/lib/element/assertion/property.js +6 -3
- package/lib/element/assertion/satisfies.js +6 -3
- package/lib/element/assertion/subproof.js +6 -3
- package/lib/element/assertion/type.js +5 -5
- package/lib/element/assumption/metaLevel.js +12 -10
- package/lib/element/assumption.js +2 -2
- package/lib/element/derivation.js +1 -8
- package/lib/element/equality.js +3 -3
- package/lib/element/equivalence.js +1 -8
- package/lib/element/error.js +1 -8
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +15 -11
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +30 -35
- package/lib/element/parameter.js +2 -2
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/proof.js +1 -8
- package/lib/element/proofAssertion/premise.js +4 -3
- package/lib/element/proofAssertion/supposition.js +4 -3
- package/lib/element/section.js +1 -8
- package/lib/element/signature.js +2 -2
- package/lib/element/statement.js +2 -2
- package/lib/element/subDerivation.js +1 -8
- package/lib/element/subproof.js +1 -8
- package/lib/element/substitution/frame.js +20 -6
- package/lib/element/substitution/reference.js +20 -6
- package/lib/element/substitution/statement.js +19 -5
- package/lib/element/substitution/term.js +19 -5
- package/lib/element/substitution.js +12 -7
- package/lib/element/typePrefix.js +2 -2
- package/lib/process/unify.js +7 -2
- package/lib/utilities/element.js +3 -5
- package/lib/utilities/json.js +1 -15
- package/lib/utilities/synoptic.js +126 -0
- package/package.json +1 -1
- package/src/context/bounded.js +23 -23
- package/src/context/branching.js +12 -2
- package/src/context/ephemeral.js +94 -110
- package/src/context/file/nominal.js +18 -34
- package/src/context/synoptic.js +195 -150
- package/src/context.js +66 -42
- package/src/element/assertion/contained.js +8 -3
- package/src/element/assertion/defined.js +15 -4
- package/src/element/assertion/property.js +8 -3
- package/src/element/assertion/satisfies.js +10 -4
- package/src/element/assertion/subproof.js +8 -3
- package/src/element/assertion/type.js +10 -8
- package/src/element/assumption/metaLevel.js +13 -8
- package/src/element/assumption.js +2 -2
- package/src/element/derivation.js +0 -11
- package/src/element/equality.js +3 -3
- package/src/element/equivalence.js +0 -11
- package/src/element/error.js +0 -11
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +22 -14
- package/src/element/metaType.js +2 -2
- package/src/element/metavariable.js +5 -13
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -2
- package/src/element/procedureReference.js +2 -2
- package/src/element/proof.js +0 -11
- package/src/element/proofAssertion/premise.js +3 -1
- package/src/element/proofAssertion/supposition.js +3 -1
- package/src/element/section.js +0 -11
- package/src/element/signature.js +2 -2
- package/src/element/statement.js +2 -2
- package/src/element/subDerivation.js +0 -11
- package/src/element/subproof.js +0 -11
- package/src/element/substitution/frame.js +31 -11
- package/src/element/substitution/reference.js +31 -11
- package/src/element/substitution/statement.js +33 -13
- package/src/element/substitution/term.js +31 -11
- package/src/element/substitution.js +16 -11
- package/src/element/typePrefix.js +2 -2
- package/src/process/unify.js +11 -4
- package/src/utilities/element.js +3 -6
- package/src/utilities/json.js +0 -12
- package/src/utilities/synoptic.js +105 -0
package/lib/context/synoptic.js
CHANGED
|
@@ -10,158 +10,85 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
const _necessary = require("necessary");
|
|
12
12
|
const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
|
|
13
|
+
const _synoptic = require("../utilities/synoptic");
|
|
13
14
|
function _interop_require_default(obj) {
|
|
14
15
|
return obj && obj.__esModule ? obj : {
|
|
15
16
|
default: obj
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
const { push
|
|
19
|
+
const { push } = _necessary.arrayUtilities;
|
|
19
20
|
class SynopticContext extends _context.default {
|
|
20
|
-
constructor(context,
|
|
21
|
+
constructor(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions){
|
|
21
22
|
super(context);
|
|
22
|
-
this.
|
|
23
|
+
this.terms = terms;
|
|
24
|
+
this.frames = frames;
|
|
25
|
+
this.equalities = equalities;
|
|
26
|
+
this.judgements = judgements;
|
|
27
|
+
this.assertions = assertions;
|
|
28
|
+
this.statements = statements;
|
|
29
|
+
this.references = references;
|
|
30
|
+
this.assumptions = assumptions;
|
|
31
|
+
this.metavariables = metavariables;
|
|
32
|
+
this.substitutions = substitutions;
|
|
23
33
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const terms = [];
|
|
29
|
-
this.contexts.forEach((context)=>{
|
|
30
|
-
const contextTerms = context.getTerms();
|
|
31
|
-
push(terms, contextTerms);
|
|
32
|
-
});
|
|
33
|
-
compress(terms, (termA, termB)=>{
|
|
34
|
-
const termAComparesToTermB = termA.compareTerm(termB);
|
|
35
|
-
if (!termAComparesToTermB) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
34
|
+
getTerms(terms = []) {
|
|
35
|
+
push(terms, this.terms);
|
|
36
|
+
this.context.getTerms(terms);
|
|
37
|
+
(0, _synoptic.compressTerms)(terms);
|
|
39
38
|
return terms;
|
|
40
39
|
}
|
|
41
|
-
getFrames() {
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
push(frames, contextFrames);
|
|
46
|
-
});
|
|
47
|
-
compress(frames, (frameA, frameB)=>{
|
|
48
|
-
const frameAEqualToFrameB = frameA.isEqualTo(frameB);
|
|
49
|
-
if (!frameAEqualToFrameB) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
40
|
+
getFrames(frames = []) {
|
|
41
|
+
push(frames, this.frames);
|
|
42
|
+
this.context.getFrames(frames);
|
|
43
|
+
(0, _synoptic.compressFrames)(frames);
|
|
53
44
|
return frames;
|
|
54
45
|
}
|
|
55
|
-
getEqualities() {
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
push(equalities, contextEqualities);
|
|
60
|
-
});
|
|
61
|
-
compress(equalities, (equalityA, equalityB)=>{
|
|
62
|
-
const equalityAEqualToEqualityB = equalityA.isEqualTo(equalityB);
|
|
63
|
-
if (!equalityAEqualToEqualityB) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
46
|
+
getEqualities(equalities = []) {
|
|
47
|
+
push(equalities, this.equalities);
|
|
48
|
+
this.context.getEqualities(equalities);
|
|
49
|
+
(0, _synoptic.compressEqualities)(equalities);
|
|
67
50
|
return equalities;
|
|
68
51
|
}
|
|
69
|
-
getJudgements() {
|
|
70
|
-
|
|
71
|
-
this.
|
|
72
|
-
|
|
73
|
-
push(judgements, contextJudgements);
|
|
74
|
-
});
|
|
75
|
-
compress(judgements, (judgementA, judgementB)=>{
|
|
76
|
-
const judgementAEqualToJudgementB = judgementA.isEqualTo(judgementB);
|
|
77
|
-
if (!judgementAEqualToJudgementB) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
52
|
+
getJudgements(judgements = []) {
|
|
53
|
+
push(judgements, this.judgements);
|
|
54
|
+
this.context.getJudgements(judgements);
|
|
55
|
+
(0, _synoptic.compressJudgements)(judgements);
|
|
81
56
|
return judgements;
|
|
82
57
|
}
|
|
83
|
-
getStatements() {
|
|
84
|
-
|
|
85
|
-
this.
|
|
86
|
-
|
|
87
|
-
push(statements, contextStatements);
|
|
88
|
-
});
|
|
89
|
-
compress(statements, (statementA, statementB)=>{
|
|
90
|
-
const statementAEqualToStatementB = statementA.isEqualTo(statementB);
|
|
91
|
-
if (!statementAEqualToStatementB) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
58
|
+
getStatements(statements = []) {
|
|
59
|
+
push(statements, this.statements);
|
|
60
|
+
this.context.getStatements(statements);
|
|
61
|
+
(0, _synoptic.compressStatements)(statements);
|
|
95
62
|
return statements;
|
|
96
63
|
}
|
|
97
|
-
getAssertions() {
|
|
98
|
-
|
|
99
|
-
this.
|
|
100
|
-
|
|
101
|
-
push(assertions, contextAssertions);
|
|
102
|
-
});
|
|
103
|
-
compress(assertions, (assertionA, assertionB)=>{
|
|
104
|
-
const assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
|
|
105
|
-
if (!assertionAEqualToAssertionB) {
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
});
|
|
64
|
+
getAssertions(assertions = []) {
|
|
65
|
+
push(assertions, this.assertions);
|
|
66
|
+
this.context.getAssertions(assertions);
|
|
67
|
+
(0, _synoptic.compressAssertions)(assertions);
|
|
109
68
|
return assertions;
|
|
110
69
|
}
|
|
111
|
-
getReferences() {
|
|
112
|
-
|
|
113
|
-
this.
|
|
114
|
-
|
|
115
|
-
push(references, contextReferences);
|
|
116
|
-
});
|
|
117
|
-
compress(references, (referenceA, referenceB)=>{
|
|
118
|
-
const referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
|
|
119
|
-
if (!referenceAEqualToReferenceB) {
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
});
|
|
70
|
+
getReferences(references = []) {
|
|
71
|
+
push(references, this.references);
|
|
72
|
+
this.context.getReferences(references);
|
|
73
|
+
(0, _synoptic.compressReferences)(references);
|
|
123
74
|
return references;
|
|
124
75
|
}
|
|
125
|
-
getAssumptions() {
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
push(assumptions, contextAssumptions);
|
|
130
|
-
});
|
|
131
|
-
compress(assumptions, (assumptionA, assumptionB)=>{
|
|
132
|
-
const assumptionAEqualToAssumptionB = assumptionA.isEqualTo(assumptionB);
|
|
133
|
-
if (!assumptionAEqualToAssumptionB) {
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
});
|
|
76
|
+
getAssumptions(assumptions = []) {
|
|
77
|
+
push(assumptions, this.assumptions);
|
|
78
|
+
this.context.getAssumptions(assumptions);
|
|
79
|
+
(0, _synoptic.compressAssumptions)(assumptions);
|
|
137
80
|
return assumptions;
|
|
138
81
|
}
|
|
139
|
-
getMetavariables() {
|
|
140
|
-
|
|
141
|
-
this.
|
|
142
|
-
|
|
143
|
-
push(metavariables, contextMetavariables);
|
|
144
|
-
});
|
|
145
|
-
compress(metavariables, (metavariableA, metavariableB)=>{
|
|
146
|
-
const metavariableAEqualToMetavariableB = metavariableA.isEqualTo(metavariableB);
|
|
147
|
-
if (!metavariableAEqualToMetavariableB) {
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
});
|
|
82
|
+
getMetavariables(metavariables = []) {
|
|
83
|
+
push(metavariables, this.metavariables);
|
|
84
|
+
this.context.getMetavariables(metavariables);
|
|
85
|
+
(0, _synoptic.compressMetavariables)(metavariables);
|
|
151
86
|
return metavariables;
|
|
152
87
|
}
|
|
153
|
-
getSubstitutions() {
|
|
154
|
-
|
|
155
|
-
this.
|
|
156
|
-
|
|
157
|
-
push(substitutions, contextSubstitutions);
|
|
158
|
-
});
|
|
159
|
-
compress(substitutions, (substitutionA, substitutionB)=>{
|
|
160
|
-
const substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
|
|
161
|
-
if (!substitutionAEqualToSubstitutionB) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
});
|
|
88
|
+
getSubstitutions(substitutions = []) {
|
|
89
|
+
push(substitutions, this.substitutions);
|
|
90
|
+
this.context.getSubstitutions(substitutions);
|
|
91
|
+
(0, _synoptic.compressSubstitutions)(substitutions);
|
|
165
92
|
return substitutions;
|
|
166
93
|
}
|
|
167
94
|
findTermByTermNode(termNode) {
|
|
@@ -264,9 +191,89 @@ class SynopticContext extends _context.default {
|
|
|
264
191
|
return substitution;
|
|
265
192
|
}
|
|
266
193
|
static fromContexts(...contexts) {
|
|
267
|
-
const
|
|
194
|
+
const context = contexts.pop(), terms = termsFromContexts(contexts), frames = framesFromContexts(contexts), equalities = equalitiesFromContexts(contexts), judgements = judgementsFromContexts(contexts), assertions = assertionsFromContexts(contexts), statements = statementsFromContexts(contexts), references = referencesFromContexts(contexts), assumptions = assumptionsFromContexts(contexts), metavariables = metavariablesFromContexts(contexts), substitutions = substitutionsFromContexts(contexts), synopticContext = new SynopticContext(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions);
|
|
268
195
|
return synopticContext;
|
|
269
196
|
}
|
|
270
197
|
}
|
|
198
|
+
function termsFromContexts(contexts) {
|
|
199
|
+
const terms = [];
|
|
200
|
+
contexts.forEach((context)=>{
|
|
201
|
+
context.getTerms(terms);
|
|
202
|
+
});
|
|
203
|
+
(0, _synoptic.compressTerms)(terms);
|
|
204
|
+
return terms;
|
|
205
|
+
}
|
|
206
|
+
function framesFromContexts(contexts) {
|
|
207
|
+
const frames = [];
|
|
208
|
+
contexts.forEach((context)=>{
|
|
209
|
+
context.getFrames(frames);
|
|
210
|
+
});
|
|
211
|
+
(0, _synoptic.compressFrames)(frames);
|
|
212
|
+
return frames;
|
|
213
|
+
}
|
|
214
|
+
function equalitiesFromContexts(contexts) {
|
|
215
|
+
const equalities = [];
|
|
216
|
+
contexts.forEach((context)=>{
|
|
217
|
+
context.getEqualities(equalities);
|
|
218
|
+
});
|
|
219
|
+
(0, _synoptic.compressEqualities)(equalities);
|
|
220
|
+
return equalities;
|
|
221
|
+
}
|
|
222
|
+
function judgementsFromContexts(contexts) {
|
|
223
|
+
const judgements = [];
|
|
224
|
+
contexts.forEach((context)=>{
|
|
225
|
+
context.getJudgements(judgements);
|
|
226
|
+
});
|
|
227
|
+
(0, _synoptic.compressJudgements)(judgements);
|
|
228
|
+
return judgements;
|
|
229
|
+
}
|
|
230
|
+
function assertionsFromContexts(contexts) {
|
|
231
|
+
const assertions = [];
|
|
232
|
+
contexts.forEach((context)=>{
|
|
233
|
+
context.getAssertions(assertions);
|
|
234
|
+
});
|
|
235
|
+
(0, _synoptic.compressAssertions)(assertions);
|
|
236
|
+
return assertions;
|
|
237
|
+
}
|
|
238
|
+
function statementsFromContexts(contexts) {
|
|
239
|
+
const statements = [];
|
|
240
|
+
contexts.forEach((context)=>{
|
|
241
|
+
context.getStatements(statements);
|
|
242
|
+
});
|
|
243
|
+
(0, _synoptic.compressStatements)(statements);
|
|
244
|
+
return statements;
|
|
245
|
+
}
|
|
246
|
+
function referencesFromContexts(contexts) {
|
|
247
|
+
const references = [];
|
|
248
|
+
contexts.forEach((context)=>{
|
|
249
|
+
context.getReferences(references);
|
|
250
|
+
});
|
|
251
|
+
(0, _synoptic.compressReferences)(references);
|
|
252
|
+
return references;
|
|
253
|
+
}
|
|
254
|
+
function assumptionsFromContexts(contexts) {
|
|
255
|
+
const assumptions = [];
|
|
256
|
+
contexts.forEach((context)=>{
|
|
257
|
+
context.getAssumptions(assumptions);
|
|
258
|
+
});
|
|
259
|
+
(0, _synoptic.compressAssumptions)(assumptions);
|
|
260
|
+
return assumptions;
|
|
261
|
+
}
|
|
262
|
+
function metavariablesFromContexts(contexts) {
|
|
263
|
+
const metavariables = [];
|
|
264
|
+
contexts.forEach((context)=>{
|
|
265
|
+
context.getMetavariables(metavariables);
|
|
266
|
+
});
|
|
267
|
+
(0, _synoptic.compressMetavariables)(metavariables);
|
|
268
|
+
return metavariables;
|
|
269
|
+
}
|
|
270
|
+
function substitutionsFromContexts(contexts) {
|
|
271
|
+
const substitutions = [];
|
|
272
|
+
contexts.forEach((context)=>{
|
|
273
|
+
context.getSubstitutions(substitutions);
|
|
274
|
+
});
|
|
275
|
+
(0, _synoptic.compressSubstitutions)(substitutions);
|
|
276
|
+
return substitutions;
|
|
277
|
+
}
|
|
271
278
|
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuY29uc3QgeyBwdXNoLCBsYXN0LCBjb21wcmVzcyB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bm9wdGljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb250ZXh0cykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb250ZXh0cyA9IGNvbnRleHRzO1xuICB9XG5cbiAgZ2V0Q29udGV4dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0VGVybXMgPSBjb250ZXh0LmdldFRlcm1zKCk7XG5cbiAgICAgIHB1c2godGVybXMsIGNvbnRleHRUZXJtcyk7XG4gICAgfSk7XG4gICAgXG4gICAgY29tcHJlc3ModGVybXMsICh0ZXJtQSwgdGVybUIpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1BQ29tcGFyZXNUb1Rlcm1CID0gdGVybUEuY29tcGFyZVRlcm0odGVybUIpO1xuICAgICAgXG4gICAgICBpZiAoIXRlcm1BQ29tcGFyZXNUb1Rlcm1CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKCkge1xuICAgIGNvbnN0IGZyYW1lcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0RnJhbWVzID0gY29udGV4dC5nZXRGcmFtZXMoKTtcblxuICAgICAgcHVzaChmcmFtZXMsIGNvbnRleHRGcmFtZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoZnJhbWVzLCAoZnJhbWVBLCBmcmFtZUIpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lQUVxdWFsVG9GcmFtZUIgPSBmcmFtZUEuaXNFcXVhbFRvKGZyYW1lQik7XG5cbiAgICAgIGlmICghZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKCkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEVxdWFsaXRpZXMgPSBjb250ZXh0LmdldEVxdWFsaXRpZXMoKTtcblxuICAgICAgcHVzaChlcXVhbGl0aWVzLCBjb250ZXh0RXF1YWxpdGllcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyhlcXVhbGl0aWVzLCAoZXF1YWxpdHlBLCBlcXVhbGl0eUIpID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG5cbiAgICAgIGlmICghZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cygpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRKdWRnZW1lbnRzID0gY29udGV4dC5nZXRKdWRnZW1lbnRzKCk7XG5cbiAgICAgIHB1c2goanVkZ2VtZW50cywgY29udGV4dEp1ZGdlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoanVkZ2VtZW50cywgKGp1ZGdlbWVudEEsIGp1ZGdlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IGp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50QiA9IGp1ZGdlbWVudEEuaXNFcXVhbFRvKGp1ZGdlbWVudEIpO1xuXG4gICAgICBpZiAoIWp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRTdGF0ZW1lbnRzID0gY29udGV4dC5nZXRTdGF0ZW1lbnRzKCk7XG5cbiAgICAgIHB1c2goc3RhdGVtZW50cywgY29udGV4dFN0YXRlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3Moc3RhdGVtZW50cywgKHN0YXRlbWVudEEsIHN0YXRlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoIXN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRBc3NlcnRpb25zID0gY29udGV4dC5nZXRBc3NlcnRpb25zKCk7XG5cbiAgICAgIHB1c2goYXNzZXJ0aW9ucywgY29udGV4dEFzc2VydGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoYXNzZXJ0aW9ucywgKGFzc2VydGlvbkEsIGFzc2VydGlvbkIpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoIWFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRSZWZlcmVuY2VzID0gY29udGV4dC5nZXRSZWZlcmVuY2VzKCk7XG5cbiAgICAgIHB1c2gocmVmZXJlbmNlcywgY29udGV4dFJlZmVyZW5jZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MocmVmZXJlbmNlcywgKHJlZmVyZW5jZUEsIHJlZmVyZW5jZUIpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQiA9IHJlZmVyZW5jZUEuaXNFcXVhbFRvKHJlZmVyZW5jZUIpO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEFzc3VtcHRpb25zID0gY29udGV4dC5nZXRBc3N1bXB0aW9ucygpO1xuXG4gICAgICBwdXNoKGFzc3VtcHRpb25zLCBjb250ZXh0QXNzdW1wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uQSwgYXNzdW1wdGlvbkIpID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKCFhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcygpO1xuXG4gICAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIGNvbnRleHRNZXRhdmFyaWFibGVzKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzKG1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGVBLCBtZXRhdmFyaWFibGVCKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKCFtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0U3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgICBwdXNoKHN1YnN0aXR1dGlvbnMsIGNvbnRleHRTdWJzdGl0dXRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzKHN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb25BLCBzdWJzdGl0dXRpb25CKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKCFzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdGllcy5maW5kKChlcXVhbGl0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKC4uLmNvbnRleHRzKSB7XG4gICAgY29uc3QgbGFzdENvbnRleHQgPSBsYXN0KGNvbnRleHRzKSxcbiAgICAgICAgICBjb250ZXh0ID0gbGFzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBzeW5vcHRpY0NvbnRleHQgPSBuZXcgU3lub3B0aWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBzeW5vcHRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTeW5vcHRpY0NvbnRleHQiLCJwdXNoIiwibGFzdCIsImNvbXByZXNzIiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImNvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZm9yRWFjaCIsImNvbnRleHRUZXJtcyIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUNvbXBhcmVzVG9UZXJtQiIsImNvbXBhcmVUZXJtIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiY29udGV4dEZyYW1lcyIsImZyYW1lQSIsImZyYW1lQiIsImZyYW1lQUVxdWFsVG9GcmFtZUIiLCJpc0VxdWFsVG8iLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImNvbnRleHRFcXVhbGl0aWVzIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImdldEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRzIiwiY29udGV4dEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRBIiwianVkZ2VtZW50QiIsImp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50QiIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiY29udGV4dFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRBIiwic3RhdGVtZW50QiIsInN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiY29udGV4dEFzc2VydGlvbnMiLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29udGV4dFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VBIiwicmVmZXJlbmNlQiIsInJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQiIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJjb250ZXh0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImNvbnRleHRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImNvbnRleHRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJm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
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyx9IGZyb20gXCIuLi91dGlsaXRpZXMvc3lub3B0aWNcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lub3B0aWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgY29tcHJlc3NUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuXG4gICAgY29tcHJlc3NGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgY29tcHJlc3NKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgY29tcHJlc3NSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcHVzaChhc3N1bXB0aW9ucywgdGhpcy5hc3N1bXB0aW9ucyk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHB1c2goc3Vic3RpdHV0aW9ucywgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0cyguLi5jb250ZXh0cykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjb250ZXh0cy5wb3AoKSwgIC8vL1xuICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGZyYW1lcyA9IGZyYW1lc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHN5bm9wdGljQ29udGV4dCA9IG5ldyBTeW5vcHRpY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN5bm9wdGljQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXJtc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCB0ZXJtcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NUZXJtcyh0ZXJtcyk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5mdW5jdGlvbiBmcmFtZXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgZnJhbWVzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzRnJhbWVzKGZyYW1lcyk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZnVuY3Rpb24gZXF1YWxpdGllc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBlcXVhbGl0aWVzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuXG5mdW5jdGlvbiBqdWRnZW1lbnRzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGp1ZGdlbWVudHMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuICB9KTtcblxuICBjb21wcmVzc0p1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGFzc2VydGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgYXNzZXJ0aW9ucyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzQXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICByZXR1cm4gYXNzZXJ0aW9ucztcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZWZlcmVuY2VzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuICB9KTtcblxuICBjb21wcmVzc1JlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuICB9KTtcblxuICBjb21wcmVzc0Fzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbn1cblxuZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zO1xufVxuIl0sIm5hbWVzIjpbIlN5bm9wdGljQ29udGV4dCIsInB1c2giLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJmcmFtZXMiLCJlcXVhbGl0aWVzIiwianVkZ2VtZW50cyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicmVmZXJlbmNlcyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJnZXRUZXJtcyIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImNvbXByZXNzU3RhdGVtZW50cyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tQ29udGV4dHMiLCJjb250ZXh0cyIsInBvcCIsInRlcm1zRnJvbUNvbnRleHRzIiwiZnJhbWVzRnJvbUNvbnRleHRzIiwiZXF1YWxpdGllc0Zyb21Db250ZXh0cyIsImp1ZGdlbWVudHNGcm9tQ29udGV4dHMiLCJhc3NlcnRpb25zRnJvbUNvbnRleHRzIiwic3RhdGVtZW50c0Zyb21Db250ZXh0cyIsInJlZmVyZW5jZXNGcm9tQ29udGV4dHMiLCJhc3N1bXB0aW9uc0Zyb21Db250ZXh0cyIsIm1ldGF2YXJpYWJsZXNGcm9tQ29udGV4dHMiLCJzdWJzdGl0dXRpb25zRnJvbUNvbnRleHRzIiwic3lub3B0aWNDb250ZXh0IiwiZm9yRWFjaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBbUJBOzs7ZUFBcUJBOzs7MkJBakJVO2dFQUVYOzBCQVdrQjs7Ozs7O0FBRXRDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHdCQUF3QkcsZ0JBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLENBQUU7UUFDekksS0FBSyxDQUFDVjtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsYUFBYSxHQUFHQTtRQUNyQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsU0FBU1YsUUFBUSxFQUFFLEVBQUU7UUFDbkJKLEtBQUtJLE9BQU8sSUFBSSxDQUFDQSxLQUFLO1FBRXRCLElBQUksQ0FBQ0QsT0FBTyxDQUFDVyxRQUFRLENBQUNWO1FBRXRCVyxJQUFBQSx1QkFBYSxFQUFDWDtRQUVkLE9BQU9BO0lBQ1Q7SUFFQVksVUFBVVgsU0FBUyxFQUFFLEVBQUU7UUFDckJMLEtBQUtLLFFBQVEsSUFBSSxDQUFDQSxNQUFNO1FBRXhCLElBQUksQ0FBQ0YsT0FBTyxDQUFDYSxTQUFTLENBQUNYO1FBRXZCWSxJQUFBQSx3QkFBYyxFQUFDWjtRQUVmLE9BQU9BO0lBQ1Q7SUFFQWEsY0FBY1osYUFBYSxFQUFFLEVBQUU7UUFDN0JOLEtBQUtNLFlBQVksSUFBSSxDQUFDQSxVQUFVO1FBRWhDLElBQUksQ0FBQ0gsT0FBTyxDQUFDZSxhQUFhLENBQUNaO1FBRTNCYSxJQUFBQSw0QkFBa0IsRUFBQ2I7UUFFbkIsT0FBT0E7SUFDVDtJQUVBYyxjQUFjYixhQUFhLEVBQUUsRUFBRTtRQUM3QlAsS0FBS08sWUFBWSxJQUFJLENBQUNBLFVBQVU7UUFFaEMsSUFBSSxDQUFDSixPQUFPLENBQUNpQixhQUFhLENBQUNiO1FBRTNCYyxJQUFBQSw0QkFBa0IsRUFBQ2Q7UUFFbkIsT0FBT0E7SUFDVDtJQUVBZSxjQUFjYixhQUFhLEVBQUUsRUFBRTtRQUM3QlQsS0FBS1MsWUFBWSxJQUFJLENBQUNBLFVBQVU7UUFFaEMsSUFBSSxDQUFDTixPQUFPLENBQUNtQixhQUFhLENBQUNiO1FBRTNCYyxJQUFBQSw0QkFBa0IsRUFBQ2Q7UUFFbkIsT0FBT0E7SUFDVDtJQUVBZSxjQUFjaEIsYUFBYSxFQUFFLEVBQUU7UUFDN0JSLEtBQUtRLFlBQVksSUFBSSxDQUFDQSxVQUFVO1FBRWhDLElBQUksQ0FBQ0wsT0FBTyxDQUFDcUIsYUFBYSxDQUFDaEI7UUFFM0JpQixJQUFBQSw0QkFBa0IsRUFBQ2pCO1FBRW5CLE9BQU9BO0lBQ1Q7SUFFQWtCLGNBQWNoQixhQUFhLEVBQUUsRUFBRTtRQUM3QlYsS0FBS1UsWUFBWSxJQUFJLENBQUNBLFVBQVU7UUFFaEMsSUFBSSxDQUFDUCxPQUFPLENBQUN1QixhQUFhLENBQUNoQjtRQUUzQmlCLElBQUFBLDRCQUFrQixFQUFDakI7UUFFbkIsT0FBT0E7SUFDVDtJQUVBa0IsZUFBZWpCLGNBQWMsRUFBRSxFQUFFO1FBQy9CWCxLQUFLVyxhQUFhLElBQUksQ0FBQ0EsV0FBVztRQUVsQyxJQUFJLENBQUNSLE9BQU8sQ0FBQ3lCLGNBQWMsQ0FBQ2pCO1FBRTVCa0IsSUFBQUEsNkJBQW1CLEVBQUNsQjtRQUVwQixPQUFPQTtJQUNUO0lBRUFtQixpQkFBaUJsQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ25DWixLQUFLWSxlQUFlLElBQUksQ0FBQ0EsYUFBYTtRQUV0QyxJQUFJLENBQUNULE9BQU8sQ0FBQzJCLGdCQUFnQixDQUFDbEI7UUFFOUJtQixJQUFBQSwrQkFBcUIsRUFBQ25CO1FBRXRCLE9BQU9BO0lBQ1Q7SUFFQW9CLGlCQUFpQm5CLGdCQUFnQixFQUFFLEVBQUU7UUFDbkNiLEtBQUthLGVBQWUsSUFBSSxDQUFDQSxhQUFhO1FBRXRDLElBQUksQ0FBQ1YsT0FBTyxDQUFDNkIsZ0JBQWdCLENBQUNuQjtRQUU5Qm9CLElBQUFBLCtCQUFxQixFQUFDcEI7UUFFdEIsT0FBT0E7SUFDVDtJQUVBcUIsbUJBQW1CQyxRQUFRLEVBQUU7UUFDM0IsTUFBTS9CLFFBQVEsSUFBSSxDQUFDVSxRQUFRLElBQ3JCc0IsT0FBT2hDLE1BQU1pQyxJQUFJLENBQUMsQ0FBQ0Q7WUFDakIsTUFBTUUsa0JBQWtCRixLQUFLRyxhQUFhLENBQUNKO1lBRTNDLElBQUlHLGlCQUFpQjtnQkFDbkIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLE9BQU9GO0lBQ1Q7SUFFQUkscUJBQXFCQyxTQUFTLEVBQUU7UUFDOUIsTUFBTXBDLFNBQVMsSUFBSSxDQUFDVyxTQUFTLElBQ3ZCMEIsUUFBUXJDLE9BQU9nQyxJQUFJLENBQUMsQ0FBQ0s7WUFDbkIsTUFBTUMsbUJBQW1CRCxNQUFNRSxjQUFjLENBQUNIO1lBRTlDLElBQUlFLGtCQUFrQjtnQkFDcEIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLE9BQU9EO0lBQ1Q7SUFFQUcsMkJBQTJCQyxZQUFZLEVBQUU7UUFDdkMsTUFBTXhDLGFBQWEsSUFBSSxDQUFDWSxhQUFhLElBQy9CNkIsV0FBV3pDLFdBQVcrQixJQUFJLENBQUMsQ0FBQ1U7WUFDMUIsTUFBTUMsc0JBQXNCRCxTQUFTRSxpQkFBaUIsQ0FBQ0g7WUFFdkQsSUFBSUUscUJBQXFCO2dCQUN2QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNNUMsYUFBYSxJQUFJLENBQUNhLGFBQWEsSUFDL0JnQyxZQUFZN0MsV0FBVzhCLElBQUksQ0FBQyxDQUFDZTtZQUMzQixNQUFNQyx1QkFBdUJELFVBQVVFLGtCQUFrQixDQUFDSDtZQUUxRCxJQUFJRSxzQkFBc0I7Z0JBQ3hCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFHLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLE1BQU0vQyxhQUFhLElBQUksQ0FBQ2EsYUFBYSxJQUMvQm1DLFlBQVloRCxXQUFXNEIsSUFBSSxDQUFDLENBQUNvQjtZQUMzQixNQUFNQyx1QkFBdUJELFVBQVVFLGtCQUFrQixDQUFDSDtZQUUxRCxJQUFJRSxzQkFBc0I7Z0JBQ3hCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFHLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLE1BQU1uRCxhQUFhLElBQUksQ0FBQ2dCLGFBQWEsSUFDL0JvQyxZQUFZcEQsV0FBVzJCLElBQUksQ0FBQyxDQUFDeUI7WUFDM0IsTUFBTUMsK0JBQStCRCxVQUFVRSxrQkFBa0IsQ0FBQ0g7WUFFbEUsSUFBSUUsOEJBQThCO2dCQUNoQyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNMUQsYUFBYSxJQUFJLENBQUNnQixhQUFhLElBQy9CMkMsWUFBWTNELFdBQVc2QixJQUFJLENBQUMsQ0FBQzhCO1lBQzNCLE1BQU1DLHVCQUF1QkQsVUFBVUUsa0JBQWtCLENBQUNIO1lBRTFELElBQUlFLHNCQUFzQjtnQkFDeEIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLE9BQU9EO0lBQ1Q7SUFFQUcsK0JBQStCQyxjQUFjLEVBQUU7UUFDN0MsTUFBTTVELGNBQWMsSUFBSSxDQUFDaUIsY0FBYyxJQUNqQzRDLGFBQWE3RCxZQUFZMEIsSUFBSSxDQUFDLENBQUNtQztZQUM3QixNQUFNQyx3QkFBd0JELFdBQVdFLG1CQUFtQixDQUFDSDtZQUU3RCxJQUFJRSx1QkFBdUI7Z0JBQ3pCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFHLGdDQUFnQ0MsZ0JBQWdCLEVBQUU7UUFDaEQsTUFBTWxFLGFBQWEsSUFBSSxDQUFDZ0IsYUFBYSxJQUMvQm9DLFlBQVlwRCxXQUFXMkIsSUFBSSxDQUFDLENBQUN5QjtZQUMzQixNQUFNZSxrQ0FBa0NmLFVBQVVnQixxQkFBcUIsQ0FBQ0Y7WUFFeEUsSUFBSUMsaUNBQWlDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT2Y7SUFDVDtJQUVBaUIsbUNBQW1DSCxnQkFBZ0IsRUFBRTtRQUNuRCxNQUFNaEUsZ0JBQWdCLElBQUksQ0FBQ2tCLGdCQUFnQixJQUNyQ2tELGVBQWVwRSxjQUFjeUIsSUFBSSxDQUFDLENBQUMyQztZQUNqQyxNQUFNQywwQkFBMEJELGFBQWFGLHFCQUFxQixDQUFDRjtZQUVuRSxJQUFJSyx5QkFBeUI7Z0JBQzNCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFFLG1DQUFtQ0MsZ0JBQWdCLEVBQUU7UUFDbkQsTUFBTXRFLGdCQUFnQixJQUFJLENBQUNtQixnQkFBZ0IsSUFDckNvRCxlQUFldkUsY0FBY3dCLElBQUksQ0FBQyxDQUFDK0M7WUFDakMsTUFBTUMsMEJBQTBCRCxhQUFhRSxxQkFBcUIsQ0FBQ0g7WUFFbkUsSUFBSUUseUJBQXlCO2dCQUMzQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWEsR0FBR0MsUUFBUSxFQUFFO1FBQy9CLE1BQU1yRixVQUFVcUYsU0FBU0MsR0FBRyxJQUN0QnJGLFFBQVFzRixrQkFBa0JGLFdBQzFCbkYsU0FBU3NGLG1CQUFtQkgsV0FDNUJsRixhQUFhc0YsdUJBQXVCSixXQUNwQ2pGLGFBQWFzRix1QkFBdUJMLFdBQ3BDaEYsYUFBYXNGLHVCQUF1Qk4sV0FDcEMvRSxhQUFhc0YsdUJBQXVCUCxXQUNwQzlFLGFBQWFzRix1QkFBdUJSLFdBQ3BDN0UsY0FBY3NGLHdCQUF3QlQsV0FDdEM1RSxnQkFBZ0JzRiwwQkFBMEJWLFdBQzFDM0UsZ0JBQWdCc0YsMEJBQTBCWCxXQUMxQ1ksa0JBQWtCLElBQUlyRyxnQkFBZ0JJLFNBQVNDLE9BQU9DLFFBQVFDLFlBQVlDLFlBQVlDLFlBQVlDLFlBQVlDLFlBQVlDLGFBQWFDLGVBQWVDO1FBRTVKLE9BQU91RjtJQUNUO0FBQ0Y7QUFFQSxTQUFTVixrQkFBa0JGLFFBQVE7SUFDakMsTUFBTXBGLFFBQVEsRUFBRTtJQUVoQm9GLFNBQVNhLE9BQU8sQ0FBQyxDQUFDbEc7UUFDaEJBLFFBQVFXLFFBQVEsQ0FBQ1Y7SUFDbkI7SUFFQVcsSUFBQUEsdUJBQWEsRUFBQ1g7SUFFZCxPQUFPQTtBQUNUO0FBRUEsU0FBU3VGLG1CQUFtQkgsUUFBUTtJQUNsQyxNQUFNbkYsU0FBUyxFQUFFO0lBRWpCbUYsU0FBU2EsT0FBTyxDQUFDLENBQUNsRztRQUNoQkEsUUFBUWEsU0FBUyxDQUFDWDtJQUNwQjtJQUVBWSxJQUFBQSx3QkFBYyxFQUFDWjtJQUVmLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTdUYsdUJBQXVCSixRQUFRO0lBQ3RDLE1BQU1sRixhQUFhLEVBQUU7SUFFckJrRixTQUFTYSxPQUFPLENBQUMsQ0FBQ2xHO1FBQ2hCQSxRQUFRZSxhQUFhLENBQUNaO0lBQ3hCO0lBRUFhLElBQUFBLDRCQUFrQixFQUFDYjtJQUVuQixPQUFPQTtBQUNUO0FBRUEsU0FBU3VGLHVCQUF1QkwsUUFBUTtJQUN0QyxNQUFNakYsYUFBYSxFQUFFO0lBRXJCaUYsU0FBU2EsT0FBTyxDQUFDLENBQUNsRztRQUNoQkEsUUFBUWlCLGFBQWEsQ0FBQ2I7SUFDeEI7SUFFQWMsSUFBQUEsNEJBQWtCLEVBQUNkO0lBRW5CLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTdUYsdUJBQXVCTixRQUFRO0lBQ3RDLE1BQU1oRixhQUFhLEVBQUU7SUFFckJnRixTQUFTYSxPQUFPLENBQUMsQ0FBQ2xHO1FBQ2hCQSxRQUFRcUIsYUFBYSxDQUFDaEI7SUFDeEI7SUFFQWlCLElBQUFBLDRCQUFrQixFQUFDakI7SUFFbkIsT0FBT0E7QUFDVDtBQUVBLFNBQVN1Rix1QkFBdUJQLFFBQVE7SUFDdEMsTUFBTS9FLGFBQWEsRUFBRTtJQUVyQitFLFNBQVNhLE9BQU8sQ0FBQyxDQUFDbEc7UUFDaEJBLFFBQVFtQixhQUFhLENBQUNiO0lBQ3hCO0lBRUFjLElBQUFBLDRCQUFrQixFQUFDZDtJQUVuQixPQUFPQTtBQUNUO0FBRUEsU0FBU3VGLHVCQUF1QlIsUUFBUTtJQUN0QyxNQUFNOUUsYUFBYSxFQUFFO0lBRXJCOEUsU0FBU2EsT0FBTyxDQUFDLENBQUNsRztRQUNoQkEsUUFBUXVCLGFBQWEsQ0FBQ2hCO0lBQ3hCO0lBRUFpQixJQUFBQSw0QkFBa0IsRUFBQ2pCO0lBRW5CLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTdUYsd0JBQXdCVCxRQUFRO0lBQ3ZDLE1BQU03RSxjQUFjLEVBQUU7SUFFdEI2RSxTQUFTYSxPQUFPLENBQUMsQ0FBQ2xHO1FBQ2hCQSxRQUFReUIsY0FBYyxDQUFDakI7SUFDekI7SUFFQWtCLElBQUFBLDZCQUFtQixFQUFDbEI7SUFFcEIsT0FBT0E7QUFDVDtBQUVBLFNBQVN1RiwwQkFBMEJWLFFBQVE7SUFDekMsTUFBTTVFLGdCQUFnQixFQUFFO0lBRXhCNEUsU0FBU2EsT0FBTyxDQUFDLENBQUNsRztRQUNoQkEsUUFBUTJCLGdCQUFnQixDQUFDbEI7SUFDM0I7SUFFQW1CLElBQUFBLCtCQUFxQixFQUFDbkI7SUFFdEIsT0FBT0E7QUFDVDtBQUVBLFNBQVN1RiwwQkFBMEJYLFFBQVE7SUFDekMsTUFBTTNFLGdCQUFnQixFQUFFO0lBRXhCMkUsU0FBU2EsT0FBTyxDQUFDLENBQUNsRztRQUNoQkEsUUFBUTZCLGdCQUFnQixDQUFDbkI7SUFDM0I7SUFFQW9CLElBQUFBLCtCQUFxQixFQUFDcEI7SUFFdEIsT0FBT0E7QUFDVCJ9
|