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
@@ -60,11 +60,10 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
60
60
  if (nonsensical) {
61
61
  const verifies = false;
62
62
  context.debug(`Unable to verify the '${suppositionString}' supposition because it is nonsense.`);
63
- continuation(verifies);
64
- return;
63
+ return continuation(verifies);
65
64
  }
66
65
  (0, _context.declare)((context)=>{
67
- this.validate(context, (validates)=>{
66
+ return this.validate(context, (validates)=>{
68
67
  let verifies = false;
69
68
  if (validates) {
70
69
  verifies = true;
@@ -72,7 +71,7 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
72
71
  if (verifies) {
73
72
  context.debug(`...verified the '${suppositionString}' supposition.`);
74
73
  }
75
- continuation(verifies);
74
+ return continuation(verifies);
76
75
  });
77
76
  }, context);
78
77
  });
@@ -81,7 +80,7 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
81
80
  context.trace(`Validatting the '${suppositionString}' supposition...`);
82
81
  (0, _context.attempt)((context)=>{
83
82
  const validateStatement = this.validateStatement.bind(this), validateProcedureCall = this.validateProcedureCall.bind(this);
84
- (0, _continuation.exists)([
83
+ return (0, _continuation.exists)([
85
84
  validateStatement,
86
85
  validateProcedureCall
87
86
  ], context, (validates)=>{
@@ -91,7 +90,7 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
91
90
  if (validates) {
92
91
  context.debug(`...validated the '${suppositionString}' supposition.`);
93
92
  }
94
- continuation(validates);
93
+ return continuation(validates);
95
94
  });
96
95
  }, context);
97
96
  }
@@ -99,12 +98,11 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
99
98
  const statement = this.getStatement();
100
99
  if (statement === null) {
101
100
  const statementValidates = false;
102
- continuation(statementValidates);
103
- return;
101
+ return continuation(statementValidates);
104
102
  }
105
103
  const suppositionString = this.getString();
106
104
  context.trace(`Validating the '${suppositionString}' supposition's statsement...`);
107
- statement.validate(context, (statement)=>{
105
+ return statement.validate(context, (statement)=>{
108
106
  let statementValidates = false;
109
107
  if (statement !== null) {
110
108
  statementValidates = true;
@@ -112,48 +110,55 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
112
110
  if (statementValidates) {
113
111
  context.debug(`...validated the '${suppositionString}' supposition's statement.`);
114
112
  }
115
- continuation(statementValidates);
113
+ return continuation(statementValidates);
116
114
  });
117
115
  }
118
116
  validateProcedureCall(context, continuation) {
119
117
  const procedureCall = this.getProcedureCall();
120
118
  if (procedureCall === null) {
121
119
  const procedureCallValidates = false;
122
- continuation(procedureCallValidates);
123
- return;
120
+ return continuation(procedureCallValidates);
124
121
  }
125
122
  const suppositionString = this.getString();
126
123
  context.trace(`Validatting the '${suppositionString}' supposition's procedure call...`);
127
- this.procedureCall.validate(context, (procedureCallValidates)=>{
124
+ procedureCall.validate(context, (procedureCallValidates)=>{
128
125
  if (procedureCallValidates) {
129
126
  context.debug(`...validated the '${suppositionString}' supposition's procedure call.`);
130
127
  }
131
- continuation(procedureCallValidates);
128
+ return continuation(procedureCallValidates);
132
129
  });
133
130
  }
134
- unifyIndependently(context) {
135
- let unifiesIndependently = false;
131
+ unifyIndependently(context, continuation) {
136
132
  const suppositionString = this.getString(); ///
137
133
  context.trace(`Unifying the '${suppositionString}' supposition independently...`);
138
134
  (0, _context.reconcile)((context)=>{
139
135
  const statement = this.getStatement(), procedureCall = this.getProcedureCall();
140
136
  if (statement !== null) {
141
- const suppositionContext = this.getContext(), generalContext = suppositionContext, specificContext = context, statementUnifiesIndependently = statement.unifyIndependently(generalContext, specificContext);
142
- if (statementUnifiesIndependently) {
143
- unifiesIndependently = true;
144
- }
137
+ const suppositionContext = this.getContext(), generalContext = suppositionContext, specificContext = context; ///
138
+ return statement.unifyIndependently(generalContext, specificContext, (statementUnifiesIndependently)=>{
139
+ let unifiesIndependently = false;
140
+ if (statementUnifiesIndependently) {
141
+ unifiesIndependently = true;
142
+ }
143
+ if (unifiesIndependently) {
144
+ context.debug(`...unified the '${suppositionString}' supposition independently.`);
145
+ }
146
+ return continuation(unifiesIndependently);
147
+ });
145
148
  }
146
149
  if (procedureCall !== null) {
147
- const procedureCallResolvedIndependently = procedureCall.unifyIndependently(context);
148
- if (procedureCallResolvedIndependently) {
149
- unifiesIndependently = true;
150
- }
150
+ return procedureCall.unifyIndependently(context, (procedureCallResolvedIndependently)=>{
151
+ let unifiesIndependently = false;
152
+ if (procedureCallResolvedIndependently) {
153
+ unifiesIndependently = true;
154
+ }
155
+ if (unifiesIndependently) {
156
+ context.debug(`...unified the '${suppositionString}' supposition independently.`);
157
+ }
158
+ return continuation(unifiesIndependently);
159
+ });
151
160
  }
152
161
  }, context);
153
- if (unifiesIndependently) {
154
- context.debug(`...unified the '${suppositionString}' supposition independently.`);
155
- }
156
- return unifiesIndependently;
157
162
  }
158
163
  unifySubproof(subproof, context, continuation) {
159
164
  const suppositionString = this.getString(), subproofString = subproof.getString();
@@ -161,19 +166,18 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
161
166
  const subproofAssertion = this.findSubproofAssertion();
162
167
  if (subproofAssertion === null) {
163
168
  const subproofUnifies = false;
164
- continuation(subproofUnifies);
165
- return;
169
+ return continuation(subproofUnifies);
166
170
  }
167
171
  const suppositionContext = this.getContext(), generalContext = suppositionContext, specificContext = context; ///
168
172
  (0, _context.reconcile)((context)=>{
169
- subproofAssertion.unifySubproof(subproof, generalContext, specificContext, (subproofUnifies)=>{
173
+ return subproofAssertion.unifySubproof(subproof, generalContext, specificContext, (subproofUnifies)=>{
170
174
  if (subproofUnifies) {
171
175
  context.commit();
172
176
  }
173
177
  if (subproofUnifies) {
174
178
  context.debug(`...unified the '${subproofString}' subproof with the '${suppositionString}' supposition.`);
175
179
  }
176
- continuation(subproofUnifies);
180
+ return continuation(subproofUnifies);
177
181
  });
178
182
  }, context);
179
183
  }
@@ -183,7 +187,7 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
183
187
  const proofAssertionContext = proofAssertion.getContext(), suppositionContext = this.getContext(), generalContext = suppositionContext, specificContext = proofAssertionContext; ///
184
188
  (0, _context.reconcile)((specificContext)=>{
185
189
  const statement = proofAssertion.getStatement();
186
- this.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
190
+ return this.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
187
191
  let proofAssertionUnifies = false;
188
192
  if (statementUnifies) {
189
193
  proofAssertionUnifies = true;
@@ -192,7 +196,7 @@ const _default = (0, _elements.define)(class Supposition extends _proofAssertion
192
196
  if (proofAssertionUnifies) {
193
197
  context.debug(`...unified the '${proofAssertionString}' proof assertion with the '${suppositionString}' supposition.`);
194
198
  }
195
- continuation(proofAssertionUnifies);
199
+ return continuation(proofAssertionUnifies);
196
200
  });
197
201
  }, specificContext);
198
202
  }
@@ -238,4 +242,4 @@ function statementFromSuppositionNode(suppositionNode, context) {
238
242
  return statement;
239
243
  }
240
244
 
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N1cHBvc2l0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBQcm9vZkFzc2VydGlvbiBmcm9tIFwiLi4vcHJvb2ZBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTdXBwb3NpdGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgYXR0ZW1wdCwgcmVjb25jaWxlLCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSwgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1cHBvc2l0aW9uIGV4dGVuZHMgUHJvb2ZBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICAgIHRoaXMucHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGw7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLnByb2NlZHVyZUNhbGw7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlID0gdGhpcy5nZXRTdXBwb3NpdGlvbk5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKCkge1xuICAgIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cblxuICBpc05vbnNlbnNpY2FsKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpLFxuICAgICAgICAgIG5vbnNlbnNpY2FsID0gKChzdGF0ZW1lbnQgPT09IG51bGwpICYmIChwcm9jZWR1cmVDYWxsID09PSBudWxsKSk7XG5cbiAgICByZXR1cm4gbm9uc2Vuc2ljYWw7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSB0aGlzLmlzTm9uc2Vuc2ljYWwoKTtcblxuICAgIGlmIChub25zZW5zaWNhbCkge1xuICAgICAgY29uc3QgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuXG4gICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbCA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVDYWxsLmJpbmQodGhpcyk7XG5cbiAgICAgIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGxcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgaWYgKHN0YXRlbWVudCA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRzZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgIGlmIChwcm9jZWR1cmVDYWxsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3MgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIHRoaXMucHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0LCAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3MgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSA9IHN0YXRlbWVudC51bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkgPSBwcm9jZWR1cmVDYWxsLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KTtcblxuICAgICAgICBpZiAocHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSkge1xuICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbigpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3NpdGlvbkNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VicHJvb2ZVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9uU3RyaW5nID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25Db250ZXh0ID0gcHJvb2ZBc3NlcnRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcHJvb2ZBc3NlcnRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIHByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKHByb29mQXNzZXJ0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IHByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5UHJvb2ZBc3NlcnRpb24ocHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VicHJvb2YgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb247ICAvLy9cblxuICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VwcG9zaXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VwcG9zaXRpb25Ob2RlID0gaW5zdGFudGlhdGVTdXBwb3NpdGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJTdXBwb3NpdGlvbiIsIlByb29mQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFByb2NlZHVyZUNhbGwiLCJnZXRTdXBwb3NpdGlvbk5vZGUiLCJnZXROb2RlIiwic3VwcG9zaXRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRleHQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiaXNOb25zZW5zaWNhbCIsImdldFN0YXRlbWVudCIsIm5vbnNlbnNpY2FsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmaWVzIiwiZGVidWciLCJkZWNsYXJlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiZXhpc3RzIiwiY29tbWl0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwicHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwicmVjb25jaWxlIiwic3VwcG9zaXRpb25Db250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSIsInByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mVW5pZmllcyIsInVuaWZ5UHJvb2ZBc3NlcnRpb24iLCJwcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwicHJvb2ZBc3NlcnRpb25Db250ZXh0IiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwicHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiIsImlzUHJvb2ZBc3NlcnRpb24iLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwic3VwcG9zaXRpb24iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVTdXBwb3NpdGlvbiIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVoyRDt1RUFFaEM7MEJBRUo7OEJBQ0E7NkJBQ2dCO3lCQUNVO3lCQUNnQzs7Ozs7O0FBRWpGLE1BQU0sRUFBRUEsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRXpGLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsb0JBQW9CQyx1QkFBYztJQUM1RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxDQUFFO1FBQ3ZFLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUM7UUFFekMsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0QsYUFBYTtJQUMzQjtJQUVBRSxxQkFBcUI7UUFDbkIsTUFBTUwsT0FBTyxJQUFJLENBQUNNLE9BQU8sSUFDbkJDLGtCQUFrQlAsTUFBTSxHQUFHO1FBRWpDLE9BQU9PO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQ2pCLE1BQU1ELGtCQUFrQixJQUFJLENBQUNGLGtCQUFrQixJQUN6Q0ksZ0JBQWdCRixnQkFBZ0JDLGdCQUFnQjtRQUV0RCxPQUFPQztJQUNUO0lBRUFDLHdCQUF3QjtRQUN0QixJQUFJQyxvQkFBb0I7UUFFeEIsTUFBTUYsZ0JBQWdCLElBQUksQ0FBQ0QsZ0JBQWdCO1FBRTNDLElBQUlDLGtCQUFrQixNQUFNO1lBQzFCLE1BQU1HLHdCQUF3QkgsY0FBY0ksd0JBQXdCO1lBRXBFLElBQUlELDBCQUEwQixNQUFNO2dCQUNsQyxNQUFNZCxVQUFVLElBQUksQ0FBQ2dCLFVBQVU7Z0JBRS9CSCxvQkFBb0JiLFFBQVFpQiw0QkFBNEIsQ0FBQ0g7WUFDM0Q7UUFDRjtRQUVBLE9BQU9EO0lBQ1Q7SUFFQUssZ0JBQWdCO1FBQ2QsTUFBTWQsWUFBWSxJQUFJLENBQUNlLFlBQVksSUFDN0JkLGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQixJQUNyQ2MsY0FBZSxBQUFDaEIsY0FBYyxRQUFVQyxrQkFBa0I7UUFFaEUsT0FBT2U7SUFDVDtJQUVBQyxTQUFTNUIsVUFBVSxTQUFVTyxPQUFPLEVBQUVzQixZQUFZO1FBQ2hELE1BQU1DLG9CQUFvQixJQUFJLENBQUNDLFNBQVM7UUFFeEN4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixrQkFBa0IsZ0JBQWdCLENBQUM7UUFFbkUsTUFBTUgsY0FBYyxJQUFJLENBQUNGLGFBQWE7UUFFdEMsSUFBSUUsYUFBYTtZQUNmLE1BQU1NLFdBQVc7WUFFakIxQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUVKLGtCQUFrQixxQ0FBcUMsQ0FBQztZQUUvRkQsYUFBYUk7WUFFYjtRQUNGO1FBRUFFLElBQUFBLGdCQUFPLEVBQUMsQ0FBQzVCO1lBQ1AsSUFBSSxDQUFDNkIsUUFBUSxDQUFDN0IsU0FBUyxDQUFDOEI7Z0JBQ3RCLElBQUlKLFdBQVc7Z0JBRWYsSUFBSUksV0FBVztvQkFDYkosV0FBVztnQkFDYjtnQkFFQSxJQUFJQSxVQUFVO29CQUNaMUIsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFSixrQkFBa0IsY0FBYyxDQUFDO2dCQUNyRTtnQkFFQUQsYUFBYUk7WUFDZjtRQUNGLEdBQUcxQjtJQUNMLEdBQUc7SUFFSDZCLFNBQVM3QixPQUFPLEVBQUVzQixZQUFZLEVBQUU7UUFDOUIsTUFBTUMsb0JBQW9CLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFL0N4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVGLGtCQUFrQixnQkFBZ0IsQ0FBQztRQUVyRVEsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDL0I7WUFDUCxNQUFNZ0Msb0JBQW9CLElBQUksQ0FBQ0EsaUJBQWlCLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3BEQyx3QkFBd0IsSUFBSSxDQUFDQSxxQkFBcUIsQ0FBQ0QsSUFBSSxDQUFDLElBQUk7WUFFbEVFLElBQUFBLG9CQUFNLEVBQUM7Z0JBQ0xIO2dCQUNBRTthQUNELEVBQUVsQyxTQUFTLENBQUM4QjtnQkFDWCxJQUFJQSxXQUFXO29CQUNiLElBQUksQ0FBQ00sTUFBTSxDQUFDcEM7Z0JBQ2Q7Z0JBRUEsSUFBSThCLFdBQVc7b0JBQ2I5QixRQUFRMkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVKLGtCQUFrQixjQUFjLENBQUM7Z0JBQ3RFO2dCQUVBRCxhQUFhUTtZQUNmO1FBQ0YsR0FBRzlCO0lBQ0w7SUFFQWdDLGtCQUFrQmhDLE9BQU8sRUFBRXNCLFlBQVksRUFBRTtRQUN2QyxNQUFNbEIsWUFBWSxJQUFJLENBQUNlLFlBQVk7UUFFbkMsSUFBSWYsY0FBYyxNQUFNO1lBQ3RCLE1BQU1pQyxxQkFBcUI7WUFFM0JmLGFBQWFlO1lBRWI7UUFDRjtRQUVBLE1BQU1kLG9CQUFvQixJQUFJLENBQUNDLFNBQVM7UUFFeEN4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLGtCQUFrQiw2QkFBNkIsQ0FBQztRQUVqRm5CLFVBQVV5QixRQUFRLENBQUM3QixTQUFTLENBQUNJO1lBQzNCLElBQUlpQyxxQkFBcUI7WUFFekIsSUFBSWpDLGNBQWMsTUFBTTtnQkFDdEJpQyxxQkFBcUI7WUFDdkI7WUFFQSxJQUFJQSxvQkFBb0I7Z0JBQ3RCckMsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSixrQkFBa0IsMEJBQTBCLENBQUM7WUFDbEY7WUFFQUQsYUFBYWU7UUFDZjtJQUNGO0lBRUFILHNCQUFzQmxDLE9BQU8sRUFBRXNCLFlBQVksRUFBRTtRQUMzQyxNQUFNakIsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCO1FBRTNDLElBQUlELGtCQUFrQixNQUFNO1lBQzFCLE1BQU1pQyx5QkFBeUI7WUFFL0JoQixhQUFhZ0I7WUFFYjtRQUNGO1FBRUEsTUFBTWYsb0JBQW9CLElBQUksQ0FBQ0MsU0FBUztRQUV4Q3hCLFFBQVF5QixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRUYsa0JBQWtCLGlDQUFpQyxDQUFDO1FBRXRGLElBQUksQ0FBQ2xCLGFBQWEsQ0FBQ3dCLFFBQVEsQ0FBQzdCLFNBQVMsQ0FBQ3NDO1lBQ3BDLElBQUlBLHdCQUF3QjtnQkFDMUJ0QyxRQUFRMkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVKLGtCQUFrQiwrQkFBK0IsQ0FBQztZQUN2RjtZQUVBRCxhQUFhZ0I7UUFDZjtJQUNGO0lBRUFDLG1CQUFtQnZDLE9BQU8sRUFBRTtRQUMxQixJQUFJd0MsdUJBQXVCO1FBRTNCLE1BQU1qQixvQkFBb0IsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUUvQ3hCLFFBQVF5QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVGLGtCQUFrQiw4QkFBOEIsQ0FBQztRQUVoRmtCLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ3pDO1lBQ1QsTUFBTUksWUFBWSxJQUFJLENBQUNlLFlBQVksSUFDN0JkLGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQjtZQUUzQyxJQUFJRixjQUFjLE1BQU07Z0JBQ3RCLE1BQU1zQyxxQkFBcUIsSUFBSSxDQUFDMUIsVUFBVSxJQUNwQzJCLGlCQUFpQkQsb0JBQ2pCRSxrQkFBa0I1QyxTQUNsQjZDLGdDQUFnQ3pDLFVBQVVtQyxrQkFBa0IsQ0FBQ0ksZ0JBQWdCQztnQkFFbkYsSUFBSUMsK0JBQStCO29CQUNqQ0wsdUJBQXVCO2dCQUN6QjtZQUNGO1lBRUEsSUFBSW5DLGtCQUFrQixNQUFNO2dCQUMxQixNQUFNeUMscUNBQXFDekMsY0FBY2tDLGtCQUFrQixDQUFDdkM7Z0JBRTVFLElBQUk4QyxvQ0FBb0M7b0JBQ3RDTix1QkFBdUI7Z0JBQ3pCO1lBQ0Y7UUFDRixHQUFHeEM7UUFFSCxJQUFJd0Msc0JBQXNCO1lBQ3hCeEMsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFSixrQkFBa0IsNEJBQTRCLENBQUM7UUFDbEY7UUFFQSxPQUFPaUI7SUFDVDtJQUVBTyxjQUFjQyxRQUFRLEVBQUVoRCxPQUFPLEVBQUVzQixZQUFZLEVBQUU7UUFDN0MsTUFBTUMsb0JBQW9CLElBQUksQ0FBQ0MsU0FBUyxJQUNsQ3lCLGlCQUFpQkQsU0FBU3hCLFNBQVM7UUFFekN4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFd0IsZUFBZSxxQkFBcUIsRUFBRTFCLGtCQUFrQixnQkFBZ0IsQ0FBQztRQUV4RyxNQUFNVixvQkFBb0IsSUFBSSxDQUFDRCxxQkFBcUI7UUFFcEQsSUFBSUMsc0JBQXNCLE1BQU07WUFDOUIsTUFBTXFDLGtCQUFrQjtZQUV4QjVCLGFBQWE0QjtZQUViO1FBQ0Y7UUFFQSxNQUFNUixxQkFBcUIsSUFBSSxDQUFDMUIsVUFBVSxJQUNwQzJCLGlCQUFpQkQsb0JBQ2pCRSxrQkFBa0I1QyxTQUFTLEdBQUc7UUFFcEN5QyxJQUFBQSxrQkFBUyxFQUFDLENBQUN6QztZQUNUYSxrQkFBa0JrQyxhQUFhLENBQUNDLFVBQVVMLGdCQUFnQkMsaUJBQWlCLENBQUNNO2dCQUMxRSxJQUFJQSxpQkFBaUI7b0JBQ25CbEQsUUFBUW9DLE1BQU07Z0JBQ2hCO2dCQUVBLElBQUljLGlCQUFpQjtvQkFDbkJsRCxRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVzQixlQUFlLHFCQUFxQixFQUFFMUIsa0JBQWtCLGNBQWMsQ0FBQztnQkFDMUc7Z0JBRUFELGFBQWE0QjtZQUNmO1FBQ0YsR0FBR2xEO0lBQ0w7SUFFQW1ELG9CQUFvQkMsY0FBYyxFQUFFcEQsT0FBTyxFQUFFc0IsWUFBWSxFQUFFO1FBQ3pELE1BQU1DLG9CQUFvQixJQUFJLENBQUNDLFNBQVMsSUFDbEM2Qix1QkFBdUJELGVBQWU1QixTQUFTO1FBRXJEeEIsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTRCLHFCQUFxQiw0QkFBNEIsRUFBRTlCLGtCQUFrQixnQkFBZ0IsQ0FBQztRQUVySCxNQUFNK0Isd0JBQXdCRixlQUFlcEMsVUFBVSxJQUNqRDBCLHFCQUFxQixJQUFJLENBQUMxQixVQUFVLElBQ3BDMkIsaUJBQWlCRCxvQkFDakJFLGtCQUFrQlUsdUJBQXdCLEdBQUc7UUFFbkRiLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ0c7WUFDVCxNQUFNeEMsWUFBWWdELGVBQWVqQyxZQUFZO1lBRTdDLElBQUksQ0FBQ29DLGNBQWMsQ0FBQ25ELFdBQVd1QyxnQkFBZ0JDLGlCQUFpQixDQUFDWTtnQkFDL0QsSUFBSUMsd0JBQXdCO2dCQUU1QixJQUFJRCxrQkFBa0I7b0JBQ3BCQyx3QkFBd0I7b0JBRXhCYixnQkFBZ0JSLE1BQU0sQ0FBQ3BDO2dCQUN6QjtnQkFFQSxJQUFJeUQsdUJBQXVCO29CQUN6QnpELFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTBCLHFCQUFxQiw0QkFBNEIsRUFBRTlCLGtCQUFrQixjQUFjLENBQUM7Z0JBQ3ZIO2dCQUVBRCxhQUFhbUM7WUFDZjtRQUNGLEdBQUdiO0lBQ0w7SUFFQWMsOEJBQThCQyx3QkFBd0IsRUFBRTNELE9BQU8sRUFBRXNCLFlBQVksRUFBRTtRQUM3RSxNQUFNc0MseUNBQXlDRCx5QkFBeUJFLGdCQUFnQjtRQUV4RixJQUFJRCx3Q0FBd0M7WUFDMUMsTUFBTVIsaUJBQWlCTywwQkFBMkIsR0FBRztZQUVyRCxPQUFPLElBQUksQ0FBQ1IsbUJBQW1CLENBQUNDLGdCQUFnQnBELFNBQVNzQjtRQUMzRDtRQUVBLE1BQU0wQixXQUFXVywwQkFBMkIsR0FBRztRQUUvQyxPQUFPLElBQUksQ0FBQ1osYUFBYSxDQUFDQyxVQUFVaEQsU0FBU3NCO0lBQy9DO0lBRUF3QyxTQUFTO1FBQ1AsTUFBTTlELFVBQVUsSUFBSSxDQUFDZ0IsVUFBVTtRQUUvQixPQUFPK0MsSUFBQUEsa0JBQVMsRUFBQyxDQUFDL0Q7WUFDaEIsTUFBTUMsU0FBUyxJQUFJLENBQUN1QixTQUFTO1lBRTdCLElBQUlyQjtZQUVKQSxhQUFhLElBQUksQ0FBQzZELGFBQWE7WUFFL0IsTUFBTUMsaUJBQWlCdEUsMkJBQTJCUTtZQUVsREEsYUFBYThELGdCQUFpQixHQUFHO1lBRWpDLE1BQU1DLE9BQU87Z0JBQ1hsRTtnQkFDQUM7Z0JBQ0FFO1lBQ0Y7WUFFQSxPQUFPK0Q7UUFDVCxHQUFHbEU7SUFDTDtJQUVBLE9BQU9tRSxPQUFPLGNBQWM7SUFFNUIsT0FBT0MsU0FBU0YsSUFBSSxFQUFFbEUsT0FBTyxFQUFFO1FBQzdCLElBQUlxRTtRQUVKQyxJQUFBQSxvQkFBVyxFQUFDLENBQUN0RTtZQUNYdUUsSUFBQUEsb0JBQVcsRUFBQyxDQUFDTCxNQUFNbEU7Z0JBQ2pCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdpRSxNQUNiekQsa0JBQWtCK0QsSUFBQUEsbUNBQXNCLEVBQUN2RSxRQUFRRCxVQUNqREUsT0FBT08saUJBQ1BOLGFBQWFULG1CQUFtQndFLE9BQ2hDOUQsWUFBWXFFLDZCQUE2QmhFLGlCQUFpQlQsVUFDMURLLGdCQUFnQnFFLElBQUFBLHlDQUFnQyxFQUFDakUsaUJBQWlCVDtnQkFFeEVxRSxjQUFjLElBQUl2RSxZQUFZRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxXQUFXQztZQUM5RSxHQUFHNkQsTUFBTWxFO1FBQ1gsR0FBR0E7UUFFSCxPQUFPcUU7SUFDVDtBQUNGO0FBRUEsU0FBU0ksNkJBQTZCaEUsZUFBZSxFQUFFVCxPQUFPO0lBQzVELE1BQU1XLGdCQUFnQkYsZ0JBQWdCQyxnQkFBZ0IsSUFDcEROLFlBQVlKLFFBQVEyRSw0QkFBNEIsQ0FBQ2hFO0lBRW5ELE9BQU9QO0FBQ1QifQ==
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N1cHBvc2l0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgUHJvb2ZBc3NlcnRpb24gZnJvbSBcIi4uL3Byb29mQXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VwcG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdXBwb3NpdGlvbiBleHRlbmRzIFByb29mQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBzdXBwb3NpdGlvbk5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uTm9kZSA9IHRoaXMuZ2V0U3VwcG9zaXRpb25Ob2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbigpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgaXNOb25zZW5zaWNhbCgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKSxcbiAgICAgICAgICBub25zZW5zaWNhbCA9ICgoc3RhdGVtZW50ID09PSBudWxsKSAmJiAocHJvY2VkdXJlQ2FsbCA9PT0gbnVsbCkpO1xuXG4gICAgcmV0dXJuIG5vbnNlbnNpY2FsO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG5vbnNlbnNpY2FsID0gdGhpcy5pc05vbnNlbnNpY2FsKCk7XG5cbiAgICBpZiAobm9uc2Vuc2ljYWwpIHtcbiAgICAgIGNvbnN0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9KTtcblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdHRpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsID0gdGhpcy52YWxpZGF0ZVByb2NlZHVyZUNhbGwuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGxcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIGlmIChzdGF0ZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRzZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgaWYgKHByb2NlZHVyZUNhbGwgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0dGluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICBwcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQsIChwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBwcm9jZWR1cmUgY2FsbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIHJldHVybiBzdGF0ZW1lbnQudW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSkgPT4ge1xuICAgICAgICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbC51bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCwgKHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkpID0+IHtcbiAgICAgICAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbigpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VicHJvb2ZVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHByb29mQXNzZXJ0aW9uQ29udGV4dCA9IHByb29mQXNzZXJ0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbkNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHByb29mQXNzZXJ0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgIGxldCBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mQXNzZXJ0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IHByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5UHJvb2ZBc3NlcnRpb24ocHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VicHJvb2YgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb247ICAvLy9cblxuICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VwcG9zaXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VwcG9zaXRpb25Ob2RlID0gaW5zdGFudGlhdGVTdXBwb3NpdGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJTdXBwb3NpdGlvbiIsIlByb29mQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFByb2NlZHVyZUNhbGwiLCJnZXRTdXBwb3NpdGlvbk5vZGUiLCJnZXROb2RlIiwic3VwcG9zaXRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRleHQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiaXNOb25zZW5zaWNhbCIsImdldFN0YXRlbWVudCIsIm5vbnNlbnNpY2FsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmaWVzIiwiZGVidWciLCJkZWNsYXJlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiZXhpc3RzIiwiY29tbWl0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwicHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInJlY29uY2lsZSIsInN1cHBvc2l0aW9uQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsInByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mVW5pZmllcyIsInVuaWZ5UHJvb2ZBc3NlcnRpb24iLCJwcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwicHJvb2ZBc3NlcnRpb25Db250ZXh0IiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwicHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiIsImlzUHJvb2ZBc3NlcnRpb24iLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwic3VwcG9zaXRpb24iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVTdXBwb3NpdGlvbiIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVpvQzt1RUFFVDswQkFFSjs4QkFDQTs2QkFDZ0I7eUJBQ1U7eUJBQ2dDOzs7Ozs7QUFFakYsTUFBTSxFQUFFQSxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFekYsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxvQkFBb0JDLHVCQUFjO0lBQzVELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLENBQUU7UUFDdkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQztRQUV6QyxJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsbUJBQW1C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
@@ -53,7 +53,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
53
53
  context.trace(`Verifying the '${ruleString}' rule...`);
54
54
  (0, _context.enclose)((context)=>{
55
55
  const verifyProof = this.verifyProof.bind(this), verifyLabels = this.verifyLabels.bind(this), verifyPremises = this.verifyPremises.bind(this), verifyConclusion = this.verifyConclusion.bind(this);
56
- (0, _continuation.all)([
56
+ return (0, _continuation.all)([
57
57
  verifyLabels,
58
58
  verifyPremises,
59
59
  verifyConclusion,
@@ -68,10 +68,22 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
68
68
  });
69
69
  }, context);
70
70
  });
71
+ verifyLabels(context, conntinuation) {
72
+ const ruleString = this.getString(); ///
73
+ context.trace(`Verifying the '${ruleString}' rule's labels...`);
74
+ return every(this.labels, (label, continuation)=>{
75
+ return this.verifyLabel(label, context, continuation);
76
+ }, (labelsVerify)=>{
77
+ if (labelsVerify) {
78
+ context.debug(`...verified the '${ruleString}' rule's labels.`);
79
+ }
80
+ return conntinuation(labelsVerify);
81
+ });
82
+ }
71
83
  verifyLabel(label, context, continuation) {
72
84
  const ruleString = this.getString(), labelString = label.getString();
73
85
  context.trace(`Verifying the '${ruleString}' rule's '${labelString}' label...`);
74
- label.verify((labelVerifies)=>{
86
+ return label.verify((labelVerifies)=>{
75
87
  if (labelVerifies) {
76
88
  context.debug(`...verified the '${ruleString}' rule's '${labelString}' label.`);
77
89
  }
@@ -86,29 +98,17 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
86
98
  const ruleString = this.getString(); ///
87
99
  context.trace(`Verifying the '${ruleString}' rule's proof...`);
88
100
  const statement = this.conclusion.getStatement();
89
- this.proof.verify(statement, context, (proofVerifies)=>{
101
+ return this.proof.verify(statement, context, (proofVerifies)=>{
90
102
  if (proofVerifies) {
91
103
  context.debug(`...verified the '${ruleString}' rule's proof.`);
92
104
  }
93
105
  return continuation(proofVerifies);
94
106
  });
95
107
  }
96
- verifyLabels(context, conntinuation) {
97
- const ruleString = this.getString(); ///
98
- context.trace(`Verifying the '${ruleString}' rule's labels...`);
99
- return every(this.labels, (label, continuation)=>{
100
- return this.verifyLabel(label, context, continuation);
101
- }, (labelsVerify)=>{
102
- if (labelsVerify) {
103
- context.debug(`...verified the '${ruleString}' rule's labels.`);
104
- }
105
- return conntinuation(labelsVerify);
106
- });
107
- }
108
108
  verifyPremise(premise, context, continuation) {
109
109
  const ruleString = this.getString(), premiseString = premise.getString();
110
110
  context.trace(`Verifying the '${ruleString}' rule's '${premiseString}' premise...`);
111
- premise.verify(context, (premiseVerifies)=>{
111
+ return premise.verify(context, (premiseVerifies)=>{
112
112
  if (premiseVerifies) {
113
113
  const subproofOrProofAssertion = premise; ////
114
114
  context.assignAssignments();
@@ -135,7 +135,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
135
135
  verifyConclusion(context, continuation) {
136
136
  const ruleString = this.getString(), conclusionString = this.conclusion.getString();
137
137
  context.trace(`Verifying the '${ruleString}' rule's '${conclusionString}' conclusion...`);
138
- this.conclusion.verify(context, (conclusionVerifies)=>{
138
+ return this.conclusion.verify(context, (conclusionVerifies)=>{
139
139
  if (conclusionVerifies) {
140
140
  context.debug(`...verified the '${ruleString}' rule's '${conclusionString}' conclusion.`);
141
141
  }
@@ -145,7 +145,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
145
145
  unifyStepWithConclusion(step, context, continuation) {
146
146
  const ruleString = this.getString(), stepString = step.getString(), conclusionString = this.conclusion.getString();
147
147
  context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule's '${conclusionString}' conclusion...`);
148
- this.conclusion.unifyStep(step, context, (stepUnifies)=>{
148
+ return this.conclusion.unifyStep(step, context, (stepUnifies)=>{
149
149
  let stepUnifiesWithConclusion = false;
150
150
  if (stepUnifies) {
151
151
  stepUnifiesWithConclusion = true;
@@ -157,7 +157,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
157
157
  });
158
158
  }
159
159
  unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context, continuation) {
160
- this.unifyStepWithConclusion(step, context, (statementUnifiesWithConclusion)=>{
160
+ return this.unifyStepWithConclusion(step, context, (statementUnifiesWithConclusion)=>{
161
161
  if (!statementUnifiesWithConclusion) {
162
162
  const stepAndSubproofOrProofAssertionsUnify = false;
163
163
  return continuation(stepAndSubproofOrProofAssertionsUnify);
@@ -176,11 +176,13 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
176
176
  }
177
177
  unifySubproofOrProofAssertionsWithPremise(subproofOrProofAssertions, premise, context, continuation) {
178
178
  return extract(subproofOrProofAssertions, (subproofOrProofAssertion, continuation)=>{
179
- premise.unifySubproofOrProofAssertion(subproofOrProofAssertion, context, continuation);
179
+ return premise.unifySubproofOrProofAssertion(subproofOrProofAssertion, context, continuation);
180
180
  }, (subproofOrProofAssertion = null)=>{
181
181
  if (subproofOrProofAssertion !== null) {
182
182
  const subproofOrProofAssertionsUnifiesWithPremise = true;
183
- return continuation(subproofOrProofAssertionsUnifiesWithPremise);
183
+ return context.resolveDerivedSubstitutions(()=>{
184
+ return continuation(subproofOrProofAssertionsUnifiesWithPremise);
185
+ });
184
186
  }
185
187
  return premise.unifyIndependently(context, continuation);
186
188
  });
@@ -213,4 +215,4 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
213
215
  }
214
216
  });
215
217
 
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICBhbGwoW1xuICAgICAgICB2ZXJpZnlMYWJlbHMsXG4gICAgICAgIHZlcmlmeVByZW1pc2VzLFxuICAgICAgICB2ZXJpZnlDb25jbHVzaW9uLFxuICAgICAgICB2ZXJpZnlQcm9vZlxuICAgICAgXSwgY29udGV4dCwgKHZlcmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFJ1bGUocnVsZSk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9KTtcblxuICB2ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGxhYmVsLnZlcmlmeSgobGFiZWxWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChwcm9vZlZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0LCBjb25udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuLi5gKTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLmxhYmVscywgKGxhYmVsLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChsYWJlbHNWZXJpZnkpID0+IHtcbiAgICAgIGlmIChsYWJlbHNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgbGFiZWxzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29ubnRpbnVhdGlvbihsYWJlbHNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBwcmVtaXNlLnZlcmlmeShjb250ZXh0LCAocHJlbWlzZVZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IHByZW1pc2U7ICAvLy8vXG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVtaXNlVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZVZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByZW1pc2VzKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuLi5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMucHJlbWlzZXMsIChwcmVtaXNlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeVByZW1pc2UocHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAocHJlbWlzZXNWZXJpZnkpID0+IHtcbiAgICAgIGlmIChwcmVtaXNlc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcmVtaXNlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcmVtaXNlc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlDb25jbHVzaW9uKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgY29uY2x1c2lvblN0cmluZyA9IHRoaXMuY29uY2x1c2lvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgdGhpcy5jb25jbHVzaW9uLnZlcmlmeShjb250ZXh0LCAoY29uY2x1c2lvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoY29uY2x1c2lvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2NvbmNsdXNpb25TdHJpbmd9JyBjb25jbHVzaW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbmNsdXNpb25WZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBXaXRoQ29uY2x1c2lvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25jbHVzaW9uU3RyaW5nID0gdGhpcy5jb25jbHVzaW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHRoaXMuY29uY2x1c2lvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHRoaXMudW5pZnlTdGVwV2l0aENvbmNsdXNpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbikgPT4ge1xuICAgICAgaWYgKCFzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pIHtcbiAgICAgICAgY29uc3Qgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2VzKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlcykgPT4ge1xuICAgICAgICBsZXQgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlcykge1xuICAgICAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQgPSBjb250ZXh0LmFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKTtcblxuICAgICAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICByZXR1cm4gZXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHByZW1pc2UudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBudWxsKSA9PiB7XG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmVtaXNlLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2VzKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTih0aGlzLnByZW1pc2VzKSxcbiAgICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKHRoaXMuY29uY2x1c2lvbiksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25KU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBwcmVtaXNlcyxcbiAgICAgICAgICAgIGNvbmNsdXNpb25cbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUnVsZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImV2ZXJ5IiwiZXh0cmFjdCIsImZvcndhcmRzRXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrYWJsZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlJ1bGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJnZXRMYWJlbHMiLCJnZXRQcmVtaXNlcyIsImdldFByb29mIiwiZ2V0Q29uY2x1c2lvbiIsImdldFJ1bGVOb2RlIiwiZ2V0Tm9kZSIsInJ1bGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwicnVsZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jbG9zZSIsInZlcmlmeVByb29mIiwiYmluZCIsInZlcmlmeUxhYmVscyIsInZlcmlmeVByZW1pc2VzIiwidmVyaWZ5Q29uY2x1c2lvbiIsImFsbCIsInZlcmlmaWVzIiwicnVsZSIsImFkZFJ1bGUiLCJkZWJ1ZyIsInZlcmlmeUxhYmVsIiwibGFiZWxTdHJpbmciLCJsYWJlbFZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImNvbm50aW51YXRpb24iLCJsYWJlbHNWZXJpZnkiLCJ2ZXJpZnlQcmVtaXNlIiwicHJlbWlzZSIsInByZW1pc2VTdHJpbmciLCJwcmVtaXNlVmVyaWZpZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJhc3NpZ25Bc3NpZ25tZW50cyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInByZW1pc2VzVmVyaWZ5IiwiY29uY2x1c2lvblN0cmluZyIsImNvbmNsdXNpb25WZXJpZmllcyIsInVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uIiwic3RlcCIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aENvbmNsdXNpb24iLCJ1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlcyIsImRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2UiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwicHJlbWlzZXNKU09OIiwicHJlbWlzZXNUb1ByZW1pc2VzSlNPTiIsImNvbmNsdXNpb25KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwibGFiZWxzRnJvbUpTT04iLCJwcmVtaXNlc0Zyb21KU09OIiwiY29uY2x1c2lvbkZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OzsyQkFaK0I7Z0NBQ3FDOzhCQUVoRDswQkFDRzt5QkFDQztzQkFDcUg7QUFFN0ksTUFBTSxFQUFFQSxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFx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
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlQcmVtaXNlcyxcbiAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBydWxlID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRSdWxlKHJ1bGUpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGNvbm50aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIGxhYmVscy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCAobGFiZWwsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25udGludWF0aW9uKGxhYmVsc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5jb25jbHVzaW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZS52ZXJpZnkoY29udGV4dCwgKHByZW1pc2VWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByZW1pc2VWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBwcmVtaXNlOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByZW1pc2VWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcmVtaXNlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByZW1pc2VzLi4uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHByZW1pc2VzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5Q29uY2x1c2lvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb24udmVyaWZ5KGNvbnRleHQsIChjb25jbHVzaW9uVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChjb25jbHVzaW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29uY2x1c2lvblZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uY2x1c2lvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pID0+IHtcbiAgICAgIGlmICghc3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29udGV4dC5hcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgcHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgcmV0dXJuIGV4dHJhY3Qoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gcHJlbWlzZS51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZW1pc2UudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZXMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHJldmVyc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMucHJlbWlzZXMsIChwcmVtaXNlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBwcmVtaXNlc0pTT04gPSBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHRoaXMucHJlbWlzZXMpLFxuICAgICAgICAgIGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04odGhpcy5jb25jbHVzaW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04sICAvLy9cbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHByZW1pc2VzLFxuICAgICAgICAgICAgY29uY2x1c2lvblxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJSdWxlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiZXZlcnkiLCJleHRyYWN0IiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUnVsZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0UHJvb2YiLCJnZXRDb25jbHVzaW9uIiwiZ2V0UnVsZU5vZGUiLCJnZXROb2RlIiwicnVsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJydWxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5UHJlbWlzZXMiLCJ2ZXJpZnlDb25jbHVzaW9uIiwiYWxsIiwidmVyaWZpZXMiLCJydWxlIiwiYWRkUnVsZSIsImRlYnVnIiwiY29ubnRpbnVhdGlvbiIsInZlcmlmeUxhYmVsIiwibGFiZWxzVmVyaWZ5IiwibGFiZWxTdHJpbmciLCJsYWJlbFZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInZlcmlmeVByZW1pc2UiLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsInByZW1pc2VWZXJpZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwicHJlbWlzZXNWZXJpZnkiLCJjb25jbHVzaW9uU3RyaW5nIiwiY29uY2x1c2lvblZlcmlmaWVzIiwidW5pZnlTdGVwV2l0aENvbmNsdXNpb24iLCJzdGVwIiwic3RlcFN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2VzIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwiY29uY2x1c2lvbkpTT04iLCJjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJsYWJlbHNGcm9tSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJjb25jbHVzaW9uRnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7OzJCQVorQjtnQ0FDcUM7OEJBRWhEOzBCQUNHO3lCQUNDO3NCQUNxSDtBQUU3SSxNQUFNLEVBQUVBLE9BQU8sRUFBRSxHQUFHQyx5QkFBYyxFQUM1QixFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3pFLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUV6RixXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxDQUFFO1FBQ2xGLEtBQUssQ0FBQ1AsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUNILE1BQU07SUFDcEI7SUFFQUksY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDSCxRQUFRO0lBQ3RCO0lBRUFJLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ04sS0FBSztJQUNuQjtJQUVBTyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0osVUFBVTtJQUN4QjtJQUVBSyxjQUFjO1FBQ1osTUFBTVYsT0FBTyxJQUFJLENBQUNXLE9BQU8sSUFDbkJDLFdBQVdaLE1BQU8sR0FBRztRQUUzQixPQUFPWTtJQUNUO0lBRUFDLHNCQUFzQkMsZ0JBQWdCLEVBQUU7UUFDdEMsTUFBTUMsMEJBQTBCLElBQUksQ0FBQ1osTUFBTSxDQUFDYSxJQUFJLENBQUMsQ0FBQ0M7WUFDaEQsTUFBTUYsMEJBQTBCRSxNQUFNSixxQkFBcUIsQ0FBQ0M7WUFFNUQsSUFBSUMseUJBQXlCO2dCQUMzQixPQUFPO1lBQ1Q7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUcsU0FBUzNCLFVBQVUsU0FBVU8sT0FBTyxFQUFFcUIsWUFBWTtRQUNoRCxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFeEN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLFNBQVMsQ0FBQztRQUVyREcsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDekI7WUFDUCxNQUFNMEIsY0FBYyxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDeENDLGVBQWUsSUFBSSxDQUFDQSxZQUFZLENBQUNELElBQUksQ0FBQyxJQUFJLEdBQzFDRSxpQkFBaUIsSUFBSSxDQUFDQSxjQUFjLENBQUNGLElBQUksQ0FBQyxJQUFJLEdBQzlDRyxtQkFBbUIsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ0gsSUFBSSxDQUFDLElBQUk7WUFFeEQsT0FBT0ksSUFBQUEsaUJBQUcsRUFBQztnQkFDVEg7Z0JBQ0FDO2dCQUNBQztnQkFDQUo7YUFDRCxFQUFFMUIsU0FBUyxDQUFDZ0M7Z0JBQ1gsSUFBSUEsVUFBVTtvQkFDWixNQUFNQyxPQUFPLElBQUksRUFBRyxHQUFHO29CQUV2QmpDLFFBQVFrQyxPQUFPLENBQUNEO29CQUVoQmpDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxPQUFPLENBQUM7Z0JBQ3ZEO2dCQUVBLE9BQU9ELGFBQWFXO1lBQ3RCO1FBQ0YsR0FBR2hDO0lBQ0wsR0FBRztJQUVINEIsYUFBYTVCLE9BQU8sRUFBRW9DLGFBQWEsRUFBRTtRQUNuQyxNQUFNZCxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLGtCQUFrQixDQUFDO1FBRTlELE9BQU9sQyxNQUFNLElBQUksQ0FBQ2lCLE1BQU0sRUFBRSxDQUFDYyxPQUFPRTtZQUNoQyxPQUFPLElBQUksQ0FBQ2dCLFdBQVcsQ0FBQ2xCLE9BQU9uQixTQUFTcUI7UUFDMUMsR0FBRyxDQUFDaUI7WUFDRixJQUFJQSxjQUFjO2dCQUNoQnRDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxnQkFBZ0IsQ0FBQztZQUNoRTtZQUVBLE9BQU9jLGNBQWNFO1FBQ3ZCO0lBQ0Y7SUFFQUQsWUFBWWxCLEtBQUssRUFBRW5CLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUN4QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQmdCLGNBQWNwQixNQUFNSSxTQUFTO1FBRW5DdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUVpQixZQUFZLFVBQVUsQ0FBQztRQUU5RSxPQUFPcEIsTUFBTUMsTUFBTSxDQUFDLENBQUNvQjtZQUNuQixJQUFJQSxlQUFlO2dCQUNqQnhDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxVQUFVLEVBQUVpQixZQUFZLFFBQVEsQ0FBQztZQUNoRjtZQUVBLE9BQU9sQixhQUFhbUI7UUFDdEI7SUFDRjtJQUVBZCxZQUFZMUIsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDakIsS0FBSyxLQUFLLE1BQU07WUFDdkIsTUFBTXFDLGdCQUFnQjtZQUV0QixPQUFPcEIsYUFBYW9CO1FBQ3RCO1FBRUEsTUFBTW5CLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsaUJBQWlCLENBQUM7UUFFN0QsTUFBTW9CLFlBQVksSUFBSSxDQUFDbkMsVUFBVSxDQUFDb0MsWUFBWTtRQUU5QyxPQUFPLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQ2dCLE1BQU0sQ0FBQ3NCLFdBQVcxQyxTQUFTLENBQUN5QztZQUM1QyxJQUFJQSxlQUFlO2dCQUNqQnpDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxlQUFlLENBQUM7WUFDL0Q7WUFFQSxPQUFPRCxhQUFhb0I7UUFDdEI7SUFDRjtJQUVBRyxjQUFjQyxPQUFPLEVBQUU3QyxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDNUMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0J1QixnQkFBZ0JELFFBQVF0QixTQUFTO1FBRXZDdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUV3QixjQUFjLFlBQVksQ0FBQztRQUVsRixPQUFPRCxRQUFRekIsTUFBTSxDQUFDcEIsU0FBUyxDQUFDK0M7WUFDOUIsSUFBSUEsaUJBQWlCO2dCQUNuQixNQUFNQywyQkFBMkJILFNBQVUsSUFBSTtnQkFFL0M3QyxRQUFRaUQsaUJBQWlCO2dCQUV6QmpELFFBQVFrRCwyQkFBMkIsQ0FBQ0Y7WUFDdEM7WUFFQSxJQUFJRCxpQkFBaUI7Z0JBQ25CL0MsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLFVBQVUsRUFBRXdCLGNBQWMsVUFBVSxDQUFDO1lBQ3BGO1lBRUEsT0FBT3pCLGFBQWEwQjtRQUN0QjtJQUNGO0lBRUFsQixlQUFlN0IsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQ3BDLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsb0JBQW9CLENBQUM7UUFFaEUsT0FBT2hDLGNBQWMsSUFBSSxDQUFDZ0IsUUFBUSxFQUFFLENBQUN1QyxTQUFTeEI7WUFDNUMsT0FBTyxJQUFJLENBQUN1QixhQUFhLENBQUNDLFNBQVM3QyxTQUFTcUI7UUFDOUMsR0FBRyxDQUFDOEI7WUFDRixJQUFJQSxnQkFBZ0I7Z0JBQ2xCbkQsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLGtCQUFrQixDQUFDO1lBQ2xFO1lBRUEsT0FBT0QsYUFBYThCO1FBQ3RCO0lBQ0Y7SUFFQXJCLGlCQUFpQjlCLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUN0QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQjZCLG1CQUFtQixJQUFJLENBQUM3QyxVQUFVLENBQUNnQixTQUFTO1FBRWxEdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUU4QixpQkFBaUIsZUFBZSxDQUFDO1FBRXhGLE9BQU8sSUFBSSxDQUFDN0MsVUFBVSxDQUFDYSxNQUFNLENBQUNwQixTQUFTLENBQUNxRDtZQUN0QyxJQUFJQSxvQkFBb0I7Z0JBQ3RCckQsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixhQUFhLENBQUM7WUFDMUY7WUFFQSxPQUFPL0IsYUFBYWdDO1FBQ3RCO0lBQ0Y7SUFFQUMsd0JBQXdCQyxJQUFJLEVBQUV2RCxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDbkQsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0JpQyxhQUFhRCxLQUFLaEMsU0FBUyxJQUMzQjZCLG1CQUFtQixJQUFJLENBQUM3QyxVQUFVLENBQUNnQixTQUFTO1FBRWxEdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWdDLFdBQVcsaUJBQWlCLEVBQUVsQyxXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixlQUFlLENBQUM7UUFFckgsT0FBTyxJQUFJLENBQUM3QyxVQUFVLENBQUNrRCxTQUFTLENBQUNGLE1BQU12RCxTQUFTLENBQUMwRDtZQUMvQyxJQUFJQyw0QkFBNEI7WUFFaEMsSUFBSUQsYUFBYTtnQkFDZkMsNEJBQTRCO1lBQzlCO1lBRUEsSUFBSUEsMkJBQTJCO2dCQUM3QjNELFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXFCLFdBQVcsaUJBQWlCLEVBQUVsQyxXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixhQUFhLENBQUM7WUFDdkg7WUFFQSxPQUFPL0IsYUFBYXNDO1FBQ3RCO0lBQ0Y7SUFFQUMsc0NBQXNDTCxJQUFJLEVBQUVNLHlCQUF5QixFQUFFN0QsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQzVGLE9BQU8sSUFBSSxDQUFDaUMsdUJBQXVCLENBQUNDLE1BQU12RCxTQUFTLENBQUM4RDtZQUNsRCxJQUFJLENBQUNBLGdDQUFnQztnQkFDbkMsTUFBTUMsd0NBQXdDO2dCQUU5QyxPQUFPMUMsYUFBYTBDO1lBQ3RCO1lBRUEsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQ0gsMkJBQTJCN0QsU0FBUyxDQUFDaUU7Z0JBQ25GLElBQUlGLHdDQUF3QztnQkFFNUMsSUFBSUUsOENBQThDO29CQUNoRCxNQUFNQywrQkFBK0JsRSxRQUFRbUUsK0JBQStCO29CQUU1RSxJQUFJRCw4QkFBOEI7d0JBQ2hDSCx3Q0FBd0M7b0JBQzFDO2dCQUNGO2dCQUVBLE9BQU8xQyxhQUFhMEM7WUFDdEI7UUFDRjtJQUNGO0lBRUFLLDBDQUEwQ1AseUJBQXlCLEVBQUVoQixPQUFPLEVBQUU3QyxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDbkcsT0FBT2hDLFFBQVF3RSwyQkFBMkIsQ0FBQ2IsMEJBQTBCM0I7WUFDbkUsT0FBT3dCLFFBQVF3Qiw2QkFBNkIsQ0FBQ3JCLDBCQUEwQmhELFNBQVNxQjtRQUNsRixHQUFHLENBQUMyQiwyQkFBMkIsSUFBSTtZQUNqQyxJQUFJQSw2QkFBNkIsTUFBTTtnQkFDckMsTUFBTXNCLDhDQUE4QztnQkFFcEQsT0FBT3RFLFFBQVF1RSwyQkFBMkIsQ0FBQztvQkFDekMsT0FBT2xELGFBQWFpRDtnQkFDdEI7WUFDRjtZQUVBLE9BQU96QixRQUFRMkIsa0JBQWtCLENBQUN4RSxTQUFTcUI7UUFDN0M7SUFDRjtJQUVBMkMsMkNBQTJDSCx5QkFBeUIsRUFBRTdELE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUMzRndDLDRCQUE0QjNFLFFBQVEyRSw0QkFBNEIsR0FBRztRQUVuRSxPQUFPdEUsZUFBZSxJQUFJLENBQUNlLFFBQVEsRUFBRSxDQUFDdUMsU0FBU3hCO1lBQzdDLE9BQU8sSUFBSSxDQUFDK0MseUNBQXlDLENBQUNQLDJCQUEyQmhCLFNBQVM3QyxTQUFTcUI7UUFDckcsR0FBR0E7SUFDTDtJQUVBb0QsU0FBUztRQUNQLE1BQU1DLGFBQWFDLElBQUFBLHdCQUFrQixFQUFDLElBQUksQ0FBQ3RFLE1BQU0sR0FDM0N1RSxlQUFlQyxJQUFBQSw0QkFBc0IsRUFBQyxJQUFJLENBQUN2RSxRQUFRLEdBQ25Ed0UsaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUN4RSxVQUFVLEdBQzNETixTQUFTLElBQUksQ0FBQ3NCLFNBQVM7UUFFN0IsSUFBSXBCO1FBRUpBLGFBQWEsSUFBSSxDQUFDNkUsYUFBYTtRQUUvQixNQUFNQyxpQkFBaUJ0RiwyQkFBMkJRO1FBRWxEQSxhQUFhOEUsZ0JBQWlCLEdBQUc7UUFFakMsTUFBTTVFLFNBQVNxRSxZQUNUcEUsV0FBV3NFLGNBQ1hyRSxhQUFhdUUsZ0JBQ2JJLE9BQU87WUFDTGpGO1lBQ0FFO1lBQ0FFO1lBQ0FDO1lBQ0FDO1FBQ0Y7UUFFTixPQUFPMkU7SUFDVDtJQUVBLE9BQU9DLE9BQU8sT0FBTztJQUVyQixPQUFPQyxTQUFTRixJQUFJLEVBQUVsRixPQUFPLEVBQUU7UUFDN0IsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR2lGLE1BQ2JoRixPQUFPLE1BQ1BDLGFBQWFULG1CQUFtQndGLE9BQ2hDN0UsU0FBU2dGLElBQUFBLG9CQUFjLEVBQUNILE1BQU1sRixVQUM5Qk0sV0FBV2dGLElBQUFBLHNCQUFnQixFQUFDSixNQUFNbEYsVUFDbENPLGFBQWFnRixJQUFBQSx3QkFBa0IsRUFBQ0wsTUFBTWxGLFVBQ3RDSSxRQUFRLE1BQ1I2QixPQUFPLElBQUluQyxLQUFLRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxPQUFPQyxRQUFRQyxVQUFVQztRQUVsRixPQUFPMEI7SUFDVDtBQUNGIn0=