occam-nominal 1.0.310 → 1.0.317

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.
Files changed (69) hide show
  1. package/lib/context/liminal.js +17 -15
  2. package/lib/context/phaneric.js +3 -3
  3. package/lib/context.js +3 -3
  4. package/lib/element/assertion/contained.js +19 -17
  5. package/lib/element/assertion/defined.js +16 -14
  6. package/lib/element/conclusion.js +10 -11
  7. package/lib/element/declaration/variable.js +2 -2
  8. package/lib/element/deduction.js +7 -7
  9. package/lib/element/equality.js +3 -3
  10. package/lib/element/frame.js +8 -3
  11. package/lib/element/goal.js +7 -8
  12. package/lib/element/judgement.js +8 -10
  13. package/lib/element/metavariable.js +44 -40
  14. package/lib/element/proof.js +2 -2
  15. package/lib/element/proofAssertion/premise.js +17 -21
  16. package/lib/element/proofAssertion/step.js +5 -5
  17. package/lib/element/proofAssertion/supposition.js +39 -35
  18. package/lib/element/rule.js +24 -22
  19. package/lib/element/statement.js +56 -32
  20. package/lib/element/substitution/frame.js +71 -62
  21. package/lib/element/substitution/reference.js +21 -21
  22. package/lib/element/substitution/statement.js +81 -98
  23. package/lib/element/substitution/term.js +76 -67
  24. package/lib/element/substitution.js +5 -5
  25. package/lib/element/term.js +2 -2
  26. package/lib/element/topLevelAssertion/axiom.js +4 -5
  27. package/lib/element/topLevelAssertion/conjecture.js +3 -3
  28. package/lib/element/topLevelAssertion/lemma.js +3 -3
  29. package/lib/element/topLevelAssertion/theorem.js +3 -3
  30. package/lib/element/topLevelAssertion.js +59 -69
  31. package/lib/node/metavariable.js +18 -1
  32. package/lib/process/unify.js +5 -7
  33. package/lib/process/validation.js +5 -2
  34. package/lib/utilities/element.js +34 -56
  35. package/package.json +2 -2
  36. package/src/context/liminal.js +18 -16
  37. package/src/context/phaneric.js +3 -3
  38. package/src/context.js +2 -2
  39. package/src/element/assertion/contained.js +19 -18
  40. package/src/element/assertion/defined.js +16 -16
  41. package/src/element/conclusion.js +9 -11
  42. package/src/element/declaration/variable.js +1 -1
  43. package/src/element/deduction.js +6 -6
  44. package/src/element/equality.js +2 -2
  45. package/src/element/frame.js +10 -2
  46. package/src/element/goal.js +6 -8
  47. package/src/element/judgement.js +7 -11
  48. package/src/element/metavariable.js +56 -52
  49. package/src/element/proof.js +1 -1
  50. package/src/element/proofAssertion/premise.js +17 -25
  51. package/src/element/proofAssertion/step.js +4 -4
  52. package/src/element/proofAssertion/supposition.js +44 -43
  53. package/src/element/rule.js +27 -25
  54. package/src/element/statement.js +71 -41
  55. package/src/element/substitution/frame.js +88 -82
  56. package/src/element/substitution/reference.js +30 -32
  57. package/src/element/substitution/statement.js +97 -132
  58. package/src/element/substitution/term.js +95 -89
  59. package/src/element/substitution.js +6 -6
  60. package/src/element/term.js +1 -1
  61. package/src/element/topLevelAssertion/axiom.js +3 -5
  62. package/src/element/topLevelAssertion/conjecture.js +2 -2
  63. package/src/element/topLevelAssertion/lemma.js +2 -2
  64. package/src/element/topLevelAssertion/theorem.js +2 -2
  65. package/src/element/topLevelAssertion.js +61 -80
  66. package/src/node/metavariable.js +28 -1
  67. package/src/process/unify.js +7 -16
  68. package/src/process/validation.js +5 -4
  69. package/src/utilities/element.js +49 -64
@@ -57,15 +57,15 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
57
57
  matchVariableNode(variableNode) {
58
58
  return this.targetTerm.matchVariableNode(variableNode);
59
59
  }
60
+ compareParameter(parameter) {
61
+ const targetTermComparesToParameter = this.targetTerm.compareParameter(parameter), comparesToParameter = targetTermComparesToParameter; ///
62
+ return comparesToParameter;
63
+ }
60
64
  compareTerm(term, context) {
61
65
  term = (0, _brackets.stripBracketsFromTerm)(term, context); ///
62
66
  const replacementTermEqualToTerm = this.replacementTerm.isEqualTo(term), comparedToTerm = replacementTermEqualToTerm; ///
63
67
  return comparedToTerm;
64
68
  }
