occam-verify-cli 1.0.955 → 1.0.972

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 (89) hide show
  1. package/lib/context/bounded.js +11 -7
  2. package/lib/context.js +17 -5
  3. package/lib/element/assertion/signature.js +17 -19
  4. package/lib/element/assertion/subproof.js +36 -39
  5. package/lib/element/assertion/type.js +20 -1
  6. package/lib/element/assumption/metaLevel.js +18 -17
  7. package/lib/element/assumption.js +52 -3
  8. package/lib/element/combinator.js +10 -12
  9. package/lib/element/conclusion.js +33 -33
  10. package/lib/element/constructor.js +8 -12
  11. package/lib/element/deduction.js +33 -33
  12. package/lib/element/equivalence.js +11 -7
  13. package/lib/element/hypothesis.js +45 -19
  14. package/lib/element/judgement.js +1 -1
  15. package/lib/element/label.js +9 -11
  16. package/lib/element/parameter.js +2 -2
  17. package/lib/element/procedureCall.js +1 -1
  18. package/lib/element/proofAssertion/premise.js +98 -87
  19. package/lib/element/proofAssertion/step.js +27 -27
  20. package/lib/element/proofAssertion/supposition.js +99 -88
  21. package/lib/element/proofAssertion.js +3 -3
  22. package/lib/element/property.js +1 -2
  23. package/lib/element/reference.js +30 -38
  24. package/lib/element/section.js +1 -1
  25. package/lib/element/signature.js +38 -47
  26. package/lib/element/statement.js +18 -58
  27. package/lib/element/substitution/frame.js +33 -38
  28. package/lib/element/substitution/reference.js +12 -13
  29. package/lib/element/substitution/statement.js +26 -31
  30. package/lib/element/substitution/term.js +32 -37
  31. package/lib/element/term.js +2 -2
  32. package/lib/element/topLevelAssertion/axiom.js +33 -34
  33. package/lib/element/topLevelAssertion.js +30 -7
  34. package/lib/element/topLevelMetaAssertion.js +2 -2
  35. package/lib/process/discharge.js +38 -0
  36. package/lib/process/unification.js +228 -0
  37. package/lib/process/unify.js +9 -5
  38. package/lib/process/validation.js +291 -0
  39. package/lib/utilities/context.js +69 -101
  40. package/lib/utilities/element.js +2 -4
  41. package/lib/utilities/string.js +4 -4
  42. package/package.json +4 -4
  43. package/src/context/bounded.js +19 -7
  44. package/src/context.js +26 -6
  45. package/src/element/assertion/signature.js +21 -26
  46. package/src/element/assertion/subproof.js +43 -46
  47. package/src/element/assertion/type.js +30 -1
  48. package/src/element/assumption/metaLevel.js +26 -22
  49. package/src/element/assumption.js +80 -2
  50. package/src/element/combinator.js +11 -14
  51. package/src/element/conclusion.js +38 -37
  52. package/src/element/constructor.js +9 -14
  53. package/src/element/deduction.js +38 -37
  54. package/src/element/equivalence.js +17 -13
  55. package/src/element/hypothesis.js +59 -19
  56. package/src/element/judgement.js +1 -1
  57. package/src/element/label.js +10 -12
  58. package/src/element/parameter.js +1 -1
  59. package/src/element/procedureCall.js +1 -1
  60. package/src/element/proofAssertion/premise.js +123 -107
  61. package/src/element/proofAssertion/step.js +29 -29
  62. package/src/element/proofAssertion/supposition.js +124 -108
  63. package/src/element/proofAssertion.js +2 -2
  64. package/src/element/property.js +0 -1
  65. package/src/element/reference.js +36 -47
  66. package/src/element/section.js +1 -1
  67. package/src/element/signature.js +42 -53
  68. package/src/element/statement.js +18 -89
  69. package/src/element/substitution/frame.js +37 -47
  70. package/src/element/substitution/reference.js +13 -16
  71. package/src/element/substitution/statement.js +27 -34
  72. package/src/element/substitution/term.js +37 -46
  73. package/src/element/term.js +1 -1
  74. package/src/element/topLevelAssertion/axiom.js +43 -45
  75. package/src/element/topLevelAssertion.js +42 -6
  76. package/src/element/topLevelMetaAssertion.js +2 -2
  77. package/src/process/discharge.js +33 -0
  78. package/src/{utilities → process}/unification.js +21 -27
  79. package/src/process/unify.js +9 -5
  80. package/src/{utilities → process}/validation.js +2 -2
  81. package/src/utilities/context.js +78 -123
  82. package/src/utilities/element.js +2 -5
  83. package/src/utilities/string.js +6 -6
  84. package/lib/context/ephemeral.js +0 -28
  85. package/lib/context/synoptic.js +0 -255
  86. package/lib/utilities/unification.js +0 -233
  87. package/lib/utilities/validation.js +0 -291
  88. package/src/context/ephemeral.js +0 -17
  89. package/src/context/synoptic.js +0 -361
