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
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  const _necessary = require("necessary");
12
+ const _occamlanguages = require("occam-languages");
12
13
  const _substitutions = require("../utilities/substitutions");
13
14
  const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
14
15
  const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
@@ -17,7 +18,7 @@ function _interop_require_default(obj) {
17
18
  default: obj
18
19
  };
19
20
  }
20
- const { push, find, first } = _necessary.arrayUtilities;
21
+ const { forEach } = _occamlanguages.continuationUtilities, { push, find, first } = _necessary.arrayUtilities;
21
22
  class LiminalContext extends _context.default {
22
23
  constructor(context, derivedSubstitutions){
23
24
  super(context);
@@ -70,17 +71,18 @@ class LiminalContext extends _context.default {
70
71
  this.addDerivedSubstitution(derivedSubstitution);
71
72
  });
72
73
  }
73
- resolveDerivedSubstitutions() {
74
+ resolveDerivedSubstitutions(continuation) {
74
75
  const context = this, derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
75
- metavariableNodes.forEach((metavariableNode)=>{
76
+ return forEach(metavariableNodes, (metavariableNode, continuation)=>{
76
77
  const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
77
- complexDerivedSubstitutions.forEach((complexDerivedSubstitution)=>{
78
+ return forEach(complexDerivedSubstitutions, (complexDerivedSubstitution, continuation)=>{
78
79
  const derivedSubstitution = complexDerivedSubstitution, resolved = derivedSubstitution.isResolved();
79
- if (!resolved) {
80
- derivedSubstitution.resolve(context);
80
+ if (resolved) {
81
+ return continuation();
81
82
  }
82
- });
83
- });
83
+ return derivedSubstitution.resolve(context, continuation);
84
+ }, continuation);
85
+ }, continuation);
84
86
  }
85
87
  areDerivedSubstitutionsResolved() {
86
88
  const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), resolved = metavariableNodes.every((metavariableNode)=>{
@@ -170,12 +172,12 @@ class LiminalContext extends _context.default {
170
172
  }) || null;
171
173
  return complexDerivedSubstitution;
172
174
  }
173
- findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
174
- const substitutionA = substitution, derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
175
+ findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
176
+ const derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
175
177
  const metavariableNodeMatches = derivedSubstitution.matchMetavariableNode(metavariableNode);
176
178
  if (metavariableNodeMatches) {
177
- const substitutionB = derivedSubstitution, substitutionBEqualToSubstitutionA = substitutionB.isEqualTo(substitutionA);
178
- if (substitutionBEqualToSubstitutionA) {
179
+ const substitutionNodeMatches = derivedSubstitution.matchSubstitutionNode(substitutionNode);
180
+ if (substitutionNodeMatches) {
179
181
  return true;
180
182
  }
181
183
  }
@@ -186,8 +188,8 @@ class LiminalContext extends _context.default {
186
188
  const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitutionPresent = derivedSubstitution !== null;
187
189
  return derivedSubstitutionPresent;
188
190
  }
189
- isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
190
- const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, substitution), derivedSubstitutionPresent = derivedSubstitution !== null;
191
+ isDerivedSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
192
+ const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode), derivedSubstitutionPresent = derivedSubstitution !== null;
191
193
  return derivedSubstitutionPresent;
192
194
  }
193
195
  static fromNothing(context) {
@@ -196,4 +198,4 @@ class LiminalContext extends _context.default {
196
198
  }
197
199
  }