65
- compareParameter(parameter) {
66
- const targetTermComparesToParameter = this.targetTerm.compareParameter(parameter), comparesToParameter = targetTermComparesToParameter; ///
67
- return comparesToParameter;
68
- }
69
69
  validate(context, continuatino) {
70
70
  const termSubstitutionString = this.getString(); ///
71
71
  context.trace(`Validating the '${termSubstitutionString}' term substitution...`);
@@ -73,13 +73,12 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
73
73
  if (validSubstitution !== null) {
74
74
  const termSubstitution = validSubstitution; ///
75
75
  context.debug(`...the '${termSubstitutionString}' term substitution is already valid.`);
76
- continuatino(termSubstitution);
77
- return;
76
+ return continuatino(termSubstitution);
78
77
  }
79
78
  const generalContext = this.getGeneralContext(), specificContext = this.getSpecificContext();
80
79
  (0, _context.attempts)((generalContext, specificContext)=>{
81
80
  const validateTargetTerm = this.validateTargetTerm.bind(this), validateReplacementTerm = this.validateReplacementTerm.bind(this);
82
- (0, _continuation.all)([
81
+ return (0, _continuation.all)([
83
82
  validateTargetTerm,
84
83
  validateReplacementTerm
85
84
  ], generalContext, specificContext, (validates)=>{
@@ -95,7 +94,7 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
95
94
  if (validates) {
96
95
  context.debug(`...validated the '${termSubstitutionString}' term substitution.`);
97
96
  }
98
- continuatino(termSubstitution);
97
+ return continuatino(termSubstitution);
99
98
  });
100
99
  }, generalContext, specificContext);
101
100
  }
@@ -106,29 +105,26 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
106
105
  if (!targetTermSingular) {
107
106
  const targetTermString = this.targetTerm.getString(), targetTermValidates = false;
108
107
  context.debug(`The '${targetTermString}' target term is not singular.`);
109
- continuatino(targetTermValidates);
110
- return;
108
+ return continuatino(targetTermValidates);
111
109
  }
112
- (0, _context.manifest)((context)=>{
113
- (0, _context.elide)((context)=>{
114
- this.targetTerm.validate(context, (targetTerm)=>{
115
- let targetTermValidates = false;
116
- if (targetTerm !== null) {
117
- targetTermValidates = true;
118
- }
119
- if (targetTermValidates) {
120
- context.debug(`...validated the '${termSubstitutionString}' term substitution's target term...`);
121
- }
122
- continuatino(targetTermValidates);
123
- });
124
- }, context);
125
- }, specificContext, context);
110
+ (0, _context.elide)((context)=>{
111
+ return this.targetTerm.validate(context, (targetTerm)=>{
112
+ let targetTermValidates = false;
113
+ if (targetTerm !== null) {
114
+ targetTermValidates = true;
115
+ }
116
+ if (targetTermValidates) {
117
+ context.debug(`...validated the '${termSubstitutionString}' term substitution's target term...`);
118
+ }
119
+ return continuatino(targetTermValidates);
120
+ });
121
+ }, context);
126
122
  }
127
123
  validateReplacementTerm(generalContext, specificContext, continuatino) {
128
124
  const context = specificContext, termSubstitutionString = this.getString(); ///
129
125
  context.trace(`Validating the '${termSubstitutionString}' term substitution's replacement term...`);
130
126
  (0, _context.elide)((context)=>{
131
- this.replacementTerm.validate(context, (replacementTerm)=>{
127
+ return this.replacementTerm.validate(context, (replacementTerm)=>{
132
128
  let replacementTermValidates = false;
133
129
  if (replacementTerm !== null) {
134
130
  replacementTermValidates = true;
@@ -136,68 +132,76 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
136
132
  if (replacementTermValidates) {
137
133
  context.debug(`...validated the '${termSubstitutionString}' term substitution's replacement term.`);
138
134
  }
139
- continuatino(replacementTermValidates);
135
+ return continuatino(replacementTermValidates);
140
136
  });
141
137
  }, context);
142
138
  }
143
- unifySubstitution(substitution, context) {
144
- let substitutionUnifies = false;
139
+ unifySubstitution(substitution, context, continuation) {
145
140
  const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
146
141
  context.trace(`Unifying the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution...`);
147
142
  (0, _context.reconcile)((context)=>{
148
- const replacementTermUnifies = this.unifyReplacementTerm(substitution, context);
149
- if (replacementTermUnifies) {
150
- const targetTermUnifies = this.unifyTargetTerm(substitution, context);
151
- if (targetTermUnifies) {
143
+ const unifyTargetTerm = this.unifyTargetTerm.bind(this), unifyReplacementTerm = this.unifyReplacementTerm.bind(this);
144
+ return (0, _continuation.all)([
145
+ unifyReplacementTerm,
146
+ unifyTargetTerm
147
+ ], substitution, context, (substitutionUnifies)=>{
148
+ if (substitutionUnifies) {
152
149
  context.commit();
153
- substitutionUnifies = true;
154
150
  }
155
- }
151
+ if (substitutionUnifies) {
152
+ context.debug(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
153
+ }
154
+ return continuation(substitutionUnifies);
155
+ });
156
156
  }, context);
157
- if (substitutionUnifies) {
158
- context.debug(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
159
- }
160
- return substitutionUnifies;
161
157
  }
162
- unifyTargetTerm(substitution, context) {
163
- let targetTermUnifies = false;
158
+ unifyTargetTerm(substitution, context, continuation) {
164
159
  const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
165
160
  context.trace(`Unifying the '${specificSubstitutionString}' substitution's target term with the '${generalSubstitutionString}' substitution's target term...`);
166
161
  const generalSubstitutionGeneralContext = generalSubstitution.getGeneralContext(), specificSubstitutionGeneralContext = specificSubstitution.getGeneralContext(), generalSubstitutionTargetTerm = generalSubstitution.getTargetTerm(), specificSubstitutionTargetTerm = specificSubstitution.getTargetTerm(), generalContext = generalSubstitutionGeneralContext, specificContext = specificSubstitutionGeneralContext, generalTerm = generalSubstitutionTargetTerm, specificTerm = specificSubstitutionTargetTerm; ///
167
162
  (0, _context.reconcile)((specificContext)=>{
168
- const termNode = generalTerm.getNode(), variable = variableFromTermNode(termNode, generalContext);
169
- if (variable !== null) {
170
- const term = specificTerm, termUnifies = variable.unifyTerm(term, generalContext, specificContext);
163
+ const termNode = generalTerm.getTermNode(), variable = variableFromTermNode(termNode, generalContext);
164
+ if (variable === null) {
165
+ const targetTermUnifies = false;
166
+ return continuation(targetTermUnifies);
167
+ }
168
+ const term = specificTerm; ///
169
+ return variable.unifyTerm(term, generalContext, specificContext, (termUnifies)=>{
170
+ let targetTermUnifies = false;
171
171
  if (termUnifies) {
172
172
  specificContext.commit(context);
173
173
  targetTermUnifies = true;
174
174
  }
175
- }
175
+ if (targetTermUnifies) {
176
+ context.trace(`...unified the '${specificSubstitutionString}' substitution's target term with the '${generalSubstitutionString}' substitution's target term.`);
177
+ }
178
+ return continuation(targetTermUnifies);
179
+ });
176
180
  }, specificContext);
177
- if (targetTermUnifies) {
178
- context.trace(`...unified the '${specificSubstitutionString}' substitution's target term with the '${generalSubstitutionString}' substitution's target term.`);
179
- }
180
- return targetTermUnifies;
181
181
  }
182
- unifyReplacementTerm(substitution, context) {
183
- let replacementTermUnifies = false;
182
+ unifyReplacementTerm(substitution, context, continuation) {
184
183
  const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
185
184
  context.trace(`Unifying the '${specificSubstitutionString}' substitution's replacement term with the '${generalSubstitutionString}' substitution's replacement term...`);
186
185
  const generalSubstitutionSpecificContext = generalSubstitution.getSpecificContext(), specificSubstitutionSpecificContext = specificSubstitution.getSpecificContext(), generalSubstitutionReplacementTerm = generalSubstitution.getReplacementTerm(), specificSubstitutionReplacementTerm = specificSubstitution.getReplacementTerm(), generalContext = generalSubstitutionSpecificContext, specificContext = specificSubstitutionSpecificContext, generalTerm = generalSubstitutionReplacementTerm, specificTerm = specificSubstitutionReplacementTerm; ///
187
186
  (0, _context.reconcile)((specificContext)=>{
188
187
  const termNode = generalTerm.getNode(), variable = variableFromTermNode(termNode, generalContext);
189
- if (variable !== null) {
190
- const term = specificTerm, termUnifies = variable.unifyTerm(term, generalContext, specificContext);
188
+ if (variable === null) {
189
+ const replacementTermUnifies = false;
190
+ return continuation(replacementTermUnifies);
191
+ }
192
+ const term = specificTerm; ///
193
+ return variable.unifyTerm(term, generalContext, specificContext, (termUnifies)=>{
194
+ let replacementTermUnifies = false;
191
195
  if (termUnifies) {
192
196
  specificContext.commit(context);
193
197
  replacementTermUnifies = true;
194
198
  }
195
- }
199
+ if (replacementTermUnifies) {
200
+ context.trace(`...unified the '${specificSubstitutionString}' substitution's replacement term with the '${generalSubstitutionString}' substitution's replacement term.`);
201
+ }
202
+ return continuation(replacementTermUnifies);
203
+ });
196
204
  }, specificContext);
197
- if (replacementTermUnifies) {
198
- context.trace(`...unified the '${specificSubstitutionString}' substitution's replacement term with the '${generalSubstitutionString}' substitution's replacement term.`);
199
- }
200
- return replacementTermUnifies;
201
205
  }
202
206
  static name = "TermSubstitution";
203
207
  static fromJSON(json, context) {
@@ -216,12 +220,16 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
216
220
  }
217
221
  return termSubstitutionn;
218
222
  }
219
- static fromStatement(statement, context) {
223
+ static fromStatementNode(statementNode, context) {
220
224
  let termSubstitution = null;
221
- const termSubstitutionNode = statement.getTermSubstitutionNode();
225
+ const termSubstitutionNode = statementNode.getTermSubstitutionNode();
222
226
  if (termSubstitutionNode !== null) {
223
- const generalContext = context, specificContext = context; ///
224
- termSubstitution = (0, _element.termSubstitutionFromTermSubstitutionNode)(termSubstitutionNode, generalContext, specificContext);
227
+ (0, _context.ablate)((context)=>{
228
+ (0, _context.descend)((context)=>{
229
+ const generalContext = context, specificContext = context; ///
230
+ termSubstitution = (0, _element.termSubstitutionFromTermSubstitutionNode)(termSubstitutionNode, generalContext, specificContext);
231
+ }, context);
232
+ }, context);
225
233
  }
226
234
  return termSubstitution;
227
235
  }
@@ -230,11 +238,12 @@ const _default = (0, _elements.define)(class TermSubstitution extends _substitut
230
238
  term = (0, _brackets.stripBracketsFromTerm)(term, context); ///
231
239
  let termSubstitution;
232
240
  (0, _context.ablates)((generalContext, specificContext)=>{
233
- const context = specificContext; ///
234
- (0, _context.instantiate)((context)=>{
235
- const specificContext = context, termSubstitutionString = (0, _string.termSubstitutionStringFromTermAndVariable)(term, variable), string = termSubstitutionString, termSubstitutionNode = (0, _instantiate.instantiateTermSubstitution)(string, context);
236
- termSubstitution = (0, _element.termSubstitutionFromTermSubstitutionNode)(termSubstitutionNode, generalContext, specificContext);
237
- }, context);
241
+ (0, _context.instantiate)((specificContext)=>{
242
+ (0, _context.manifest)((generalContext)=>{
243
+ const termSubstitutionString = (0, _string.termSubstitutionStringFromTermAndVariable)(term, variable), string = termSubstitutionString, context = specificContext, termSubstitutionNode = (0, _instantiate.instantiateTermSubstitution)(string, context);
244
+ termSubstitution = (0, _element.termSubstitutionFromTermSubstitutionNode)(termSubstitutionNode, generalContext, specificContext);
245
+ }, generalContext, specificContext);
246
+ }, specificContext);
238
247
  }, generalContext, specificContext);
239
248
  return termSubstitution;
240
249
  }
@@ -256,4 +265,4 @@ function replacementTermFromTermSubstitutionNode(termSubstitutionNode, specificC
256
265
  return replacementTerm;
257
266
  }
258
267
 
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi90ZXJtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUZXJtU3Vic3RpdHV0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVsaWRlLCBhYmxhdGVzLCBtYW5pZmVzdCwgYXR0ZW1wdHMsIHJlY29uY2lsZSwgaW5zdGFudGlhdGUsIHVuc2VyaWFsaXNlcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFRlcm1TdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRhcmdldFRlcm0gPSB0YXJnZXRUZXJtO1xuICAgIHRoaXMucmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtO1xuICB9XG5cbiAgZ2V0VGFyZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRUZXJtO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50VGVybTtcbiAgfVxuXG4gIGdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFRhcmdldE5vZGUoKSB7XG4gICAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0aGlzLnRhcmdldFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRUZXJtTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdGVyZ2V0Tm9kZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50Tm9kZSgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGhpcy5yZXBsYWNlbWVudFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50VGVybU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50Tm9kZTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlTm9kZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0VGVybS5nZXRWYXJpYWJsZU5vZGUoKTsgfVxuXG4gIGlzVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0YXJnZXRUZXJtRXF1YWxUb1JlcGxhY2VtZW50VGVybSA9IHRoaXMudGFyZ2V0VGVybS5pc0VxdWFsVG8odGhpcy5yZXBsYWNlbWVudFRlcm0pLFxuICAgICAgICAgIHRyaXZpYWwgPSB0YXJnZXRUZXJtRXF1YWxUb1JlcGxhY2VtZW50VGVybTsgLy8vXG5cbiAgICByZXR1cm4gdHJpdmlhbDtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy50YXJnZXRUZXJtLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7IH1cblxuICBjb21wYXJlVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgdGVybSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZXBsYWNlbWVudFRlcm1FcXVhbFRvVGVybSA9IHRoaXMucmVwbGFjZW1lbnRUZXJtLmlzRXF1YWxUbyh0ZXJtKSxcbiAgICAgICAgICBjb21wYXJlZFRvVGVybSA9IHJlcGxhY2VtZW50VGVybUVxdWFsVG9UZXJtOyAvLy9cblxuICAgIHJldHVybiBjb21wYXJlZFRvVGVybTtcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0VGVybUNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0aGlzLnRhcmdldFRlcm0uY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpLFxuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0YXJnZXRUZXJtQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpbm8pIHtcbiAgICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFZhbGlkU3Vic3RpdHV0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uID0gdmFsaWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdWJzdGl0dXRpb25TdHJpbmd9JyB0ZXJtIHN1YnN0aXR1dGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICBjb250aW51YXRpbm8odGVybVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IHRoaXMuZ2V0R2VuZXJhbENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSB0aGlzLmdldFNwZWNpZmljQ29udGV4dCgpO1xuXG4gICAgYXR0ZW1wdHMoKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlVGFyZ2V0VGVybSA9IHRoaXMudmFsaWRhdGVUYXJnZXRUZXJtLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50VGVybSA9IHRoaXMudmFsaWRhdGVSZXBsYWNlbWVudFRlcm0uYmluZCh0aGlzKTtcblxuICAgICAgYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUYXJnZXRUZXJtLFxuICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50VGVybVxuICAgICAgXSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdWJzdGl0dXRpb25TdHJpbmd9JyB0ZXJtIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlubyh0ZXJtU3Vic3RpdHV0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRUZXJtKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nfScgdGVybSBzdWJzdGl0dXRpb24ncyB0YXJnZXQgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGFyZ2V0VGVybVNpbmd1bGFyID0gdGhpcy50YXJnZXRUZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGFyZ2V0VGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0YXJnZXRUZXJtU3RyaW5nID0gdGhpcy50YXJnZXRUZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdGFyZ2V0VGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGFyZ2V0VGVybVN0cmluZ30nIHRhcmdldCB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgY29udGludWF0aW5vKHRhcmdldFRlcm1WYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWFuaWZlc3QoKGNvbnRleHQpID0+IHtcbiAgICAgIGVsaWRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHRoaXMudGFyZ2V0VGVybS52YWxpZGF0ZShjb250ZXh0LCAodGFyZ2V0VGVybSkgPT4ge1xuICAgICAgICAgIGxldCB0YXJnZXRUZXJtVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0VGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGFyZ2V0VGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhcmdldFRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHRlcm0uLi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51YXRpbm8odGFyZ2V0VGVybVZhbGlkYXRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVwbGFjZW1lbnRUZXJtKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgdGVybS4uLmApO1xuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMucmVwbGFjZW1lbnRUZXJtLnZhbGlkYXRlKGNvbnRleHQsIChyZXBsYWNlbWVudFRlcm0pID0+IHtcbiAgICAgICAgbGV0IHJlcGxhY2VtZW50VGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudFRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXBsYWNlbWVudFRlcm1WYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50VGVybVZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgdGVybS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlubyhyZXBsYWNlbWVudFRlcm1WYWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3Vic3RpdHV0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudFRlcm1VbmlmaWVzID0gdGhpcy51bmlmeVJlcGxhY2VtZW50VGVybShzdWJzdGl0dXRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVwbGFjZW1lbnRUZXJtVW5pZmllcykge1xuICAgICAgICBjb25zdCB0YXJnZXRUZXJtVW5pZmllcyA9IHRoaXMudW5pZnlUYXJnZXRUZXJtKHN1YnN0aXR1dGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRhcmdldFRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoKTtcblxuICAgICAgICAgIHN1YnN0aXR1dGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5VGFyZ2V0VGVybShzdWJzdGl0dXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdGFyZ2V0VGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldFRlcm0gPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFRhcmdldFRlcm0oKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldFRlcm0gPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRUYXJnZXRUZXJtKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0VGVybSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNUZXJtID0gc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRUZXJtOyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGdlbmVyYWxDb250ZXh0KTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSBzcGVjaWZpY1Rlcm0sICAvLy9cbiAgICAgICAgICAgICAgdGVybVVuaWZpZXMgPSB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHRhcmdldFRlcm1VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodGFyZ2V0VGVybVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRUZXJtVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5UmVwbGFjZW1lbnRUZXJtKHN1YnN0aXR1dGlvbiwgY29udGV4dCkge1xuICAgIGxldCByZXBsYWNlbWVudFRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmcgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3BlY2lmaWNDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50VGVybSA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudFRlcm0gPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudFRlcm0oKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxUZXJtID0gZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50VGVybSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNUZXJtID0gc3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudFRlcm07IC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVybSA9IHNwZWNpZmljVGVybSwgIC8vL1xuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgcmVwbGFjZW1lbnRUZXJtVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHJlcGxhY2VtZW50VGVybVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtVW5pZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtU3Vic3RpdHV0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVN1YnN0aXR1dGlvbm4gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdW5zZXJpYWxpc2VzKChqc29uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgdGVybVN1YnN0aXR1dGlvbm4gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuICAgICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9ubjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50LmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGVybUFuZFZhcmlhYmxlKHRlcm0sIHZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgdGVybSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTsgLy8vXG5cbiAgICBsZXQgdGVybVN1YnN0aXR1dGlvbjtcblxuICAgIGFibGF0ZXMoKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSksXG4gICAgICAgICAgICAgIHN0cmluZyA9IHRlcm1TdWJzdGl0dXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gZ2VuZXJhbENvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlKTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gc3BlY2lmaWNDb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiU3Vic3RpdHV0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsImdldFRhcmdldFRlcm0iLCJnZXRSZXBsYWNlbWVudFRlcm0iLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldFRhcmdldE5vZGUiLCJ0YXJnZXRUZXJtTm9kZSIsInRlcmdldE5vZGUiLCJnZXRSZXBsYWNlbWVudE5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwicmVwbGFjZW1lbnROb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwiaXNUcml2aWFsIiwidGFyZ2V0VGVybUVxdWFsVG9SZXBsYWNlbWVudFRlcm0iLCJpc0VxdWFsVG8iLCJ0cml2aWFsIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJjb21wYXJlVGVybSIsInRlcm0iLCJzdHJpcEJyYWNrZXRzRnJvbVRlcm0iLCJyZXBsYWNlbWVudFRlcm1FcXVhbFRvVGVybSIsImNvbXBhcmVkVG9UZXJtIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsInRhcmdldFRlcm1Db21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtZXRlciIsInZhbGlkYXRlIiwiY29udGludWF0aW5vIiwidGVybVN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRTdWJzdGl0dXRpb24iLCJmaW5kVmFsaWRTdWJzdGl0dXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZW5lcmFsQ29udGV4dCIsImdldEdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiZ2V0U3BlY2lmaWNDb250ZXh0IiwiYXR0ZW1wdHMiLCJ2YWxpZGF0ZVRhcmdldFRlcm0iLCJiaW5kIiwidmFsaWRhdGVSZXBsYWNlbWVudFRlcm0iLCJhbGwiLCJ2YWxpZGF0ZXMiLCJzdWJzdGl0dXRpb24iLCJhZGRTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ0YXJnZXRUZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGFyZ2V0VGVybVN0cmluZyIsInRhcmdldFRlcm1WYWxpZGF0ZXMiLCJtYW5pZmVzdCIsImVsaWRlIiwicmVwbGFjZW1lbnRUZXJtVmFsaWRhdGVzIiwidW5pZnlTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25VbmlmaWVzIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVjb25jaWxlIiwicmVwbGFjZW1lbnRUZXJtVW5pZmllcyIsInVuaWZ5UmVwbGFjZW1lbnRUZXJtIiwidGFyZ2V0VGVybVVuaWZpZXMiLCJ1bmlmeVRhcmdldFRlcm0iLCJnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldFRlcm0iLCJzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldFRlcm0iLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsInRlcm1Ob2RlIiwidmFyaWFibGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50VGVybSIsInNwZWNpZmljU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRUZXJtIiwibmFtZSIsImZyb21KU09OIiwianNvbiIsInRlcm1TdWJzdGl0dXRpb25uIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZXMiLCJpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24iLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiY29udGV4dHMiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsImZyb21UZXJtQW5kVmFyaWFibGUiLCJhYmxhdGVzIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1l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
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi90ZXJtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUZXJtU3Vic3RpdHV0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVsaWRlLCBhYmxhdGUsIGFibGF0ZXMsIGRlc2NlbmQsIG1hbmlmZXN0LCBhdHRlbXB0cywgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSwgdW5zZXJpYWxpc2VzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVGVybVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGFyZ2V0VGVybSA9IHRhcmdldFRlcm07XG4gICAgdGhpcy5yZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm07XG4gIH1cblxuICBnZXRUYXJnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldFRlcm07XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZW1lbnRUZXJtO1xuICB9XG5cbiAgZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0Tm9kZSgpIHtcbiAgICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRoaXMudGFyZ2V0VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVyZ2V0Tm9kZSA9IHRhcmdldFRlcm1Ob2RlOyAvLy9cblxuICAgIHJldHVybiB0ZXJnZXROb2RlO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0aGlzLnJlcGxhY2VtZW50VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gcmVwbGFjZW1lbnRUZXJtTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXRUZXJtLmdldFZhcmlhYmxlTm9kZSgpOyB9XG5cbiAgaXNUcml2aWFsKCkge1xuICAgIGNvbnN0IHRhcmdldFRlcm1FcXVhbFRvUmVwbGFjZW1lbnRUZXJtID0gdGhpcy50YXJnZXRUZXJtLmlzRXF1YWxUbyh0aGlzLnJlcGxhY2VtZW50VGVybSksXG4gICAgICAgICAgdHJpdmlhbCA9IHRhcmdldFRlcm1FcXVhbFRvUmVwbGFjZW1lbnRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0cml2aWFsO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLnRhcmdldFRlcm0ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTsgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0VGVybUNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0aGlzLnRhcmdldFRlcm0uY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpLFxuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0YXJnZXRUZXJtQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICBjb21wYXJlVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgdGVybSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZXBsYWNlbWVudFRlcm1FcXVhbFRvVGVybSA9IHRoaXMucmVwbGFjZW1lbnRUZXJtLmlzRXF1YWxUbyh0ZXJtKSxcbiAgICAgICAgICBjb21wYXJlZFRvVGVybSA9IHJlcGxhY2VtZW50VGVybUVxdWFsVG9UZXJtOyAvLy9cblxuICAgIHJldHVybiBjb21wYXJlZFRvVGVybTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nfScgdGVybSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kVmFsaWRTdWJzdGl0dXRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb24gPSB2YWxpZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpbm8odGVybVN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0NvbnRleHQoKTtcblxuICAgIGF0dGVtcHRzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVRhcmdldFRlcm0gPSB0aGlzLnZhbGlkYXRlVGFyZ2V0VGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVSZXBsYWNlbWVudFRlcm0gPSB0aGlzLnZhbGlkYXRlUmVwbGFjZW1lbnRUZXJtLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRhcmdldFRlcm0sXG4gICAgICAgIHZhbGlkYXRlUmVwbGFjZW1lbnRUZXJtXG4gICAgICBdLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlubyh0ZXJtU3Vic3RpdHV0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRUZXJtKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nfScgdGVybSBzdWJzdGl0dXRpb24ncyB0YXJnZXQgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGFyZ2V0VGVybVNpbmd1bGFyID0gdGhpcy50YXJnZXRUZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGFyZ2V0VGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0YXJnZXRUZXJtU3RyaW5nID0gdGhpcy50YXJnZXRUZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdGFyZ2V0VGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGFyZ2V0VGVybVN0cmluZ30nIHRhcmdldCB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlubyh0YXJnZXRUZXJtVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBlbGlkZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0VGVybS52YWxpZGF0ZShjb250ZXh0LCAodGFyZ2V0VGVybSkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0VGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0YXJnZXRUZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgdGFyZ2V0VGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0VGVybVZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHRlcm0uLi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpbm8odGFyZ2V0VGVybVZhbGlkYXRlcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVwbGFjZW1lbnRUZXJtKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN1YnN0aXR1dGlvblN0cmluZ30nIHRlcm0gc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgdGVybS4uLmApO1xuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50VGVybS52YWxpZGF0ZShjb250ZXh0LCAocmVwbGFjZW1lbnRUZXJtKSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudFRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAocmVwbGFjZW1lbnRUZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnRUZXJtVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudFRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdWJzdGl0dXRpb25TdHJpbmd9JyB0ZXJtIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHRlcm0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW5vKHJlcGxhY2VtZW50VGVybVZhbGlkYXRlcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB1bmlmeVRhcmdldFRlcm0gPSB0aGlzLnVuaWZ5VGFyZ2V0VGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdW5pZnlSZXBsYWNlbWVudFRlcm0gPSB0aGlzLnVuaWZ5UmVwbGFjZW1lbnRUZXJtLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICB1bmlmeVJlcGxhY2VtZW50VGVybSxcbiAgICAgICAgdW5pZnlUYXJnZXRUZXJtXG4gICAgICBdLCBzdWJzdGl0dXRpb24sIGNvbnRleHQsIChzdWJzdGl0dXRpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3Vic3RpdHV0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5VGFyZ2V0VGVybShzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldFRlcm0gPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFRhcmdldFRlcm0oKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldFRlcm0gPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRUYXJnZXRUZXJtKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0VGVybSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNUZXJtID0gc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRUZXJtOyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldFRlcm1Ob2RlKCksXG4gICAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCk7XG5cbiAgICAgIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0YXJnZXRUZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGFyZ2V0VGVybVVuaWZpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXJtID0gc3BlY2lmaWNUZXJtOyAgLy8vXG5cbiAgICAgIHJldHVybiB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXRUZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICB0YXJnZXRUZXJtVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0VGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgdGVybS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGFyZ2V0VGVybVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5UmVwbGFjZW1lbnRUZXJtKHN1YnN0aXR1dGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTcGVjaWZpY0NvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudFRlcm0gPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50VGVybSgpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRUZXJtID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsVGVybSA9IGdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudFRlcm0sIC8vL1xuICAgICAgICAgIHNwZWNpZmljVGVybSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRUZXJtOyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGdlbmVyYWxDb250ZXh0KTtcblxuICAgICAgaWYgKHZhcmlhYmxlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHJlcGxhY2VtZW50VGVybVVuaWZpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXJtID0gc3BlY2lmaWNUZXJtOyAgLy8vXG5cbiAgICAgIHJldHVybiB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudFRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHJlcGxhY2VtZW50VGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50VGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHRlcm0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHJlcGxhY2VtZW50VGVybVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtU3Vic3RpdHV0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVN1YnN0aXR1dGlvbm4gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdW5zZXJpYWxpc2VzKChqc29uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgdGVybVN1YnN0aXR1dGlvbm4gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuICAgICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9ubjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgIHRlcm0gPSBzdHJpcEJyYWNrZXRzRnJvbVRlcm0odGVybSwgY29udGV4dCk7IC8vL1xuXG4gICAgbGV0IHRlcm1TdWJzdGl0dXRpb247XG5cbiAgICBhYmxhdGVzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIG1hbmlmZXN0KChnZW5lcmFsQ29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gdGVybVN1YnN0aXR1dGlvblN0cmluZywgIC8vL1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlVGVybVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IGdlbmVyYWxDb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHNwZWNpZmljQ29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVGVybVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJnZXRUYXJnZXRUZXJtIiwiZ2V0UmVwbGFjZW1lbnRUZXJtIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRUYXJnZXROb2RlIiwidGFyZ2V0VGVybU5vZGUiLCJ0ZXJnZXROb2RlIiwiZ2V0UmVwbGFjZW1lbnROb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsInJlcGxhY2VtZW50Tm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImlzVHJpdmlhbCIsInRhcmdldFRlcm1FcXVhbFRvUmVwbGFjZW1lbnRUZXJtIiwiaXNFcXVhbFRvIiwidHJpdmlhbCIsIm1hdGNoVmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsInRhcmdldFRlcm1Db21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVUZXJtIiwidGVybSIsInN0cmlwQnJhY2tldHNGcm9tVGVybSIsInJlcGxhY2VtZW50VGVybUVxdWFsVG9UZXJtIiwiY29tcGFyZWRUb1Rlcm0iLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlubyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkU3Vic3RpdHV0aW9uIiwiZmluZFZhbGlkU3Vic3RpdHV0aW9uIiwidGVybVN1YnN0aXR1dGlvbiIsImRlYnVnIiwiZ2VuZXJhbENvbnRleHQiLCJnZXRHZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdldFNwZWNpZmljQ29udGV4dCIsImF0dGVtcHRzIiwidmFsaWRhdGVUYXJnZXRUZXJtIiwiYmluZCIsInZhbGlkYXRlUmVwbGFjZW1lbnRUZXJtIiwiYWxsIiwidmFsaWRhdGVzIiwic3Vic3RpdHV0aW9uIiwiYWRkU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidGFyZ2V0VGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInRhcmdldFRlcm1TdHJpbmciLCJ0YXJnZXRUZXJtVmFsaWRhdGVzIiwiZWxpZGUiLCJyZXBsYWNlbWVudFRlcm1WYWxpZGF0ZXMiLCJ1bmlmeVN1YnN0aXR1dGlvbiIsImNvbnRpbnVhdGlvbiIsImdlbmVyYWxTdWJzdGl0dXRpb24iLCJzcGVjaWZpY1N1YnN0aXR1dGlvbiIsImdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmciLCJzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyIsInJlY29uY2lsZSIsInVuaWZ5VGFyZ2V0VGVybSIsInVuaWZ5UmVwbGFjZW1lbnRUZXJtIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0VGVybSIsInNwZWNpZmljU3Vic3RpdHV0aW9uVGFyZ2V0VGVybSIsImdlbmVyYWxUZXJtIiwic3BlY2lmaWNUZXJtIiwidGVybU5vZGUiLCJnZXRUZXJtTm9kZSIsInZhcmlhYmxlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ0YXJnZXRUZXJtVW5pZmllcyIsInVuaWZ5VGVybSIsInRlcm1VbmlmaWVzIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50VGVybSIsInNwZWNpZmljU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRUZXJtIiwicmVwbGFjZW1lbnRUZXJtVW5pZmllcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJ0ZXJtU3Vic3RpdHV0aW9ubiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2VzIiwiaW5zdGFudGlhdGVUZXJtU3Vic3RpdHV0aW9uIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsImNvbnRleHRzIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiYWJsYXRlIiwiZGVzY2VuZCIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tVGVybUFuZFZhcmlhYmxlIiwiYWJsYXRlcyIsIm1hbmlmZXN0IiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ0JBOzs7ZUFBQTs7O2dDQWRvQztxRUFFWDs4QkFFTDswQkFDRzswQkFDZTs2QkFDTTt5QkFDYTt3QkFDQzt5QkFDZ0Q7Ozs7OztBQUUxRyxNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVsRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHlCQUF5QkMscUJBQVk7SUFDL0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLGVBQWUsQ0FBRTtRQUMxRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtR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
@@ -85,6 +85,10 @@ class Substitution extends Element {
85
85
  const substitutionNode = substitution.getNode(), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), equalTo = substitutionNodeMatches; ///
86
86
  return equalTo;
87
87
  }
88
+ isSimple() {
89
+ const simple = true;
90
+ return simple;
91
+ }
88
92
  isComplex() {
89
93
  const simple = this.isSimple(), complex = !simple;
90
94
  return complex;
@@ -129,10 +133,6 @@ class Substitution extends Element {
129
133
  const replacementReference = null;
130
134
  return replacementReference;
131
135
  }
132
- isSimple() {
133
- const simple = true;
134
- return simple;
135
- }
136
136
  matchVariableNode(variableNode) {
137
137
  const variableNodeMatches = false;
138
138
  return variableNodeMatches;
@@ -175,4 +175,4 @@ class Substitution extends Element {
175
175
  }
176
176
  }
177
177
 
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBzZXJpYWxpc2VzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5jbGFzcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCkge1xuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuYnJlYWtQb2ludCA9IGJyZWFrUG9pbnQ7XG4gIH1cblxuICBnZXRDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0cztcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRCcmVha1BvaW50KCkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrUG9pbnQ7XG4gIH1cblxuICBzZXRDb250ZXh0cyhjb250ZXh0cykge1xuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgfVxuXG4gIHNldFN0cmluZyhzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgfVxuXG4gIHNldE5vZGUobm9kZSkge1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBzZXRMaW5lSW5kZXgoYnJlYWtQb2ludCkge1xuICAgIHRoaXMuYnJlYWtQb2ludCA9IGJyZWFrUG9pbnQ7XG4gIH1cblxuICBhc3luYyBicmVhayhjb250ZXh0KSB7XG4gICAgdGhpcy5icmVha1BvaW50ID0gYXdhaXQgY29udGV4dC5icmVhayh0aGlzLm5vZGUsIHRoaXMuYnJlYWtQb2ludCk7XG4gIH1cblxuICBtYXRjaE5vZGUobm9kZSkgeyByZXR1cm4gdGhpcy5ub2RlLm1hdGNoKG5vZGUpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICBnZXRHZW5lcmFsQ29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuZ2V0Q29udGV4dHMoKSxcbiAgICAgICAgICBmaXJzdENvbnRleHQgPSBmaXJzdChjb250ZXh0cyksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBmaXJzdENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbiAgfVxuXG4gIGdldFNwZWNpZmljQ29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuZ2V0Q29udGV4dHMoKSxcbiAgICAgICAgICBzZWNvbmRDb250ZXh0ID0gc2Vjb25kKGNvbnRleHRzKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzZWNvbmRDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gc3BlY2lmaWNDb250ZXh0O1xuICB9XG5cbiAgc2V0R2VuZXJhbENvbnRleHQoZ2VuZXJhbENvbnRleHQpIHtcbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSB0aGlzLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICBdO1xuXG4gICAgdGhpcy5zZXRDb250ZXh0cyhjb250ZXh0cyk7XG4gIH1cblxuICBzZXRTcGVjaWZpY0NvbnRleHQoc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICAgIF07XG5cbiAgICB0aGlzLnNldENvbnRleHRzKGNvbnRleHRzKTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc0NvbXBsZXgoKSB7XG4gICAgY29uc3Qgc2ltcGxlID0gdGhpcy5pc1NpbXBsZSgpLFxuICAgICAgICAgIGNvbXBsZXggPSAhc2ltcGxlO1xuXG4gICAgcmV0dXJuIGNvbXBsZXg7XG4gIH1cblxuICBpc05vblRyaXZpYWwoKSB7XG4gICAgY29uc3QgdHJpdmlhbCA9IHRoaXMuaXNUcml2aWFsKCksXG4gICAgICAgICAgbm9uVHJpdmxhbCA9ICF0cml2aWFsO1xuXG4gICAgcmV0dXJuIG5vblRyaXZsYWw7XG4gIH1cblxuICBnZXRWYXJpYWJsZSgpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb24oKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRWYXJpYWJsZU5vZGUoKSB7XG4gICAgY29uc3QgdmFyaWFibGVOb2RlID0gbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudFRlcm0oKSB7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRUZXJtID0gbnVsbDtcblxuICAgIHJldHVybiByZXBsYWNlbWVudFRlcm07XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudEZyYW1lKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50RnJhbWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudCA9IG51bGw7XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudFJlZmVyZW5jZSgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZmVyZW5jZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG4gIH1cblxuICBpc1NpbXBsZSgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHNpbXBsZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gc3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZSA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9uTm9kZSgpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICB2YWxpZFN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgY29tbWl0KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IFtcbiAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgXTtcblxuICAgIHRoaXMuc2V0Q29udGV4dHMoY29udGV4dHMpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHRzID0gdGhpcy5nZXRDb250ZXh0cygpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZXMoKC4uLmNvbnRleHRzKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY29udGV4dHMsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgLi4uY29udGV4dHMpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiU3Vic3RpdHV0aW9uIiwiZmlyc3QiLCJzZWNvbmQiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsIkVsZW1lbnQiLCJjb250ZXh0cyIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiZ2V0Q29udGV4dHMiLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0QnJlYWtQb2ludCIsInNldENvbnRleHRzIiwic2V0U3RyaW5nIiwic2V0Tm9kZSIsInNldExpbmVJbmRleCIsImJyZWFrIiwiY29udGV4dCIsIm1hdGNoTm9kZSIsIm1hdGNoIiwiZ2V0TmFtZSIsIm5hbWUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldEdlbmVyYWxDb250ZXh0IiwiZmlyc3RDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJnZXRTcGVjaWZpY0NvbnRleHQiLCJzZWNvbmRDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic2V0R2VuZXJhbENvbnRleHQiLCJzZXRTcGVjaWZpY0NvbnRleHQiLCJpc0VxdWFsVG8iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImVxdWFsVG8iLCJpc0NvbXBsZXgiLCJzaW1wbGUiLCJpc1NpbXBsZSIsImNvbXBsZXgiLCJpc05vblRyaXZpYWwiLCJ0cml2aWFsIiwiaXNUcml2aWFsIiwibm9uVHJpdmxhbCIsImdldFZhcmlhYmxlIiwidmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJnZXRTdWJzdGl0dXRpb24iLCJnZXRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldFJlcGxhY2VtZW50VGVybSIsInJlcGxhY2VtZW50VGVybSIsImdldFJlcGxhY2VtZW50RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm5vZGVNYXRjaGVzIiwiZmluZFZhbGlkU3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInZhbGlkU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidG9KU09OIiwic2VyaWFsaXNlcyIsImJyZWFrUG9pbnRKU09OIiwianNvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBeURBOzs7ZUFBcUJBOzs7MkJBdkRVO2dDQUNLO3lCQUVUO0FBRTNCLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDbEMsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO0FBRTFELE1BQU1DO0lBQ0osWUFBWUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFFO1FBQzlDLElBQUksQ0FBQ0gsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDSixRQUFRO0lBQ3RCO0lBRUFLLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0osTUFBTTtJQUNwQjtJQUVBSyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNKLElBQUk7SUFDbEI7SUFFQUssZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNKLFVBQVU7SUFDeEI7SUFFQUssWUFBWVIsUUFBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtJQUVBUyxVQUFVUixNQUFNLEVBQUU7UUFDaEIsSUFBSSxDQUFDQSxNQUFNLEdBQUdBO0lBQ2hCO0lBRUFTLFFBQVFSLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFTLGFBQWFSLFVBQVUsRUFBRTtRQUN2QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQSxNQUFNUyxNQUFNQyxPQUFPLEVBQUU7UUFDbkIsSUFB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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBzZXJpYWxpc2VzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5jbGFzcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCkge1xuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuYnJlYWtQb2ludCA9IGJyZWFrUG9pbnQ7XG4gIH1cblxuICBnZXRDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0cztcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRCcmVha1BvaW50KCkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrUG9pbnQ7XG4gIH1cblxuICBzZXRDb250ZXh0cyhjb250ZXh0cykge1xuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgfVxuXG4gIHNldFN0cmluZyhzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgfVxuXG4gIHNldE5vZGUobm9kZSkge1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBzZXRMaW5lSW5kZXgoYnJlYWtQb2ludCkge1xuICAgIHRoaXMuYnJlYWtQb2ludCA9IGJyZWFrUG9pbnQ7XG4gIH1cblxuICBhc3luYyBicmVhayhjb250ZXh0KSB7XG4gICAgdGhpcy5icmVha1BvaW50ID0gYXdhaXQgY29udGV4dC5icmVhayh0aGlzLm5vZGUsIHRoaXMuYnJlYWtQb2ludCk7XG4gIH1cblxuICBtYXRjaE5vZGUobm9kZSkgeyByZXR1cm4gdGhpcy5ub2RlLm1hdGNoKG5vZGUpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICBnZXRHZW5lcmFsQ29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuZ2V0Q29udGV4dHMoKSxcbiAgICAgICAgICBmaXJzdENvbnRleHQgPSBmaXJzdChjb250ZXh0cyksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBmaXJzdENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbiAgfVxuXG4gIGdldFNwZWNpZmljQ29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuZ2V0Q29udGV4dHMoKSxcbiAgICAgICAgICBzZWNvbmRDb250ZXh0ID0gc2Vjb25kKGNvbnRleHRzKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzZWNvbmRDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gc3BlY2lmaWNDb250ZXh0O1xuICB9XG5cbiAgc2V0R2VuZXJhbENvbnRleHQoZ2VuZXJhbENvbnRleHQpIHtcbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSB0aGlzLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICBdO1xuXG4gICAgdGhpcy5zZXRDb250ZXh0cyhjb250ZXh0cyk7XG4gIH1cblxuICBzZXRTcGVjaWZpY0NvbnRleHQoc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICAgIF07XG5cbiAgICB0aGlzLnNldENvbnRleHRzKGNvbnRleHRzKTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1NpbXBsZSgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHNpbXBsZTtcbiAgfVxuXG4gIGlzQ29tcGxleCgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSB0aGlzLmlzU2ltcGxlKCksXG4gICAgICAgICAgY29tcGxleCA9ICFzaW1wbGU7XG5cbiAgICByZXR1cm4gY29tcGxleDtcbiAgfVxuXG4gIGlzTm9uVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0cml2aWFsID0gdGhpcy5pc1RyaXZpYWwoKSxcbiAgICAgICAgICBub25Ucml2bGFsID0gIXRyaXZpYWw7XG5cbiAgICByZXR1cm4gbm9uVHJpdmxhbDtcbiAgfVxuXG4gIGdldFZhcmlhYmxlKCkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbigpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5vZGUoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50VGVybSgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudFRlcm0gPSBudWxsO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50RnJhbWUoKSB7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50U3RhdGVtZW50KCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50ID0gbnVsbDtcblxuICAgIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50UmVmZXJlbmNlKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVmZXJlbmNlID0gbnVsbDtcblxuICAgIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gc3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZSA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9uTm9kZSgpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICB2YWxpZFN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgY29tbWl0KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IFtcbiAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgXTtcblxuICAgIHRoaXMuc2V0Q29udGV4dHMoY29udGV4dHMpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHRzID0gdGhpcy5nZXRDb250ZXh0cygpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZXMoKC4uLmNvbnRleHRzKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY29udGV4dHMsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgLi4uY29udGV4dHMpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiU3Vic3RpdHV0aW9uIiwiZmlyc3QiLCJzZWNvbmQiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsIkVsZW1lbnQiLCJjb250ZXh0cyIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiZ2V0Q29udGV4dHMiLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0QnJlYWtQb2ludCIsInNldENvbnRleHRzIiwic2V0U3RyaW5nIiwic2V0Tm9kZSIsInNldExpbmVJbmRleCIsImJyZWFrIiwiY29udGV4dCIsIm1hdGNoTm9kZSIsIm1hdGNoIiwiZ2V0TmFtZSIsIm5hbWUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldEdlbmVyYWxDb250ZXh0IiwiZmlyc3RDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJnZXRTcGVjaWZpY0NvbnRleHQiLCJzZWNvbmRDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic2V0R2VuZXJhbENvbnRleHQiLCJzZXRTcGVjaWZpY0NvbnRleHQiLCJpc0VxdWFsVG8iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImVxdWFsVG8iLCJpc1NpbXBsZSIsInNpbXBsZSIsImlzQ29tcGxleCIsImNvbXBsZXgiLCJpc05vblRyaXZpYWwiLCJ0cml2aWFsIiwiaXNUcml2aWFsIiwibm9uVHJpdmxhbCIsImdldFZhcmlhYmxlIiwidmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJnZXRTdWJzdGl0dXRpb24iLCJnZXRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldFJlcGxhY2VtZW50VGVybSIsInJlcGxhY2VtZW50VGVybSIsImdldFJlcGxhY2VtZW50RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm5vZGVNYXRjaGVzIiwiZmluZFZhbGlkU3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInZhbGlkU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidG9KU09OIiwic2VyaWFsaXNlcyIsImJyZWFrUG9pbnRKU09OIiwianNvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBeURBOzs7ZUFBcUJBOzs7MkJBdkRVO2dDQUNLO3lCQUVUO0FBRTNCLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDbEMsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO0FBRTFELE1BQU1DO0lBQ0osWUFBWUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFFO1FBQzlDLElBQUksQ0FBQ0gsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDSixRQUFRO0lBQ3RCO0lBRUFLLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0osTUFBTTtJQUNwQjtJQUVBSyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNKLElBQUk7SUFDbEI7SUFFQUssZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNKLFVBQVU7SUFDeEI7SUFFQUssWUFBWVIsUUFBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtJQUVBUyxVQUFVUixNQUFNLEVBQUU7UUFDaEIsSUFBSSxDQUFDQSxNQUFNLEdBQUdBO0lBQ2hCO0lBRUFTLFFBQVFSLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFTLGFBQWFSLFVBQVUsRUFBRTtRQUN2QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQSxNQUFNUyxNQUFNQyxPQUFPLEVBQUU7UUFDbkIsSUFB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
@@ -129,7 +129,7 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
129
129
  return continuation(term, context);
130
130
  }
131
131
  let term = this;
132
- (0, _continuation.exists)(_validation.validateTerms, term, context, (termValidates)=>{
132
+ return (0, _continuation.exists)(_validation.validateTerms, term, context, (termValidates)=>{
133
133
  if (termValidates) {
134
134
  context.addTerm(term);
135
135
  context.debug(`...validated the '${termString}' term.`);
@@ -240,4 +240,4 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
240
240
  }
241
241
  });
242
242
 
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdW5pZnlUZXJtV2l0aFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBwcm92aXNpb25hbEZyb21KU09OLCBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFRlcm0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvdmlzaW9uYWwpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIHJldHVybiB2YXJpYWJsZUlkZW50aWZpZXI7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKCkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgZXN0YWJsaXNoZWQgPSAhcHJvdmlzaW9uYWw7XG5cbiAgICByZXR1cm4gZXN0YWJsaXNoZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gdGVybU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBmaWx0ZXIodmFyaWFibGVzLCAodmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmRlZmluZWRWYXJpYWJsZXMgPSB2YXJpYWJsZXMsIC8vL1xuICAgICAgICAgIHVuZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IHVuZGVmaW5lZFZhcmlhYmxlcy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdW5kZWQgPSAodW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoIDw9IDEpO1xuXG4gICAgcmV0dXJuIGdyb3VuZGVkO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IHRlcm1Ob2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVzTGVuZ3RoID0gdmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9ICh2YXJpYWJsZXNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGdyb3VuZGVkID0gdGhpcy5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IGdyb3VuZGVkOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSB0ZXJtTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUEgPSB2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICB2YXJpYWJsZU5vZGUgPSB0aGlzLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiA9IHZhcmlhYmxlTm9kZUEubWF0Y2godmFyaWFibGVOb2RlQik7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVBTWF0Y2hlc1ZhcmlhYmxlTm9kZUIpIHtcbiAgICAgICAgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRydWU7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSB0ZXJtTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcklkZW50aWZpZXIgPSBwYXJhbWV0ZXIuZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgICBpZiAocGFyYW1ldGVySWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyID09PSB2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIGZpbmRWYWxpZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdmFsaWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRUZXJtO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFRlcm0gPSB0aGlzLmZpbmRWYWxpZFRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRUZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtID0gdmFsaWRUZXJtOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IHRlcm0gPSB0aGlzO1xuXG4gICAgZXhpc3RzKHZhbGlkYXRlVGVybXMsIHRlcm0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAoY29udGludWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVhdGlvbiA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3RyaWN0OyAvLy9cblxuICAgICAgc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLi4uYCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzR2l2ZW5UeXBlID0gZmFsc2U7XG5cbiAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNHaXZlblR5cGUgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgY29uc3QgdHlwZUVzdGFibGlzaGVkID0gdHlwZS5pc0VzdGFibGlzaGVkKCksXG4gICAgICAgICAgICAgICAgICB0ZXJtUHJvdmlzaW9uYWwgPSB0ZXJtLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVFc3RhYmxpc2hlZCAmJiB0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVzR2l2ZW5UeXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVBc1Byb3BlcnR5KGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgICBsZXQgdGVybSA9IG51bGw7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlc0FzUHJvcGVydHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkVGVybSA9IHRoaXMuZmluZFZhbGlkVGVybShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFRlcm0gIT09IG51bGwpIHtcbiAgICAgIHRlcm0gPSB2YWxpZFRlcm07IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmQpIHtcbiAgICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gICAgICBpZiAodGVybVVuaWZpZXNXaXRoUHJvcGVydGllcykge1xuICAgICAgICB2YWxpZGF0ZXNBc1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzQXNQcm9wZXJ0eSkge1xuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FzUHJvcGVydHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSB0aGlzLFxuICAgICAgICAgIHNwZWNpZmljVGVybSA9IHRlcm0sXG4gICAgICAgICAgZ2VuZXJhbFRlcm1TdHJpbmcgPSBnZW5lcmFsVGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpeFRlcm1TdHJpbmcgPSBzcGVjaWZpY1Rlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaXhUZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsVGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSA9IHVuaWZ5VGVybUludHJpbnNpY2FsbHkoZ2VuZXJhbFRlcm0sIHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5KSB7XG4gICAgICB0ZXJtVW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpeFRlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxUZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsSlNPTiA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aXNpb25hbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgdGVybU5vZGUgPSBpbnN0YW50aWF0ZVRlcm0oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgICAgIHJldHVybiB0ZXJtO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlRlcm0iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImlzUHJvdmlzaW9uYWwiLCJzZXRUeXBlIiwic2V0UHJvdmlzaW9uYWwiLCJnZXRUZXJtTm9kZSIsImdldE5vZGUiLCJ0ZXJtTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsImlzRXF1YWxUbyIsInRlcm0iLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZXF1YWxUbyIsImlzR3JvdW5kZWQiLCJkZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJsZW5ndGgiLCJncm91bmRlZCIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJ2YXJpYWJsZXNMZW5ndGgiLCJpbml0aWFsbHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJ2YXJpYWJsZU5vZGVBIiwidmFyaWFibGVOb2RlQiIsInZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiIsIm1hdGNoIiwiY29tcGFyZVRlcm0iLCJjb21wYXJlc1RvIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlcklkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZmluZFZhbGlkVGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInZhbGlkVGVybSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJleGlzdHMiLCJ2YWxpZGF0ZVRlcm1zIiwidGVybVZhbGlkYXRlcyIsImFkZFRlcm0iLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN0cmljdCIsInVuZGVmaW5lZCIsInR5cGVTdHJpbmciLCJ2YWxpZGF0ZXNHaXZlblR5cGUiLCJ0ZXJtVHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwidHlwZUVzdGFibGlzaGVkIiwidGVybVByb3Zpc2lvbmFsIiwidmFsaWRhdGVBc1Byb3BlcnR5IiwidmFsaWRhdGVGb3J3YXJkcyIsInZhbGlkYXRlc0FzUHJvcGVydHkiLCJ2YWxpZGF0ZXNGb3J3YXJkIiwidGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzIiwidW5pZnlUZXJtIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxUZXJtIiwic3BlY2lmaWNUZXJtIiwiZ2VuZXJhbFRlcm1TdHJpbmciLCJzcGVjaWZpeFRlcm1TdHJpbmciLCJ0ZXJtVW5pZmllc0ludHJpbnNpY2FsbHkiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidG9KU09OIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInByb3Zpc2lvbmFsSlNPTiIsInByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVRlcm0iLCJ0eXBlRnJvbUpTT04iLCJwcm92aXNpb25hbEZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7MkJBZitCO2dDQUNjOzBCQUV0Qjs4QkFDQTt5QkFDSzs2QkFDSTs2QkFDRTt1QkFDSzs0QkFDZ0I7c0JBQ3lDO0FBRWhHLE1BQU0sRUFBRUEsTUFBTSxFQUFFLEdBQUdDLHlCQUFjLEVBQzNCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsV0FBVyxDQUFFO1FBQ2hFLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUU7UUFFekMsSUFBSSxDQUFDRCxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0YsSUFBSTtJQUNsQjtJQUVBRyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0YsV0FBVztJQUN6QjtJQUVBRyxRQUFRSixJQUFJLEVBQUU7UUFDWixJQUFJLENBQUNBLElBQUksR0FBR0E7SUFDZDtJQUVBSyxlQUFlSixXQUFXLEVBQUU7UUFDMUIsSUFBSSxDQUFDQSxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFLLGNBQWM7UUFDWixNQUFNUixPQUFPLElBQUksQ0FBQ1MsT0FBTyxJQUNuQkMsV0FBV1YsTUFBTyxHQUFHO1FBRTNCLE9BQU9VO0lBQ1Q7SUFFQUMsa0JBQWtCO1FBQ2hCLE1BQU1ELFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCSSxlQUFlRixTQUFTQyxlQUFlO1FBRTdDLE9BQU9DO0lBQ1Q7SUFFQUMsd0JBQXdCO1FBQ3RCLE1BQU1ILFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCTSxxQkFBcUJKLFNBQVNHLHFCQUFxQjtRQUV6RCxPQUFPQztJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1aLGNBQWMsSUFBSSxDQUFDRSxhQUFhLElBQ2hDVyxjQUFjLENBQUNiO1FBRXJCLE9BQU9hO0lBQ1Q7SUFFQUMsVUFBVUMsSUFBSSxFQUFFO1FBQ2QsTUFBTVIsV0FBV1EsS0FBS1QsT0FBTyxJQUN2QlUsa0JBQWtCLElBQUksQ0FBQ0MsYUFBYSxDQUFDVixXQUNyQ1csVUFBVUYsaUJBQWtCLEdBQUc7UUFFckMsT0FBT0U7SUFDVDtJQUVBQyxXQUFXQyxnQkFBZ0IsRUFBRXpCLE9BQU8sRUFBRTtRQUNwQyxNQUFNb0IsT0FBUSxJQUFJLEVBQ1pNLFlBQVlDLElBQUFBLDhCQUFpQixFQUFDUCxNQUFNcEI7UUFFMUNSLE9BQU9rQyxXQUFXLENBQUNFO1lBQ2pCLE1BQU1DLG1DQUFtQ0osaUJBQWlCSyxRQUFRLENBQUNGO1lBRW5FLElBQUksQ0FBQ0Msa0NBQWtDO2dCQUNyQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLE1BQU1FLHFCQUFxQkwsV0FDckJNLDJCQUEyQkQsbUJBQW1CRSxNQUFNLEVBQ3BEQyxXQUFZRiw0QkFBNEI7UUFFOUMsT0FBT0U7SUFDVDtJQUVBQyxhQUFhO1FBQ1gsTUFBTXZCLFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCMEIsV0FBV3hCLFNBQVN1QixVQUFVO1FBRXBDLE9BQU9DO0lBQ1Q7SUFFQUMsb0JBQW9CckMsT0FBTyxFQUFFO1FBQzNCLE1BQU1vQixPQUFRLElBQUksRUFDWk0sWUFBWUMsSUFBQUEsOEJBQWlCLEVBQUNQLE1BQU1wQixVQUNwQ3NDLGtCQUFrQlosVUFBVU8sTUFBTSxFQUNsQ00sb0JBQXFCRCxvQkFBb0I7UUFFL0MsT0FBT0M7SUFDVDtJQUVBQyxxQkFBcUJmLGdCQUFnQixFQUFFekIsT0FBTyxFQUFFO1FBQzlDLE1BQU1rQyxXQUFXLElBQUksQ0FBQ1YsVUFBVSxDQUFDQyxrQkFBa0J6QixVQUM3Q3lDLHFCQUFxQlAsVUFBVyxHQUFHO1FBRXpDLE9BQU9PO0lBQ1Q7SUFFQW5CLGNBQWNWLFFBQVEsRUFBRTtRQUN0QixNQUFNVixPQUFPVSxVQUNQOEIsY0FBYyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3pDLE9BQzdCbUIsa0JBQWtCcUIsYUFBYSxHQUFHO1FBRXhDLE9BQU9yQjtJQUNUO0lBRUF1QixrQkFBa0I5QixZQUFZLEVBQUU7UUFDOUIsSUFBSStCLHNCQUFzQjtRQUUxQixNQUFNVCxXQUFXLElBQUksQ0FBQ0QsVUFBVTtRQUVoQyxJQUFJQyxVQUFVO1lBQ1osTUFBTVUsZ0JBQWdCaEMsY0FBYyxHQUFHO1lBRXZDQSxlQUFlLElBQUksQ0FBQ0QsZUFBZTtZQUVuQyxNQUFNa0MsZ0JBQWdCakMsY0FDaEJrQyxvQ0FBb0NGLGNBQWNHLEtBQUssQ0FBQ0Y7WUFFOUQsSUFBSUMsbUNBQW1DO2dCQUNyQ0gsc0JBQXNCLE1BQU0sR0FBRztZQUNqQztRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBSyxZQUFZOUIsSUFBSSxFQUFFO1FBQ2hCLE1BQU1SLFdBQVdRLEtBQUtULE9BQU8sSUFDdkJVLGtCQUFrQixJQUFJLENBQUNzQixTQUFTLENBQUMvQixXQUNqQ3VDLGFBQWE5QixpQkFBaUIsR0FBRztRQUV2QyxPQUFPOEI7SUFDVDtJQUVBQyxpQkFBaUJDLFNBQVMsRUFBRTtRQUMxQixJQUFJQyxxQkFBcUI7UUFFekIsTUFBTWxCLFdBQVcsSUFBSSxDQUFDRCxVQUFVO1FBRWhDLElBQUlDLFVBQVU7WUFDWixNQUFNbUIsc0JBQXNCRixVQUFVRyxhQUFhO1lBRW5ELElBQUlELHdCQUF3QixNQUFNO2dCQUNoQyxNQUFNdkMscUJBQXFCLElBQUksQ0FBQ0QscUJBQXFCO2dCQUVyRCxJQUFJd0Msd0JBQXdCdkMsb0JBQW9CO29CQUM5Q3NDLHFCQUFxQjtnQkFDdkI7WUFDRjtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRyxjQUFjekQsT0FBTyxFQUFFO1FBQ3JCLE1BQU1ZLFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCVSxPQUFPcEIsUUFBUTBELGtCQUFrQixDQUFDOUMsV0FDbEMrQyxZQUFZdkMsTUFBTSxHQUFHO1FBRTNCLE9BQU91QztJQUNUO0lBRUFDLFNBQVM1RCxPQUFPLEVBQUU2RCxZQUFZLEVBQUU7UUFDOUIsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLFNBQVMsQ0FBQztRQUV0RCxNQUFNSCxZQUFZLElBQUksQ0FBQ0YsYUFBYSxDQUFDekQ7UUFFckMsSUFBSTJELGNBQWMsTUFBTTtZQUN0QixNQUFNdkMsT0FBT3VDLFdBQVcsR0FBRztZQUUzQjNELFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVILFdBQVcsd0JBQXdCLENBQUM7WUFFN0QsT0FBT0QsYUFBYXpDLE1BQU1wQjtRQUM1QjtRQUVBLElBQUlvQixPQUFPLElBQUk7UUFFZjhDLElBQUFBLG9CQUFNLEVBQUNDLHlCQUFhLEVBQUUvQyxNQUFNcEIsU0FBUyxDQUFDb0U7WUFDcEMsSUFBSUEsZUFBZTtnQkFDakJwRSxRQUFRcUUsT0FBTyxDQUFDakQ7Z0JBRWhCcEIsUUFBUWlFLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLE9BQU8sQ0FBQztZQUN4RCxPQUFPO2dCQUNMMUMsT0FBTztZQUNUO1lBRUEsT0FBT3lDLGFBQWF6QyxNQUFNcEI7UUFDNUI7SUFDRjtJQUVBc0Usa0JBQWtCbEUsSUFBSSxFQUFFbUUsTUFBTSxFQUFFdkUsT0FBTyxFQUFFNkQsWUFBWSxFQUFFO1FBQ3JELElBQUlBLGlCQUFpQlcsV0FBVztZQUM5QlgsZUFBZTdELFNBQVMsR0FBRztZQUUzQkEsVUFBVXVFLFFBQVEsR0FBRztZQUVyQkEsU0FBUztRQUNYO1FBRUEsTUFBTUUsYUFBYXJFLEtBQUsyRCxTQUFTLElBQzNCRCxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekMvRCxRQUFRZ0UsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsa0JBQWtCLEVBQUVXLFdBQVcsU0FBUyxDQUFDO1FBRXJGLElBQUksQ0FBQ2IsUUFBUSxDQUFDNUQsU0FBUyxDQUFDb0IsTUFBTXBCO1lBQzVCLElBQUkwRSxxQkFBcUI7WUFFekIsSUFBSXRELFNBQVMsTUFBTTtnQkFDakIsTUFBTXVELFdBQVd2RCxLQUFLZCxPQUFPLElBQ3ZCc0UsaUNBQWlDRCxTQUFTRSxvQkFBb0IsQ0FBQ3pFO2dCQUVyRSxJQUFJd0UsZ0NBQWdDO29CQUNsQ0YscUJBQXFCO29CQUVyQixJQUFJSCxRQUFRO3dCQUNWLE1BQU1PLGtCQUFrQjFFLEtBQUthLGFBQWEsSUFDcEM4RCxrQkFBa0IzRCxLQUFLYixhQUFhO3dCQUUxQyxJQUFJdUUsbUJBQW1CQyxpQkFBaUI7NEJBQ3RDTCxxQkFBcUI7d0JBQ3ZCO29CQUNGO2dCQUNGO1lBQ0Y7WUFFQSxJQUFJLENBQUNBLG9CQUFvQjtnQkFDdkJ0RCxPQUFPO1lBQ1Q7WUFFQSxJQUFJc0Qsb0JBQW9CO2dCQUN0QjFFLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxrQkFBa0IsRUFBRVcsV0FBVyxPQUFPLENBQUM7WUFDdkY7WUFFQSxPQUFPWixhQUFhekM7UUFDdEI7SUFDRjtJQUVBNEQsbUJBQW1CaEYsT0FBTyxFQUFFaUYsZ0JBQWdCLEVBQUU7UUFDNUMsSUFBSTdELE9BQU87UUFFWCxNQUFNMEMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHVCQUF1QixDQUFDO1FBRXBFLElBQUlvQixzQkFBc0I7UUFFMUIsTUFBTXZCLFlBQVksSUFBSSxDQUFDRixhQUFhLENBQUN6RDtRQUVyQyxJQUFJMkQsY0FBYyxNQUFNO1lBQ3RCdkMsT0FBT3VDLFdBQVcsR0FBRztZQUVyQixNQUFNd0IsbUJBQW1CRixpQkFBaUI3RCxNQUFNcEI7WUFFaEQsSUFBSW1GLGtCQUFrQjtnQkFDcEJELHNCQUFzQjtnQkFFdEJsRixRQUFRaUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFSCxXQUFXLHdCQUF3QixDQUFDO1lBQy9ELE9BQU87Z0JBQ0wxQyxPQUFPO1lBQ1Q7UUFDRixPQUFPO1lBQ0xBLE9BQU8sSUFBSSxFQUFHLEdBQUc7WUFFakIsTUFBTWdFLDRCQUE0QkMsSUFBQUEsbUNBQXVCLEVBQUNqRSxNQUFNcEIsU0FBU2lGO1lBRXpFLElBQUlHLDJCQUEyQjtnQkFDN0JGLHNCQUFzQjtZQUN4QixPQUFPO2dCQUNMOUQsT0FBTztZQUNUO1lBRUEsSUFBSThELHFCQUFxQjtnQkFDdkJsRixRQUFRcUUsT0FBTyxDQUFDakQ7WUFDbEI7UUFDRjtRQUVBLElBQUk4RCxxQkFBcUI7WUFDdkJsRixRQUFRaUUsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcscUJBQXFCLENBQUM7UUFDdEU7UUFFQSxPQUFPMUM7SUFDVDtJQUVBa0UsVUFBVWxFLElBQUksRUFBRW1FLGNBQWMsRUFBRUMsZUFBZSxFQUFFO1FBQy9DLElBQUlDLGNBQWM7UUFFbEIsTUFBTXpGLFVBQVV3RixpQkFDVkUsY0FBYyxJQUFJLEVBQ2xCQyxlQUFldkUsTUFDZndFLG9CQUFvQkYsWUFBWTNCLFNBQVMsSUFDekM4QixxQkFBcUJGLGFBQWE1QixTQUFTO1FBRWpEL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTZCLG1CQUFtQixpQkFBaUIsRUFBRUQsa0JBQWtCLFNBQVMsQ0FBQztRQUVqRyxNQUFNRSwyQkFBMkJDLElBQUFBLDZCQUFzQixFQUFDTCxhQUFhQyxjQUFjSixnQkFBZ0JDO1FBRW5HLElBQUlNLDBCQUEwQjtZQUM1QkwsY0FBYztRQUNoQjtRQUVBLElBQUlBLGFBQWE7WUFDZnpGLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTRCLG1CQUFtQixpQkFBaUIsRUFBRUQsa0JBQWtCLE9BQU8sQ0FBQztRQUNuRztRQUVBLE9BQU9IO0lBQ1Q7SUFFQU8sU0FBUztRQUNQLE1BQU1DLFdBQVdDLElBQUFBLG9CQUFjLEVBQUMsSUFBSSxDQUFDOUYsSUFBSSxHQUNuQytGLGtCQUFrQkMsSUFBQUEsa0NBQTRCLEVBQUMsSUFBSSxDQUFDL0YsV0FBVyxHQUMvREosU0FBUyxJQUFJLENBQUM4RCxTQUFTO1FBRTdCLElBQUk1RDtRQUVKQSxhQUFhLElBQUksQ0FBQ2tHLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCM0csMkJBQTJCUTtRQUVsREEsYUFBYW1HLGdCQUFpQixHQUFHO1FBRWpDLE1BQU1sRyxPQUFPNkYsVUFDUDVGLGNBQWM4RixpQkFDZEksT0FBTztZQUNMdEc7WUFDQUU7WUFDQUM7WUFDQUM7UUFDRjtRQUVOLE9BQU9rRztJQUNUO0lBRUEsT0FBT0MsT0FBTyxPQUFPO0lBRXJCLE9BQU9DLFNBQVNGLElBQUksRUFBRXZHLE9BQU8sRUFBRTtRQUM3QixPQUFPMEcsSUFBQUEsb0JBQVcsRUFBQyxDQUFDMUc7WUFDbEIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR3NHLE1BQ2IzRixXQUFXK0YsSUFBQUEsNEJBQWUsRUFBQzFHLFFBQVFELFVBQ25DRSxPQUFPVSxVQUNQVCxhQUFhVCxtQkFBbUI2RyxPQUNoQ25HLE9BQU93RyxJQUFBQSxrQkFBWSxFQUFDTCxNQUFNdkcsVUFDMUJLLGNBQWN3RyxJQUFBQSx5QkFBbUIsRUFBQ04sTUFBTXZHO1lBRTlDQSxVQUFVO1lBRVYsTUFBTW9CLE9BQU8sSUFBSXRCLEtBQUtFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE1BQU1DO1lBRS9ELE9BQU9lO1FBQ1QsR0FBR3BCO0lBQ0w7QUFDRiJ9
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdW5pZnlUZXJtV2l0aFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBwcm92aXNpb25hbEZyb21KU09OLCBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFRlcm0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvdmlzaW9uYWwpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIHJldHVybiB2YXJpYWJsZUlkZW50aWZpZXI7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKCkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgZXN0YWJsaXNoZWQgPSAhcHJvdmlzaW9uYWw7XG5cbiAgICByZXR1cm4gZXN0YWJsaXNoZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gdGVybU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBmaWx0ZXIodmFyaWFibGVzLCAodmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmRlZmluZWRWYXJpYWJsZXMgPSB2YXJpYWJsZXMsIC8vL1xuICAgICAgICAgIHVuZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IHVuZGVmaW5lZFZhcmlhYmxlcy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdW5kZWQgPSAodW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoIDw9IDEpO1xuXG4gICAgcmV0dXJuIGdyb3VuZGVkO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IHRlcm1Ob2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVzTGVuZ3RoID0gdmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9ICh2YXJpYWJsZXNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGdyb3VuZGVkID0gdGhpcy5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IGdyb3VuZGVkOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSB0ZXJtTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUEgPSB2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICB2YXJpYWJsZU5vZGUgPSB0aGlzLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiA9IHZhcmlhYmxlTm9kZUEubWF0Y2godmFyaWFibGVOb2RlQik7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVBTWF0Y2hlc1ZhcmlhYmxlTm9kZUIpIHtcbiAgICAgICAgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRydWU7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSB0ZXJtTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcklkZW50aWZpZXIgPSBwYXJhbWV0ZXIuZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgICBpZiAocGFyYW1ldGVySWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyID09PSB2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIGZpbmRWYWxpZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdmFsaWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRUZXJtO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFRlcm0gPSB0aGlzLmZpbmRWYWxpZFRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRUZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtID0gdmFsaWRUZXJtOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IHRlcm0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIGV4aXN0cyh2YWxpZGF0ZVRlcm1zLCB0ZXJtLCBjb250ZXh0LCAodGVybVZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlR2l2ZW5UeXBlKHR5cGUsIHN0cmljdCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKGNvbnRpbnVhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51YXRpb24gPSBjb250ZXh0OyAvLy9cblxuICAgICAgY29udGV4dCA9IHN0cmljdDsgLy8vXG5cbiAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGdpdmVuIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgdmFsaWRhdGVzR2l2ZW5UeXBlID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVFc3RhYmxpc2hlZCA9IHR5cGUuaXNFc3RhYmxpc2hlZCgpLFxuICAgICAgICAgICAgICAgICAgdGVybVByb3Zpc2lvbmFsID0gdGVybS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlRXN0YWJsaXNoZWQgJiYgdGVybVByb3Zpc2lvbmFsKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRlc0dpdmVuVHlwZSkge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc0dpdmVuVHlwZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGdpdmVuIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNQcm9wZXJ0eShjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gICAgbGV0IHRlcm0gPSBudWxsO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgcHJvcGVydHkuLi5gKTtcblxuICAgIGxldCB2YWxpZGF0ZXNBc1Byb3BlcnR5ID0gZmFsc2U7XG5cbiAgICBjb25zdCB2YWxpZFRlcm0gPSB0aGlzLmZpbmRWYWxpZFRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRUZXJtICE9PSBudWxsKSB7XG4gICAgICB0ZXJtID0gdmFsaWRUZXJtOyAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVzRm9yd2FyZCA9IHZhbGlkYXRlRm9yd2FyZHModGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNGb3J3YXJkKSB7XG4gICAgICAgIHZhbGlkYXRlc0FzUHJvcGVydHkgPSB0cnVlO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVybSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlcm0gPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMgPSB1bmlmeVRlcm1XaXRoUHJvcGVydGllcyh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc0FzUHJvcGVydHkpIHtcbiAgICAgICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNBc1Byb3BlcnR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgcHJvcGVydHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICB1bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxUZXJtID0gdGhpcyxcbiAgICAgICAgICBzcGVjaWZpY1Rlcm0gPSB0ZXJtLFxuICAgICAgICAgIGdlbmVyYWxUZXJtU3RyaW5nID0gZ2VuZXJhbFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaXhUZXJtU3RyaW5nID0gc3BlY2lmaWNUZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZml4VGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFRlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeVRlcm1JbnRyaW5zaWNhbGx5KGdlbmVyYWxUZXJtLCBzcGVjaWZpY1Rlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaXhUZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsVGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICBwcm92aXNpb25hbEpTT04gPSBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHRoaXMucHJvdmlzaW9uYWwpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWxcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVGVybVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHRlcm1Ob2RlID0gaW5zdGFudGlhdGVUZXJtKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gICAgICByZXR1cm4gdGVybTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJUZXJtIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInR5cGUiLCJwcm92aXNpb25hbCIsImdldFR5cGUiLCJpc1Byb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwiZ2V0VGVybU5vZGUiLCJnZXROb2RlIiwidGVybU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJpc0VzdGFibGlzaGVkIiwiZXN0YWJsaXNoZWQiLCJpc0VxdWFsVG8iLCJ0ZXJtIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImVxdWFsVG8iLCJpc0dyb3VuZGVkIiwiZGVmaW5lZFZhcmlhYmxlcyIsInZhcmlhYmxlcyIsInZhcmlhYmxlc0Zyb21UZXJtIiwidmFyaWFibGUiLCJkZWZpbmVkVmFyaWFibGVzSW5jbHVkZXNWYXJpYWJsZSIsImluY2x1ZGVzIiwidW5kZWZpbmVkVmFyaWFibGVzIiwidW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoIiwibGVuZ3RoIiwiZ3JvdW5kZWQiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJpc0luaXRpYWxseUdyb3VuZGVkIiwidmFyaWFibGVzTGVuZ3RoIiwiaW5pdGlhbGx5R3JvdW5kZWQiLCJpc0ltcGxpY2l0bHlHcm91bmRlZCIsImltcGxpY2l0bHlHcm91bmRlZCIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwidmFyaWFibGVOb2RlQSIsInZhcmlhYmxlTm9kZUIiLCJ2YXJpYWJsZU5vZGVBTWF0Y2hlc1ZhcmlhYmxlTm9kZUIiLCJtYXRjaCIsImNvbXBhcmVUZXJtIiwiY29tcGFyZXNUbyIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJwYXJhbWV0ZXJJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsImZpbmRWYWxpZFRlcm0iLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ2YWxpZFRlcm0iLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwiZXhpc3RzIiwidmFsaWRhdGVUZXJtcyIsInRlcm1WYWxpZGF0ZXMiLCJhZGRUZXJtIiwidmFsaWRhdGVHaXZlblR5cGUiLCJzdHJpY3QiLCJ1bmRlZmluZWQiLCJ0eXBlU3RyaW5nIiwidmFsaWRhdGVzR2l2ZW5UeXBlIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInR5cGVFc3RhYmxpc2hlZCIsInRlcm1Qcm92aXNpb25hbCIsInZhbGlkYXRlQXNQcm9wZXJ0eSIsInZhbGlkYXRlRm9yd2FyZHMiLCJ2YWxpZGF0ZXNBc1Byb3BlcnR5IiwidmFsaWRhdGVzRm9yd2FyZCIsInRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMiLCJ1bmlmeVRlcm1XaXRoUHJvcGVydGllcyIsInVuaWZ5VGVybSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybVVuaWZpZXMiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtU3RyaW5nIiwic3BlY2lmaXhUZXJtU3RyaW5nIiwidGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtSW50cmluc2ljYWxseSIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJwcm92aXNpb25hbEpTT04iLCJwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVUZXJtIiwidHlwZUZyb21KU09OIiwicHJvdmlzaW9uYWxGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBaUJBOzs7ZUFBQTs7OzJCQWYrQjtnQ0FDYzswQkFFdEI7OEJBQ0E7eUJBQ0s7NkJBQ0k7NkJBQ0U7dUJBQ0s7NEJBQ2dCO3NCQUN5QztBQUVoRyxNQUFNLEVBQUVBLE1BQU0sRUFBRSxHQUFHQyx5QkFBYyxFQUMzQixFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsYUFBYUMsdUJBQU87SUFDOUMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFdBQVcsQ0FBRTtRQUNoRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlFO1FBRXpDLElBQUksQ0FBQ0QsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtJQUNyQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNGLElBQUk7SUFDbEI7SUFFQUcsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNGLFdBQVc7SUFDekI7SUFFQUcsUUFBUUosSUFBSSxFQUFFO1FBQ1osSUFBSSxDQUFDQSxJQUFJLEdBQUdBO0lBQ2Q7SUFFQUssZUFBZUosV0FBVyxFQUFFO1FBQzFCLElBQUksQ0FBQ0EsV0FBVyxHQUFHQTtJQUNyQjtJQUVBSyxjQUFjO1FBQ1osTUFBTVIsT0FBTyxJQUFJLENBQUNTLE9BQU8sSUFDbkJDLFdBQVdWLE1BQU8sR0FBRztRQUUzQixPQUFPVTtJQUNUO0lBRUFDLGtCQUFrQjtRQUNoQixNQUFNRCxXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQkksZUFBZUYsU0FBU0MsZUFBZTtRQUU3QyxPQUFPQztJQUNUO0lBRUFDLHdCQUF3QjtRQUN0QixNQUFNSCxXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQk0scUJBQXFCSixTQUFTRyxxQkFBcUI7UUFFekQsT0FBT0M7SUFDVDtJQUVBQyxnQkFBZ0I7UUFDZCxNQUFNWixjQUFjLElBQUksQ0FBQ0UsYUFBYSxJQUNoQ1csY0FBYyxDQUFDYjtRQUVyQixPQUFPYTtJQUNUO0lBRUFDLFVBQVVDLElBQUksRUFBRTtRQUNkLE1BQU1SLFdBQVdRLEtBQUtULE9BQU8sSUFDdkJVLGtCQUFrQixJQUFJLENBQUNDLGFBQWEsQ0FBQ1YsV0FDckNXLFVBQVVGLGlCQUFrQixHQUFHO1FBRXJDLE9BQU9FO0lBQ1Q7SUFFQUMsV0FBV0MsZ0JBQWdCLEVBQUV6QixPQUFPLEVBQUU7UUFDcEMsTUFBTW9CLE9BQVEsSUFBSSxFQUNaTSxZQUFZQyxJQUFBQSw4QkFBaUIsRUFBQ1AsTUFBTXBCO1FBRTFDUixPQUFPa0MsV0FBVyxDQUFDRTtZQUNqQixNQUFNQyxtQ0FBbUNKLGlCQUFpQkssUUFBUSxDQUFDRjtZQUVuRSxJQUFJLENBQUNDLGtDQUFrQztnQkFDckMsT0FBTztZQUNUO1FBQ0Y7UUFFQSxNQUFNRSxxQkFBcUJMLFdBQ3JCTSwyQkFBMkJELG1CQUFtQkUsTUFBTSxFQUNwREMsV0FBWUYsNEJBQTRCO1FBRTlDLE9BQU9FO0lBQ1Q7SUFFQUMsYUFBYTtRQUNYLE1BQU12QixXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQjBCLFdBQVd4QixTQUFTdUIsVUFBVTtRQUVwQyxPQUFPQztJQUNUO0lBRUFDLG9CQUFvQnJDLE9BQU8sRUFBRTtRQUMzQixNQUFNb0IsT0FBUSxJQUFJLEVBQ1pNLFlBQVlDLElBQUFBLDhCQUFpQixFQUFDUCxNQUFNcEIsVUFDcENzQyxrQkFBa0JaLFVBQVVPLE1BQU0sRUFDbENNLG9CQUFxQkQsb0JBQW9CO1FBRS9DLE9BQU9DO0lBQ1Q7SUFFQUMscUJBQXFCZixnQkFBZ0IsRUFBRXpCLE9BQU8sRUFBRTtRQUM5QyxNQUFNa0MsV0FBVyxJQUFJLENBQUNWLFVBQVUsQ0FBQ0Msa0JBQWtCekIsVUFDN0N5QyxxQkFBcUJQLFVBQVcsR0FBRztRQUV6QyxPQUFPTztJQUNUO0lBRUFuQixjQUFjVixRQUFRLEVBQUU7UUFDdEIsTUFBTVYsT0FBT1UsVUFDUDhCLGNBQWMsSUFBSSxDQUFDQyxTQUFTLENBQUN6QyxPQUM3Qm1CLGtCQUFrQnFCLGFBQWEsR0FBRztRQUV4QyxPQUFPckI7SUFDVDtJQUVBdUIsa0JBQWtCOUIsWUFBWSxFQUFFO1FBQzlCLElBQUkrQixzQkFBc0I7UUFFMUIsTUFBTVQsV0FBVyxJQUFJLENBQUNELFVBQVU7UUFFaEMsSUFBSUMsVUFBVTtZQUNaLE1BQU1VLGdCQUFnQmhDLGNBQWMsR0FBRztZQUV2Q0EsZUFBZSxJQUFJLENBQUNELGVBQWU7WUFFbkMsTUFBTWtDLGdCQUFnQmpDLGNBQ2hCa0Msb0NBQW9DRixjQUFjRyxLQUFLLENBQUNGO1lBRTlELElBQUlDLG1DQUFtQztnQkFDckNILHNCQUFzQixNQUFNLEdBQUc7WUFDakM7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUssWUFBWTlCLElBQUksRUFBRTtRQUNoQixNQUFNUixXQUFXUSxLQUFLVCxPQUFPLElBQ3ZCVSxrQkFBa0IsSUFBSSxDQUFDc0IsU0FBUyxDQUFDL0IsV0FDakN1QyxhQUFhOUIsaUJBQWlCLEdBQUc7UUFFdkMsT0FBTzhCO0lBQ1Q7SUFFQUMsaUJBQWlCQyxTQUFTLEVBQUU7UUFDMUIsSUFBSUMscUJBQXFCO1FBRXpCLE1BQU1sQixXQUFXLElBQUksQ0FBQ0QsVUFBVTtRQUVoQyxJQUFJQyxVQUFVO1lBQ1osTUFBTW1CLHNCQUFzQkYsVUFBVUcsYUFBYTtZQUVuRCxJQUFJRCx3QkFBd0IsTUFBTTtnQkFDaEMsTUFBTXZDLHFCQUFxQixJQUFJLENBQUNELHFCQUFxQjtnQkFFckQsSUFBSXdDLHdCQUF3QnZDLG9CQUFvQjtvQkFDOUNzQyxxQkFBcUI7Z0JBQ3ZCO1lBQ0Y7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUcsY0FBY3pELE9BQU8sRUFBRTtRQUNyQixNQUFNWSxXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQlUsT0FBT3BCLFFBQVEwRCxrQkFBa0IsQ0FBQzlDLFdBQ2xDK0MsWUFBWXZDLE1BQU0sR0FBRztRQUUzQixPQUFPdUM7SUFDVDtJQUVBQyxTQUFTNUQsT0FBTyxFQUFFNkQsWUFBWSxFQUFFO1FBQzlCLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Qy9ELFFBQVFnRSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyxTQUFTLENBQUM7UUFFdEQsTUFBTUgsWUFBWSxJQUFJLENBQUNGLGFBQWEsQ0FBQ3pEO1FBRXJDLElBQUkyRCxjQUFjLE1BQU07WUFDdEIsTUFBTXZDLE9BQU91QyxXQUFXLEdBQUc7WUFFM0IzRCxRQUFRaUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFSCxXQUFXLHdCQUF3QixDQUFDO1lBRTdELE9BQU9ELGFBQWF6QyxNQUFNcEI7UUFDNUI7UUFFQSxJQUFJb0IsT0FBTyxJQUFJO1FBRWYsT0FBTzhDLElBQUFBLG9CQUFNLEVBQUNDLHlCQUFhLEVBQUUvQyxNQUFNcEIsU0FBUyxDQUFDb0U7WUFDM0MsSUFBSUEsZUFBZTtnQkFDakJwRSxRQUFRcUUsT0FBTyxDQUFDakQ7Z0JBRWhCcEIsUUFBUWlFLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLE9BQU8sQ0FBQztZQUN4RCxPQUFPO2dCQUNMMUMsT0FBTztZQUNUO1lBRUEsT0FBT3lDLGFBQWF6QyxNQUFNcEI7UUFDNUI7SUFDRjtJQUVBc0Usa0JBQWtCbEUsSUFBSSxFQUFFbUUsTUFBTSxFQUFFdkUsT0FBTyxFQUFFNkQsWUFBWSxFQUFFO1FBQ3JELElBQUlBLGlCQUFpQlcsV0FBVztZQUM5QlgsZUFBZTdELFNBQVMsR0FBRztZQUUzQkEsVUFBVXVFLFFBQVEsR0FBRztZQUVyQkEsU0FBUztRQUNYO1FBRUEsTUFBTUUsYUFBYXJFLEtBQUsyRCxTQUFTLElBQzNCRCxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekMvRCxRQUFRZ0UsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsa0JBQWtCLEVBQUVXLFdBQVcsU0FBUyxDQUFDO1FBRXJGLElBQUksQ0FBQ2IsUUFBUSxDQUFDNUQsU0FBUyxDQUFDb0IsTUFBTXBCO1lBQzVCLElBQUkwRSxxQkFBcUI7WUFFekIsSUFBSXRELFNBQVMsTUFBTTtnQkFDakIsTUFBTXVELFdBQVd2RCxLQUFLZCxPQUFPLElBQ3ZCc0UsaUNBQWlDRCxTQUFTRSxvQkFBb0IsQ0FBQ3pFO2dCQUVyRSxJQUFJd0UsZ0NBQWdDO29CQUNsQ0YscUJBQXFCO29CQUVyQixJQUFJSCxRQUFRO3dCQUNWLE1BQU1PLGtCQUFrQjFFLEtBQUthLGFBQWEsSUFDcEM4RCxrQkFBa0IzRCxLQUFLYixhQUFhO3dCQUUxQyxJQUFJdUUsbUJBQW1CQyxpQkFBaUI7NEJBQ3RDTCxxQkFBcUI7d0JBQ3ZCO29CQUNGO2dCQUNGO1lBQ0Y7WUFFQSxJQUFJLENBQUNBLG9CQUFvQjtnQkFDdkJ0RCxPQUFPO1lBQ1Q7WUFFQSxJQUFJc0Qsb0JBQW9CO2dCQUN0QjFFLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxrQkFBa0IsRUFBRVcsV0FBVyxPQUFPLENBQUM7WUFDdkY7WUFFQSxPQUFPWixhQUFhekM7UUFDdEI7SUFDRjtJQUVBNEQsbUJBQW1CaEYsT0FBTyxFQUFFaUYsZ0JBQWdCLEVBQUU7UUFDNUMsSUFBSTdELE9BQU87UUFFWCxNQUFNMEMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHVCQUF1QixDQUFDO1FBRXBFLElBQUlvQixzQkFBc0I7UUFFMUIsTUFBTXZCLFlBQVksSUFBSSxDQUFDRixhQUFhLENBQUN6RDtRQUVyQyxJQUFJMkQsY0FBYyxNQUFNO1lBQ3RCdkMsT0FBT3VDLFdBQVcsR0FBRztZQUVyQixNQUFNd0IsbUJBQW1CRixpQkFBaUI3RCxNQUFNcEI7WUFFaEQsSUFBSW1GLGtCQUFrQjtnQkFDcEJELHNCQUFzQjtnQkFFdEJsRixRQUFRaUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFSCxXQUFXLHdCQUF3QixDQUFDO1lBQy9ELE9BQU87Z0JBQ0wxQyxPQUFPO1lBQ1Q7UUFDRixPQUFPO1lBQ0xBLE9BQU8sSUFBSSxFQUFHLEdBQUc7WUFFakIsTUFBTWdFLDRCQUE0QkMsSUFBQUEsbUNBQXVCLEVBQUNqRSxNQUFNcEIsU0FBU2lGO1lBRXpFLElBQUlHLDJCQUEyQjtnQkFDN0JGLHNCQUFzQjtZQUN4QixPQUFPO2dCQUNMOUQsT0FBTztZQUNUO1lBRUEsSUFBSThELHFCQUFxQjtnQkFDdkJsRixRQUFRcUUsT0FBTyxDQUFDakQ7WUFDbEI7UUFDRjtRQUVBLElBQUk4RCxxQkFBcUI7WUFDdkJsRixRQUFRaUUsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcscUJBQXFCLENBQUM7UUFDdEU7UUFFQSxPQUFPMUM7SUFDVDtJQUVBa0UsVUFBVWxFLElBQUksRUFBRW1FLGNBQWMsRUFBRUMsZUFBZSxFQUFFO1FBQy9DLElBQUlDLGNBQWM7UUFFbEIsTUFBTXpGLFVBQVV3RixpQkFDVkUsY0FBYyxJQUFJLEVBQ2xCQyxlQUFldkUsTUFDZndFLG9CQUFvQkYsWUFBWTNCLFNBQVMsSUFDekM4QixxQkFBcUJGLGFBQWE1QixTQUFTO1FBRWpEL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTZCLG1CQUFtQixpQkFBaUIsRUFBRUQsa0JBQWtCLFNBQVMsQ0FBQztRQUVqRyxNQUFNRSwyQkFBMkJDLElBQUFBLDZCQUFzQixFQUFDTCxhQUFhQyxjQUFjSixnQkFBZ0JDO1FBRW5HLElBQUlNLDBCQUEwQjtZQUM1QkwsY0FBYztRQUNoQjtRQUVBLElBQUlBLGFBQWE7WUFDZnpGLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTRCLG1CQUFtQixpQkFBaUIsRUFBRUQsa0JBQWtCLE9BQU8sQ0FBQztRQUNuRztRQUVBLE9BQU9IO0lBQ1Q7SUFFQU8sU0FBUztRQUNQLE1BQU1DLFdBQVdDLElBQUFBLG9CQUFjLEVBQUMsSUFBSSxDQUFDOUYsSUFBSSxHQUNuQytGLGtCQUFrQkMsSUFBQUEsa0NBQTRCLEVBQUMsSUFBSSxDQUFDL0YsV0FBVyxHQUMvREosU0FBUyxJQUFJLENBQUM4RCxTQUFTO1FBRTdCLElBQUk1RDtRQUVKQSxhQUFhLElBQUksQ0FBQ2tHLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCM0csMkJBQTJCUTtRQUVsREEsYUFBYW1HLGdCQUFpQixHQUFHO1FBRWpDLE1BQU1sRyxPQUFPNkYsVUFDUDVGLGNBQWM4RixpQkFDZEksT0FBTztZQUNMdEc7WUFDQUU7WUFDQUM7WUFDQUM7UUFDRjtRQUVOLE9BQU9rRztJQUNUO0lBRUEsT0FBT0MsT0FBTyxPQUFPO0lBRXJCLE9BQU9DLFNBQVNGLElBQUksRUFBRXZHLE9BQU8sRUFBRTtRQUM3QixPQUFPMEcsSUFBQUEsb0JBQVcsRUFBQyxDQUFDMUc7WUFDbEIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR3NHLE1BQ2IzRixXQUFXK0YsSUFBQUEsNEJBQWUsRUFBQzFHLFFBQVFELFVBQ25DRSxPQUFPVSxVQUNQVCxhQUFhVCxtQkFBbUI2RyxPQUNoQ25HLE9BQU93RyxJQUFBQSxrQkFBWSxFQUFDTCxNQUFNdkcsVUFDMUJLLGNBQWN3RyxJQUFBQSx5QkFBbUIsRUFBQ04sTUFBTXZHO1lBRTlDQSxVQUFVO1lBRVYsTUFBTW9CLE9BQU8sSUFBSXRCLEtBQUtFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE1BQU1DO1lBRS9ELE9BQU9lO1FBQ1QsR0FBR3BCO0lBQ0w7QUFDRiJ9