@1money/component-ui 0.0.75 → 0.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/ProForm/ProForm.d.ts +1 -1
- package/es/components/ProForm/ProForm.js +46 -34
- package/es/components/ProForm/ProFormDependency.d.ts +2 -1
- package/es/components/ProForm/ProFormDependency.js +6 -16
- package/es/components/ProForm/ProFormItem.d.ts +7 -2
- package/es/components/ProForm/ProFormItem.js +5 -7
- package/es/components/ProForm/ProFormList.d.ts +6 -1
- package/es/components/ProForm/ProFormList.js +122 -42
- package/es/components/ProForm/SchemaForm.d.ts +1 -1
- package/es/components/ProForm/SchemaForm.js +8 -5
- package/es/components/ProForm/context.d.ts +8 -7
- package/es/components/ProForm/context.js +1 -1
- package/es/components/ProForm/core/constants.d.ts +3 -1
- package/es/components/ProForm/core/constants.js +8 -2
- package/es/components/ProForm/core/devWarning.d.ts +3 -0
- package/es/components/ProForm/core/devWarning.js +22 -0
- package/es/components/ProForm/core/formStore.d.ts +14 -6
- package/es/components/ProForm/core/formStore.js +21 -2
- package/es/components/ProForm/core/hooks/useForm.d.ts +1 -1
- package/es/components/ProForm/core/hooks/useForm.js +275 -107
- package/es/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
- package/es/components/ProForm/core/hooks/useFormCore.js +121 -121
- package/es/components/ProForm/core/interface.d.ts +157 -103
- package/es/components/ProForm/core/namePathType.d.ts +25 -0
- package/es/components/ProForm/core/namePathType.js +2 -0
- package/es/components/ProForm/core/pathUtils.d.ts +5 -3
- package/es/components/ProForm/core/pathUtils.js +19 -1
- package/es/components/ProForm/core/runRules.d.ts +40 -17
- package/es/components/ProForm/core/runRules.js +480 -136
- package/es/components/ProForm/core/useFormItem.d.ts +7 -8
- package/es/components/ProForm/core/useFormItem.js +52 -82
- package/es/components/ProForm/core/validationError.d.ts +13 -0
- package/es/components/ProForm/core/validationError.js +29 -0
- package/es/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
- package/es/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormDatePicker.js +1 -1
- package/es/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
- package/es/components/ProForm/fields/ProFormFieldSet.js +49 -12
- package/es/components/ProForm/fields/ProFormPassword.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
- package/es/components/ProForm/fields/ProFormSelect.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormSelect.js +13 -7
- package/es/components/ProForm/fields/ProFormSlider.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormText.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormUpload.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormUpload.js +1 -1
- package/es/components/ProForm/fields/createProFormField.d.ts +8 -2
- package/es/components/ProForm/fields/createProFormField.js +20 -27
- package/es/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
- package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/es/components/ProForm/hooks/useUrlSync.d.ts +8 -7
- package/es/components/ProForm/hooks/useUrlSync.js +1 -1
- package/es/components/ProForm/index.d.ts +37 -27
- package/es/components/ProForm/index.js +4 -1
- package/es/components/ProForm/interface.d.ts +115 -119
- package/es/components/ProForm/layouts/DialogForm.d.ts +1 -1
- package/es/components/ProForm/layouts/DialogForm.js +1 -1
- package/es/components/ProForm/layouts/DrawerForm.d.ts +1 -1
- package/es/components/ProForm/layouts/DrawerForm.js +1 -1
- package/es/components/ProForm/layouts/QueryFilter.d.ts +1 -1
- package/es/components/ProForm/layouts/QueryFilter.js +24 -16
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +1 -1
- package/es/components/ProForm/utils.d.ts +15 -7
- package/es/components/ProForm/utils.js +51 -3
- package/es/components/Table/core/useTableSetup.js +2 -2
- package/es/components/Table/interface.d.ts +1 -1
- package/es/index.css +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/lib/components/ProForm/ProForm.d.ts +1 -1
- package/lib/components/ProForm/ProForm.js +45 -33
- package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
- package/lib/components/ProForm/ProFormDependency.js +5 -15
- package/lib/components/ProForm/ProFormItem.d.ts +7 -2
- package/lib/components/ProForm/ProFormItem.js +5 -7
- package/lib/components/ProForm/ProFormList.d.ts +6 -1
- package/lib/components/ProForm/ProFormList.js +120 -40
- package/lib/components/ProForm/SchemaForm.d.ts +1 -1
- package/lib/components/ProForm/SchemaForm.js +8 -5
- package/lib/components/ProForm/context.d.ts +8 -7
- package/lib/components/ProForm/context.js +1 -1
- package/lib/components/ProForm/core/constants.d.ts +3 -1
- package/lib/components/ProForm/core/constants.js +9 -3
- package/lib/components/ProForm/core/devWarning.d.ts +3 -0
- package/lib/components/ProForm/core/devWarning.js +29 -0
- package/lib/components/ProForm/core/formStore.d.ts +14 -6
- package/lib/components/ProForm/core/formStore.js +23 -2
- package/lib/components/ProForm/core/hooks/useForm.d.ts +1 -1
- package/lib/components/ProForm/core/hooks/useForm.js +271 -103
- package/lib/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
- package/lib/components/ProForm/core/hooks/useFormCore.js +119 -119
- package/lib/components/ProForm/core/interface.d.ts +157 -103
- package/lib/components/ProForm/core/namePathType.d.ts +25 -0
- package/lib/components/ProForm/core/namePathType.js +6 -0
- package/lib/components/ProForm/core/pathUtils.d.ts +5 -3
- package/lib/components/ProForm/core/pathUtils.js +20 -1
- package/lib/components/ProForm/core/runRules.d.ts +40 -17
- package/lib/components/ProForm/core/runRules.js +483 -137
- package/lib/components/ProForm/core/useFormItem.d.ts +7 -8
- package/lib/components/ProForm/core/useFormItem.js +54 -84
- package/lib/components/ProForm/core/validationError.d.ts +13 -0
- package/lib/components/ProForm/core/validationError.js +36 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
- package/lib/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormDatePicker.js +1 -1
- package/lib/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
- package/lib/components/ProForm/fields/ProFormFieldSet.js +49 -12
- package/lib/components/ProForm/fields/ProFormPassword.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
- package/lib/components/ProForm/fields/ProFormSelect.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
- package/lib/components/ProForm/fields/ProFormSlider.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormText.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormUpload.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormUpload.js +1 -1
- package/lib/components/ProForm/fields/createProFormField.d.ts +8 -2
- package/lib/components/ProForm/fields/createProFormField.js +20 -27
- package/lib/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
- package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/lib/components/ProForm/hooks/useUrlSync.d.ts +8 -7
- package/lib/components/ProForm/hooks/useUrlSync.js +1 -1
- package/lib/components/ProForm/index.d.ts +37 -27
- package/lib/components/ProForm/index.js +10 -1
- package/lib/components/ProForm/interface.d.ts +115 -119
- package/lib/components/ProForm/layouts/DialogForm.d.ts +1 -1
- package/lib/components/ProForm/layouts/DialogForm.js +1 -1
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +1 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +1 -1
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +1 -1
- package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/lib/components/ProForm/layouts/useOverlayForm.js +1 -1
- package/lib/components/ProForm/utils.d.ts +15 -7
- package/lib/components/ProForm/utils.js +52 -3
- package/lib/components/Table/core/useTableSetup.js +2 -2
- package/lib/components/Table/interface.d.ts +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +95 -53
- package/scripts/mcp-server/index.generated.json +1715 -185
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
1
2
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
3
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
4
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -30,212 +31,555 @@ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, gene
|
|
|
30
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
31
32
|
});
|
|
32
33
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
34
|
+
import { resolveValue } from './pathUtils';
|
|
35
|
+
import { devWarnOnce } from './devWarning';
|
|
36
36
|
/** Empty for `required`: undefined / null / '' / empty array. */
|
|
37
37
|
function isEmptyValue(value) {
|
|
38
38
|
return value === undefined || value === null || value === '' || Array.isArray(value) && value.length === 0;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
41
|
+
* Coerce a thrown/rejected reason into displayable failure content:
|
|
42
|
+
* a non-empty Error.message or a non-empty plain string — otherwise null
|
|
43
|
+
* (caller picks its fallback). Shared with the form-level last-resort nets.
|
|
44
|
+
*/
|
|
45
|
+
export function coerceFailureReason(reason) {
|
|
46
|
+
if (reason instanceof Error && reason.message) return reason.message;
|
|
47
|
+
if (typeof reason === 'string' && reason) return reason;
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Failure message for a rejected/thrown custom validator:
|
|
52
|
+
* Error.message → plain string reason → rule.message → generic fallback.
|
|
53
|
+
*/
|
|
54
|
+
function resolveFailureMessage(reason, rule) {
|
|
55
|
+
var _a;
|
|
56
|
+
return (_a = coerceFailureReason(reason)) !== null && _a !== void 0 ? _a : rule.message || 'Validation failed';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve function-form rules into static rules. The
|
|
60
|
+
* context exposes the value snapshot the run was invoked with; function rules
|
|
61
|
+
* must be cheap and side-effect free — they may be resolved more than once
|
|
62
|
+
* per validation pass.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveRules(rules, values, instance) {
|
|
65
|
+
// Fast path: no function rules → nothing to resolve, no ctx allocation.
|
|
66
|
+
// This also makes the engine-internal re-resolution of already-resolved
|
|
67
|
+
// arrays free.
|
|
68
|
+
if (!rules.some(function (rule) {
|
|
69
|
+
return typeof rule === 'function';
|
|
70
|
+
})) {
|
|
71
|
+
return rules;
|
|
72
|
+
}
|
|
73
|
+
// Live-instance members (setFieldsValue, getFieldError, …) are spread in
|
|
74
|
+
// when available; the reads always come from the validation-time snapshot.
|
|
75
|
+
var ctx = Object.assign(Object.assign({}, instance), {
|
|
76
|
+
getFieldValue: function getFieldValue(name) {
|
|
77
|
+
return resolveValue(values, name);
|
|
78
|
+
},
|
|
79
|
+
getFieldsValue: function getFieldsValue() {
|
|
80
|
+
return values;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return rules.map(function (rule) {
|
|
84
|
+
if (typeof rule !== 'function') return rule;
|
|
85
|
+
try {
|
|
86
|
+
return rule(ctx);
|
|
87
|
+
} catch (err) {
|
|
88
|
+
// A throwing rule factory must not crash rendering or validation —
|
|
89
|
+
// surface it as a rule that always fails with the thrown reason.
|
|
90
|
+
return {
|
|
91
|
+
validator: function validator() {
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Normalize a form/item-level validateTrigger config into the effective
|
|
100
|
+
* interactive event list: item-level (when present) overrides form-level;
|
|
101
|
+
* `false` disables interactive validation entirely.
|
|
45
102
|
*/
|
|
46
|
-
export function
|
|
103
|
+
export function normalizeTriggers(itemTrigger, formTrigger) {
|
|
104
|
+
var effective = itemTrigger === undefined ? formTrigger : itemTrigger;
|
|
105
|
+
if (effective === false) return [];
|
|
106
|
+
return Array.isArray(effective) ? effective : [effective];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Filter rules applicable to an interactive event: the event
|
|
110
|
+
* validates only when it is in the item's effective trigger set. Within the
|
|
111
|
+
* set, a rule WITHOUT `validateTrigger` runs on every event; a rule WITH one
|
|
112
|
+
* runs only on matching events — so a rule trigger outside the item's set
|
|
113
|
+
* never fires interactively. Submit-time validation bypasses this filter and
|
|
114
|
+
* runs every rule.
|
|
115
|
+
*
|
|
116
|
+
* Dev guard: a rule whose (non-empty) trigger set is fully OUTSIDE the
|
|
117
|
+
* active set can never fire interactively — usually a leftover of the
|
|
118
|
+
* pre-0.0.76 override semantics, so it warns once. `validateTrigger: []`
|
|
119
|
+
* is the deliberate submit-only idiom and stays silent.
|
|
120
|
+
*/
|
|
121
|
+
export function filterRulesByTrigger(rules, trigger, activeTriggers, fieldName) {
|
|
122
|
+
if (!activeTriggers.includes(trigger)) return [];
|
|
47
123
|
return rules.filter(function (rule) {
|
|
48
124
|
var ruleTrigger = rule.validateTrigger;
|
|
49
|
-
if (
|
|
50
|
-
|
|
125
|
+
if (ruleTrigger === undefined) return true;
|
|
126
|
+
var ruleTriggers = Array.isArray(ruleTrigger) ? ruleTrigger : [ruleTrigger];
|
|
127
|
+
var matches = ruleTriggers.includes(trigger);
|
|
128
|
+
if (!matches && ruleTriggers.length > 0 && !ruleTriggers.some(function (t) {
|
|
129
|
+
return activeTriggers.includes(t);
|
|
130
|
+
})) {
|
|
131
|
+
var name = fieldName !== null && fieldName !== void 0 ? fieldName : '(any)';
|
|
132
|
+
devWarnOnce("trigger:".concat(name, ":").concat(ruleTriggers.join(',')), "[ProForm] Field \"".concat(name, "\": rule validateTrigger [").concat(ruleTriggers.join(', '), "] is outside this field's active trigger set [").concat(activeTriggers.join(', '), "] \u2014 the rule will only run on submit. Include it in the item/form validateTrigger to run it interactively."));
|
|
133
|
+
}
|
|
134
|
+
return matches;
|
|
51
135
|
});
|
|
52
136
|
}
|
|
137
|
+
/** Built-in `type` checks. `enum` is handled separately against `rule.enum`. */
|
|
138
|
+
var TYPE_CHECKS = {
|
|
139
|
+
string: function string(v) {
|
|
140
|
+
return typeof v === 'string';
|
|
141
|
+
},
|
|
142
|
+
number: function number(v) {
|
|
143
|
+
return typeof v === 'number' && !Number.isNaN(v);
|
|
144
|
+
},
|
|
145
|
+
"boolean": function boolean(v) {
|
|
146
|
+
return typeof v === 'boolean';
|
|
147
|
+
},
|
|
148
|
+
method: function method(v) {
|
|
149
|
+
return typeof v === 'function';
|
|
150
|
+
},
|
|
151
|
+
integer: function integer(v) {
|
|
152
|
+
return typeof v === 'number' && Number.isInteger(v);
|
|
153
|
+
},
|
|
154
|
+
"float": function float(v) {
|
|
155
|
+
return typeof v === 'number' && !Number.isNaN(v) && !Number.isInteger(v);
|
|
156
|
+
},
|
|
157
|
+
array: function array(v) {
|
|
158
|
+
return Array.isArray(v);
|
|
159
|
+
},
|
|
160
|
+
object: function object(v) {
|
|
161
|
+
return _typeof(v) === 'object' && v !== null && !Array.isArray(v);
|
|
162
|
+
},
|
|
163
|
+
date: function date(v) {
|
|
164
|
+
return v instanceof Date ? !Number.isNaN(v.getTime()) : typeof (v === null || v === void 0 ? void 0 : v.getTime) === 'function' && !Number.isNaN(v.getTime());
|
|
165
|
+
},
|
|
166
|
+
regexp: function regexp(v) {
|
|
167
|
+
if (v instanceof RegExp) return true;
|
|
168
|
+
if (typeof v !== 'string') return false;
|
|
169
|
+
try {
|
|
170
|
+
new RegExp(v);
|
|
171
|
+
return true;
|
|
172
|
+
} catch (_a) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
hex: function hex(v) {
|
|
177
|
+
return typeof v === 'string' && /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i.test(v);
|
|
178
|
+
},
|
|
179
|
+
// String-only: coercing via String() would let e.g. ['a@b.co'] stringify
|
|
180
|
+
// into a passing value.
|
|
181
|
+
email: function email(v) {
|
|
182
|
+
return typeof v === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);
|
|
183
|
+
},
|
|
184
|
+
url: function url(v) {
|
|
185
|
+
if (typeof v !== 'string') return false;
|
|
186
|
+
try {
|
|
187
|
+
new URL(v);
|
|
188
|
+
return true;
|
|
189
|
+
} catch (_a) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
/** Friendly generated messages for the legacy type names; others get a generic one. */
|
|
195
|
+
function typeFailureMessage(name, type) {
|
|
196
|
+
if (type === 'number') return "".concat(name, " must be a number");
|
|
197
|
+
if (type === 'email') return "".concat(name, " must be a valid email");
|
|
198
|
+
if (type === 'url') return "".concat(name, " must be a valid URL");
|
|
199
|
+
return "".concat(name, " is not a valid ").concat(type);
|
|
200
|
+
}
|
|
201
|
+
/** Measure a value for len/min/max: string → length, array → count, number → value. */
|
|
202
|
+
function measureValue(value) {
|
|
203
|
+
if (typeof value === 'string') return {
|
|
204
|
+
measured: value.length,
|
|
205
|
+
unit: ' characters'
|
|
206
|
+
};
|
|
207
|
+
if (Array.isArray(value)) return {
|
|
208
|
+
measured: value.length,
|
|
209
|
+
unit: ' items'
|
|
210
|
+
};
|
|
211
|
+
if (typeof value === 'number' && !Number.isNaN(value)) return {
|
|
212
|
+
measured: value,
|
|
213
|
+
unit: ''
|
|
214
|
+
};
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
53
217
|
/**
|
|
54
218
|
* Evaluate every built-in (non-`validator`) rule kind for a single rule.
|
|
55
|
-
* Returns the error
|
|
219
|
+
* Returns the error content for the first failing check, or null.
|
|
220
|
+
*
|
|
221
|
+
* Empty values (undefined / null / '' / empty array) are only checked by
|
|
222
|
+
* `required` — every other builtin check is skipped, so optional fields
|
|
223
|
+
* don't error until they have content. Custom validators are NOT subject to
|
|
224
|
+
* this skip (they receive the empty value and decide themselves).
|
|
56
225
|
*/
|
|
57
226
|
function checkBuiltinRules(rule, value, name) {
|
|
58
227
|
if (rule.required && isEmptyValue(value)) {
|
|
59
228
|
return rule.message || "".concat(name, " is required");
|
|
60
229
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
} else if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
72
|
-
measured = value;
|
|
230
|
+
if (isEmptyValue(value)) return null;
|
|
231
|
+
// Non-empty string of only whitespace (the required+whitespace trim idiom).
|
|
232
|
+
if (rule.whitespace && typeof value === 'string' && value.trim() === '') {
|
|
233
|
+
return rule.message || "".concat(name, " cannot be blank");
|
|
234
|
+
}
|
|
235
|
+
// len: exact length/count/value — takes precedence over min/max.
|
|
236
|
+
if (rule.len !== undefined) {
|
|
237
|
+
var m = measureValue(value);
|
|
238
|
+
if (m !== null && m.measured !== rule.len) {
|
|
239
|
+
return rule.message || "".concat(name, " must be exactly ").concat(rule.len).concat(m.unit);
|
|
73
240
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
241
|
+
} else if (rule.min !== undefined || rule.max !== undefined) {
|
|
242
|
+
var _m = measureValue(value);
|
|
243
|
+
if (_m !== null) {
|
|
244
|
+
if (rule.min !== undefined && _m.measured < rule.min) {
|
|
245
|
+
return rule.message || "".concat(name, " must be at least ").concat(rule.min).concat(_m.unit);
|
|
77
246
|
}
|
|
78
|
-
if (rule.max !== undefined && measured > rule.max) {
|
|
79
|
-
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(unit);
|
|
247
|
+
if (rule.max !== undefined && _m.measured > rule.max) {
|
|
248
|
+
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(_m.unit);
|
|
80
249
|
}
|
|
81
250
|
}
|
|
82
251
|
}
|
|
83
|
-
if (rule.pattern && typeof value === 'string'
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (!rule
|
|
88
|
-
return rule.message || "".concat(name, "
|
|
252
|
+
if (rule.pattern && typeof value === 'string') {
|
|
253
|
+
// A /g or /y regex is stateful: lastIndex persists across .test() calls,
|
|
254
|
+
// so repeated runs would alternate pass/fail — reset it every run.
|
|
255
|
+
if (rule.pattern.global || rule.pattern.sticky) rule.pattern.lastIndex = 0;
|
|
256
|
+
if (!rule.pattern.test(value)) {
|
|
257
|
+
return rule.message || "".concat(name, " format is invalid");
|
|
89
258
|
}
|
|
90
259
|
}
|
|
91
|
-
if (rule.type
|
|
92
|
-
|
|
93
|
-
return rule.message || "".concat(name, " must be a number");
|
|
94
|
-
}
|
|
260
|
+
if (rule.type && rule.type !== 'enum' && !TYPE_CHECKS[rule.type](value)) {
|
|
261
|
+
return rule.message || typeFailureMessage(name, rule.type);
|
|
95
262
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return rule.message || "".concat(name, " must be a valid email");
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (rule.type === 'url' && value) {
|
|
103
|
-
try {
|
|
104
|
-
new URL(String(value));
|
|
105
|
-
} catch (_a) {
|
|
106
|
-
return rule.message || "".concat(name, " must be a valid URL");
|
|
107
|
-
}
|
|
263
|
+
// enum membership: applies for type 'enum' or whenever rule.enum is present.
|
|
264
|
+
if (rule["enum"] && Array.isArray(rule["enum"]) && !rule["enum"].includes(value)) {
|
|
265
|
+
return rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
108
266
|
}
|
|
109
267
|
return null;
|
|
110
268
|
}
|
|
269
|
+
function toRuleArray(rules) {
|
|
270
|
+
if (!rules) return [];
|
|
271
|
+
return Array.isArray(rules) ? rules : [rules];
|
|
272
|
+
}
|
|
273
|
+
/** Members for deep rules: array → indexed entries, plain object → key entries. */
|
|
274
|
+
function deepMembers(value) {
|
|
275
|
+
if (Array.isArray(value)) return value.map(function (member, index) {
|
|
276
|
+
return [String(index), member];
|
|
277
|
+
});
|
|
278
|
+
if (value && _typeof(value) === 'object') return Object.entries(value);
|
|
279
|
+
return [];
|
|
280
|
+
}
|
|
281
|
+
var PASS = {
|
|
282
|
+
error: null,
|
|
283
|
+
warning: null
|
|
284
|
+
};
|
|
111
285
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* for perfectly valid input.
|
|
286
|
+
* Dev guard for the pre-0.0.76 validator contract: returning a string or
|
|
287
|
+
* `false` used to FAIL the rule — under the `(rule, value)` contract return
|
|
288
|
+
* values are ignored and only throw/reject fails. Such a return is almost
|
|
289
|
+
* certainly a legacy validator silently passing, so it warns once.
|
|
117
290
|
*/
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
291
|
+
function warnLegacyValidatorReturn(name, result) {
|
|
292
|
+
if (typeof result !== 'string' && result !== false) return;
|
|
293
|
+
devWarnOnce("validator-return:".concat(name), "[ProForm] Field \"".concat(name, "\": a custom validator returned ").concat(typeof result === 'string' ? 'a string' : 'false', " \u2014 return values are IGNORED; validators fail by throwing or rejecting (a thrown Error's message becomes the field error)."));
|
|
294
|
+
}
|
|
295
|
+
/** Run a rule's transform, containing throws as a rule failure. */
|
|
296
|
+
function applyTransform(rule, rawValue) {
|
|
297
|
+
if (typeof rule.transform !== 'function') return {
|
|
298
|
+
ok: true,
|
|
299
|
+
value: rawValue
|
|
300
|
+
};
|
|
122
301
|
try {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
302
|
+
return {
|
|
303
|
+
ok: true,
|
|
304
|
+
value: rule.transform(rawValue)
|
|
305
|
+
};
|
|
306
|
+
} catch (err) {
|
|
307
|
+
return {
|
|
308
|
+
ok: false,
|
|
309
|
+
failure: resolveFailureMessage(err, rule)
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Flatten a rule's deep sources (`fields` per key, then `defaultField` per
|
|
315
|
+
* member) into [subRule, memberValue, memberName] tuples — the single place
|
|
316
|
+
* that knows how deep rules map onto a container value.
|
|
317
|
+
*/
|
|
318
|
+
function deepRuleEntries(rule, value, name) {
|
|
319
|
+
var entries = [];
|
|
320
|
+
if (rule.fields) {
|
|
321
|
+
var source = value;
|
|
322
|
+
for (var _i = 0, _Object$entries = Object.entries(rule.fields); _i < _Object$entries.length; _i++) {
|
|
323
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
324
|
+
key = _Object$entries$_i[0],
|
|
325
|
+
subRules = _Object$entries$_i[1];
|
|
326
|
+
var _iterator = _createForOfIteratorHelper(toRuleArray(subRules)),
|
|
327
|
+
_step;
|
|
328
|
+
try {
|
|
329
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
330
|
+
var subRule = _step.value;
|
|
331
|
+
entries.push([subRule, source[key], "".concat(name, ".").concat(key)]);
|
|
332
|
+
}
|
|
333
|
+
} catch (err) {
|
|
334
|
+
_iterator.e(err);
|
|
335
|
+
} finally {
|
|
336
|
+
_iterator.f();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (rule.defaultField) {
|
|
341
|
+
var _iterator2 = _createForOfIteratorHelper(deepMembers(value)),
|
|
342
|
+
_step2;
|
|
343
|
+
try {
|
|
344
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
345
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
346
|
+
_key = _step2$value[0],
|
|
347
|
+
member = _step2$value[1];
|
|
348
|
+
var _iterator3 = _createForOfIteratorHelper(toRuleArray(rule.defaultField)),
|
|
349
|
+
_step3;
|
|
127
350
|
try {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
} else if (result !== true) {
|
|
132
|
-
failure = typeof result === 'string' ? result : 'Validation failed';
|
|
351
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
352
|
+
var _subRule = _step3.value;
|
|
353
|
+
entries.push([_subRule, member, "".concat(name, ".").concat(_key)]);
|
|
133
354
|
}
|
|
134
355
|
} catch (err) {
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (failure !== null) {
|
|
139
|
-
if (rule.warningOnly) {
|
|
140
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
141
|
-
} else {
|
|
142
|
-
return {
|
|
143
|
-
error: failure,
|
|
144
|
-
warning: warning
|
|
145
|
-
};
|
|
356
|
+
_iterator3.e(err);
|
|
357
|
+
} finally {
|
|
358
|
+
_iterator3.f();
|
|
146
359
|
}
|
|
147
360
|
}
|
|
361
|
+
} catch (err) {
|
|
362
|
+
_iterator2.e(err);
|
|
363
|
+
} finally {
|
|
364
|
+
_iterator2.f();
|
|
148
365
|
}
|
|
149
|
-
} catch (err) {
|
|
150
|
-
_iterator.e(err);
|
|
151
|
-
} finally {
|
|
152
|
-
_iterator.f();
|
|
153
366
|
}
|
|
154
|
-
return
|
|
155
|
-
error: null,
|
|
156
|
-
warning: warning
|
|
157
|
-
};
|
|
367
|
+
return entries;
|
|
158
368
|
}
|
|
159
369
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
370
|
+
* Merge a sub-rule's outcome into the parent's channels. A sub-rule flagged
|
|
371
|
+
* `warningOnly` contributes its failure as a WARNING; otherwise its error
|
|
372
|
+
* blocks. Returns true when a blocking error landed (stop walking).
|
|
162
373
|
*/
|
|
163
|
-
|
|
374
|
+
function mergeSubResult(acc, subRule, sub) {
|
|
375
|
+
if (sub.warning !== null && acc.warning === null) acc.warning = sub.warning;
|
|
376
|
+
if (sub.error !== null) {
|
|
377
|
+
if (subRule.warningOnly) {
|
|
378
|
+
if (acc.warning === null) acc.warning = sub.error;
|
|
379
|
+
} else {
|
|
380
|
+
acc.error = sub.error;
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Fold one rule's outcome into the run-level channels. A rule flagged
|
|
388
|
+
* `warningOnly` downgrades everything it produced (own checks AND deep
|
|
389
|
+
* sub-rules) to a warning. Returns the blocking error to surface, or null.
|
|
390
|
+
*/
|
|
391
|
+
function foldRuleResult(rule, result, state) {
|
|
392
|
+
var _a;
|
|
393
|
+
if (rule.warningOnly) {
|
|
394
|
+
var content = (_a = result.error) !== null && _a !== void 0 ? _a : result.warning;
|
|
395
|
+
if (content !== null && state.warning === null) state.warning = content;
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
if (result.warning !== null && state.warning === null) state.warning = result.warning;
|
|
399
|
+
return result.error;
|
|
400
|
+
}
|
|
401
|
+
/** Evaluate ONE rule (transform → builtin checks → validator → deep rules); custom validators are awaited. */
|
|
402
|
+
function evalRuleAsync(rule, rawValue, name) {
|
|
164
403
|
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
165
|
-
var
|
|
404
|
+
var prep, value, failure, result, acc, _iterator4, _step4, _step4$value, subRule, subValue, subName, _t, _t2, _t3, _t4, _t5;
|
|
166
405
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
167
406
|
while (1) switch (_context.prev = _context.next) {
|
|
168
407
|
case 0:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
_iterator2.s();
|
|
173
|
-
case 2:
|
|
174
|
-
if ((_step2 = _iterator2.n()).done) {
|
|
175
|
-
_context.next = 9;
|
|
408
|
+
prep = applyTransform(rule, rawValue);
|
|
409
|
+
if (prep.ok) {
|
|
410
|
+
_context.next = 1;
|
|
176
411
|
break;
|
|
177
412
|
}
|
|
178
|
-
|
|
413
|
+
return _context.abrupt("return", {
|
|
414
|
+
error: prep.failure,
|
|
415
|
+
warning: null
|
|
416
|
+
});
|
|
417
|
+
case 1:
|
|
418
|
+
value = prep.value;
|
|
179
419
|
failure = checkBuiltinRules(rule, value, name);
|
|
180
420
|
if (!(failure === null && typeof rule.validator === 'function')) {
|
|
181
|
-
_context.next =
|
|
421
|
+
_context.next = 5;
|
|
182
422
|
break;
|
|
183
423
|
}
|
|
184
|
-
_context.prev =
|
|
185
|
-
_context.next =
|
|
186
|
-
return
|
|
187
|
-
case
|
|
424
|
+
_context.prev = 2;
|
|
425
|
+
_context.next = 3;
|
|
426
|
+
return rule.validator(rule, value);
|
|
427
|
+
case 3:
|
|
188
428
|
result = _context.sent;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
_context.next = 6;
|
|
429
|
+
warnLegacyValidatorReturn(name, result);
|
|
430
|
+
_context.next = 5;
|
|
193
431
|
break;
|
|
432
|
+
case 4:
|
|
433
|
+
_context.prev = 4;
|
|
434
|
+
_t = _context["catch"](2);
|
|
435
|
+
failure = resolveFailureMessage(_t, rule);
|
|
194
436
|
case 5:
|
|
195
|
-
_context.prev = 5;
|
|
196
|
-
_t = _context["catch"](3);
|
|
197
|
-
failure = _t instanceof Error ? _t.message : 'Validation error';
|
|
198
|
-
case 6:
|
|
199
437
|
if (!(failure !== null)) {
|
|
200
|
-
_context.next =
|
|
438
|
+
_context.next = 6;
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
return _context.abrupt("return", {
|
|
442
|
+
error: failure,
|
|
443
|
+
warning: null
|
|
444
|
+
});
|
|
445
|
+
case 6:
|
|
446
|
+
if (!((rule.fields || rule.defaultField) && !isEmptyValue(value))) {
|
|
447
|
+
_context.next = 16;
|
|
201
448
|
break;
|
|
202
449
|
}
|
|
203
|
-
if (!
|
|
450
|
+
if (!(_typeof(value) !== 'object' || value === null)) {
|
|
204
451
|
_context.next = 7;
|
|
205
452
|
break;
|
|
206
453
|
}
|
|
207
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
208
|
-
_context.next = 8;
|
|
209
|
-
break;
|
|
210
|
-
case 7:
|
|
211
454
|
return _context.abrupt("return", {
|
|
212
|
-
error:
|
|
213
|
-
warning:
|
|
455
|
+
error: rule.message || "".concat(name, " must be an object or an array"),
|
|
456
|
+
warning: null
|
|
214
457
|
});
|
|
458
|
+
case 7:
|
|
459
|
+
acc = {
|
|
460
|
+
error: null,
|
|
461
|
+
warning: null
|
|
462
|
+
};
|
|
463
|
+
_iterator4 = _createForOfIteratorHelper(deepRuleEntries(rule, value, name));
|
|
464
|
+
_context.prev = 8;
|
|
465
|
+
_iterator4.s();
|
|
466
|
+
case 9:
|
|
467
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
468
|
+
_context.next = 12;
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
471
|
+
_step4$value = _slicedToArray(_step4.value, 3), subRule = _step4$value[0], subValue = _step4$value[1], subName = _step4$value[2];
|
|
472
|
+
_t2 = mergeSubResult;
|
|
473
|
+
_t3 = acc;
|
|
474
|
+
_t4 = subRule;
|
|
475
|
+
_context.next = 10;
|
|
476
|
+
return evalRuleAsync(subRule, subValue, subName);
|
|
477
|
+
case 10:
|
|
478
|
+
if (!_t2(_t3, _t4, _context.sent)) {
|
|
479
|
+
_context.next = 11;
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
return _context.abrupt("continue", 12);
|
|
483
|
+
case 11:
|
|
484
|
+
_context.next = 9;
|
|
485
|
+
break;
|
|
486
|
+
case 12:
|
|
487
|
+
_context.next = 14;
|
|
488
|
+
break;
|
|
489
|
+
case 13:
|
|
490
|
+
_context.prev = 13;
|
|
491
|
+
_t5 = _context["catch"](8);
|
|
492
|
+
_iterator4.e(_t5);
|
|
493
|
+
case 14:
|
|
494
|
+
_context.prev = 14;
|
|
495
|
+
_iterator4.f();
|
|
496
|
+
return _context.finish(14);
|
|
497
|
+
case 15:
|
|
498
|
+
return _context.abrupt("return", acc);
|
|
499
|
+
case 16:
|
|
500
|
+
return _context.abrupt("return", PASS);
|
|
501
|
+
case 17:
|
|
502
|
+
case "end":
|
|
503
|
+
return _context.stop();
|
|
504
|
+
}
|
|
505
|
+
}, _callee, null, [[2, 4], [8, 13, 14, 15]]);
|
|
506
|
+
}));
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Rule run. Custom validators are awaited (sync or async): resolving passes,
|
|
510
|
+
* rejecting/throwing fails. Return values are ignored.
|
|
511
|
+
*
|
|
512
|
+
* The per-rule try/catch is the totality choke point: NO input — including
|
|
513
|
+
* exotic values that break a builtin check — may escape as a throw; every
|
|
514
|
+
* failure surfaces through the error/warning channels.
|
|
515
|
+
*/
|
|
516
|
+
export function runRulesAsync(name, value, values, rules, instance) {
|
|
517
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
518
|
+
var state, _iterator5, _step5, rule, result, error, _t6, _t7;
|
|
519
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
520
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
521
|
+
case 0:
|
|
522
|
+
state = {
|
|
523
|
+
warning: null
|
|
524
|
+
};
|
|
525
|
+
_iterator5 = _createForOfIteratorHelper(resolveRules(rules, values, instance));
|
|
526
|
+
_context2.prev = 1;
|
|
527
|
+
_iterator5.s();
|
|
528
|
+
case 2:
|
|
529
|
+
if ((_step5 = _iterator5.n()).done) {
|
|
530
|
+
_context2.next = 8;
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
rule = _step5.value;
|
|
534
|
+
result = void 0;
|
|
535
|
+
_context2.prev = 3;
|
|
536
|
+
_context2.next = 4;
|
|
537
|
+
return evalRuleAsync(rule, value, name);
|
|
538
|
+
case 4:
|
|
539
|
+
result = _context2.sent;
|
|
540
|
+
_context2.next = 6;
|
|
541
|
+
break;
|
|
542
|
+
case 5:
|
|
543
|
+
_context2.prev = 5;
|
|
544
|
+
_t6 = _context2["catch"](3);
|
|
545
|
+
result = {
|
|
546
|
+
error: resolveFailureMessage(_t6, rule),
|
|
547
|
+
warning: null
|
|
548
|
+
};
|
|
549
|
+
case 6:
|
|
550
|
+
error = foldRuleResult(rule, result, state);
|
|
551
|
+
if (!(error !== null)) {
|
|
552
|
+
_context2.next = 7;
|
|
553
|
+
break;
|
|
554
|
+
}
|
|
555
|
+
return _context2.abrupt("return", {
|
|
556
|
+
error: error,
|
|
557
|
+
warning: state.warning
|
|
558
|
+
});
|
|
559
|
+
case 7:
|
|
560
|
+
_context2.next = 2;
|
|
561
|
+
break;
|
|
215
562
|
case 8:
|
|
216
|
-
|
|
563
|
+
_context2.next = 10;
|
|
217
564
|
break;
|
|
218
565
|
case 9:
|
|
219
|
-
|
|
220
|
-
|
|
566
|
+
_context2.prev = 9;
|
|
567
|
+
_t7 = _context2["catch"](1);
|
|
568
|
+
_iterator5.e(_t7);
|
|
221
569
|
case 10:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
570
|
+
_context2.prev = 10;
|
|
571
|
+
_iterator5.f();
|
|
572
|
+
return _context2.finish(10);
|
|
225
573
|
case 11:
|
|
226
|
-
|
|
227
|
-
_iterator2.f();
|
|
228
|
-
return _context.finish(11);
|
|
229
|
-
case 12:
|
|
230
|
-
return _context.abrupt("return", {
|
|
574
|
+
return _context2.abrupt("return", {
|
|
231
575
|
error: null,
|
|
232
|
-
warning: warning
|
|
576
|
+
warning: state.warning
|
|
233
577
|
});
|
|
234
|
-
case
|
|
578
|
+
case 12:
|
|
235
579
|
case "end":
|
|
236
|
-
return
|
|
580
|
+
return _context2.stop();
|
|
237
581
|
}
|
|
238
|
-
},
|
|
582
|
+
}, _callee2, null, [[1, 9, 10, 11], [3, 5]]);
|
|
239
583
|
}));
|
|
240
584
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJpc1RoZW5hYmxlIiwiX3R5cGVvZiIsImlzRW1wdHlWYWx1ZSIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZpbHRlclJ1bGVzQnlUcmlnZ2VyIiwicnVsZXMiLCJ0cmlnZ2VyIiwiZm9ybVRyaWdnZXIiLCJmaWx0ZXIiLCJydWxlIiwicnVsZVRyaWdnZXIiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJpbmNsdWRlcyIsImNoZWNrQnVpbHRpblJ1bGVzIiwibmFtZSIsInJlcXVpcmVkIiwibWVzc2FnZSIsImNvbmNhdCIsIm1pbiIsIm1heCIsIm1lYXN1cmVkIiwidW5pdCIsIk51bWJlciIsImlzTmFOIiwicGF0dGVybiIsInRlc3QiLCJqb2luIiwidHlwZSIsImVtYWlsUGF0dGVybiIsIlN0cmluZyIsIlVSTCIsIl9hIiwicnVuUnVsZXNTeW5jIiwidmFsdWVzIiwid2FybmluZyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImZhaWx1cmUiLCJ2YWxpZGF0b3IiLCJlcnIiLCJFcnJvciIsIndhcm5pbmdPbmx5IiwiZXJyb3IiLCJmIiwicnVuUnVsZXNBc3luYyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfdCIsIl90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O0lBQUEsR0FBQVgsT0FBQTtFQUFBLENBQ2hDLEVBQUE7QURsQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvcnVuUnVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuLyoqIEVtcHR5IGZvciBgcmVxdWlyZWRgOiB1bmRlZmluZWQgLyBudWxsIC8gJycgLyBlbXB0eSBhcnJheS4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICB2YWx1ZSA9PT0gJycgfHxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpO1xufVxuLyoqXG4gKiBGaWx0ZXIgcnVsZXMgYXBwbGljYWJsZSB0byBhbiBpbnRlcmFjdGl2ZSB0cmlnZ2VyLiBBIHJ1bGUgV0lUSE9VVCBhblxuICogZXhwbGljaXQgYHZhbGlkYXRlVHJpZ2dlcmAgZm9sbG93cyB0aGUgZm9ybS1sZXZlbCB0cmlnZ2VyOyBhIHJ1bGUgV0lUSCBvbmVcbiAqIHJ1bnMgb24gZXhhY3RseSB0aG9zZSB0cmlnZ2VyKHMpLCByZWdhcmRsZXNzIG9mIHRoZSBmb3JtLWxldmVsIHNldHRpbmcuXG4gKiBTdWJtaXQtdGltZSB2YWxpZGF0aW9uIGJ5cGFzc2VzIHRoaXMgZmlsdGVyIGFuZCBydW5zIGV2ZXJ5IHJ1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihydWxlcywgdHJpZ2dlciwgZm9ybVRyaWdnZXIpIHtcbiAgICByZXR1cm4gcnVsZXMuZmlsdGVyKChydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVUcmlnZ2VyID0gcnVsZS52YWxpZGF0ZVRyaWdnZXI7XG4gICAgICAgIGlmICghcnVsZVRyaWdnZXIpXG4gICAgICAgICAgICByZXR1cm4gZm9ybVRyaWdnZXIgPT09IHRyaWdnZXI7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJ1bGVUcmlnZ2VyKVxuICAgICAgICAgICAgPyBydWxlVHJpZ2dlci5pbmNsdWRlcyh0cmlnZ2VyKVxuICAgICAgICAgICAgOiBydWxlVHJpZ2dlciA9PT0gdHJpZ2dlcjtcbiAgICB9KTtcbn1cbi8qKlxuICogRXZhbHVhdGUgZXZlcnkgYnVpbHQtaW4gKG5vbi1gdmFsaWRhdG9yYCkgcnVsZSBraW5kIGZvciBhIHNpbmdsZSBydWxlLlxuICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGZpcnN0IGZhaWxpbmcgY2hlY2ssIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICB9XG4gICAgLy8gbWluL21heDogc3RyaW5nIOKGkiBsZW5ndGgsIGFycmF5IOKGkiBpdGVtIGNvdW50LCBudW1iZXIg4oaSIG51bWVyaWMgdmFsdWVcbiAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCB8fCBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG51bGw7XG4gICAgICAgIGxldCB1bml0ID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHVuaXQgPSAnIGNoYXJhY3RlcnMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHVuaXQgPSAnIGl0ZW1zJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZWFzdXJlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgbWVhc3VyZWQgPCBydWxlLm1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhdCBsZWFzdCAke3J1bGUubWlufSR7dW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICE9PSB1bmRlZmluZWQgJiYgbWVhc3VyZWQgPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0ke3VuaXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS5wYXR0ZXJuICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXJ1bGUucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICB9XG4gICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgb25lIG9mICR7cnVsZS5lbnVtLmpvaW4oJywgJyl9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnR5cGUgPT09ICd1cmwnICYmIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXMgcnVsZSBydW4uIEEgUHJvbWlzZS1yZXR1cm5pbmcgdmFsaWRhdG9yIENBTk5PVCBiZSBldmFsdWF0ZWRcbiAqIGhlcmUg4oCUIGl0IGlzIGRlZmVycmVkICh0cmVhdGVkIGFzIHBhc3NpbmcgZm9yIHRoaXMgcnVuOyBpdHMgcmVqZWN0aW9uIGlzXG4gKiBzd2FsbG93ZWQpIGFuZCBsZWZ0IHRvIHRoZSBhc3luYyBydW5zIChibHVyL3N1Ym1pdCksIHdoaWNoIGFsd2F5cyBhd2FpdCBpdC5cbiAqIEZhaWxpbmcgaXQgaW5zdGVhZCB3b3VsZCBtaXMtcmVwb3J0IFwiVmFsaWRhdGlvbiBmYWlsZWRcIiBvbiBldmVyeSBrZXlzdHJva2VcbiAqIGZvciBwZXJmZWN0bHkgdmFsaWQgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMpIHtcbiAgICBsZXQgd2FybmluZyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgIGxldCBmYWlsdXJlID0gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVsZS52YWxpZGF0b3IodmFsdWUsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbih1bmRlZmluZWQsICgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUud2FybmluZ09ubHkpIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gd2FybmluZyAhPT0gbnVsbCAmJiB3YXJuaW5nICE9PSB2b2lkIDAgPyB3YXJuaW5nIDogZmFpbHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWlsdXJlLCB3YXJuaW5nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3I6IG51bGwsIHdhcm5pbmcgfTtcbn1cbi8qKlxuICogQXN5bmNocm9ub3VzIHJ1bGUgcnVuLiBDdXN0b20gdmFsaWRhdG9ycyBhcmUgYXdhaXRlZCAoc3luYyBvciBhc3luYykuIEFcbiAqIHZhbGlkYXRvciByZXR1cm5pbmcgYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBwYXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCBydWxlcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB3YXJuaW5nID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICBsZXQgZmFpbHVyZSA9IGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlID09PSBudWxsICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLndhcm5pbmdPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSB3YXJuaW5nICE9PSBudWxsICYmIHdhcm5pbmcgIT09IHZvaWQgMCA/IHdhcm5pbmcgOiBmYWlsdXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhaWx1cmUsIHdhcm5pbmcgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG51bGwsIHdhcm5pbmcgfTtcbiAgICB9KTtcbn0iLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
585
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJyZXNvbHZlVmFsdWUiLCJkZXZXYXJuT25jZSIsImlzRW1wdHlWYWx1ZSIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImNvZXJjZUZhaWx1cmVSZWFzb24iLCJyZWFzb24iLCJFcnJvciIsIm1lc3NhZ2UiLCJyZXNvbHZlRmFpbHVyZU1lc3NhZ2UiLCJydWxlIiwiX2EiLCJyZXNvbHZlUnVsZXMiLCJydWxlcyIsInZhbHVlcyIsImluc3RhbmNlIiwic29tZSIsImN0eCIsIk9iamVjdCIsImFzc2lnbiIsImdldEZpZWxkVmFsdWUiLCJuYW1lIiwiZ2V0RmllbGRzVmFsdWUiLCJtYXAiLCJlcnIiLCJ2YWxpZGF0b3IiLCJub3JtYWxpemVUcmlnZ2VycyIsIml0ZW1UcmlnZ2VyIiwiZm9ybVRyaWdnZXIiLCJlZmZlY3RpdmUiLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsInRyaWdnZXIiLCJhY3RpdmVUcmlnZ2VycyIsImZpZWxkTmFtZSIsImluY2x1ZGVzIiwiZmlsdGVyIiwicnVsZVRyaWdnZXIiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJydWxlVHJpZ2dlcnMiLCJtYXRjaGVzIiwidCIsImNvbmNhdCIsImpvaW4iLCJUWVBFX0NIRUNLUyIsInN0cmluZyIsInYiLCJudW1iZXIiLCJOdW1iZXIiLCJpc05hTiIsImJvb2xlYW4iLCJtZXRob2QiLCJpbnRlZ2VyIiwiaXNJbnRlZ2VyIiwiZmxvYXQiLCJhcnJheSIsIm9iamVjdCIsIl90eXBlb2YiLCJkYXRlIiwiRGF0ZSIsImdldFRpbWUiLCJyZWdleHAiLCJSZWdFeHAiLCJoZXgiLCJ0ZXN0IiwiZW1haWwiLCJ1cmwiLCJVUkwiLCJ0eXBlRmFpbHVyZU1lc3NhZ2UiLCJ0eXBlIiwibWVhc3VyZVZhbHVlIiwibWVhc3VyZWQiLCJ1bml0IiwiY2hlY2tCdWlsdGluUnVsZXMiLCJyZXF1aXJlZCIsIndoaXRlc3BhY2UiLCJ0cmltIiwibGVuIiwibSIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJnbG9iYWwiLCJzdGlja3kiLCJsYXN0SW5kZXgiLCJ0b1J1bGVBcnJheSIsImRlZXBNZW1iZXJzIiwibWVtYmVyIiwiaW5kZXgiLCJTdHJpbmciLCJlbnRyaWVzIiwiUEFTUyIsImVycm9yIiwid2FybmluZyIsIndhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4iLCJhcHBseVRyYW5zZm9ybSIsInJhd1ZhbHVlIiwidHJhbnNmb3JtIiwib2siLCJmYWlsdXJlIiwiZGVlcFJ1bGVFbnRyaWVzIiwiZmllbGRzIiwic291cmNlIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheSIsImtleSIsInN1YlJ1bGVzIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwic3ViUnVsZSIsInB1c2giLCJmIiwiZGVmYXVsdEZpZWxkIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9zdGVwMiR2YWx1ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZVN1YlJlc3VsdCIsImFjYyIsInN1YiIsIndhcm5pbmdPbmx5IiwiZm9sZFJ1bGVSZXN1bHQiLCJzdGF0ZSIsImNvbnRlbnQiLCJldmFsUnVsZUFzeW5jIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicHJlcCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJfc3RlcDQkdmFsdWUiLCJzdWJWYWx1ZSIsInN1Yk5hbWUiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIl90NSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJzZW50IiwiZmluaXNoIiwic3RvcCIsInJ1blJ1bGVzQXN5bmMiLCJfY2FsbGVlMiIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJfdDYiLCJfdDciLCJfY29udGV4dDIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUlBLFNBQVMsR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxTQUFTLElBQUssVUFBVUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLENBQUMsRUFBRUMsU0FBUyxFQUFFO0VBQ3JGLFNBQVNDLEtBQUtBLENBQUNDLEtBQUssRUFBRTtJQUFFLE9BQU9BLEtBQUssWUFBWUgsQ0FBQyxHQUFHRyxLQUFLLEdBQUcsSUFBSUgsQ0FBQyxDQUFDLFVBQVVJLE9BQU8sRUFBRTtNQUFFQSxPQUFPLENBQUNELEtBQUssQ0FBQztJQUFFLENBQUMsQ0FBQztFQUFFO0VBQzNHLE9BQU8sS0FBS0gsQ0FBQyxLQUFLQSxDQUFDLEdBQUdLLE9BQU8sQ0FBQyxFQUFFLFVBQVVELE9BQU8sRUFBRUUsTUFBTSxFQUFFO0lBQ3ZELFNBQVNDLFNBQVNBLENBQUNKLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUNRLElBQUksQ0FBQ04sS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08sQ0FBQyxFQUFFO1FBQUVKLE1BQU0sQ0FBQ0ksQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUMxRixTQUFTQyxRQUFRQSxDQUFDUixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDRSxLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzdGLFNB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O1FBQUE7VUFBQSxPQUFBaUUsU0FBQSxDQUFBUCxJQUFBO01BQUE7SUFBQSxHQUFBRSxRQUFBO0VBQUEsQ0FDL0MsRUFBQTtBRDFERCIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgZGV2V2Fybk9uY2UgfSBmcm9tICcuL2Rldldhcm5pbmcnO1xuLyoqIEVtcHR5IGZvciBgcmVxdWlyZWRgOiB1bmRlZmluZWQgLyBudWxsIC8gJycgLyBlbXB0eSBhcnJheS4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICB2YWx1ZSA9PT0gJycgfHxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpO1xufVxuLyoqXG4gKiBDb2VyY2UgYSB0aHJvd24vcmVqZWN0ZWQgcmVhc29uIGludG8gZGlzcGxheWFibGUgZmFpbHVyZSBjb250ZW50OlxuICogYSBub24tZW1wdHkgRXJyb3IubWVzc2FnZSBvciBhIG5vbi1lbXB0eSBwbGFpbiBzdHJpbmcg4oCUIG90aGVyd2lzZSBudWxsXG4gKiAoY2FsbGVyIHBpY2tzIGl0cyBmYWxsYmFjaykuIFNoYXJlZCB3aXRoIHRoZSBmb3JtLWxldmVsIGxhc3QtcmVzb3J0IG5ldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VGYWlsdXJlUmVhc29uKHJlYXNvbikge1xuICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciAmJiByZWFzb24ubWVzc2FnZSlcbiAgICAgICAgcmV0dXJuIHJlYXNvbi5tZXNzYWdlO1xuICAgIGlmICh0eXBlb2YgcmVhc29uID09PSAnc3RyaW5nJyAmJiByZWFzb24pXG4gICAgICAgIHJldHVybiByZWFzb247XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEZhaWx1cmUgbWVzc2FnZSBmb3IgYSByZWplY3RlZC90aHJvd24gY3VzdG9tIHZhbGlkYXRvcjpcbiAqIEVycm9yLm1lc3NhZ2Ug4oaSIHBsYWluIHN0cmluZyByZWFzb24g4oaSIHJ1bGUubWVzc2FnZSDihpIgZ2VuZXJpYyBmYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZhaWx1cmVNZXNzYWdlKHJlYXNvbiwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gY29lcmNlRmFpbHVyZVJlYXNvbihyZWFzb24pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAocnVsZS5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCcpO1xufVxuLyoqXG4gKiBSZXNvbHZlIGZ1bmN0aW9uLWZvcm0gcnVsZXMgaW50byBzdGF0aWMgcnVsZXMuIFRoZVxuICogY29udGV4dCBleHBvc2VzIHRoZSB2YWx1ZSBzbmFwc2hvdCB0aGUgcnVuIHdhcyBpbnZva2VkIHdpdGg7IGZ1bmN0aW9uIHJ1bGVzXG4gKiBtdXN0IGJlIGNoZWFwIGFuZCBzaWRlLWVmZmVjdCBmcmVlIOKAlCB0aGV5IG1heSBiZSByZXNvbHZlZCBtb3JlIHRoYW4gb25jZVxuICogcGVyIHZhbGlkYXRpb24gcGFzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBpbnN0YW5jZSkge1xuICAgIC8vIEZhc3QgcGF0aDogbm8gZnVuY3Rpb24gcnVsZXMg4oaSIG5vdGhpbmcgdG8gcmVzb2x2ZSwgbm8gY3R4IGFsbG9jYXRpb24uXG4gICAgLy8gVGhpcyBhbHNvIG1ha2VzIHRoZSBlbmdpbmUtaW50ZXJuYWwgcmUtcmVzb2x1dGlvbiBvZiBhbHJlYWR5LXJlc29sdmVkXG4gICAgLy8gYXJyYXlzIGZyZWUuXG4gICAgaWYgKCFydWxlcy5zb21lKChydWxlKSA9PiB0eXBlb2YgcnVsZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cbiAgICAvLyBMaXZlLWluc3RhbmNlIG1lbWJlcnMgKHNldEZpZWxkc1ZhbHVlLCBnZXRGaWVsZEVycm9yLCDigKYpIGFyZSBzcHJlYWQgaW5cbiAgICAvLyB3aGVuIGF2YWlsYWJsZTsgdGhlIHJlYWRzIGFsd2F5cyBjb21lIGZyb20gdGhlIHZhbGlkYXRpb24tdGltZSBzbmFwc2hvdC5cbiAgICBjb25zdCBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGluc3RhbmNlKSwgeyBnZXRGaWVsZFZhbHVlOiAobmFtZSkgPT4gcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSksIGdldEZpZWxkc1ZhbHVlOiAoKSA9PiB2YWx1ZXMgfSk7XG4gICAgcmV0dXJuIHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBydWxlKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gQSB0aHJvd2luZyBydWxlIGZhY3RvcnkgbXVzdCBub3QgY3Jhc2ggcmVuZGVyaW5nIG9yIHZhbGlkYXRpb24g4oCUXG4gICAgICAgICAgICAvLyBzdXJmYWNlIGl0IGFzIGEgcnVsZSB0aGF0IGFsd2F5cyBmYWlscyB3aXRoIHRoZSB0aHJvd24gcmVhc29uLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSBhIGZvcm0vaXRlbS1sZXZlbCB2YWxpZGF0ZVRyaWdnZXIgY29uZmlnIGludG8gdGhlIGVmZmVjdGl2ZVxuICogaW50ZXJhY3RpdmUgZXZlbnQgbGlzdDogaXRlbS1sZXZlbCAod2hlbiBwcmVzZW50KSBvdmVycmlkZXMgZm9ybS1sZXZlbDtcbiAqIGBmYWxzZWAgZGlzYWJsZXMgaW50ZXJhY3RpdmUgdmFsaWRhdGlvbiBlbnRpcmVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRyaWdnZXJzKGl0ZW1UcmlnZ2VyLCBmb3JtVHJpZ2dlcikge1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IGl0ZW1UcmlnZ2VyID09PSB1bmRlZmluZWQgPyBmb3JtVHJpZ2dlciA6IGl0ZW1UcmlnZ2VyO1xuICAgIGlmIChlZmZlY3RpdmUgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZWZmZWN0aXZlKSA/IGVmZmVjdGl2ZSA6IFtlZmZlY3RpdmVdO1xufVxuLyoqXG4gKiBGaWx0ZXIgcnVsZXMgYXBwbGljYWJsZSB0byBhbiBpbnRlcmFjdGl2ZSBldmVudDogdGhlIGV2ZW50XG4gKiB2YWxpZGF0ZXMgb25seSB3aGVuIGl0IGlzIGluIHRoZSBpdGVtJ3MgZWZmZWN0aXZlIHRyaWdnZXIgc2V0LiBXaXRoaW4gdGhlXG4gKiBzZXQsIGEgcnVsZSBXSVRIT1VUIGB2YWxpZGF0ZVRyaWdnZXJgIHJ1bnMgb24gZXZlcnkgZXZlbnQ7IGEgcnVsZSBXSVRIIG9uZVxuICogcnVucyBvbmx5IG9uIG1hdGNoaW5nIGV2ZW50cyDigJQgc28gYSBydWxlIHRyaWdnZXIgb3V0c2lkZSB0aGUgaXRlbSdzIHNldFxuICogbmV2ZXIgZmlyZXMgaW50ZXJhY3RpdmVseS4gU3VibWl0LXRpbWUgdmFsaWRhdGlvbiBieXBhc3NlcyB0aGlzIGZpbHRlciBhbmRcbiAqIHJ1bnMgZXZlcnkgcnVsZS5cbiAqXG4gKiBEZXYgZ3VhcmQ6IGEgcnVsZSB3aG9zZSAobm9uLWVtcHR5KSB0cmlnZ2VyIHNldCBpcyBmdWxseSBPVVRTSURFIHRoZVxuICogYWN0aXZlIHNldCBjYW4gbmV2ZXIgZmlyZSBpbnRlcmFjdGl2ZWx5IOKAlCB1c3VhbGx5IGEgbGVmdG92ZXIgb2YgdGhlXG4gKiBwcmUtMC4wLjc2IG92ZXJyaWRlIHNlbWFudGljcywgc28gaXQgd2FybnMgb25jZS4gYHZhbGlkYXRlVHJpZ2dlcjogW11gXG4gKiBpcyB0aGUgZGVsaWJlcmF0ZSBzdWJtaXQtb25seSBpZGlvbSBhbmQgc3RheXMgc2lsZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUnVsZXNCeVRyaWdnZXIocnVsZXMsIHRyaWdnZXIsIGFjdGl2ZVRyaWdnZXJzLCBmaWVsZE5hbWUpIHtcbiAgICBpZiAoIWFjdGl2ZVRyaWdnZXJzLmluY2x1ZGVzKHRyaWdnZXIpKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIHJ1bGVzLmZpbHRlcigocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlVHJpZ2dlciA9IHJ1bGUudmFsaWRhdGVUcmlnZ2VyO1xuICAgICAgICBpZiAocnVsZVRyaWdnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBydWxlVHJpZ2dlcnMgPSBBcnJheS5pc0FycmF5KHJ1bGVUcmlnZ2VyKSA/IHJ1bGVUcmlnZ2VyIDogW3J1bGVUcmlnZ2VyXTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHJ1bGVUcmlnZ2Vycy5pbmNsdWRlcyh0cmlnZ2VyKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzICYmXG4gICAgICAgICAgICBydWxlVHJpZ2dlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXJ1bGVUcmlnZ2Vycy5zb21lKCh0KSA9PiBhY3RpdmVUcmlnZ2Vycy5pbmNsdWRlcyh0KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZE5hbWUgIT09IG51bGwgJiYgZmllbGROYW1lICE9PSB2b2lkIDAgPyBmaWVsZE5hbWUgOiAnKGFueSknO1xuICAgICAgICAgICAgZGV2V2Fybk9uY2UoYHRyaWdnZXI6JHtuYW1lfToke3J1bGVUcmlnZ2Vycy5qb2luKCcsJyl9YCwgYFtQcm9Gb3JtXSBGaWVsZCBcIiR7bmFtZX1cIjogcnVsZSB2YWxpZGF0ZVRyaWdnZXIgWyR7cnVsZVRyaWdnZXJzLmpvaW4oJywgJyl9XSBpcyBvdXRzaWRlIHRoaXMgZmllbGQncyBhY3RpdmUgdHJpZ2dlciBzZXQgWyR7YWN0aXZlVHJpZ2dlcnMuam9pbignLCAnKX1dIOKAlCB0aGUgcnVsZSB3aWxsIG9ubHkgcnVuIG9uIHN1Ym1pdC4gSW5jbHVkZSBpdCBpbiB0aGUgaXRlbS9mb3JtIHZhbGlkYXRlVHJpZ2dlciB0byBydW4gaXQgaW50ZXJhY3RpdmVseS5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbi8qKiBCdWlsdC1pbiBgdHlwZWAgY2hlY2tzLiBgZW51bWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGFnYWluc3QgYHJ1bGUuZW51bWAuICovXG5jb25zdCBUWVBFX0NIRUNLUyA9IHtcbiAgICBzdHJpbmc6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycsXG4gICAgbnVtYmVyOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odiksXG4gICAgYm9vbGVhbjogKHYpID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbicsXG4gICAgbWV0aG9kOiAodikgPT4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbicsXG4gICAgaW50ZWdlcjogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHYpLFxuICAgIGZsb2F0OiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odikgJiYgIU51bWJlci5pc0ludGVnZXIodiksXG4gICAgYXJyYXk6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpLFxuICAgIG9iamVjdDogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLFxuICAgIGRhdGU6ICh2KSA9PiB2IGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICA/ICFOdW1iZXIuaXNOYU4odi5nZXRUaW1lKCkpXG4gICAgICAgIDogdHlwZW9mICh2ID09PSBudWxsIHx8IHYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHYuZ2V0VGltZSkgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICFOdW1iZXIuaXNOYU4odi5nZXRUaW1lKCkpLFxuICAgIHJlZ2V4cDogKHYpID0+IHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAodik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGV4OiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eIz8oW2EtZjAtOV17Nn18W2EtZjAtOV17M30pJC9pLnRlc3QodiksXG4gICAgLy8gU3RyaW5nLW9ubHk6IGNvZXJjaW5nIHZpYSBTdHJpbmcoKSB3b3VsZCBsZXQgZS5nLiBbJ2FAYi5jbyddIHN0cmluZ2lmeVxuICAgIC8vIGludG8gYSBwYXNzaW5nIHZhbHVlLlxuICAgIGVtYWlsOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodiksXG4gICAgdXJsOiAodikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTCh2KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbn07XG4vKiogRnJpZW5kbHkgZ2VuZXJhdGVkIG1lc3NhZ2VzIGZvciB0aGUgbGVnYWN5IHR5cGUgbmFtZXM7IG90aGVycyBnZXQgYSBnZW5lcmljIG9uZS4gKi9cbmZ1bmN0aW9uIHR5cGVGYWlsdXJlTWVzc2FnZShuYW1lLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgaWYgKHR5cGUgPT09ICdlbWFpbCcpXG4gICAgICAgIHJldHVybiBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgIGlmICh0eXBlID09PSAndXJsJylcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBVUkxgO1xuICAgIHJldHVybiBgJHtuYW1lfSBpcyBub3QgYSB2YWxpZCAke3R5cGV9YDtcbn1cbi8qKiBNZWFzdXJlIGEgdmFsdWUgZm9yIGxlbi9taW4vbWF4OiBzdHJpbmcg4oaSIGxlbmd0aCwgYXJyYXkg4oaSIGNvdW50LCBudW1iZXIg4oaSIHZhbHVlLiAqL1xuZnVuY3Rpb24gbWVhc3VyZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZS5sZW5ndGgsIHVuaXQ6ICcgY2hhcmFjdGVycycgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZS5sZW5ndGgsIHVuaXQ6ICcgaXRlbXMnIH07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZSwgdW5pdDogJycgfTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogRXZhbHVhdGUgZXZlcnkgYnVpbHQtaW4gKG5vbi1gdmFsaWRhdG9yYCkgcnVsZSBraW5kIGZvciBhIHNpbmdsZSBydWxlLlxuICogUmV0dXJucyB0aGUgZXJyb3IgY29udGVudCBmb3IgdGhlIGZpcnN0IGZhaWxpbmcgY2hlY2ssIG9yIG51bGwuXG4gKlxuICogRW1wdHkgdmFsdWVzICh1bmRlZmluZWQgLyBudWxsIC8gJycgLyBlbXB0eSBhcnJheSkgYXJlIG9ubHkgY2hlY2tlZCBieVxuICogYHJlcXVpcmVkYCDigJQgZXZlcnkgb3RoZXIgYnVpbHRpbiBjaGVjayBpcyBza2lwcGVkLCBzbyBvcHRpb25hbCBmaWVsZHNcbiAqIGRvbid0IGVycm9yIHVudGlsIHRoZXkgaGF2ZSBjb250ZW50LiBDdXN0b20gdmFsaWRhdG9ycyBhcmUgTk9UIHN1YmplY3QgdG9cbiAqIHRoaXMgc2tpcCAodGhleSByZWNlaXZlIHRoZSBlbXB0eSB2YWx1ZSBhbmQgZGVjaWRlIHRoZW1zZWx2ZXMpLlxuICovXG5mdW5jdGlvbiBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChydWxlLnJlcXVpcmVkICYmIGlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBpcyByZXF1aXJlZGA7XG4gICAgfVxuICAgIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBOb24tZW1wdHkgc3RyaW5nIG9mIG9ubHkgd2hpdGVzcGFjZSAodGhlIHJlcXVpcmVkK3doaXRlc3BhY2UgdHJpbSBpZGlvbSkuXG4gICAgaWYgKHJ1bGUud2hpdGVzcGFjZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBjYW5ub3QgYmUgYmxhbmtgO1xuICAgIH1cbiAgICAvLyBsZW46IGV4YWN0IGxlbmd0aC9jb3VudC92YWx1ZSDigJQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG1pbi9tYXguXG4gICAgaWYgKHJ1bGUubGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbSA9IG1lYXN1cmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChtICE9PSBudWxsICYmIG0ubWVhc3VyZWQgIT09IHJ1bGUubGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgZXhhY3RseSAke3J1bGUubGVufSR7bS51bml0fWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCB8fCBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZWFzdXJlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAobSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgbS5tZWFzdXJlZCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGF0IGxlYXN0ICR7cnVsZS5taW59JHttLnVuaXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydWxlLm1heCAhPT0gdW5kZWZpbmVkICYmIG0ubWVhc3VyZWQgPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0ke20udW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBIC9nIG9yIC95IHJlZ2V4IGlzIHN0YXRlZnVsOiBsYXN0SW5kZXggcGVyc2lzdHMgYWNyb3NzIC50ZXN0KCkgY2FsbHMsXG4gICAgICAgIC8vIHNvIHJlcGVhdGVkIHJ1bnMgd291bGQgYWx0ZXJuYXRlIHBhc3MvZmFpbCDigJQgcmVzZXQgaXQgZXZlcnkgcnVuLlxuICAgICAgICBpZiAocnVsZS5wYXR0ZXJuLmdsb2JhbCB8fCBydWxlLnBhdHRlcm4uc3RpY2t5KVxuICAgICAgICAgICAgcnVsZS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICghcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlICYmIHJ1bGUudHlwZSAhPT0gJ2VudW0nICYmICFUWVBFX0NIRUNLU1tydWxlLnR5cGVdKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IHR5cGVGYWlsdXJlTWVzc2FnZShuYW1lLCBydWxlLnR5cGUpO1xuICAgIH1cbiAgICAvLyBlbnVtIG1lbWJlcnNoaXA6IGFwcGxpZXMgZm9yIHR5cGUgJ2VudW0nIG9yIHdoZW5ldmVyIHJ1bGUuZW51bSBpcyBwcmVzZW50LlxuICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmICFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBvbmUgb2YgJHtydWxlLmVudW0uam9pbignLCAnKX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHRvUnVsZUFycmF5KHJ1bGVzKSB7XG4gICAgaWYgKCFydWxlcylcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJ1bGVzKSA/IHJ1bGVzIDogW3J1bGVzXTtcbn1cbi8qKiBNZW1iZXJzIGZvciBkZWVwIHJ1bGVzOiBhcnJheSDihpIgaW5kZXhlZCBlbnRyaWVzLCBwbGFpbiBvYmplY3Qg4oaSIGtleSBlbnRyaWVzLiAqL1xuZnVuY3Rpb24gZGVlcE1lbWJlcnModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKG1lbWJlciwgaW5kZXgpID0+IFtTdHJpbmcoaW5kZXgpLCBtZW1iZXJdKTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcbiAgICByZXR1cm4gW107XG59XG5jb25zdCBQQVNTID0geyBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuLyoqXG4gKiBEZXYgZ3VhcmQgZm9yIHRoZSBwcmUtMC4wLjc2IHZhbGlkYXRvciBjb250cmFjdDogcmV0dXJuaW5nIGEgc3RyaW5nIG9yXG4gKiBgZmFsc2VgIHVzZWQgdG8gRkFJTCB0aGUgcnVsZSDigJQgdW5kZXIgdGhlIGAocnVsZSwgdmFsdWUpYCBjb250cmFjdCByZXR1cm5cbiAqIHZhbHVlcyBhcmUgaWdub3JlZCBhbmQgb25seSB0aHJvdy9yZWplY3QgZmFpbHMuIFN1Y2ggYSByZXR1cm4gaXMgYWxtb3N0XG4gKiBjZXJ0YWlubHkgYSBsZWdhY3kgdmFsaWRhdG9yIHNpbGVudGx5IHBhc3NpbmcsIHNvIGl0IHdhcm5zIG9uY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4obmFtZSwgcmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnICYmIHJlc3VsdCAhPT0gZmFsc2UpXG4gICAgICAgIHJldHVybjtcbiAgICBkZXZXYXJuT25jZShgdmFsaWRhdG9yLXJldHVybjoke25hbWV9YCwgYFtQcm9Gb3JtXSBGaWVsZCBcIiR7bmFtZX1cIjogYSBjdXN0b20gdmFsaWRhdG9yIHJldHVybmVkICR7dHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyAnYSBzdHJpbmcnIDogJ2ZhbHNlJ30g4oCUIHJldHVybiB2YWx1ZXMgYXJlIElHTk9SRUQ7IHZhbGlkYXRvcnMgZmFpbCBieSB0aHJvd2luZyBvciByZWplY3RpbmcgKGEgdGhyb3duIEVycm9yJ3MgbWVzc2FnZSBiZWNvbWVzIHRoZSBmaWVsZCBlcnJvcikuYCk7XG59XG4vKiogUnVuIGEgcnVsZSdzIHRyYW5zZm9ybSwgY29udGFpbmluZyB0aHJvd3MgYXMgYSBydWxlIGZhaWx1cmUuICovXG5mdW5jdGlvbiBhcHBseVRyYW5zZm9ybShydWxlLCByYXdWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZS50cmFuc2Zvcm0gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcmF3VmFsdWUgfTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHJ1bGUudHJhbnNmb3JtKHJhd1ZhbHVlKSB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZmFpbHVyZTogcmVzb2x2ZUZhaWx1cmVNZXNzYWdlKGVyciwgcnVsZSkgfTtcbiAgICB9XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBydWxlJ3MgZGVlcCBzb3VyY2VzIChgZmllbGRzYCBwZXIga2V5LCB0aGVuIGBkZWZhdWx0RmllbGRgIHBlclxuICogbWVtYmVyKSBpbnRvIFtzdWJSdWxlLCBtZW1iZXJWYWx1ZSwgbWVtYmVyTmFtZV0gdHVwbGVzIOKAlCB0aGUgc2luZ2xlIHBsYWNlXG4gKiB0aGF0IGtub3dzIGhvdyBkZWVwIHJ1bGVzIG1hcCBvbnRvIGEgY29udGFpbmVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwUnVsZUVudHJpZXMocnVsZSwgdmFsdWUsIG5hbWUpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgaWYgKHJ1bGUuZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHZhbHVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHN1YlJ1bGVzXSBvZiBPYmplY3QuZW50cmllcyhydWxlLmZpZWxkcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUnVsZSBvZiB0b1J1bGVBcnJheShzdWJSdWxlcykpIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3N1YlJ1bGUsIHNvdXJjZVtrZXldLCBgJHtuYW1lfS4ke2tleX1gXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUuZGVmYXVsdEZpZWxkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWVtYmVyXSBvZiBkZWVwTWVtYmVycyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUnVsZSBvZiB0b1J1bGVBcnJheShydWxlLmRlZmF1bHRGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3N1YlJ1bGUsIG1lbWJlciwgYCR7bmFtZX0uJHtrZXl9YF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufVxuLyoqXG4gKiBNZXJnZSBhIHN1Yi1ydWxlJ3Mgb3V0Y29tZSBpbnRvIHRoZSBwYXJlbnQncyBjaGFubmVscy4gQSBzdWItcnVsZSBmbGFnZ2VkXG4gKiBgd2FybmluZ09ubHlgIGNvbnRyaWJ1dGVzIGl0cyBmYWlsdXJlIGFzIGEgV0FSTklORzsgb3RoZXJ3aXNlIGl0cyBlcnJvclxuICogYmxvY2tzLiBSZXR1cm5zIHRydWUgd2hlbiBhIGJsb2NraW5nIGVycm9yIGxhbmRlZCAoc3RvcCB3YWxraW5nKS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VTdWJSZXN1bHQoYWNjLCBzdWJSdWxlLCBzdWIpIHtcbiAgICBpZiAoc3ViLndhcm5pbmcgIT09IG51bGwgJiYgYWNjLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgIGFjYy53YXJuaW5nID0gc3ViLndhcm5pbmc7XG4gICAgaWYgKHN1Yi5lcnJvciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc3ViUnVsZS53YXJuaW5nT25seSkge1xuICAgICAgICAgICAgaWYgKGFjYy53YXJuaW5nID09PSBudWxsKVxuICAgICAgICAgICAgICAgIGFjYy53YXJuaW5nID0gc3ViLmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWNjLmVycm9yID0gc3ViLmVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBGb2xkIG9uZSBydWxlJ3Mgb3V0Y29tZSBpbnRvIHRoZSBydW4tbGV2ZWwgY2hhbm5lbHMuIEEgcnVsZSBmbGFnZ2VkXG4gKiBgd2FybmluZ09ubHlgIGRvd25ncmFkZXMgZXZlcnl0aGluZyBpdCBwcm9kdWNlZCAob3duIGNoZWNrcyBBTkQgZGVlcFxuICogc3ViLXJ1bGVzKSB0byBhIHdhcm5pbmcuIFJldHVybnMgdGhlIGJsb2NraW5nIGVycm9yIHRvIHN1cmZhY2UsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZvbGRSdWxlUmVzdWx0KHJ1bGUsIHJlc3VsdCwgc3RhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHJ1bGUud2FybmluZ09ubHkpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IChfYSA9IHJlc3VsdC5lcnJvcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVzdWx0Lndhcm5pbmc7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSBudWxsICYmIHN0YXRlLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgICAgICBzdGF0ZS53YXJuaW5nID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChyZXN1bHQud2FybmluZyAhPT0gbnVsbCAmJiBzdGF0ZS53YXJuaW5nID09PSBudWxsKVxuICAgICAgICBzdGF0ZS53YXJuaW5nID0gcmVzdWx0Lndhcm5pbmc7XG4gICAgcmV0dXJuIHJlc3VsdC5lcnJvcjtcbn1cbi8qKiBFdmFsdWF0ZSBPTkUgcnVsZSAodHJhbnNmb3JtIOKGkiBidWlsdGluIGNoZWNrcyDihpIgdmFsaWRhdG9yIOKGkiBkZWVwIHJ1bGVzKTsgY3VzdG9tIHZhbGlkYXRvcnMgYXJlIGF3YWl0ZWQuICovXG5mdW5jdGlvbiBldmFsUnVsZUFzeW5jKHJ1bGUsIHJhd1ZhbHVlLCBuYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcHJlcCA9IGFwcGx5VHJhbnNmb3JtKHJ1bGUsIHJhd1ZhbHVlKTtcbiAgICAgICAgaWYgKCFwcmVwLm9rKVxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHByZXAuZmFpbHVyZSwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByZXAudmFsdWU7XG4gICAgICAgIGxldCBmYWlsdXJlID0gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKHlpZWxkIHJ1bGUudmFsaWRhdG9yKHJ1bGUsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgd2FybkxlZ2FjeVZhbGlkYXRvclJldHVybihuYW1lLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUgPSByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWlsdXJlLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIGlmICgocnVsZS5maWVsZHMgfHwgcnVsZS5kZWZhdWx0RmllbGQpICYmICFpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBEZWVwIHJ1bGVzIG5lZWQgYSBjb250YWluZXI7IGEgbm9uLWVtcHR5IHByaW1pdGl2ZSBmYWlscyB0aGUgUEFSRU5UXG4gICAgICAgICAgICAvLyAoY2xlYXIgYXR0cmlidXRpb24pIGluc3RlYWQgb2YgcHJvZHVjaW5nIGNvbmZ1c2luZyBjaGlsZCBlcnJvcnMuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlgLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY2MgPSB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtzdWJSdWxlLCBzdWJWYWx1ZSwgc3ViTmFtZV0gb2YgZGVlcFJ1bGVFbnRyaWVzKHJ1bGUsIHZhbHVlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZVN1YlJlc3VsdChhY2MsIHN1YlJ1bGUsIHlpZWxkIGV2YWxSdWxlQXN5bmMoc3ViUnVsZSwgc3ViVmFsdWUsIHN1Yk5hbWUpKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQQVNTO1xuICAgIH0pO1xufVxuLyoqXG4gKiBSdWxlIHJ1bi4gQ3VzdG9tIHZhbGlkYXRvcnMgYXJlIGF3YWl0ZWQgKHN5bmMgb3IgYXN5bmMpOiByZXNvbHZpbmcgcGFzc2VzLFxuICogcmVqZWN0aW5nL3Rocm93aW5nIGZhaWxzLiBSZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkLlxuICpcbiAqIFRoZSBwZXItcnVsZSB0cnkvY2F0Y2ggaXMgdGhlIHRvdGFsaXR5IGNob2tlIHBvaW50OiBOTyBpbnB1dCDigJQgaW5jbHVkaW5nXG4gKiBleG90aWMgdmFsdWVzIHRoYXQgYnJlYWsgYSBidWlsdGluIGNoZWNrIOKAlCBtYXkgZXNjYXBlIGFzIGEgdGhyb3c7IGV2ZXJ5XG4gKiBmYWlsdXJlIHN1cmZhY2VzIHRocm91Z2ggdGhlIGVycm9yL3dhcm5pbmcgY2hhbm5lbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJ1bGVzLCBpbnN0YW5jZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0geyB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiByZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBldmFsUnVsZUFzeW5jKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7IGVycm9yOiByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKSwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBmb2xkUnVsZVJlc3VsdChydWxlLCByZXN1bHQsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciwgd2FybmluZzogc3RhdGUud2FybmluZyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBzdGF0ZS53YXJuaW5nIH07XG4gICAgfSk7XG59IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|