198
200
 
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBwdXNoLCBmaW5kLCBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbWluYWxDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zID0gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChkZXJpdmVkU3Vic3RpdHV0aW9ucywgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgICAgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBmaXJzdERlcml2ZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCkge1xuICAgICAgICBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbkEgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oZGVyaXZlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMucHVzaChkZXJpdmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBtZXRhdmFyaWFibGVOb2Rlcy5mb3JFYWNoKChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uLnJlc29sdmUoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgY29uc3RyYWludCkge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXMsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludChhc3N1bXB0aW9uLCBjb25zdHJhaW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmNvbXBhcmVTdWJzdGl0dXRpb24oc29sZURlcml2ZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgICAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVhbGlmaWVzO1xuICB9XG5cbiAgY29tbWl0KGNvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGluZyB0aGUgbGltaW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyhjYWxsYmFjaykge1xuICAgIGxldCBkZXJpdmVkU3Vic3RpdHV0aW9ucztcblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBmaW5kKGRlcml2ZWRTdWJzdGl0dXRpb25zLCBjYWxsYmFjayk7ICAvLy9cblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uQkVxdWFsVG9TdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uQi5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbkJFcXVhbFRvU3Vic3RpdHV0aW9uQSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbiksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJwdXNoIiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uIiwiZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQSIsImRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlcml2ZWRTdWJzdGl0dXRpb25CIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZSIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsInF1YWxpZnkiLCJhc3N1bXB0aW9uIiwiY29uc3RyYWludCIsInF1YWxpZmllcyIsIlJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ1bmRlZmluZWQiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTm9kZSIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwiZnJvbU5vdGhpbmciLCJsaW1pbmFsQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFxQkE7OzsyQkFSVTsrQkFDMkI7Z0VBRXRDO2lFQUNDOzs7Ozs7QUFFckIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1KLHVCQUF1QkssZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFDckMsSUFBSUMsb0NBQW9DO1FBRXhDLE1BQU1MLDBCQUEwQixJQUFJLENBQUNELDBCQUEwQjtRQUUvRCxJQUFJQyw0QkFBNEIsTUFBTTtZQUNwQyxNQUFNTSxvQ0FBb0NOLHdCQUF3Qk8sWUFBWTtZQUU5RSxJQUFJRCxtQ0FBbUM7Z0JBQ3JDRCxvQ0FBb0NMLHlCQUEwQixHQUFHO1lBQ25FO1FBQ0Y7UUFFQSxPQUFPSztJQUNUO0lBRUFHLHVCQUF1QkMsbUJBQW1CLEVBQUU7UUFDMUMsTUFBTWQsVUFBVSxJQUFJLEVB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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGRlcml2ZWRTdWJzdGl0dXRpb25zLCB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0KHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uLmlzTm9uVHJpdmlhbCgpO1xuXG4gICAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQSA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5wdXNoKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBmb3JFYWNoKG1ldGF2YXJpYWJsZU5vZGVzLCAobWV0YXZhcmlhYmxlTm9kZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBmb3JFYWNoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbi5yZXNvbHZlKGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgICB9LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHJlc29sdmVkID0gbWV0YXZhcmlhYmxlTm9kZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgcXVhbGlmeShhc3N1bXB0aW9uLCBjb25zdHJhaW50KSB7XG4gICAgbGV0IHF1YWxpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcblxuICAgIGlmIChlbXB0eSkge1xuICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcyxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnModGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoZGVyaXZlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGRlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwiZm9yRWFjaCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInB1c2giLCJmaW5kIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24iLCJnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25BIiwiZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJyZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJjb250aW51YXRpb24iLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwiaXNSZXNvbHZlZCIsInJlc29sdmUiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiZXZlcnkiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidW5kZWZpbmVkIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUiLCJpc1NpbXBsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBcUJBOzs7MkJBVlU7Z0NBQ087K0JBQ29CO2dFQUV0QztpRUFDQzs7Ozs7O0FBRXJCLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFD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
@@ -16,7 +16,7 @@ function _interop_require_default(obj) {
16
16
  default: obj
17
17
  };
18
18
  }