@@ -33,6 +33,12 @@ _export(exports, {
33
33
  get descend () {
34
34
  return descend;
35
35
  },
36
+ get elide () {
37
+ return elide;
38
+ },
39
+ get encapsulate () {
40
+ return encapsulate;
41
+ },
36
42
  get enclose () {
37
43
  return enclose;
38
44
  },
@@ -45,21 +51,12 @@ _export(exports, {
45
51
  get instantiate () {
46
52
  return instantiate;
47
53
  },
48
- get join () {
49
- return join;
50
- },
51
54
  get manifest () {
52
55
  return manifest;
53
56
  },
54
- get posit () {
55
- return posit;
56
- },
57
57
  get reconcile () {
58
58
  return reconcile;
59
59
  },
60
- get sequester () {
61
- return sequester;
62
- },
63
60
  get serialise () {
64
61
  return serialise;
65
62
  },
@@ -82,9 +79,7 @@ const _nominal = /*#__PURE__*/ _interop_require_default(require("../context/nomi
82
79
  const _literal = /*#__PURE__*/ _interop_require_default(require("../context/literal"));
83
80
  const _liminal = /*#__PURE__*/ _interop_require_default(require("../context/liminal"));
84
81
  const _phaneric = /*#__PURE__*/ _interop_require_default(require("../context/phaneric"));
85
- const _synoptic = /*#__PURE__*/ _interop_require_default(require("../context/synoptic"));
86
82
  const _illative = /*#__PURE__*/ _interop_require_default(require("../context/illative"));
87
- const _ephemeral = /*#__PURE__*/ _interop_require_default(require("../context/ephemeral"));
88
83
  const _branching = /*#__PURE__*/ _interop_require_default(require("../context/branching"));
89
84
  const _nominal1 = /*#__PURE__*/ _interop_require_default(require("../context/file/nominal"));
90
85
  const _json = require("../utilities/json");
@@ -93,19 +88,9 @@ function _interop_require_default(obj) {
93
88
  default: obj
94
89
  };
95
90
  }
96
- function join(innerFunction, ...contexts) {
97
- contexts = contexts.filter((context)=>{
98
- if (context !== null) {
99
- return true;
100
- }
101
- });
102
- const synopticContext = _synoptic.default.fromContexts(contexts), context = synopticContext; ///
103
- return innerFunction(context);
104
- }
105
- function posit(innerFunction, context) {
106
- const ephemeralContext = _ephemeral.default.fromNothing(context);
107
- context = ephemeralContext; ///
108
- return innerFunction(context);
91
+ function evaluate(procedure, terms) {
92
+ const context = procedure.getContext();
93
+ return procedure.call(terms, context);
109
94
  }
110
95
  function ground(innerFunction) {
111
96
  let context;
@@ -115,16 +100,9 @@ function ground(innerFunction) {
115
100
  context = literalContext; ///
116
101
  return innerFunction(context);
117
102
  }
118
- function ablate(innerFunction, context) {
119
- const released = context.isReleased();
120
- if (!released) {
121
- context = ablateContext(context);
122
- }
123
- return innerFunction(context);
124
- }
125
- function choose(innerFunction, context) {
126
- const branchingContext = _branching.default.fromNothing(context);
127
- context = branchingContext; ///
103
+ function declare(innerFunction, context) {
104
+ const theticContext = _thetic.default.fromNothing(context);
105
+ context = theticContext; ///
128
106
  return innerFunction(context);
129
107
  }
130
108
  function derive(innerFunction, context) {
@@ -132,9 +110,24 @@ function derive(innerFunction, context) {
132
110
  context = illativeContext; ///
133
111
  return innerFunction(context);
134
112
  }
135
- function declare(innerFunction, context) {
136
- const theticContext = _thetic.default.fromNothing(context);
137
- context = theticContext; ///
113
+ function elide(innerFunction, context) {
114
+ const aphasicContext = _aphasic.default.fromNothing(context);
115
+ context = aphasicContext; ///
116
+ return innerFunction(context);
117
+ }
118
+ function enclose(innerFunction, context) {
119
+ const boundedContext = _bounded.default.fromNothing(context);
120
+ context = boundedContext; ///
121
+ return innerFunction(context);
122
+ }
123
+ function encapsulate(innerFunction, metaLevelAssumptions, context) {
124
+ const boundedContext = _bounded.default.fromMetaLevelAssumptions(metaLevelAssumptions, context);
125
+ context = boundedContext; ///
126
+ return innerFunction(context);
127
+ }
128
+ function choose(innerFunction, context) {
129
+ const branchingContext = _branching.default.fromNothing(context);
130
+ context = branchingContext; ///
138
131
  return innerFunction(context);
139
132
  }
140
133
  function descend(innerFunction, context) {
@@ -142,25 +135,19 @@ function descend(innerFunction, context) {
142
135
  context = nestedContext; ///
143
136
  return innerFunction(context);
144
137
  }
145
- function attempt(innerFunction, context) {
146
- const released = context.isReleased();
147
- if (!released) {
148
- const mnemicContext = _mnemic.default.fromNothing(context);
149
- context = mnemicContext; ///
138
+ function ablate(innerFunction, context) {
139
+ const unreleased = context.isUnreleased();
140
+ if (unreleased) {
141
+ context = ablateContext(context); ///
150
142
  }
151
143
  return innerFunction(context);
152
144
  }
153
- function enclose(innerFunction, metaLevelAssumptions, context) {
154
- if (context === undefined) {
155
- context = metaLevelAssumptions; ///
156
- metaLevelAssumptions = null;
145
+ function attempt(innerFunction, context) {
146
+ const unreleased = context.isUnreleased();
147
+ if (unreleased) {
148
+ const mnemicContext = _mnemic.default.fromNothing(context);
149
+ context = mnemicContext; ///
157
150
  }
158
- const boundedContext = _bounded.default.fromMetaLevelAssumptions(metaLevelAssumptions, context);
159
- context = boundedContext; ///
160
- return innerFunction(context);
161
- }
162
- function manifest(innerFunction, ...contexts) {
163
- const phanericContext = _phaneric.default.fromContexts(contexts), context = phanericContext; ///
164
151
  return innerFunction(context);
165
152
  }
166
153
  function reconcile(innerFunction, context) {
@@ -168,40 +155,33 @@ function reconcile(innerFunction, context) {
168
155
  context = liminalContext; ///
169
156
  return innerFunction(context);
170
157
  }
171
- function sequester(innerFunction, context) {
172
- const aphasicContext = _aphasic.default.fromNothing(context);
173
- context = aphasicContext; ///
174
- return innerFunction(context);
175
- }
176
158
  function serialise(innerFunction, context) {
177
159
  const mnemicContext = context, mnemicContextJSON = (0, _json.mnemicContextToMnemicContextJSON)(mnemicContext), contextJSON = mnemicContextJSON; ///
178
160
  context = contextJSON; ///
179
161
  return innerFunction(context);
180
162
  }
181
- function instantiate(innerFunction, context) {
182
- const literalContext = _literal.default.fromNothing(context);
183
- context = literalContext; ///
184
- return innerFunction(context);
185
- }
186
163
  function unserialise(innerFunction, json, context) {
187
164
  const mnemicContext = (0, _json.mnemicContextFromJSON)(json, context);
188
165
  context = mnemicContext; ///
189
166
  return innerFunction(json, context);
190
167
  }
191
- function ablates(innerFunction, ...contexts) {
192
- contexts = contexts.map((context)=>{
193
- const released = context.isReleased();
194
- if (!released) {
195
- context = ablateContext(context);
196
- }
197
- return context;
198
- });
199
- return innerFunction(...contexts);
168
+ function unserialises(innerFunction, json, context) {
169
+ const mnemicContexts = (0, _json.mnemicContextsFromJSON)(json, context), contexts = mnemicContexts; ///
170
+ return innerFunction(json, ...contexts);
171
+ }
172
+ function instantiate(innerFunction, context) {
173
+ const literalContext = _literal.default.fromNothing(context);
174
+ context = literalContext; ///
175
+ return innerFunction(context);
176
+ }
177
+ function manifest(innerFunction, ...contexts) {
178
+ const phanericContext = _phaneric.default.fromContexts(contexts), context = phanericContext; ///
179
+ return innerFunction(context);
200
180
  }
201
181
  function attempts(innerFunction, ...contexts) {
202
182
  contexts = contexts.map((context)=>{
203
- const released = context.isReleased();
204
- if (!released) {
183
+ const unreleased = context.isUnreleased();
184
+ if (unreleased) {
205
185
  const mnemicContext = _mnemic.default.fromNothing(context);
206
186
  context = mnemicContext; ///
207
187
  }
@@ -214,39 +194,27 @@ function serialises(innerFunction, ...contexts) {
214
194
  contexts = contextsJSON; ///
215
195
  return innerFunction(...contexts);
216
196
  }
217
- function unserialises(innerFunction, json, context) {
218
- const mnemicContexts = (0, _json.mnemicContextsFromJSON)(json, context), contexts = mnemicContexts; ///
219
- return innerFunction(json, ...contexts);
220
- }
221
- function evaluate(procedure, terms) {
222
- const context = procedure.getContext();
223
- return procedure.call(terms, context);
197
+ function ablates(innerFunction, ...contexts) {
198
+ contexts = contexts.map((context)=>{
199
+ const unreleased = context.isUnreleased();
200
+ if (unreleased) {
201
+ context = ablateContext(context); ///
202
+ }
203
+ return context;
204
+ });
205
+ return innerFunction(...contexts);
224
206
  }
225
207
  function ablateContext(context) {
226
- const stated = context.isStated();
227
- let contextExtraneousContext = isContextExtraneousContext(context);
228
- while(contextExtraneousContext){
208
+ let contextGroundedContext = isContextGroundedContext(context);
209
+ while(!contextGroundedContext){
229
210
  context = context.getContext();
230
- contextExtraneousContext = isContextExtraneousContext(context);
231
- }
232
- const Context = stated ? _thetic.default : _illative.default;
233
- context = augmentContext(context, Context);
234
- return context;
235
- }
236
- function augmentContext(context, Context) {
237
- const contextContext = context instanceof Context;
238
- if (!contextContext) {
239
- context = Context.fromNothing(context);
211
+ contextGroundedContext = isContextGroundedContext(context);
240
212
  }
241
213
  return context;
242
214
  }
243
- function isContextExtraneousContext(context) {
244
- const contextSubstantiveContext = isContextSubstantiveContext(context), contextExtraneousContext = !contextSubstantiveContext;
245
- return contextExtraneousContext;
246
- }
247
- function isContextSubstantiveContext(context) {
248
- const contextTheticContext = context instanceof _thetic.default, contextIllativeContext = context instanceof _illative.default, contextBoundedContext = context instanceof _bounded.default, contextNominalFileContext = context instanceof _nominal1.default, contextSubstantiveContext = contextTheticContext || contextIllativeContext || contextBoundedContext || contextNominalFileContext;
249
- return contextSubstantiveContext;
215
+ function isContextGroundedContext(context) {
216
+ const contextTheticContext = context instanceof _thetic.default, contextIllativeContext = context instanceof _illative.default, contextNominalFileContext = context instanceof _nominal1.default, contextGroundedContext = contextTheticContext || contextIllativeContext || contextNominalFileContext;
217
+ return contextGroundedContext;
250
218
  }
251
219
 
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbm1pY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbW5lbWljXCI7XG5pbXBvcnQgTmVzdGVkQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9uZXN0ZWRcIjtcbmltcG9ydCBUaGV0aWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3RoZXRpY1wiO1xuaW1wb3J0IEFwaGFzaWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2FwaGFzaWNcIjtcbmltcG9ydCBCb3VuZGVkQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9ib3VuZGVkXCI7XG5pbXBvcnQgTm9taW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbm9taW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBMaW1pbmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9saW1pbmFsXCI7XG5pbXBvcnQgUGhhbmVyaWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3BoYW5lcmljXCI7XG5pbXBvcnQgU3lub3B0aWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3N5bm9wdGljXCI7XG5pbXBvcnQgSWxsYXRpdmVDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2lsbGF0aXZlXCI7XG5pbXBvcnQgRXBoZW1lcmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9lcGhlbWVyYWxcIjtcbmltcG9ydCBCcmFuY2hpbmdDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2JyYW5jaGluZ1wiO1xuaW1wb3J0IE5vbWluYWxGaWxlQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9maWxlL25vbWluYWxcIjtcblxuaW1wb3J0IHsgbW5lbWljQ29udGV4dEZyb21KU09OLCBtbmVtaWNDb250ZXh0c0Zyb21KU09OLCBtbmVtaWNDb250ZXh0VG9NbmVtaWNDb250ZXh0SlNPTiwgbW5lbWljQ29udGV4dHNUb01uZW1pY0NvbnRleHRzSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gam9pbihpbm5lckZ1bmN0aW9uLCAuLi5jb250ZXh0cykge1xuICBjb250ZXh0cyA9IGNvbnRleHRzLmZpbHRlcigoY29udGV4dCkgPT4ge1xuICAgIGlmIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHN5bm9wdGljQ29udGV4dCA9IFN5bm9wdGljQ29udGV4dC5mcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICBjb250ZXh0ID0gc3lub3B0aWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdChpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91bmQoaW5uZXJGdW5jdGlvbikge1xuICBsZXQgY29udGV4dDtcblxuICBjb25zdCBub21pbmFsQ29udGV4dCA9IE5vbWluYWxDb250ZXh0LmZyb21Ob3RoaW5nKCk7XG5cbiAgY29udGV4dCA9IG5vbWluYWxDb250ZXh0OyAvLy9cblxuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWJsYXRlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgcmVsZWFzZWQgPSBjb250ZXh0LmlzUmVsZWFzZWQoKTtcblxuICBpZiAoIXJlbGVhc2VkKSB7XG4gICAgY29udGV4dCA9IGFibGF0ZUNvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJyYW5jaGluZ0NvbnRleHQgPSBCcmFuY2hpbmdDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBicmFuY2hpbmdDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBpbGxhdGl2ZUNvbnRleHQgPSBJbGxhdGl2ZUNvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGlsbGF0aXZlQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRoZXRpY0NvbnRleHQgPSBUaGV0aWNDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSB0aGV0aWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjZW5kKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbmVzdGVkQ29udGV4dCA9IE5lc3RlZENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG5lc3RlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHQoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlZCA9IGNvbnRleHQuaXNSZWxlYXNlZCgpO1xuXG4gIGlmICghcmVsZWFzZWQpIHtcbiAgICBjb25zdCBtbmVtaWNDb250ZXh0ID0gTWVubWljQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBtbmVtaWNDb250ZXh0OyAgLy8vXG4gIH1cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY2xvc2UoaW5uZXJGdW5jdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uczsgIC8vL1xuXG4gICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBudWxsO1xuICB9XG5cbiAgY29uc3QgYm91bmRlZENvbnRleHQgPSBCb3VuZGVkQ29udGV4dC5mcm9tTWV0YUxldmVsQXNzdW1wdGlvbnMobWV0YUxldmVsQXNzdW1wdGlvbnMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBib3VuZGVkQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFuaWZlc3QoaW5uZXJGdW5jdGlvbiwgLi4uY29udGV4dHMpIHtcbiAgY29uc3QgcGhhbmVyaWNDb250ZXh0ID0gUGhhbmVyaWNDb250ZXh0LmZyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgIGNvbnRleHQgPSBwaGFuZXJpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZXN0ZXIoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBhcGhhc2ljQ29udGV4dCA9IEFwaGFzaWNDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBhcGhhc2ljQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXNlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbW5lbWljQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICBtbmVtaWNDb250ZXh0SlNPTiA9IG1uZW1pY0NvbnRleHRUb01uZW1pY0NvbnRleHRKU09OKG1uZW1pY0NvbnRleHQpLFxuICAgICAgICBjb250ZXh0SlNPTiA9IG1uZW1pY0NvbnRleHRKU09OOyAvLy9cblxuICBjb250ZXh0ID0gY29udGV4dEpTT047ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbGl0ZXJhbENvbnRleHQgPSBMaXRlcmFsQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbGl0ZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2VyaWFsaXNlKGlubmVyRnVuY3Rpb24sIGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbW5lbWljQ29udGV4dCA9IG1uZW1pY0NvbnRleHRGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbW5lbWljQ29udGV4dDsgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oanNvbiwgY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmxhdGVzKGlubmVyRnVuY3Rpb24sIC4uLmNvbnRleHRzKSB7XG4gIGNvbnRleHRzID0gY29udGV4dHMubWFwKChjb250ZXh0KSA9PiB7ICAvLy9cbiAgICBjb25zdCByZWxlYXNlZCA9IGNvbnRleHQuaXNSZWxlYXNlZCgpO1xuXG4gICAgaWYgKCFyZWxlYXNlZCkge1xuICAgICAgY29udGV4dCA9IGFibGF0ZUNvbnRleHQoY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKC4uLmNvbnRleHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHRzKGlubmVyRnVuY3Rpb24sIC4uLmNvbnRleHRzKSB7XG4gIGNvbnRleHRzID0gY29udGV4dHMubWFwKChjb250ZXh0KSA9PiB7ICAvLy9cbiAgICBjb25zdCByZWxlYXNlZCA9IGNvbnRleHQuaXNSZWxlYXNlZCgpO1xuXG4gICAgaWYgKCFyZWxlYXNlZCkge1xuICAgICAgY29uc3QgbW5lbWljQ29udGV4dCA9IE1lbm1pY0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBtbmVtaWNDb250ZXh0OyAgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKC4uLmNvbnRleHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGlzZXMoaW5uZXJGdW5jdGlvbiwgLi4uY29udGV4dHMpIHtcbiAgY29uc3QgbW5lbWljQ29udGV4dHMgPSBjb250ZXh0cywgLy8vXG4gICAgICAgIG1uZW1pY0NvbnRleHRzSlNPTiA9IG1uZW1pY0NvbnRleHRzVG9NbmVtaWNDb250ZXh0c0pTT04obW5lbWljQ29udGV4dHMpLFxuICAgICAgICBjb250ZXh0c0pTT04gPSBtbmVtaWNDb250ZXh0c0pTT047IC8vL1xuXG4gIGNvbnRleHRzID0gY29udGV4dHNKU09OOyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oLi4uY29udGV4dHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXJpYWxpc2VzKGlubmVyRnVuY3Rpb24sIGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbW5lbWljQ29udGV4dHMgPSBtbmVtaWNDb250ZXh0c0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICBjb250ZXh0cyA9IG1uZW1pY0NvbnRleHRzOyAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihqc29uLCAuLi5jb250ZXh0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZShwcm9jZWR1cmUsIHRlcm1zKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBwcm9jZWR1cmUuZ2V0Q29udGV4dCgpO1xuXG4gIHJldHVybiBwcm9jZWR1cmUuY2FsbCh0ZXJtcywgY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIGFibGF0ZUNvbnRleHQoY29udGV4dCkge1xuICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgbGV0IGNvbnRleHRFeHRyYW5lb3VzQ29udGV4dCA9IGlzQ29udGV4dEV4dHJhbmVvdXNDb250ZXh0KGNvbnRleHQpO1xuXG4gIHdoaWxlIChjb250ZXh0RXh0cmFuZW91c0NvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dC5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQgPSBpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IENvbnRleHQgPSBzdGF0ZWQgPyBUaGV0aWNDb250ZXh0IDogSWxsYXRpdmVDb250ZXh0O1xuXG4gIGNvbnRleHQgPSBhdWdtZW50Q29udGV4dChjb250ZXh0LCBDb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gYXVnbWVudENvbnRleHQoY29udGV4dCwgQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0Q29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0Q29udGV4dCkge1xuICAgIGNvbnRleHQgPSBDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dEV4dHJhbmVvdXNDb250ZXh0KGNvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dFN1YnN0YW50aXZlQ29udGV4dCA9IGlzQ29udGV4dFN1YnN0YW50aXZlQ29udGV4dChjb250ZXh0KSxcbiAgICAgICAgY29udGV4dEV4dHJhbmVvdXNDb250ZXh0ID0gIWNvbnRleHRTdWJzdGFudGl2ZUNvbnRleHQ7XG5cbiAgcmV0dXJuIGNvbnRleHRFeHRyYW5lb3VzQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0U3Vic3RhbnRpdmVDb250ZXh0KGNvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dFRoZXRpY0NvbnRleHQgPSAoY29udGV4dCBpbnN0YW5jZW9mIFRoZXRpY0NvbnRleHQpLFxuICAgICAgICBjb250ZXh0SWxsYXRpdmVDb250ZXh0ID0gKGNvbnRleHQgaW5zdGFuY2VvZiBJbGxhdGl2ZUNvbnRleHQpLFxuICAgICAgICBjb250ZXh0Qm91bmRlZENvbnRleHQgPSAoY29udGV4dCBpbnN0YW5jZW9mIEJvdW5kZWRDb250ZXh0KSxcbiAgICAgICAgY29udGV4dE5vbWluYWxGaWxlQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgTm9taW5hbEZpbGVDb250ZXh0KSxcbiAgICAgICAgY29udGV4dFN1YnN0YW50aXZlQ29udGV4dCA9IChjb250ZXh0VGhldGljQ29udGV4dCB8fCBjb250ZXh0SWxsYXRpdmVDb250ZXh0IHx8IGNvbnRleHRCb3VuZGVkQ29udGV4dCB8fCBjb250ZXh0Tm9taW5hbEZpbGVDb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dFN1YnN0YW50aXZlQ29udGV4dDtcbn1cbiJdLCJuYW1lcyI6WyJhYmxhdGUiLCJhYmxhdGVzIiwiYXR0ZW1wdCIsImF0dGVtcHRzIiwiY2hvb3NlIiwiZGVjbGFyZSIsImRlcml2ZSIsImRlc2NlbmQiLCJlbmNsb3NlIiwiZXZhbHVhdGUiLCJncm91bmQiLCJpbnN0YW50aWF0ZSIsImpvaW4iLCJtYW5pZmVzdCIsInBvc2l0IiwicmVjb25jaWxlIiwic2VxdWVzdGVyIiwic2VyaWFsaXNlIiwic2VyaWFsaXNlcyIsInVuc2VyaWFsaXNlIiwidW5zZXJpYWxpc2VzIiwiaW5uZXJGdW5jdGlvbiIsImNvbnRleHRzIiwiZmlsdGVyIiwiY29udGV4dCIsInN5bm9wdGljQ29udGV4dCIsIlN5bm9wdGljQ29udGV4dCIsImZyb21Db250ZXh0cyIsImVwaGVtZXJhbENvbnRleHQiLCJFcGhlbWVyYWxDb250ZXh0IiwiZnJvbU5vdGhpbmciLCJub21pbmFsQ29udGV4dCIsIk5vbWluYWxDb250ZXh0IiwibGl0ZXJhbENvbnRleHQiLCJMaXRlcmFsQ29udGV4dCIsInJlbGVhc2VkIiwiaXNSZWxlYXNlZCIsImFibGF0ZUNvbnRleHQiLCJicmFuY2hpbmdDb250ZXh0IiwiQnJhbmNoaW5nQ29udGV4dCIsImlsbGF0aXZlQ29udGV4dCIsIklsbGF0aXZlQ29udGV4dCIsInRoZXRpY0NvbnRleHQiLCJUaGV0aWNDb250ZXh0IiwibmVzdGVkQ29udGV4dCIsIk5lc3RlZENvbnRleHQiLCJtbmVtaWNDb250ZXh0IiwiTWVubWljQ29udGV4dCIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwidW5kZWZpbmVkIiwiYm91bmRlZENvbnRleHQiLCJCb3VuZGVkQ29udGV4dCIsImZyb21NZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInBoYW5lcmljQ29udGV4dCIsIlBoYW5lcmljQ29udGV4dCIsImxpbWluYWxDb250ZXh0IiwiTGltaW5hbENvbnRleHQiLCJhcGhhc2ljQ29udGV4dCIsIkFwaGFzaWNDb250ZXh0IiwibW5lbWljQ29udGV4dEpTT04iLCJtbmVtaWNDb250ZXh0VG9NbmVtaWNDb250ZXh0SlNPTiIsImNvbnRleHRKU09OIiwianNvbiIsIm1uZW1pY0NvbnRleHRGcm9tSlNPTiIsIm1hcCIsIm1uZW1pY0NvbnRleHRzIiwibW5lbWljQ29udGV4dHNKU09OIiwibW5lbWljQ29udGV4dHNUb01uZW1pY0NvbnRleHRzSlNPTiIsImNvbnRleHRzSlNPTiIsIm1uZW1pY0NvbnRleHRzRnJvbUpTT04iLCJwcm9jZWR1cmUiLCJ0ZXJtcyIsImdldENvbnRleHQiLCJjYWxsIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJjb250ZXh0RXh0cmFuZW91c0NvbnRleHQiLCJpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dCIsIkNvbnRleHQiLCJhdWdtZW50Q29udGV4dCIsImNvbnRleHRDb250ZXh0IiwiY29udGV4dFN1YnN0YW50aXZlQ29udGV4dCIsImlzQ29udGV4dFN1YnN0YW50aXZlQ29udGV4dCIsImNvbnRleHRUaGV0aWNDb250ZXh0IiwiY29udGV4dElsbGF0aXZlQ29udGV4dCIsImNvbnRleHRCb3VuZGVkQ29udGV4dCIsImNvbnRleHROb21pbmFsRmlsZUNvbnRleHQiLCJOb21pbmFsRmlsZUNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXNEZ0JBO2VBQUFBOztRQXFIQUM7ZUFBQUE7O1FBM0VBQztlQUFBQTs7UUF5RkFDO2VBQUFBOztRQXpIQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFSQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFvQkFDO2VBQUFBOztRQThHQUM7ZUFBQUE7O1FBbExBQztlQUFBQTs7UUFtSEFDO2VBQUFBOztRQXhJ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
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1uZW1pY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbW5lbWljXCI7XG5pbXBvcnQgTmVzdGVkQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9uZXN0ZWRcIjtcbmltcG9ydCBUaGV0aWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3RoZXRpY1wiO1xuaW1wb3J0IEFwaGFzaWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2FwaGFzaWNcIjtcbmltcG9ydCBCb3VuZGVkQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9ib3VuZGVkXCI7XG5pbXBvcnQgTm9taW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbm9taW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBMaW1pbmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9saW1pbmFsXCI7XG5pbXBvcnQgUGhhbmVyaWNDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3BoYW5lcmljXCI7XG5pbXBvcnQgSWxsYXRpdmVDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2lsbGF0aXZlXCI7XG5pbXBvcnQgQnJhbmNoaW5nQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9icmFuY2hpbmdcIjtcbmltcG9ydCBOb21pbmFsRmlsZUNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvZmlsZS9ub21pbmFsXCI7XG5cbmltcG9ydCB7IG1uZW1pY0NvbnRleHRGcm9tSlNPTiwgbW5lbWljQ29udGV4dHNGcm9tSlNPTiwgbW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04sIG1uZW1pY0NvbnRleHRzVG9NbmVtaWNDb250ZXh0c0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlKHByb2NlZHVyZSwgdGVybXMpIHtcbiAgY29uc3QgY29udGV4dCA9IHByb2NlZHVyZS5nZXRDb250ZXh0KCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZS5jYWxsKHRlcm1zLCBjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VuZChpbm5lckZ1bmN0aW9uKSB7XG4gIGxldCBjb250ZXh0O1xuXG4gIGNvbnN0IG5vbWluYWxDb250ZXh0ID0gTm9taW5hbENvbnRleHQuZnJvbU5vdGhpbmcoKTtcblxuICBjb250ZXh0ID0gbm9taW5hbENvbnRleHQ7IC8vL1xuXG4gIGNvbnN0IGxpdGVyYWxDb250ZXh0ID0gTGl0ZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpdGVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgdGhldGljQ29udGV4dCA9IFRoZXRpY0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHRoZXRpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlsbGF0aXZlQ29udGV4dCA9IElsbGF0aXZlQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gaWxsYXRpdmVDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFwaGFzaWNDb250ZXh0ID0gQXBoYXNpY0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGFwaGFzaWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNsb3NlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgYm91bmRlZENvbnRleHQgPSBCb3VuZGVkQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gYm91bmRlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY2Fwc3VsYXRlKGlubmVyRnVuY3Rpb24sIG1ldGFMZXZlbEFzc3VtcHRpb25zLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJvdW5kZWRDb250ZXh0ID0gQm91bmRlZENvbnRleHQuZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zKG1ldGFMZXZlbEFzc3VtcHRpb25zLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gYm91bmRlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJyYW5jaGluZ0NvbnRleHQgPSBCcmFuY2hpbmdDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBicmFuY2hpbmdDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjZW5kKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbmVzdGVkQ29udGV4dCA9IE5lc3RlZENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG5lc3RlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFibGF0ZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHVucmVsZWFzZWQgPSBjb250ZXh0LmlzVW5yZWxlYXNlZCgpO1xuXG4gIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgY29udGV4dCA9IGFibGF0ZUNvbnRleHQoY29udGV4dCk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRlbXB0KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgdW5yZWxlYXNlZCA9IGNvbnRleHQuaXNVbnJlbGVhc2VkKCk7XG5cbiAgaWYgKHVucmVsZWFzZWQpIHtcbiAgICBjb25zdCBtbmVtaWNDb250ZXh0ID0gTW5lbWljQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBtbmVtaWNDb250ZXh0OyAgLy8vXG4gIH1cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpc2UoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBtbmVtaWNDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgIG1uZW1pY0NvbnRleHRKU09OID0gbW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04obW5lbWljQ29udGV4dCksXG4gICAgICAgIGNvbnRleHRKU09OID0gbW5lbWljQ29udGV4dEpTT047IC8vL1xuXG4gIGNvbnRleHQgPSBjb250ZXh0SlNPTjsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXJpYWxpc2UoaW5uZXJGdW5jdGlvbiwganNvbiwgY29udGV4dCkge1xuICBjb25zdCBtbmVtaWNDb250ZXh0ID0gbW5lbWljQ29udGV4dEZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBtbmVtaWNDb250ZXh0OyAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihqc29uLCBjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2VyaWFsaXNlcyhpbm5lckZ1bmN0aW9uLCBqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1uZW1pY0NvbnRleHRzID0gbW5lbWljQ29udGV4dHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgY29udGV4dHMgPSBtbmVtaWNDb250ZXh0czsgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oanNvbiwgLi4uY29udGV4dHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFuaWZlc3QoaW5uZXJGdW5jdGlvbiwgLi4uY29udGV4dHMpIHtcbiAgY29uc3QgcGhhbmVyaWNDb250ZXh0ID0gUGhhbmVyaWNDb250ZXh0LmZyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgIGNvbnRleHQgPSBwaGFuZXJpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHRzKGlubmVyRnVuY3Rpb24sIC4uLmNvbnRleHRzKSB7XG4gIGNvbnRleHRzID0gY29udGV4dHMubWFwKChjb250ZXh0KSA9PiB7ICAvLy9cbiAgICBjb25zdCB1bnJlbGVhc2VkID0gY29udGV4dC5pc1VucmVsZWFzZWQoKTtcblxuICAgIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgICBjb25zdCBtbmVtaWNDb250ZXh0ID0gTW5lbWljQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG1uZW1pY0NvbnRleHQ7ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSk7XG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oLi4uY29udGV4dHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXNlcyhpbm5lckZ1bmN0aW9uLCAuLi5jb250ZXh0cykge1xuICBjb25zdCBtbmVtaWNDb250ZXh0cyA9IGNvbnRleHRzLCAvLy9cbiAgICAgICAgbW5lbWljQ29udGV4dHNKU09OID0gbW5lbWljQ29udGV4dHNUb01uZW1pY0NvbnRleHRzSlNPTihtbmVtaWNDb250ZXh0cyksXG4gICAgICAgIGNvbnRleHRzSlNPTiA9IG1uZW1pY0NvbnRleHRzSlNPTjsgLy8vXG5cbiAgY29udGV4dHMgPSBjb250ZXh0c0pTT047ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbiguLi5jb250ZXh0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmxhdGVzKGlubmVyRnVuY3Rpb24sIC4uLmNvbnRleHRzKSB7XG4gIGNvbnRleHRzID0gY29udGV4dHMubWFwKChjb250ZXh0KSA9PiB7ICAvLy9cbiAgICBjb25zdCB1bnJlbGVhc2VkID0gY29udGV4dC5pc1VucmVsZWFzZWQoKTtcblxuICAgIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgICBjb250ZXh0ID0gYWJsYXRlQ29udGV4dChjb250ZXh0KTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKC4uLmNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gYWJsYXRlQ29udGV4dChjb250ZXh0KSB7XG4gICAgbGV0IGNvbnRleHRHcm91bmRlZENvbnRleHQgPSBpc0NvbnRleHRHcm91bmRlZENvbnRleHQoY29udGV4dCk7XG5cbiAgICB3aGlsZSAoIWNvbnRleHRHcm91bmRlZENvbnRleHQpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmdldENvbnRleHQoKTtcblxuICAgICAgY29udGV4dEdyb3VuZGVkQ29udGV4dCA9IGlzQ29udGV4dEdyb3VuZGVkQ29udGV4dChjb250ZXh0KTtcbiAgICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dEdyb3VuZGVkQ29udGV4dChjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHRUaGV0aWNDb250ZXh0ID0gKGNvbnRleHQgaW5zdGFuY2VvZiBUaGV0aWNDb250ZXh0KSxcbiAgICAgICAgY29udGV4dElsbGF0aXZlQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgSWxsYXRpdmVDb250ZXh0KSxcbiAgICAgICAgY29udGV4dE5vbWluYWxGaWxlQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgTm9taW5hbEZpbGVDb250ZXh0KSxcbiAgICAgICAgY29udGV4dEdyb3VuZGVkQ29udGV4dCA9IChjb250ZXh0VGhldGljQ29udGV4dCB8fCBjb250ZXh0SWxsYXRpdmVDb250ZXh0IHx8IGNvbnRleHROb21pbmFsRmlsZUNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0R3JvdW5kZWRDb250ZXh0O1xufVxuIl0sIm5hbWVzIjpbImFibGF0ZSIsImFibGF0ZXMiLCJhdHRlbXB0IiwiYXR0ZW1wdHMiLCJjaG9vc2UiLCJkZWNsYXJlIiwiZGVyaXZlIiwiZGVzY2VuZCIsImVsaWRlIiwiZW5jYXBzdWxhdGUiLCJlbmNsb3NlIiwiZXZhbHVhdGUiLCJncm91bmQiLCJpbnN0YW50aWF0ZSIsIm1hbmlmZXN0IiwicmVjb25jaWxlIiwic2VyaWFsaXNlIiwic2VyaWFsaXNlcyIsInVuc2VyaWFsaXNlIiwidW5zZXJpYWxpc2VzIiwicHJvY2VkdXJlIiwidGVybXMiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImNhbGwiLCJpbm5lckZ1bmN0aW9uIiwibm9taW5hbENvbnRleHQiLCJOb21pbmFsQ29udGV4dCIsImZyb21Ob3RoaW5nIiwibGl0ZXJhbENvbnRleHQiLCJMaXRlcmFsQ29udGV4dCIsInRoZXRpY0NvbnRleHQiLCJUaGV0aWNDb250ZXh0IiwiaWxsYXRpdmVDb250ZXh0IiwiSWxsYXRpdmVDb250ZXh0IiwiYXBoYXNpY0NvbnRleHQiLCJBcGhhc2ljQ29udGV4dCIsImJvdW5kZWRDb250ZXh0IiwiQm91bmRlZENvbnRleHQiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImZyb21NZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImJyYW5jaGluZ0NvbnRleHQiLCJCcmFuY2hpbmdDb250ZXh0IiwibmVzdGVkQ29udGV4dCIsIk5lc3RlZENvbnRleHQiLCJ1bnJlbGVhc2VkIiwiaXNVbnJlbGVhc2VkIiwiYWJsYXRlQ29udGV4dCIsIm1uZW1pY0NvbnRleHQiLCJNbmVtaWNDb250ZXh0IiwibGltaW5hbENvbnRleHQiLCJMaW1pbmFsQ29udGV4dCIsIm1uZW1pY0NvbnRleHRKU09OIiwibW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04iLCJjb250ZXh0SlNPTiIsImpzb24iLCJtbmVtaWNDb250ZXh0RnJvbUpTT04iLCJtbmVtaWNDb250ZXh0cyIsIm1uZW1pY0NvbnRleHRzRnJvbUpTT04iLCJjb250ZXh0cyIsInBoYW5lcmljQ29udGV4dCIsIlBoYW5lcmljQ29udGV4dCIsImZyb21Db250ZXh0cyIsIm1hcCIsIm1uZW1pY0NvbnRleHRzSlNPTiIsIm1uZW1pY0NvbnRleHRzVG9NbmVtaWNDb250ZXh0c0pTT04iLCJjb250ZXh0c0pTT04iLCJjb250ZXh0R3JvdW5kZWRDb250ZXh0IiwiaXNDb250ZXh0R3JvdW5kZWRDb250ZXh0IiwiY29udGV4dFRoZXRpY0NvbnRleHQiLCJjb250ZXh0SWxsYXRpdmVDb250ZXh0IiwiY29udGV4dE5vbWluYWxGaWxlQ29udGV4dCIsIk5vbWluYWxGaWxlQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNkZnQkE7ZUFBQUE7O1FBZ0dBQztlQUFBQTs7UUF0RkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBdEZBQztlQUFBQTs7UUF4Q0FDO2VBQUFBOztRQVFBQztlQUFBQTs7UUF3Q0FDO2VBQUFBOztRQWhDQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFSQUM7ZUFBQUE7O1FBNUNBQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBNkhBQztlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBekNBQztlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBd0RBQztlQUFBQTs7UUE5Q0FDO2VBQUFBOztRQVFBQztlQUFBQTs7OytEQTNJVTsrREFDQTsrREFDQTtnRUFDQztnRUFDQTtnRUFDQTtnRUFDQTtnRUFDQTtpRUFDQztpRUFDQTtrRUFDQztpRUFDRTtzQkFFcUc7Ozs7OztBQUU3SCxTQUFTUixTQUFTUyxTQUFTLEVBQUVDLEtBQUs7SUFDdkMsTUFBTUMsVUFBVUYsVUFBVUcsVUFBVTtJQUVwQyxPQUFPSCxVQUFVSSxJQUFJLENBQUNILE9BQU9DO0FBQy9CO0FBRU8sU0FBU1YsT0FBT2EsYUFBYTtJQUNsQyxJQUFJSDtJQUVKLE1BQU1JLGlCQUFpQkMsZ0JBQWMsQ0FBQ0MsV0FBVztJQUVqRE4sVUFBVUksZ0JBQWdCLEdBQUc7SUFFN0IsTUFBTUcsaUJBQWlCQyxnQkFBYyxDQUFDRixXQUFXLENBQUNOO0lBRWxEQSxVQUFVTyxnQkFBaUIsR0FBRztJQUU5QixPQUFPSixjQUFjSDtBQUN2QjtBQUVPLFNBQVNqQixRQUFRb0IsYUFBYSxFQUFFSCxPQUFPO0lBQzVDLE1BQU1TLGdCQUFnQkMsZUFBYSxDQUFDSixXQUFX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