19
- const { last } = _necessary.arrayUtilities;
19
+ const { first } = _necessary.arrayUtilities;
20
20
  class PhanericContext extends _context.default {
21
21
  constructor(context, contexts){
22
22
  super(context);
@@ -36,9 +36,9 @@ class PhanericContext extends _context.default {
36
36
  return string;
37
37
  }
38
38
  static fromContexts(contexts) {
39
- const lastContext = last(contexts), context = lastContext, phanericContext = new PhanericContext(context, contexts);
39
+ const firstContext = first(contexts), context = firstContext, phanericContext = new PhanericContext(context, contexts);
40
40
  return phanericContext;
41
41
  }
42
42
  }
43
43
 
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3BoYW5lcmljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGFuZXJpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgY29udGV4dHMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgfVxuXG4gIGdldENvbnRleHRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xuICB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHtcbiAgICBsZXQgc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgdGhpcy5jb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG4gICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKTtcblxuICAgICAgaWYgKHN0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgICBjb25zdCBsYXN0Q29udGV4dCA9IGxhc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBsYXN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHBoYW5lcmljQ29udGV4dCA9IG5ldyBQaGFuZXJpY0NvbnRleHQoY29udGV4dCwgY29udGV4dHMpO1xuXG4gICAgcmV0dXJuIHBoYW5lcmljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlBoYW5lcmljQ29udGV4dCIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiY29udGV4dHMiLCJnZXRDb250ZXh0cyIsIm5vZGVBc1N0cmluZyIsIm5vZGUiLCJzdHJpbmciLCJFTVBUWV9TVFJJTkciLCJzb21lIiwiZnJvbUNvbnRleHRzIiwibGFzdENvbnRleHQiLCJwaGFuZXJpY0NvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBcUJBOzs7MkJBUlU7Z0VBRVg7MkJBRVM7Ozs7OztBQUU3QixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUVoQixNQUFNRix3QkFBd0JHLGdCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsUUFBUSxDQUFFO1FBQzdCLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLFFBQVEsR0FBR0E7SUFDbEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRCxRQUFRO0lBQ3RCO0lBRUFFLGFBQWFDLElBQUksRUFBRTtRQUNqQixJQUFJQyxTQUFTQyx1QkFBWTtRQUV6QixJQUFJLENBQUNMLFFBQVEsQ0FBQ00sSUFBSSxDQUFDLENBQUNQO1lBQ2xCSyxTQUFTTCxRQUFRRyxZQUFZLENBQUNDO1lBRTlCLElBQUlDLFdBQVdDLHVCQUFZLEVBQUU7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWFQLFFBQVEsRUFBRTtRQUM1QixNQUFNUSxjQUFjWixLQUFLSSxXQUNuQkQsVUFBVVMsYUFDVkMsa0JBQWtCLElBQUlkLGdCQUFnQkksU0FBU0M7UUFFckQsT0FBT1M7SUFDVDtBQUNGIn0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3BoYW5lcmljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhhbmVyaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRleHRzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gIH1cblxuICBnZXRDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0cztcbiAgfVxuXG4gIG5vZGVBc1N0cmluZyhub2RlKSB7XG4gICAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7XG5cbiAgICAgIGlmIChzdHJpbmcgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gICAgY29uc3QgZmlyc3RDb250ZXh0ID0gZmlyc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBmaXJzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBwaGFuZXJpY0NvbnRleHQgPSBuZXcgUGhhbmVyaWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBwaGFuZXJpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQaGFuZXJpY0NvbnRleHQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJjb250ZXh0cyIsImdldENvbnRleHRzIiwibm9kZUFzU3RyaW5nIiwibm9kZSIsInN0cmluZyIsIkVNUFRZX1NUUklORyIsInNvbWUiLCJmcm9tQ29udGV4dHMiLCJmaXJzdENvbnRleHQiLCJwaGFuZXJpY0NvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBcUJBOzs7MkJBUlU7Z0VBRVg7MkJBRVM7Ozs7OztBQUU3QixNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUVqQixNQUFNRix3QkFBd0JHLGdCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsUUFBUSxDQUFFO1FBQzdCLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLFFBQVEsR0FBR0E7SUFDbEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRCxRQUFRO0lBQ3RCO0lBRUFFLGFBQWFDLElBQUksRUFBRTtRQUNqQixJQUFJQyxTQUFTQyx1QkFBWTtRQUV6QixJQUFJLENBQUNMLFFBQVEsQ0FBQ00sSUFBSSxDQUFDLENBQUNQO1lBQ2xCSyxTQUFTTCxRQUFRRyxZQUFZLENBQUNDO1lBRTlCLElBQUlDLFdBQVdDLHVCQUFZLEVBQUU7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWFQLFFBQVEsRUFBRTtRQUM1QixNQUFNUSxlQUFlWixNQUFNSSxXQUNyQkQsVUFBVVMsY0FDVkMsa0JBQWtCLElBQUlkLGdCQUFnQkksU0FBU0M7UUFFckQsT0FBT1M7SUFDVDtBQUNGIn0=
package/lib/context.js CHANGED
@@ -327,8 +327,8 @@ class Context extends _occamlanguages.Context {
327
327
  const context = this.getContext(), derivedSubstitutionPresent = context.isDerivedSubstitutionPresentByMetavariableNode(metavariableNode);
328
328
  return derivedSubstitutionPresent;
329
329
  }
330
- isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
331
- const context = this.getContext(), derivedSubstitutionPresent = context.isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution);
330
+ isDerivedSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
331
+ const context = this.getContext(), derivedSubstitutionPresent = context.isDerivedSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode);
332
332
  return derivedSubstitutionPresent;
333
333
  }
334
334
  isStated() {
@@ -437,4 +437,4 @@ class Context extends _occamlanguages.Context {
437
437
  }
438
438
  }
439
439
 
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0R29hbHMoZ29hbHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0R29hbHMoZ29hbHMpO1xuXG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gY29udGV4dC5nZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRUb3BMZXZlbEFzc2VydGlvbnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LmdldFByb3BlcnRpZXMoKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0ZXBzID0gY29udGV4dC5nZXRTdGVwcygpO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IGNoaWxkQ29udGV4dDsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBwYXJlbnRDb250ZXh0LmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbCA9IGNvbnRleHQuZmluZEdvYWxCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IGNvbnRleHQuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbFByZXNlbnQgPSBjb250ZXh0LmlzR29hbFByZXNlbnRCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IGNvbnRleHQuaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IGNvbnRleHQuaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSBjb250ZXh0LmlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSBjb250ZXh0LmlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb24pO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZWQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIHJldHVybiBzdGF0ZWQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbDtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0ZXJtcyk7XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEF4aW9tKGF4aW9tKTtcbiAgfVxuXG4gIGFkZExlbW1hKGxlbW1hKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRMZW1tYShsZW1tYSk7XG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRoZW9yZW0odGhlb3JlbSk7XG4gIH1cblxuICBhZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbmplY3R1cmUoY29uamVjdHVyZSk7XG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFJ1bGUocnVsZSk7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gIH1cblxuICBhZGRHb2FsKGdvYWwpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEdvYWwoZ29hbCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFNpZ25hdHVyZShzaWduYXR1cmUpO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuICB9XG5cbiAgYWRkQ29uc3RyYWludChjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ29udGV4dCIsIkNvbnRleHRCYXNlIiwiZ2V0TGV4ZXIiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImxleGVyIiwiZ2V0UGFyc2VyIiwicGFyc2VyIiwiZ2V0RmlsZVBhdGgiLCJmaWxlUGF0aCIsImdldFRva2VucyIsInRva2VucyIsInNldFRva2VucyIsImdldFRlcm1zIiwidGVybXMiLCJnZXRHb2FscyIsImdvYWxzIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0R2VuZXJhdG9ycyIsImluY2x1ZGVSZWxlYXNlIiwiZ2VuZXJhdG9ycyIsImdldFByb2NlZHVyZXMiLCJwcm9jZWR1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldFRvcExldmVsQXNzZXJ0aW9ucyIsInRvcExldmVsQXNzZXJ0aW9ucyIsImdldFNjaGVtYXMiLCJzY2hlbWFzIiwiZ2V0VmFyaWFibGVzIiwibmVzdGVkIiwidmFyaWFibGVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJnZXRTdGVwcyIsInN0ZXBzIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImdldERlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImNoaWxkQ29udGV4dCIsInBhcmVudENvbnRleHQiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicnVsZSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwiYXhpb20iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJ0ZXJtIiwiZmluZEdvYWxCeUdvYWxOb2RlIiwiZ29hbE5vZGUiLCJnb2FsIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50IiwiZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbiIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50IiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidHlwZU5hbWUiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwibWV0YVR5cGUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzR29hbFByZXNlbnRCeUdvYWxOb2RlIiwiZ29hbFByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlIiwibGFiZWxOb2RlIiwibGFiZWxQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0dnZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwiaXNTdGF0ZWQiLCJzdGF0ZWQiLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsImFkZFRlcm1zIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJhZGRBeGlvbSIsImFkZExlbW1hIiwibGVtbWEiLCJhZGRUaGVvcmVtIiwidGhlb3JlbSIsImFkZENvbmplY3R1cmUiLCJjb25qZWN0dXJlIiwiYWRkUnVsZSIsImFkZFRlcm0iLCJhZGRHb2FsIiwiYWRkRnJhbWUiLCJhZGRFcXVhbGl0eSIsImFkZEp1ZGdlbWVudCIsImFkZEFzc2VydGlvbiIsImFkZFN0YXRlbWVudCIsImFkZFNpZ25hdHVyZSIsImFkZFJlZmVyZW5jZSIsImFkZEFzc3VtcHRpb24iLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsImFkZE1ldGF2YXJpYWJsZSIsImFkZFN1YnN0aXR1dGlvbiIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJhZGRDb25zdHJhaW50IiwiYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUiLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBcUJBOzs7Z0NBRmtCO0FBRXhCLE1BQU1BLGdCQUFnQkMsdUJB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
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0R29hbHMoZ29hbHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0R29hbHMoZ29hbHMpO1xuXG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gY29udGV4dC5nZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRUb3BMZXZlbEFzc2VydGlvbnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LmdldFByb3BlcnRpZXMoKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0ZXBzID0gY29udGV4dC5nZXRTdGVwcygpO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IGNoaWxkQ29udGV4dDsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBwYXJlbnRDb250ZXh0LmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbCA9IGNvbnRleHQuZmluZEdvYWxCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IGNvbnRleHQuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbFByZXNlbnQgPSBjb250ZXh0LmlzR29hbFByZXNlbnRCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IGNvbnRleHQuaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IGNvbnRleHQuaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSBjb250ZXh0LmlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSBjb250ZXh0LmlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gY29udGV4dC5pc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICByZXR1cm4gc3RhdGVkO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkVGVybXModGVybXMpO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBeGlvbShheGlvbSk7XG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuICB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUaGVvcmVtKHRoZW9yZW0pO1xuICB9XG5cbiAgYWRkQ29uamVjdHVyZShjb25qZWN0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpO1xuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRSdWxlKHJ1bGUpO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuICB9XG5cbiAgYWRkR29hbChnb2FsKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEZyYW1lKGZyYW1lKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gIH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZENvbnN0cmFpbnQoY29uc3RyYWludCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZE1ldGF2YXJpYWJsZShkZWNsYXJlZE1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNvbnRleHQiLCJDb250ZXh0QmFzZSIsImdldExleGVyIiwiY29udGV4dCIsImdldENvbnRleHQiLCJsZXhlciIsImdldFBhcnNlciIsInBhcnNlciIsImdldEZpbGVQYXRoIiwiZmlsZVBhdGgiLCJnZXRUb2tlbnMiLCJ0b2tlbnMiLCJzZXRUb2tlbnMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZ2V0R29hbHMiLCJnb2FscyIsImdldEZyYW1lcyIsImZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzIiwiZ2V0SnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsInNpZ25hdHVyZXMiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEdlbmVyYXRvcnMiLCJpbmNsdWRlUmVsZWFzZSIsImdlbmVyYXRvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRUb3BMZXZlbEFzc2VydGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvbnMiLCJnZXRTY2hlbWFzIiwic2NoZW1hcyIsImdldFZhcmlhYmxlcyIsIm5lc3RlZCIsInZhcmlhYmxlcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0U3RlcHMiLCJzdGVwcyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImZpbmRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJjaGlsZENvbnRleHQiLCJwYXJlbnRDb250ZXh0IiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImF4aW9tIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybSIsImZpbmRHb2FsQnlHb2FsTm9kZSIsImdvYWxOb2RlIiwiZ29hbCIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50IiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb24iLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudCIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludCIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwidHlwZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwiZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZSIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0dvYWxQcmVzZW50QnlHb2FsTm9kZSIsImdvYWxQcmVzZW50IiwiaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZSIsImxhYmVsTm9kZSIsImxhYmVsUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNTaWduYXR1cmVQcmVzZW50QnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZVByZXNlbnQiLCJpc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldHZ2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50IiwiaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJpc1N0YXRlZCIsInN0YXRlZCIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkVGVybXMiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImFkZEF4aW9tIiwiYWRkTGVtbWEiLCJsZW1tYSIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtIiwiYWRkQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJhZGRSdWxlIiwiYWRkVGVybSIsImFkZEdvYWwiLCJhZGRGcmFtZSIsImFkZEVxdWFsaXR5IiwiYWRkSnVkZ2VtZW50IiwiYWRkQXNzZXJ0aW9uIiwiYWRkU3RhdGVtZW50IiwiYWRkU2lnbmF0dXJlIiwiYWRkUmVmZXJlbmNlIiwiYWRkQXNzdW1wdGlvbiIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwiYWRkTWV0YXZhcmlhYmxlIiwiYWRkU3Vic3RpdHV0aW9uIiwiYWRkRGVjbGFyZWRWYXJpYWJsZSIsImFkZENvbnN0cmFpbnQiLCJhZGREZWNsYXJlZE1ldGF2YXJpYWJsZSIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUFxQkE7OztnQ0FGa0I7QUFF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