@agilemotion/oui-react-js 2.0.4 → 2.0.7
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/dist/components/DataGrid.js +33 -2
- package/dist/components/form/BaseField.js +72 -7
- package/dist/components/form/Form.js +92 -31
- package/dist/components/form/TextField.js +22 -6
- package/dist/components/form/TransferList.js +79 -2
- package/dist/components/layout/View.css +1 -1
- package/package.json +1 -1
|
@@ -35,6 +35,12 @@ const BaseField = props => {
|
|
|
35
35
|
const initialValueBound = _react.default.useRef(false);
|
|
36
36
|
const ref = _react.default.useRef(null);
|
|
37
37
|
const valid = _react.default.useRef(false);
|
|
38
|
+
// Memo of the last (currentValue, required, markers) tuple + its result.valid.
|
|
39
|
+
// doValidation short-circuits when the inputs are unchanged so repeated reads
|
|
40
|
+
// of @#{form}.value (which iterates fields and calls validate on each in
|
|
41
|
+
// Form.jsx get value()) don't keep firing setErrorMessage/setHasError and
|
|
42
|
+
// re-render-loop the whole form.
|
|
43
|
+
const lastValidation = _react.default.useRef(null);
|
|
38
44
|
_react.default.useEffect(() => {
|
|
39
45
|
initialValueBound.current = false;
|
|
40
46
|
bind();
|
|
@@ -78,7 +84,11 @@ const BaseField = props => {
|
|
|
78
84
|
}, [required]);
|
|
79
85
|
const doValidation = (values, currentValue) => {
|
|
80
86
|
if (config) {
|
|
81
|
-
|
|
87
|
+
const markers = _ApplicationManager.default.isFormMarkersEnabled();
|
|
88
|
+
const last = lastValidation.current;
|
|
89
|
+
if (last !== null && last.currentValue === currentValue && last.required === required && last.markers === markers) {
|
|
90
|
+
return last.valid;
|
|
91
|
+
}
|
|
82
92
|
let path = props.form().getValuePath(config.dataBinding || config.id);
|
|
83
93
|
let result = {
|
|
84
94
|
valid: true
|
|
@@ -92,13 +102,35 @@ const BaseField = props => {
|
|
|
92
102
|
if (result.valid) {
|
|
93
103
|
result = _Utils.default.validateField(path.valueProperty, required, path.valueObject, currentValue, config.validator);
|
|
94
104
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (_ApplicationManager.default.isFormMarkersEnabled()) {
|
|
105
|
+
setErrorMessage(markers || result.forceMarker ? result.message : '');
|
|
106
|
+
setHasError(!result.valid && (markers || result.forceMarker));
|
|
107
|
+
valid.current = result.valid && (markers || result.forceMarker);
|
|
108
|
+
if (markers) {
|
|
100
109
|
props.form().setFieldError(config.id, typeof result.message === 'undefined' ? null : result.message);
|
|
101
110
|
}
|
|
111
|
+
lastValidation.current = {
|
|
112
|
+
currentValue,
|
|
113
|
+
required,
|
|
114
|
+
markers,
|
|
115
|
+
valid: result.valid
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// Publish to the form's validity register. Single source of truth
|
|
119
|
+
// for "is this field valid?" — form.value reads from here without
|
|
120
|
+
// calling back into the field (kills the bi-directional chain).
|
|
121
|
+
if (typeof props.form === 'function' && typeof props.form().setFieldValidity === 'function') {
|
|
122
|
+
props.form().setFieldValidity(config.id || config.dataBinding, {
|
|
123
|
+
valid: result.valid,
|
|
124
|
+
message: result.message,
|
|
125
|
+
forceMarker: result.forceMarker,
|
|
126
|
+
onValidityChange: (valid, errorMessage) => {
|
|
127
|
+
if (_ApplicationManager.default.isFormMarkersEnabled()) {
|
|
128
|
+
setErrorMessage(errorMessage);
|
|
129
|
+
setHasError(!valid);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
102
134
|
return result.valid;
|
|
103
135
|
}
|
|
104
136
|
return false;
|
|
@@ -135,6 +167,27 @@ const BaseField = props => {
|
|
|
135
167
|
props.form().handleChange(config.dataBinding || config.id, val);
|
|
136
168
|
}
|
|
137
169
|
}
|
|
170
|
+
|
|
171
|
+
// Self-announce: validate this field against current data and push
|
|
172
|
+
// verdict to the form's validity register via setFieldValidity (in
|
|
173
|
+
// doValidation). Markers are suppressed locally so initial-load
|
|
174
|
+
// validation never flashes error UI — even if global markers are
|
|
175
|
+
// already on (e.g. async data arriving after Form's COMPONENT_LOAD
|
|
176
|
+
// already re-enabled markers). Cache makes repeat self-
|
|
177
|
+
// announcements cheap when (currentValue, required, markers)
|
|
178
|
+
// tuple is unchanged.
|
|
179
|
+
const previouslyEnabled = _ApplicationManager.default.isFormMarkersEnabled();
|
|
180
|
+
if (previouslyEnabled) {
|
|
181
|
+
_ApplicationManager.default.enableFormMarkers(false);
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const cv = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
|
|
185
|
+
doValidation(props.values, cv);
|
|
186
|
+
} finally {
|
|
187
|
+
if (previouslyEnabled) {
|
|
188
|
+
_ApplicationManager.default.enableFormMarkers(true);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
138
191
|
}
|
|
139
192
|
}, [props.values, config]);
|
|
140
193
|
_react.default.useEffect(() => {
|
|
@@ -146,6 +199,18 @@ const BaseField = props => {
|
|
|
146
199
|
setErrorMessage(field.error);
|
|
147
200
|
}
|
|
148
201
|
}
|
|
202
|
+
// Intentionally do NOT validate on mount: valueRef.current is not
|
|
203
|
+
// yet bound from the form's master data at this point — bind()
|
|
204
|
+
// runs in a later render cycle via the [valueObject] useEffect.
|
|
205
|
+
// Validating here would mark every field-with-master-value as
|
|
206
|
+
// invalid (currentValue=null), permanently flipping form.value to
|
|
207
|
+
// null. Register stays empty for this field until either user
|
|
208
|
+
// interaction (handleChange → validateField → doValidation →
|
|
209
|
+
// setFieldValidity) or an explicit form.api.validateAll() runs.
|
|
210
|
+
// form.value treats empty-register as "optimistically valid" — so
|
|
211
|
+
// any save flow MUST call form.api.validateAll() before reading
|
|
212
|
+
// form.value, or invalid data will pass through silently.
|
|
213
|
+
loadingRef.current = false;
|
|
149
214
|
}
|
|
150
215
|
});
|
|
151
216
|
_react.default.useEffect(() => {
|
|
@@ -341,4 +406,4 @@ const BaseField = props => {
|
|
|
341
406
|
}))) : null;
|
|
342
407
|
};
|
|
343
408
|
exports.BaseField = BaseField;
|
|
344
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImJpbmQiLCJib3VuZFZhbHVlIiwiZmllbGRUeXBlIiwiaWQiLCJ2YWx1ZVBhcnNlciIsImZvcm0iLCJ2YWxpZGF0ZVBhcmVudCIsImRhdGFCaW5kaW5nIiwiZG9WYWxpZGF0aW9uIiwidmFsdWVzIiwiY3VycmVudFZhbHVlIiwiY29uc29sZSIsImxvZyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsImhhbmRsZSIsImFwaSIsInBhcnNlZENvbmZpZyIsInBhcnNlQ29uZmlnIiwidmlld0lkIiwiZXZlbnRNYW5hZ2VyIiwiYWRkU3Vic2NyaXB0aW9ucyIsImV2ZW50SGFuZGxpbmdDb25maWciLCJhZGRTeXN0ZW1TdWJzY3JpcHRpb25zIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImV2ZW50IiwiRXZlbnQiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJDT01QT05FTlRfTE9BRCIsInNjcmlwdFZhbHVlIiwiaXNFeHByZXNzaW9uIiwiZXhlY3V0ZVNjcmlwdCIsInJlcGxhY2UiLCJ2YWwiLCJpbnN0YW5jZVR5cGUiLCJoYW5kbGVDaGFuZ2UiLCJmaWVsZCIsImFkZEZpZWxkIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJlcnJvciIsImxlbmd0aCIsImNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMiLCJyZW1vdmVGaWVsZCIsImhhbmRsZVZhbHVlQ2hhbmdlIiwibmV3VmFsdWUiLCJ2YWx1ZUNoYW5nZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwic3BsaWNlIiwibmV3VmFsdWVFbGVtZW50IiwicHVzaCIsInNlbGVjdEl0ZW1DaGFuZ2UiLCJoYW5kbGVTZWxlY3RJdGVtQ2hhbmdlIiwic2VsZWN0T3B0aW9uIiwidmFsdWVDaGFuZ2VIYW5kbGVyIiwiVkFMVUVfQ0hBTkdFIiwidmFsaWRhdGUiLCJwYXJzZVZhbHVlIiwiaW5ib3VuZCIsInJvd3MiLCJyb3dzSGFuZGxlciIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwIiwiY2xlYXIiLCJjbGVhckhhbmRsZXIiLCJzY3JvbGxUbyIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsInZhbHVlQ2hhbmdlQ2FsbGJhY2siLCJoYW5kbGVMb2FkQ29tcGxldGUiLCJyZWZyZXNoIiwicmVxdWlyZWROZXdWYWwiLCJudWxsYWJsZSIsImlzUmVxdWlyZWQiLCJyZXNldCIsInNldEZpZWxkUmVxdWlyZWQiLCJuZXdWYWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRDaGlsZHJlbiIsImxvYWREYXRhIiwibG9hZERhdGFIYW5kbGVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImtleSIsInN0eWxlIiwidGV4dEFsaWduIiwibWFyZ2luTGVmdCIsImF0dHJpYnV0ZXMiLCJpbmRleCIsImRpc3BsYXkiLCJnZXRDb21wb25lbnRBdHRyaWJ1dGUiLCJjaGlsZHJlbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9CYXNlRmllbGQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi8uLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuLi8uLi9ldmVudC9FdmVudCc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgZHluYW1pY0pTIGZyb20gJy4uLy4uL0R5bmFtaWNKUyc7XG5cbmV4cG9ydCBjb25zdCBCYXNlRmllbGQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFt2YWx1ZU9iamVjdCwgc2V0VmFsdWVPYmplY3RdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt2YWx1ZVByb3BlcnR5LCBzZXRWYWx1ZVByb3BlcnR5XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGxvYWRpbmdSZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIC8vIFRPRE8gOiBSZXBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSB3aXRoIHRoZSB2YWx1ZVJlZiBiZWxvdy4gVGhlIHN0YXRlIHZhbHVlIGlzIG9jY2F0aW9uYWx5IG5vdCBhdmFpbGFibGUgaW4gdGltZSBmb3IgZXZlbnQgc2NyaXB0c1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZSkgPyBwcm9wcy52YWx1ZSA6IG51bGwpO1xuICAgIC8vIFRPRE8gOiBSZXBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSB3aXRoIHRoaXMgcmVmIGZvciB0aGUgcmVhc29uIG1lbnNpb25lZCBhYm92ZVxuICAgIGNvbnN0IHZhbHVlUmVmID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWUpID8gcHJvcHMudmFsdWUgOiBudWxsKTtcbiAgICBjb25zdCBbc2VsZWN0T3B0aW9ucywgc2V0U2VsZWN0T3B0aW9uc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyZXF1aXJlZCwgc2V0UmVxdWlyZWRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21pbkRhdGUsIHNldE1pbkRhdGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21heERhdGUsIHNldE1heERhdGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3Jlc2V0U3dpdGNoLCBzZXRSZXNldFN3aXRjaF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgdmFsaWRhdGVPbkNoYW5nZSA9IFJlYWN0LnVzZVJlZigpO1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUJvdW5kID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgdmFsaWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBiaW5kKCk7XG4gICAgfSwgW3ZhbHVlT2JqZWN0XSk7XG5cbiAgICBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgICBsZXQgYm91bmRWYWx1ZSA9IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICBpZiAoYm91bmRWYWx1ZSAmJiAhaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCkge1xuICAgICAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0xPT0tVUCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJvdW5kVmFsdWUgfHwgVXRpbHMuaXNOdWxsKGJvdW5kVmFsdWUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YWx1ZVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYm91bmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKHByb3BzLnZhbHVlUGFyc2VyKGJvdW5kVmFsdWUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV1dKTtcblxuICAgIC8vIENoYW5nZSB0aGUgcmVxdWlyZWQgdmFsdWUgYW5kIHJlLXZhbGlkYXRlIGZpZWxkIGlmIG5lY2Vzc2FyeVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbmZpZykgJiYgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAudmFsaWRhdGVQYXJlbnQoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgZG9WYWxpZGF0aW9uKHByb3BzLnZhbHVlcywgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IG51bGw7XG4gICAgfSwgW3JlcXVpcmVkXSk7XG5cbiAgICBjb25zdCBkb1ZhbGlkYXRpb24gPSAodmFsdWVzLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBcIioqKioqKioqKltCYXNlRmllbGQuZG9WYWxpZGF0aW9uXSBpZD1cIiwgY29uZmlnLmlkLFxuICAgICAgICAgICAgICAgIFwicmVxdWlyZWQ9XCIsIHJlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwibWFya2Vycz1cIiwgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCksXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50VmFsdWU9XCIsIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IHBhdGggPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWVQYXRoKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt2YWxpZDogdHJ1ZX07XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZy52YWxpZGF0b3Iuc2NyaXB0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KGAke2NvbmZpZy5pZH1WYWxpZGF0b3JgLCBjb25maWcudmFsaWRhdG9yLnNjcmlwdCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZSA/IHJlc3VsdC5tZXNzYWdlIDogY29uZmlnLnZhbGlkYXRvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFV0aWxzLnZhbGlkYXRlRmllbGQocGF0aC52YWx1ZVByb3BlcnR5LCByZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCwgY3VycmVudFZhbHVlLCBjb25maWcudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgXCIqKioqKioqKipbQmFzZUZpZWxkLmRvVmFsaWRhdGlvbl0gaWQ9XCIsIGNvbmZpZy5pZCxcbiAgICAgICAgICAgICAgICBcInJlc3VsdC52YWxpZD1cIiwgcmVzdWx0LnZhbGlkLFxuICAgICAgICAgICAgICAgIFwicmVzdWx0Lm1lc3NhZ2U9XCIsIHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIFwicmVzdWx0LmZvcmNlTWFya2VyPVwiLCByZXN1bHQuZm9yY2VNYXJrZXJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSB8fCByZXN1bHQuZm9yY2VNYXJrZXIgPyByZXN1bHQubWVzc2FnZSA6ICcnKTtcbiAgICAgICAgICAgIHNldEhhc0Vycm9yKCFyZXN1bHQudmFsaWQgJiYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpIHx8IHJlc3VsdC5mb3JjZU1hcmtlcikpO1xuICAgICAgICAgICAgdmFsaWQuY3VycmVudCA9IHJlc3VsdC52YWxpZCAmJiAoYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkgfHwgcmVzdWx0LmZvcmNlTWFya2VyKTtcblxuICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRGaWVsZEVycm9yKGNvbmZpZy5pZCwgdHlwZW9mIHJlc3VsdC5tZXNzYWdlID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIHBhcnNlZENvbmZpZyk7XG4gICAgICAgICAgICBzZXRDb25maWcocGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkpO1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5nZXRWYWx1ZVBhdGgoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgcHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVPYmplY3QocGF0aC52YWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVQcm9wZXJ0eShwYXRoLnZhbHVlUHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihwcm9wcy5jb25maWcudmFsdWUpID9cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQocHJvcHMuY29uZmlnLmlkLnJlcGxhY2UoJy4nLCAnXycpICsgJ1ZhbHVlJywgcHJvcHMuY29uZmlnLnZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNjcmlwdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQsIHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZhbHVlcywgY29uZmlnXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSB0cnVlICYmICFVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmFkZEZpZWxkKGNvbmZpZy5pZCB8fCBjb25maWcuZGF0YUJpbmRpbmcsIHByb3BzLmhhbmRsZSwgcHJvcHMucGFyZW50SWQsIHByb3BzLmJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIYXNFcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGZpZWxkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5mb3JtKCkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMocHJvcHMuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUZpZWxkKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyB8fCBwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGluaXRpYWxWYWx1ZUJvdW5kLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBsZXQgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobmV3VmFsdWUpICYmICFVdGlscy5pc051bGwodmFsdWVSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IG5ld1ZhbHVlLmlkICE9PSB2YWx1ZVJlZi5jdXJyZW50LmlkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnREFURScgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1RJTUUnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlUmVmLmN1cnJlbnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0dSSUQnICYmIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSB7XG4gICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5zcGxpY2UoMCwgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ubGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuZXdWYWx1ZUVsZW1lbnQgb2YgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ucHVzaChuZXdWYWx1ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmhhbmRsZUNoYW5nZSghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZykgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBpZCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgLy9hcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0SXRlbUNoYW5nZSA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuaGFuZGxlU2VsZWN0SXRlbUNoYW5nZShpZCwgc2VsZWN0T3B0aW9ucywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdEl0ZW1DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBzZWxlY3RJdGVtQ2hhbmdlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0T3B0aW9uIG9mIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbi5pZCA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0T3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcpID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogaWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcihuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZXMsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb1ZhbGlkYXRpb24odmFsdWVzLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcnNlVmFsdWU6ICh2YWx1ZSwgaW5ib3VuZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlUGFyc2VyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIodmFsdWUsIGluYm91bmQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgdmFsaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkLmN1cnJlbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJvd3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnJvd3NIYW5kbGVyID8gcHJvcHMucm93c0hhbmRsZXIoKSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkdyb3VwOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwoY29uZmlnLnZhbGlkYXRvcikgPyBjb25maWcudmFsaWRhdG9yLmdyb3VwIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNsZWFySGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuY2xlYXJIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjcm9sbFRvOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZVByb3BlcnR5KSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZVBhcnNlcikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVQYXJzZXIodmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0sIGZhbHNlKSA6IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIgPyBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZSwgZmFsc2UpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKHZhbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGRpc2FibGVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmlzaWJsZSh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVMb2FkQ29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcuZGlzYWJsZWQsIHBhcnNlZENvbmZpZy5pZCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1aXJlZE5ld1ZhbCA9ICFVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZhbGlkYXRvcikgP1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIHx8IFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPSByZXF1aXJlZCAhPT0gbnVsbCAmJiByZXF1aXJlZCAhPT0gcmVxdWlyZWROZXdWYWwgJiYgbG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRSZXF1aXJlZChyZXF1aXJlZE5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgcmVxdWlyZWQoaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKGlzUmVxdWlyZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtaW5EYXRlKG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNaW5EYXRlKG1pbkRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtYXhEYXRlKG1heERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNYXhEYXRlKG1heERhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBzZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgICAgIHNldFJlc2V0U3dpdGNoKCFyZXNldFN3aXRjaCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0RmllbGRSZXF1aXJlZChuZXdWYWwsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IHZhbGlkYXRlO1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKG5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5nZXRDaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvYWREYXRhKCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy5sb2FkRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMubG9hZERhdGFIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29uZmlnID9cbiAgICAgICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPVwiY29sLSotKlwiIGtleT17Y29uZmlnLmlkfSBzdHlsZT17e1xuICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWFyZ2luTGVmdCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/Lm1hcmdpbkxlZnQgOlxuICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5pbmRleCA9PT0gMCA/IDAgOiAnOHB4JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICF2aXNpYmxlIHx8IFV0aWxzLmdldENvbXBvbmVudEF0dHJpYnV0ZShjb25maWcsICdoaWRkZW4nLCBmYWxzZSkgPT09IHRydWUgPyAnbm9uZScgOiAnYmxvY2snXG4gICAgICAgIH19PlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVuKHtcbiAgICAgICAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICAgICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgdmFsdWVPYmplY3Q6IHZhbHVlT2JqZWN0LFxuICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eTogdmFsdWVQcm9wZXJ0eSxcbiAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlOiBoYW5kbGVWYWx1ZUNoYW5nZSxcbiAgICAgICAgICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICAgICAgICAgIHNldFNlbGVjdE9wdGlvbnM6IHNldFNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxuICAgICAgICAgICAgc2V0UmVzZXRTd2l0Y2g6IHNldFJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgcmVzZXRTd2l0Y2g6IHJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgaGFzRXJyb3I6IGhhc0Vycm9yLFxuICAgICAgICAgICAgZG9WYWxpZGF0aW9uOiBkb1ZhbGlkYXRpb24sXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGxvYWRpbmdSZWY6IGxvYWRpbmdSZWZcbiAgICAgICAgfSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFBd0MsU0FBQUQsdUJBQUFRLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakMsTUFBTUcsU0FBUyxHQUFJQyxLQUFLLElBQUs7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQTtFQUNoQyxNQUFNLENBQUNDLFFBQVEsRUFBRUMsV0FBVyxDQUFDLEdBQUdDLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUNyRCxNQUFNLENBQUNDLFlBQVksRUFBRUMsZUFBZSxDQUFDLEdBQUdILGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxNQUFNLENBQUNHLFdBQVcsRUFBRUMsY0FBYyxDQUFDLEdBQUdMLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hELE1BQU0sQ0FBQ0ssYUFBYSxFQUFFQyxnQkFBZ0IsQ0FBQyxHQUFHUCxjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDOUQsTUFBTU8sVUFBVSxHQUFHUixjQUFLLENBQUNTLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDckMsTUFBTSxDQUFDQyxNQUFNLEVBQUVDLFNBQVMsQ0FBQyxHQUFHWCxjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDaEQ7RUFDQSxNQUFNLENBQUNXLEtBQUssRUFBRUMsUUFBUSxDQUFDLEdBQUdiLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLENBQUNhLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDaUIsS0FBSyxDQUFDLEdBQUdqQixLQUFLLENBQUNpQixLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQ3pGO0VBQ0EsTUFBTUksUUFBUSxHQUFHaEIsY0FBSyxDQUFDUyxNQUFNLENBQUMsQ0FBQ0ssY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUNpQixLQUFLLENBQUMsR0FBR2pCLEtBQUssQ0FBQ2lCLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUUsTUFBTSxDQUFDSyxhQUFhLEVBQUVDLGdCQUFnQixDQUFDLEdBQUdsQixjQUFLLENBQUNDLFFBQVEsQ0FBQyxFQUFFLENBQUM7RUFDNUQsTUFBTSxDQUFDa0IsUUFBUSxFQUFFQyxXQUFXLENBQUMsR0FBR3BCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUNyRCxNQUFNLENBQUNvQixPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHdEIsY0FBSyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ25ELE1BQU0sQ0FBQ3NCLFFBQVEsRUFBRUMsV0FBVyxDQUFDLEdBQUd4QixjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDcEQsTUFBTSxDQUFDd0IsT0FBTyxFQUFFQyxVQUFVLENBQUMsR0FBRzFCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUNsRCxNQUFNLENBQUMwQixPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHNUIsY0FBSyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDO0VBQ2xELE1BQU0sQ0FBQzRCLFdBQVcsRUFBRUMsY0FBYyxDQUFDLEdBQUc5QixjQUFLLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUM7RUFDM0QsTUFBTThCLGdCQUFnQixHQUFHL0IsY0FBSyxDQUFDUyxNQUFNLENBQUMsQ0FBQztFQUN2QyxNQUFNdUIsaUJBQWlCLEdBQUdoQyxjQUFLLENBQUNTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDN0MsTUFBTXdCLEdBQUcsR0FBR2pDLGNBQUssQ0FBQ1MsTUFBTSxDQUFDLElBQUksQ0FBQztFQUM5QixNQUFNeUIsS0FBSyxHQUFHbEMsY0FBSyxDQUFDUyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBRWpDVCxjQUFLLENBQUNtQyxTQUFTLENBQUMsTUFBTTtJQUNsQkgsaUJBQWlCLENBQUNJLE9BQU8sR0FBRyxLQUFLO0lBQ2pDQyxJQUFJLENBQUMsQ0FBQztFQUNWLENBQUMsRUFBRSxDQUFDakMsV0FBVyxDQUFDLENBQUM7RUFFakIsU0FBU2lDLElBQUlBLENBQUEsRUFBRztJQUNaLElBQUlDLFVBQVUsR0FBR2xDLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDO0lBQzNDLElBQUlnQyxVQUFVLElBQUksQ0FBQ04saUJBQWlCLENBQUNJLE9BQU8sRUFBRTtNQUMxQ0osaUJBQWlCLENBQUNJLE9BQU8sR0FBRyxJQUFJO01BQ2hDLElBQUl6QyxLQUFLLENBQUNlLE1BQU0sQ0FBQzZCLFNBQVMsS0FBSyxRQUFRLElBQUk1QyxLQUFLLENBQUNlLE1BQU0sQ0FBQzZCLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDNUUsSUFBSSxDQUFDRCxVQUFVLElBQUl4QixjQUFLLENBQUNDLE1BQU0sQ0FBQ3VCLFVBQVUsQ0FBQ0UsRUFBRSxDQUFDLEVBQUU7VUFDNUMzQixRQUFRLENBQUMsSUFBSSxDQUFDO1VBQ2RHLFFBQVEsQ0FBQ29CLE9BQU8sR0FBRyxJQUFJO1FBQzNCLENBQUMsTUFBTTtVQUNILElBQUd6QyxLQUFLLENBQUM4QyxXQUFXLEVBQUU7WUFDbEI1QixRQUFRLENBQUNsQixLQUFLLENBQUM4QyxXQUFXLENBQUNILFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNqRCxDQUFDLE1BQU07WUFDSHpCLFFBQVEsQ0FBQ3lCLFVBQVUsQ0FBQztVQUN4QjtVQUVBdEIsUUFBUSxDQUFDb0IsT0FBTyxHQUFHRSxVQUFVO1FBQ2pDO01BQ0osQ0FBQyxNQUFNO1FBQ0gsSUFBRzNDLEtBQUssQ0FBQzhDLFdBQVcsRUFBRTtVQUNsQjVCLFFBQVEsQ0FBQ2xCLEtBQUssQ0FBQzhDLFdBQVcsQ0FBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsTUFBTTtVQUNIekIsUUFBUSxDQUFDeUIsVUFBVSxDQUFDO1FBQ3hCO1FBRUF0QixRQUFRLENBQUNvQixPQUFPLEdBQUdFLFVBQVU7TUFDakM7SUFDSjtFQUNKO0VBRUF0QyxjQUFLLENBQUNtQyxTQUFTLENBQUMsTUFBTTtJQUNsQkUsSUFBSSxDQUFDLENBQUM7RUFDVixDQUFDLEVBQUUsQ0FBQ2pDLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQzs7RUFFaEM7RUFDQU4sY0FBSyxDQUFDbUMsU0FBUyxDQUFDLE1BQU07SUFDbEIsSUFBSSxDQUFDckIsY0FBSyxDQUFDQyxNQUFNLENBQUNMLE1BQU0sQ0FBQyxJQUFJcUIsZ0JBQWdCLENBQUNLLE9BQU8sS0FBSyxJQUFJLEVBQUU7TUFDNUR6QyxLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUNQQyxjQUFjLENBQUNqQyxNQUFNLENBQUNrQyxXQUFXLElBQUlsQyxNQUFNLENBQUM4QixFQUFFLEVBQUVLLFlBQVksQ0FBQ2xELEtBQUssQ0FBQ21ELE1BQU0sRUFBRWxDLEtBQUssQ0FBQyxDQUFDO0lBQzNGO0lBRUFtQixnQkFBZ0IsQ0FBQ0ssT0FBTyxHQUFHLElBQUk7RUFDbkMsQ0FBQyxFQUFFLENBQUNiLFFBQVEsQ0FBQyxDQUFDO0VBRWQsTUFBTXNCLFlBQVksR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxZQUFZLEtBQUs7SUFDM0MsSUFBR3JDLE1BQU0sRUFBRTtNQUNQc0MsT0FBTyxDQUFDQyxHQUFHLENBQ1AsdUNBQXVDLEVBQUV2QyxNQUFNLENBQUM4QixFQUFFLEVBQ2xELFdBQVcsRUFBRWpCLFFBQVEsRUFDckIsVUFBVSxFQUFFMkIsMkJBQWtCLENBQUNDLG9CQUFvQixDQUFDLENBQUMsRUFDckQsZUFBZSxFQUFFSixZQUNyQixDQUFDO01BRUQsSUFBSUssSUFBSSxHQUFHekQsS0FBSyxDQUFDK0MsSUFBSSxDQUFDLENBQUMsQ0FDbEJXLFlBQVksQ0FBQzNDLE1BQU0sQ0FBQ2tDLFdBQVcsSUFBSWxDLE1BQU0sQ0FBQzhCLEVBQUUsQ0FBQztNQUNsRCxJQUFJYyxNQUFNLEdBQUc7UUFBQ3BCLEtBQUssRUFBRTtNQUFJLENBQUM7TUFDMUIsSUFBSSxDQUFDcEIsY0FBSyxDQUFDQyxNQUFNLENBQUNMLE1BQU0sQ0FBQzZDLFNBQVMsQ0FBQyxJQUFJLENBQUN6QyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDNkMsU0FBUyxDQUFDQyxNQUFNLENBQUMsRUFBRTtRQUMzRUYsTUFBTSxHQUFHRyxrQkFBUyxDQUFDQyxtQkFBbUIsSUFBQUMsTUFBQSxDQUFJakQsTUFBTSxDQUFDOEIsRUFBRSxnQkFBYTlCLE1BQU0sQ0FBQzZDLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDO1FBQ3hGLElBQUksQ0FBQ0YsTUFBTSxDQUFDcEIsS0FBSyxFQUFFO1VBQ2ZvQixNQUFNLENBQUNNLE9BQU8sR0FBR04sTUFBTSxDQUFDTSxPQUFPLEdBQUdOLE1BQU0sQ0FBQ00sT0FBTyxHQUFHbEQsTUFBTSxDQUFDNkMsU0FBUyxDQUFDSyxPQUFPO1FBQy9FO01BQ0o7TUFFQSxJQUFJTixNQUFNLENBQUNwQixLQUFLLEVBQUU7UUFDZG9CLE1BQU0sR0FBR3hDLGNBQUssQ0FBQytDLGFBQWEsQ0FBQ1QsSUFBSSxDQUFDOUMsYUFBYSxFQUFFaUIsUUFBUSxFQUNyRDZCLElBQUksQ0FBQ2hELFdBQVcsRUFBRTJDLFlBQVksRUFBRXJDLE1BQU0sQ0FBQzZDLFNBQVMsQ0FBQztNQUN6RDtNQUVBUCxPQUFPLENBQUNDLEdBQUcsQ0FDUCx1Q0FBdUMsRUFBRXZDLE1BQU0sQ0FBQzhCLEVBQUUsRUFDbEQsZUFBZSxFQUFFYyxNQUFNLENBQUNwQixLQUFLLEVBQzdCLGlCQUFpQixFQUFFb0IsTUFBTSxDQUFDTSxPQUFPLEVBQ2pDLHFCQUFxQixFQUFFTixNQUFNLENBQUNRLFdBQ2xDLENBQUM7TUFFRDNELGVBQWUsQ0FBQytDLDJCQUFrQixDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUlHLE1BQU0sQ0FBQ1EsV0FBVyxHQUFHUixNQUFNLENBQUNNLE9BQU8sR0FBRyxFQUFFLENBQUM7TUFDdEc3RCxXQUFXLENBQUMsQ0FBQ3VELE1BQU0sQ0FBQ3BCLEtBQUssS0FBS2dCLDJCQUFrQixDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUlHLE1BQU0sQ0FBQ1EsV0FBVyxDQUFDLENBQUM7TUFDL0Y1QixLQUFLLENBQUNFLE9BQU8sR0FBR2tCLE1BQU0sQ0FBQ3BCLEtBQUssS0FBS2dCLDJCQUFrQixDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUlHLE1BQU0sQ0FBQ1EsV0FBVyxDQUFDO01BRWpHLElBQUlaLDJCQUFrQixDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDM0N4RCxLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUNQcUIsYUFBYSxDQUFDckQsTUFBTSxDQUFDOEIsRUFBRSxFQUFFLE9BQU9jLE1BQU0sQ0FBQ00sT0FBTyxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQUdOLE1BQU0sQ0FBQ00sT0FBTyxDQUFDO01BQ2hHO01BRUEsT0FBT04sTUFBTSxDQUFDcEIsS0FBSztJQUN2QjtJQUVBLE9BQU8sS0FBSztFQUNoQixDQUFDO0VBRURsQyxjQUFLLENBQUNtQyxTQUFTLENBQUMsTUFBTTtJQUNsQnhDLEtBQUssQ0FBQ3FFLE1BQU0sQ0FBQ0MsR0FBRyxHQUFHQSxHQUFHLENBQUMsQ0FBQztFQUM1QixDQUFDLENBQUM7RUFFRmpFLGNBQUssQ0FBQ21DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUlyQixjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDLEVBQUU7TUFDdEIsSUFBSXdELFlBQVksR0FBR3BELGNBQUssQ0FBQ3FELFdBQVcsQ0FBQ3hFLEtBQUssQ0FBQ2UsTUFBTSxFQUFFZixLQUFLLENBQUN5RSxNQUFNLENBQUM7TUFDaEVDLG1CQUFZLENBQUNDLGdCQUFnQixDQUFDSixZQUFZLENBQUNLLG1CQUFtQixFQUFFNUUsS0FBSyxDQUFDcUUsTUFBTSxFQUFFckUsS0FBSyxDQUFDeUUsTUFBTSxDQUFDO01BQzNGQyxtQkFBWSxDQUFDRyxzQkFBc0IsQ0FBQzdFLEtBQUssQ0FBQ3lFLE1BQU0sRUFBRUYsWUFBWSxDQUFDO01BQy9EdkQsU0FBUyxDQUFDdUQsWUFBWSxDQUFDO01BQ3ZCNUMsVUFBVSxDQUFDUixjQUFLLENBQUMyRCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDN0MsT0FBTyxFQUFFNkMsWUFBWSxDQUFDMUIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hGcEIsV0FBVyxDQUFDTixjQUFLLENBQUMyRCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDL0MsUUFBUSxFQUFFK0MsWUFBWSxDQUFDMUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BRTNGLElBQUlrQyxLQUFLLEdBQUcsSUFBSUMsY0FBSyxDQUFDaEYsS0FBSyxDQUFDcUUsTUFBTSxFQUFFckUsS0FBSyxDQUFDeUUsTUFBTSxFQUFFLElBQUksQ0FBQztNQUN2REMsbUJBQVksQ0FBQ08sU0FBUyxDQUFDQyxrQkFBUyxDQUFDQyxjQUFjLEVBQUVKLEtBQUssQ0FBQztJQUMzRDtFQUNKLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTjFFLGNBQUssQ0FBQ21DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUksQ0FBQ3JCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDbUQsTUFBTSxDQUFDLElBQUksQ0FBQ2hDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDTCxNQUFNLENBQUMsRUFBRTtNQUN0RCxJQUFJMEMsSUFBSSxHQUFHekQsS0FBSyxDQUFDK0MsSUFBSSxDQUFDLENBQUMsQ0FDbEJXLFlBQVksQ0FBQzNDLE1BQU0sQ0FBQ2tDLFdBQVcsSUFBSWxDLE1BQU0sQ0FBQzhCLEVBQUUsRUFBRTdDLEtBQUssQ0FBQ21ELE1BQU0sQ0FBQztNQUNoRSxJQUFJLENBQUNoQyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3FDLElBQUksQ0FBQ2hELFdBQVcsQ0FBQyxFQUFFO1FBQ2pDQyxjQUFjLENBQUMrQyxJQUFJLENBQUNoRCxXQUFXLENBQUM7UUFDaENHLGdCQUFnQixDQUFDNkMsSUFBSSxDQUFDOUMsYUFBYSxDQUFDO01BQ3hDO01BRUEsSUFBSSxDQUFDUSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ2UsTUFBTSxDQUFDRSxLQUFLLENBQUMsRUFBRTtRQUNuQyxJQUFJbUUsV0FBVyxHQUFHN0IsMkJBQWtCLENBQUM4QixZQUFZLENBQUNyRixLQUFLLENBQUNlLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLEdBQ2pFNkMsa0JBQVMsQ0FBQ3dCLGFBQWEsQ0FBQ3RGLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsRUFBRSxDQUFDMEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUV2RixLQUFLLENBQUNlLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLEdBQ3hGakIsS0FBSyxDQUFDZSxNQUFNLENBQUNFLEtBQUs7UUFFdEIsSUFBSSxDQUFDRSxjQUFLLENBQUNDLE1BQU0sQ0FBQ2dFLFdBQVcsQ0FBQyxFQUFFO1VBQzVCLElBQUlJLEdBQUcsR0FBR0osV0FBVyxDQUFDSyxZQUFZLEtBQUssWUFBWSxHQUFHTCxXQUFXLENBQUNuRSxLQUFLLEdBQUdtRSxXQUFXO1VBQ3JGM0UsV0FBVyxDQUFDRSxhQUFhLENBQUMsR0FBRzZFLEdBQUc7VUFDaEN0RSxRQUFRLENBQUNzRSxHQUFHLENBQUM7VUFDYm5FLFFBQVEsQ0FBQ29CLE9BQU8sR0FBRytDLEdBQUc7VUFDdEJ4RixLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUNQMkMsWUFBWSxDQUFDM0UsTUFBTSxDQUFDa0MsV0FBVyxJQUFJbEMsTUFBTSxDQUFDOEIsRUFBRSxFQUFFMkMsR0FBRyxDQUFDO1FBQzNEO01BQ0o7SUFDSjtFQUNKLENBQUMsRUFBRSxDQUFDeEYsS0FBSyxDQUFDbUQsTUFBTSxFQUFFcEMsTUFBTSxDQUFDLENBQUM7RUFFMUJWLGNBQUssQ0FBQ21DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUkzQixVQUFVLENBQUM0QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUN0QixjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDLEVBQUU7TUFDdEQsSUFBSTRFLEtBQUssR0FBRzNGLEtBQUssQ0FBQytDLElBQUksQ0FBQyxDQUFDLENBQ25CNkMsUUFBUSxDQUFDN0UsTUFBTSxDQUFDOEIsRUFBRSxJQUFJOUIsTUFBTSxDQUFDa0MsV0FBVyxFQUFFakQsS0FBSyxDQUFDcUUsTUFBTSxFQUFFckUsS0FBSyxDQUFDNkYsUUFBUSxFQUFFN0YsS0FBSyxDQUFDOEYsZUFBZSxDQUFDO01BQ25HLElBQUksQ0FBQzNFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdUUsS0FBSyxDQUFDLElBQUksQ0FBQ3hFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdUUsS0FBSyxDQUFDSSxLQUFLLENBQUMsRUFBRTtRQUNwRCxJQUFJSixLQUFLLENBQUNJLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN4QjVGLFdBQVcsQ0FBQyxJQUFJLENBQUM7VUFDakJJLGVBQWUsQ0FBQ21GLEtBQUssQ0FBQ0ksS0FBSyxDQUFDO1FBQ2hDO01BQ0o7SUFDSjtFQUNKLENBQUMsQ0FBQztFQUVGMUYsY0FBSyxDQUFDbUMsU0FBUyxDQUFDLE1BQU07SUFDbEIsT0FBTyxNQUFNO01BQ1QsSUFBSSxDQUFDckIsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDN0IyQixtQkFBWSxDQUFDdUIsNEJBQTRCLENBQUNqRyxLQUFLLENBQUNxRSxNQUFNLENBQUM7UUFDdkRyRSxLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUNQbUQsV0FBVyxDQUFDbEcsS0FBSyxDQUFDZSxNQUFNLENBQUNrQyxXQUFXLElBQUlqRCxLQUFLLENBQUNlLE1BQU0sQ0FBQzhCLEVBQUUsQ0FBQztNQUNqRTtJQUNKLENBQUM7RUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTXNELGlCQUFpQixHQUFJQyxRQUFRLElBQUs7SUFDcEMvRCxpQkFBaUIsQ0FBQ0ksT0FBTyxHQUFHLElBQUk7SUFDaEMsSUFBSTRELFlBQVksR0FBR0QsUUFBUSxLQUFLL0UsUUFBUSxDQUFDb0IsT0FBTztJQUVoRCxJQUFJLENBQUN0QixjQUFLLENBQUNDLE1BQU0sQ0FBQ2dGLFFBQVEsQ0FBQyxJQUFJLENBQUNqRixjQUFLLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDb0IsT0FBTyxDQUFDLEVBQUU7TUFDNUQsSUFBSXpDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDNkIsU0FBUyxLQUFLLFFBQVEsSUFBSTVDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDNkIsU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUM1RXlELFlBQVksR0FBR0QsUUFBUSxDQUFDdkQsRUFBRSxLQUFLeEIsUUFBUSxDQUFDb0IsT0FBTyxDQUFDSSxFQUFFO01BQ3RELENBQUMsTUFBTSxJQUFJN0MsS0FBSyxDQUFDZSxNQUFNLENBQUM2QixTQUFTLEtBQUssTUFBTSxJQUFJNUMsS0FBSyxDQUFDZSxNQUFNLENBQUM2QixTQUFTLEtBQUssTUFBTSxFQUFFO1FBQy9FeUQsWUFBWSxHQUFHRCxRQUFRLEtBQUsvRSxRQUFRLENBQUNvQixPQUFPO01BQ2hELENBQUMsTUFBTTtRQUNINEQsWUFBWSxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2xGLFFBQVEsQ0FBQ29CLE9BQU8sQ0FBQyxLQUFLNkQsSUFBSSxDQUFDQyxTQUFTLENBQUNILFFBQVEsQ0FBQztNQUNoRjtJQUNKO0lBRUEsSUFBSXBHLEtBQUssQ0FBQ2UsTUFBTSxDQUFDNkIsU0FBUyxLQUFLLE1BQU0sSUFBSW5DLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLEVBQUU7TUFDakVGLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLENBQUM2RixNQUFNLENBQUMsQ0FBQyxFQUFFL0YsV0FBVyxDQUFDRSxhQUFhLENBQUMsQ0FBQ3FGLE1BQU0sQ0FBQztNQUV2RSxJQUFJSSxRQUFRLEVBQUU7UUFDVixLQUFLLE1BQU1LLGVBQWUsSUFBSUwsUUFBUSxFQUFFO1VBQ3BDM0YsV0FBVyxDQUFDRSxhQUFhLENBQUMsQ0FBQytGLElBQUksQ0FBQ0QsZUFBZSxDQUFDO1FBQ3BEO01BQ0o7TUFFQSxJQUFJNUQsRUFBRSxHQUFHN0MsS0FBSyxDQUFDZSxNQUFNLENBQUNrQyxXQUFXLEdBQUdqRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ2tDLFdBQVcsR0FBR2pELEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsRUFBRTtNQUM5RTdDLEtBQUssQ0FBQytDLElBQUksQ0FBQyxDQUFDLENBQ1AyQyxZQUFZLENBQUMsQ0FBQ3ZFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDZSxNQUFNLENBQUNrQyxXQUFXLENBQUMsR0FBR2pELEtBQUssQ0FBQ2UsTUFBTSxDQUFDa0MsV0FBVyxHQUFHSixFQUFFLEVBQUV1RCxRQUFRLENBQUM7SUFDeEc7SUFFQSxJQUFJQyxZQUFZLEVBQUU7TUFDZCxJQUFJeEQsRUFBRSxHQUFHN0MsS0FBSyxDQUFDZSxNQUFNLENBQUNrQyxXQUFXLEdBQUdqRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ2tDLFdBQVcsR0FBR2pELEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsRUFBRTtNQUM5RTtNQUNBLElBQUk3QyxLQUFLLENBQUNlLE1BQU0sQ0FBQzZCLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDckMsSUFBSStELGdCQUFnQixHQUFHM0csS0FBSyxDQUFDK0MsSUFBSSxDQUFDLENBQUMsQ0FDOUI2RCxzQkFBc0IsQ0FBQy9ELEVBQUUsRUFBRXZCLGFBQWEsRUFBRThFLFFBQVEsQ0FBQztRQUN4RGxGLFFBQVEsQ0FBQ3lGLGdCQUFnQixDQUFDO1FBQzFCdEYsUUFBUSxDQUFDb0IsT0FBTyxHQUFHa0UsZ0JBQWdCO1FBQ25DLEtBQUssTUFBTUUsWUFBWSxJQUFJdkYsYUFBYSxFQUFFO1VBQ3RDLElBQUl1RixZQUFZLENBQUNoRSxFQUFFLEtBQUt1RCxRQUFRLEVBQUU7WUFDOUJBLFFBQVEsR0FBR1MsWUFBWTtZQUN2QjtVQUNKO1FBQ0o7TUFDSixDQUFDLE1BQU07UUFDSDNGLFFBQVEsQ0FBQ2tGLFFBQVEsQ0FBQztRQUNsQi9FLFFBQVEsQ0FBQ29CLE9BQU8sR0FBRzJELFFBQVE7UUFDM0JwRyxLQUFLLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUNQMkMsWUFBWSxDQUFDLENBQUN2RSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ2UsTUFBTSxDQUFDa0MsV0FBVyxDQUFDLEdBQUdqRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ2tDLFdBQVcsR0FBR0osRUFBRSxFQUFFdUQsUUFBUSxDQUFDO01BQ3hHO01BRUEsSUFBSSxDQUFDakYsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUM4RyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3pDOUcsS0FBSyxDQUFDOEcsa0JBQWtCLENBQUNWLFFBQVEsQ0FBQztNQUN0QztNQUVBLElBQUlyQixLQUFLLEdBQUcsSUFBSUMsY0FBSyxDQUFDaEYsS0FBSyxDQUFDcUUsTUFBTSxFQUFFckUsS0FBSyxDQUFDeUUsTUFBTSxFQUFFMkIsUUFBUSxDQUFDO01BQzNEMUIsbUJBQVksQ0FBQ08sU0FBUyxDQUFDQyxrQkFBUyxDQUFDNkIsWUFBWSxFQUFFaEMsS0FBSyxDQUFDO0lBQ3pEO0VBQ0osQ0FBQztFQUVELE1BQU1ULEdBQUcsR0FBR0EsQ0FBQSxLQUFNO0lBQ2QsT0FBTztNQUNIMEMsUUFBUSxFQUFFQSxDQUFDN0QsTUFBTSxFQUFFQyxZQUFZLEtBQUs7UUFDaEMsT0FBT0YsWUFBWSxDQUFDQyxNQUFNLEVBQUVDLFlBQVksQ0FBQztNQUM3QyxDQUFDO01BQ0Q2RCxVQUFVLEVBQUVBLENBQUNoRyxLQUFLLEVBQUVpRyxPQUFPLEtBQUs7UUFDNUIsSUFBSSxDQUFDL0YsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUM4QyxXQUFXLENBQUMsRUFBRTtVQUNsQyxPQUFPOUMsS0FBSyxDQUFDOEMsV0FBVyxDQUFDN0IsS0FBSyxFQUFFaUcsT0FBTyxDQUFDO1FBQzVDO1FBRUEsT0FBT2pHLEtBQUs7TUFDaEIsQ0FBQztNQUNELElBQUlzQixLQUFLQSxDQUFBLEVBQUc7UUFDUixPQUFPQSxLQUFLLENBQUNFLE9BQU87TUFDeEIsQ0FBQztNQUNELElBQUlJLEVBQUVBLENBQUEsRUFBRztRQUNMLE9BQU83QyxLQUFLLENBQUNlLE1BQU0sQ0FBQzhCLEVBQUU7TUFDMUIsQ0FBQztNQUNELElBQUlzRSxJQUFJQSxDQUFBLEVBQUc7UUFDUCxPQUFPbkgsS0FBSyxDQUFDb0gsV0FBVyxHQUFHcEgsS0FBSyxDQUFDb0gsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJO01BQ3pELENBQUM7TUFDREMsa0JBQWtCLEVBQUVBLENBQUEsS0FBTTtRQUN0QixPQUFPLENBQUNsRyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDNkMsU0FBUyxDQUFDLEdBQUc3QyxNQUFNLENBQUM2QyxTQUFTLENBQUMwRCxLQUFLLEdBQUcsSUFBSTtNQUMxRSxDQUFDO01BQ0RDLEtBQUssRUFBRUEsQ0FBQSxLQUFNO1FBQ1RwQixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDaEYsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUN3SCxZQUFZLENBQUMsRUFBRTtVQUNuQ3hILEtBQUssQ0FBQ3dILFlBQVksQ0FBQyxDQUFDO1FBQ3hCO01BQ0osQ0FBQztNQUNEQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNaLElBQUluRixHQUFHLENBQUNHLE9BQU8sRUFBRTtVQUNiSCxHQUFHLENBQUNHLE9BQU8sQ0FBQ2lGLGNBQWMsQ0FBQztZQUN2QkMsUUFBUSxFQUFFLFFBQVE7WUFDbEJDLEtBQUssRUFBRTtVQUNYLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQztNQUNELElBQUkzRyxLQUFLQSxDQUFBLEVBQUc7UUFDUixJQUFJLENBQUNFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDWCxXQUFXLENBQUMsSUFBSSxDQUFDVSxjQUFLLENBQUNDLE1BQU0sQ0FBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQ1EsY0FBSyxDQUFDQyxNQUFNLENBQUNYLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsRUFBRTtVQUN6RyxPQUFPLENBQUNRLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDOEMsV0FBVyxDQUFDLEdBQ25DOUMsS0FBSyxDQUFDOEMsV0FBVyxDQUFDckMsV0FBVyxDQUFDRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBR0YsV0FBVyxDQUFDRSxhQUFhLENBQUM7UUFDekY7UUFFQSxJQUFJTSxLQUFLLEVBQUU7VUFDUCxJQUFJUixXQUFXLEVBQUU7WUFDYkEsV0FBVyxDQUFDRSxhQUFhLENBQUMsR0FBR00sS0FBSztVQUN0QztVQUVBLE9BQU9qQixLQUFLLENBQUM4QyxXQUFXLEdBQUc5QyxLQUFLLENBQUM4QyxXQUFXLENBQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUdBLEtBQUs7UUFDdEU7UUFFQSxPQUFPLElBQUk7TUFDZixDQUFDO01BQ0QsSUFBSUEsS0FBS0EsQ0FBQ3VFLEdBQUcsRUFBRTtRQUNYVyxpQkFBaUIsQ0FBQ1gsR0FBRyxDQUFDO1FBRXRCLElBQUksQ0FBQ3JFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDNkgsbUJBQW1CLENBQUMsRUFBRTtVQUMxQzdILEtBQUssQ0FBQzZILG1CQUFtQixDQUFDckMsR0FBRyxDQUFDO1FBQ2xDO01BQ0osQ0FBQztNQUNELElBQUloRSxRQUFRQSxDQUFDQSxRQUFRLEVBQUU7UUFDbkJDLFdBQVcsQ0FBQ0QsUUFBUSxDQUFDO01BQ3pCLENBQUM7TUFDRCxJQUFJRSxPQUFPQSxDQUFDQSxPQUFPLEVBQUU7UUFDakJDLFVBQVUsQ0FBQ0QsT0FBTyxDQUFDO01BQ3ZCLENBQUM7TUFDRG9HLGtCQUFrQkEsQ0FBQSxFQUFHO1FBQ2pCakgsVUFBVSxDQUFDNEIsT0FBTyxHQUFHLEtBQUs7TUFDOUIsQ0FBQztNQUNEc0YsT0FBT0EsQ0FBQSxFQUFHO1FBQ04sSUFBSXhELFlBQVksR0FBR3BELGNBQUssQ0FBQ3FELFdBQVcsQ0FBQ3hFLEtBQUssQ0FBQ2UsTUFBTSxFQUFFZixLQUFLLENBQUN5RSxNQUFNLENBQUM7UUFDaEU5QyxVQUFVLENBQUNSLGNBQUssQ0FBQzJELHlCQUF5QixDQUFDUCxZQUFZLENBQUM3QyxPQUFPLEVBQUU2QyxZQUFZLENBQUMxQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEZwQixXQUFXLENBQUNOLGNBQUssQ0FBQzJELHlCQUF5QixDQUFDUCxZQUFZLENBQUMvQyxRQUFRLEVBQUUrQyxZQUFZLENBQUMxQixFQUFFLENBQUMsQ0FBQztRQUNwRixJQUFJbUYsY0FBYyxHQUFHLENBQUM3RyxjQUFLLENBQUNDLE1BQU0sQ0FBQ21ELFlBQVksQ0FBQ1gsU0FBUyxDQUFDLEdBQ3RELENBQUN6QyxjQUFLLENBQUMyRCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDWCxTQUFTLENBQUNxRSxRQUFRLEVBQUUxRCxZQUFZLENBQUMxQixFQUFFLEVBQUUsSUFBSSxDQUFDLElBQ3JGMUIsY0FBSyxDQUFDMkQseUJBQXlCLENBQUNQLFlBQVksQ0FBQ1gsU0FBUyxDQUFDaEMsUUFBUSxFQUFFMkMsWUFBWSxDQUFDMUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUs7UUFDdkdULGdCQUFnQixDQUFDSyxPQUFPLEdBQUdiLFFBQVEsS0FBSyxJQUFJLElBQUlBLFFBQVEsS0FBS29HLGNBQWMsSUFBSW5ILFVBQVUsQ0FBQzRCLE9BQU8sS0FBSyxLQUFLO1FBQzNHWixXQUFXLENBQUNtRyxjQUFjLENBQUM7TUFDL0IsQ0FBQztNQUNELElBQUlwRyxRQUFRQSxDQUFBLEVBQUc7UUFDWCxPQUFPQSxRQUFRO01BQ25CLENBQUM7TUFDRCxJQUFJQSxRQUFRQSxDQUFDc0csVUFBVSxFQUFFO1FBQ3JCckcsV0FBVyxDQUFDcUcsVUFBVSxDQUFDO01BQzNCLENBQUM7TUFDRCxJQUFJcEcsT0FBT0EsQ0FBQ0EsT0FBTyxFQUFFO1FBQ2pCQyxVQUFVLENBQUNELE9BQU8sQ0FBQztNQUN2QixDQUFDO01BQ0QsSUFBSUUsT0FBT0EsQ0FBQ0EsT0FBTyxFQUFFO1FBQ2pCQyxVQUFVLENBQUNELE9BQU8sQ0FBQztNQUN2QixDQUFDO01BQ0QsSUFBSVYsYUFBYUEsQ0FBQ0EsYUFBYSxFQUFFO1FBQzdCQyxnQkFBZ0IsQ0FBQ0QsYUFBYSxDQUFDO01BQ25DLENBQUM7TUFDRDZHLEtBQUtBLENBQUEsRUFBRztRQUNKaEcsY0FBYyxDQUFDLENBQUNELFdBQVcsQ0FBQztNQUNoQyxDQUFDO01BQ0RrRyxnQkFBZ0JBLENBQUNDLE1BQU0sRUFBbUI7UUFBQSxJQUFqQnJCLFFBQVEsR0FBQXNCLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsSUFBSTtRQUNwQ2xHLGdCQUFnQixDQUFDSyxPQUFPLEdBQUd1RSxRQUFRO1FBQ25DbkYsV0FBVyxDQUFDd0csTUFBTSxDQUFDO01BQ3ZCLENBQUM7TUFDREcsV0FBVyxFQUFFQSxDQUFBLEtBQU07UUFDZixJQUFJLENBQUNySCxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ3dJLFdBQVcsQ0FBQyxFQUFFO1VBQ2xDLE9BQU94SSxLQUFLLENBQUN3SSxXQUFXLENBQUMsQ0FBQztRQUM5QjtRQUVBLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDREMsUUFBUUEsQ0FBQSxFQUFHO1FBQ1AsSUFBSXpJLEtBQUssQ0FBQzBJLGVBQWUsRUFBRTtVQUN2QjFJLEtBQUssQ0FBQzBJLGVBQWUsQ0FBQyxDQUFDO1FBQzNCO01BQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQztFQUVELE9BQU8zSCxNQUFNLGdCQUNUNUIsTUFBQSxDQUFBVyxPQUFBLENBQUE2SSxhQUFBO0lBQUtyRyxHQUFHLEVBQUVBLEdBQUk7SUFBQ3NHLFNBQVMsRUFBQyxTQUFTO0lBQUNDLEdBQUcsRUFBRTlILE1BQU0sQ0FBQzhCLEVBQUc7SUFBQ2lHLEtBQUssRUFBRTtNQUN0REMsU0FBUyxFQUFFLE1BQU07TUFDakJDLFVBQVUsRUFBRSxDQUFDN0gsY0FBSyxDQUFDQyxNQUFNLEVBQUFuQixxQkFBQSxHQUFDRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ2tJLFVBQVUsY0FBQWhKLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUF2QkEscUJBQUEsQ0FBeUI2SSxLQUFLLGNBQUE3SSxxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDK0ksVUFBVSxDQUFDLElBQUE5SSxzQkFBQSxHQUFHRixLQUFLLENBQUNlLE1BQU0sQ0FBQ2tJLFVBQVUsY0FBQS9JLHNCQUFBLGdCQUFBQSxzQkFBQSxHQUF2QkEsc0JBQUEsQ0FBeUI0SSxLQUFLLGNBQUE1SSxzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDOEksVUFBVSxHQUM5R2hKLEtBQUssQ0FBQ2UsTUFBTSxDQUFDbUksS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSztNQUN4Q0MsT0FBTyxFQUFFLENBQUN6SCxPQUFPLElBQUlQLGNBQUssQ0FBQ2lJLHFCQUFxQixDQUFDckksTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHO0lBQ2xHO0VBQUUsZ0JBQ0Y1QixNQUFBLENBQUFXLE9BQUEsQ0FBQTZJLGFBQUEsZUFDQzNJLEtBQUssQ0FBQ3FKLFFBQVEsQ0FBQztJQUNadkgsT0FBTyxFQUFFQSxPQUFPO0lBQ2hCRSxPQUFPLEVBQUVBLE9BQU87SUFDaEJKLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkosUUFBUSxFQUFFQSxRQUFRO0lBQ2xCZixXQUFXLEVBQUVBLFdBQVc7SUFDeEJFLGFBQWEsRUFBRUEsYUFBYTtJQUM1QndGLGlCQUFpQixFQUFFQSxpQkFBaUI7SUFDcENqRixRQUFRLEVBQUVBLFFBQVE7SUFDbEJLLGdCQUFnQixFQUFFQSxnQkFBZ0I7SUFDbENELGFBQWEsRUFBRUEsYUFBYTtJQUM1QmEsY0FBYyxFQUFFQSxjQUFjO0lBQzlCRCxXQUFXLEVBQUVBLFdBQVc7SUFDeEJqQixLQUFLLEVBQUVBLEtBQUs7SUFDWmQsUUFBUSxFQUFFQSxRQUFRO0lBQ2xCK0MsWUFBWSxFQUFFQSxZQUFZO0lBQzFCM0MsWUFBWSxFQUFFQSxZQUFZO0lBQzFCTSxVQUFVLEVBQUVBO0VBQ2hCLENBQUMsQ0FDSyxDQUNELENBQUMsR0FDSixJQUFJO0FBQ2QsQ0FBQztBQUFDeUksT0FBQSxDQUFBdkosU0FBQSxHQUFBQSxTQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwibGFzdFZhbGlkYXRpb24iLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiYmluZCIsImJvdW5kVmFsdWUiLCJmaWVsZFR5cGUiLCJpZCIsInZhbHVlUGFyc2VyIiwiZm9ybSIsInZhbGlkYXRlUGFyZW50IiwiZGF0YUJpbmRpbmciLCJkb1ZhbGlkYXRpb24iLCJ2YWx1ZXMiLCJjdXJyZW50VmFsdWUiLCJtYXJrZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJsYXN0IiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVmFsaWRpdHkiLCJvblZhbGlkaXR5Q2hhbmdlIiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwicGFyc2VDb25maWciLCJ2aWV3SWQiLCJldmVudE1hbmFnZXIiLCJhZGRTdWJzY3JpcHRpb25zIiwiZXZlbnRIYW5kbGluZ0NvbmZpZyIsImFkZFN5c3RlbVN1YnNjcmlwdGlvbnMiLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiZXZlbnQiLCJFdmVudCIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwic2NyaXB0VmFsdWUiLCJpc0V4cHJlc3Npb24iLCJleGVjdXRlU2NyaXB0IiwicmVwbGFjZSIsInZhbCIsImluc3RhbmNlVHlwZSIsImhhbmRsZUNoYW5nZSIsInByZXZpb3VzbHlFbmFibGVkIiwiZW5hYmxlRm9ybU1hcmtlcnMiLCJjdiIsImZpZWxkIiwiYWRkRmllbGQiLCJwYXJlbnRJZCIsImJpbmRWYWx1ZVRvRm9ybSIsImVycm9yIiwibGVuZ3RoIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInJlbW92ZUZpZWxkIiwiaGFuZGxlVmFsdWVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlQ2hhbmdlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzcGxpY2UiLCJuZXdWYWx1ZUVsZW1lbnQiLCJwdXNoIiwic2VsZWN0SXRlbUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJzZWxlY3RPcHRpb24iLCJ2YWx1ZUNoYW5nZUhhbmRsZXIiLCJWQUxVRV9DSEFOR0UiLCJ2YWxpZGF0ZSIsInBhcnNlVmFsdWUiLCJpbmJvdW5kIiwicm93cyIsInJvd3NIYW5kbGVyIiwiZ2V0VmFsaWRhdGlvbkdyb3VwIiwiZ3JvdXAiLCJjbGVhciIsImNsZWFySGFuZGxlciIsInNjcm9sbFRvIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImJsb2NrIiwidmFsdWVDaGFuZ2VDYWxsYmFjayIsImhhbmRsZUxvYWRDb21wbGV0ZSIsInJlZnJlc2giLCJyZXF1aXJlZE5ld1ZhbCIsIm51bGxhYmxlIiwiaXNSZXF1aXJlZCIsInJlc2V0Iiwic2V0RmllbGRSZXF1aXJlZCIsIm5ld1ZhbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImdldENoaWxkcmVuIiwibG9hZERhdGEiLCJsb2FkRGF0YUhhbmRsZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwia2V5Iiwic3R5bGUiLCJ0ZXh0QWxpZ24iLCJtYXJnaW5MZWZ0IiwiYXR0cmlidXRlcyIsImluZGV4IiwiZGlzcGxheSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsImNoaWxkcmVuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Jhc2VGaWVsZC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRUeXBlJztcbmltcG9ydCBkeW5hbWljSlMgZnJvbSAnLi4vLi4vRHluYW1pY0pTJztcblxuZXhwb3J0IGNvbnN0IEJhc2VGaWVsZCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtlcnJvck1lc3NhZ2UsIHNldEVycm9yTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW3ZhbHVlT2JqZWN0LCBzZXRWYWx1ZU9iamVjdF0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3ZhbHVlUHJvcGVydHksIHNldFZhbHVlUHJvcGVydHldID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgLy8gVE9ETyA6IFJlcGxhY2UgdGhlIHN0YXRlIHZhbHVlIHdpdGggdGhlIHZhbHVlUmVmIGJlbG93LiBUaGUgc3RhdGUgdmFsdWUgaXMgb2NjYXRpb25hbHkgbm90IGF2YWlsYWJsZSBpbiB0aW1lIGZvciBldmVudCBzY3JpcHRzXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlKSA/IHByb3BzLnZhbHVlIDogbnVsbCk7XG4gICAgLy8gVE9ETyA6IFJlcGxhY2UgdGhlIHN0YXRlIHZhbHVlIHdpdGggdGhpcyByZWYgZm9yIHRoZSByZWFzb24gbWVuc2lvbmVkIGFib3ZlXG4gICAgY29uc3QgdmFsdWVSZWYgPSBSZWFjdC51c2VSZWYoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZSkgPyBwcm9wcy52YWx1ZSA6IG51bGwpO1xuICAgIGNvbnN0IFtzZWxlY3RPcHRpb25zLCBzZXRTZWxlY3RPcHRpb25zXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZGlzYWJsZWQsIHNldERpc2FibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JlcXVpcmVkLCBzZXRSZXF1aXJlZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbWluRGF0ZSwgc2V0TWluRGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbWF4RGF0ZSwgc2V0TWF4RGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcmVzZXRTd2l0Y2gsIHNldFJlc2V0U3dpdGNoXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB2YWxpZGF0ZU9uQ2hhbmdlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlQm91bmQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCB2YWxpZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgLy8gTWVtbyBvZiB0aGUgbGFzdCAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgdHVwbGUgKyBpdHMgcmVzdWx0LnZhbGlkLlxuICAgIC8vIGRvVmFsaWRhdGlvbiBzaG9ydC1jaXJjdWl0cyB3aGVuIHRoZSBpbnB1dHMgYXJlIHVuY2hhbmdlZCBzbyByZXBlYXRlZCByZWFkc1xuICAgIC8vIG9mIEAje2Zvcm19LnZhbHVlICh3aGljaCBpdGVyYXRlcyBmaWVsZHMgYW5kIGNhbGxzIHZhbGlkYXRlIG9uIGVhY2ggaW5cbiAgICAvLyBGb3JtLmpzeCBnZXQgdmFsdWUoKSkgZG9uJ3Qga2VlcCBmaXJpbmcgc2V0RXJyb3JNZXNzYWdlL3NldEhhc0Vycm9yIGFuZFxuICAgIC8vIHJlLXJlbmRlci1sb29wIHRoZSB3aG9sZSBmb3JtLlxuICAgIGNvbnN0IGxhc3RWYWxpZGF0aW9uID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBiaW5kKCk7XG4gICAgfSwgW3ZhbHVlT2JqZWN0XSk7XG5cbiAgICBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgICBsZXQgYm91bmRWYWx1ZSA9IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICBpZiAoYm91bmRWYWx1ZSAmJiAhaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCkge1xuICAgICAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0xPT0tVUCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJvdW5kVmFsdWUgfHwgVXRpbHMuaXNOdWxsKGJvdW5kVmFsdWUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YWx1ZVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYm91bmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKHByb3BzLnZhbHVlUGFyc2VyKGJvdW5kVmFsdWUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV1dKTtcblxuICAgIC8vIENoYW5nZSB0aGUgcmVxdWlyZWQgdmFsdWUgYW5kIHJlLXZhbGlkYXRlIGZpZWxkIGlmIG5lY2Vzc2FyeVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbmZpZykgJiYgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAudmFsaWRhdGVQYXJlbnQoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgZG9WYWxpZGF0aW9uKHByb3BzLnZhbHVlcywgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IG51bGw7XG4gICAgfSwgW3JlcXVpcmVkXSk7XG5cbiAgICBjb25zdCBkb1ZhbGlkYXRpb24gPSAodmFsdWVzLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJzID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCk7XG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gbGFzdFZhbGlkYXRpb24uY3VycmVudDtcbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5jdXJyZW50VmFsdWUgPT09IGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICAgICYmIGxhc3QucmVxdWlyZWQgPT09IHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5tYXJrZXJzID09PSBtYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QudmFsaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlUGF0aChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7dmFsaWQ6IHRydWV9O1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29uZmlnLnZhbGlkYXRvcikgJiYgIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yLnNjcmlwdCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdE9iamVjdChgJHtjb25maWcuaWR9VmFsaWRhdG9yYCwgY29uZmlnLnZhbGlkYXRvci5zY3JpcHQpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gcmVzdWx0Lm1lc3NhZ2UgPyByZXN1bHQubWVzc2FnZSA6IGNvbmZpZy52YWxpZGF0b3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBVdGlscy52YWxpZGF0ZUZpZWxkKHBhdGgudmFsdWVQcm9wZXJ0eSwgcmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QsIGN1cnJlbnRWYWx1ZSwgY29uZmlnLnZhbGlkYXRvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShtYXJrZXJzIHx8IHJlc3VsdC5mb3JjZU1hcmtlciA/IHJlc3VsdC5tZXNzYWdlIDogJycpO1xuICAgICAgICAgICAgc2V0SGFzRXJyb3IoIXJlc3VsdC52YWxpZCAmJiAobWFya2VycyB8fCByZXN1bHQuZm9yY2VNYXJrZXIpKTtcbiAgICAgICAgICAgIHZhbGlkLmN1cnJlbnQgPSByZXN1bHQudmFsaWQgJiYgKG1hcmtlcnMgfHwgcmVzdWx0LmZvcmNlTWFya2VyKTtcblxuICAgICAgICAgICAgaWYgKG1hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLnNldEZpZWxkRXJyb3IoY29uZmlnLmlkLCB0eXBlb2YgcmVzdWx0Lm1lc3NhZ2UgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdFZhbGlkYXRpb24uY3VycmVudCA9IHsgY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycywgdmFsaWQ6IHJlc3VsdC52YWxpZCB9O1xuXG4gICAgICAgICAgICAvLyBQdWJsaXNoIHRvIHRoZSBmb3JtJ3MgdmFsaWRpdHkgcmVnaXN0ZXIuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGhcbiAgICAgICAgICAgIC8vIGZvciBcImlzIHRoaXMgZmllbGQgdmFsaWQ/XCIg4oCUIGZvcm0udmFsdWUgcmVhZHMgZnJvbSBoZXJlIHdpdGhvdXRcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgYmFjayBpbnRvIHRoZSBmaWVsZCAoa2lsbHMgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYWluKS5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZm9ybSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcHJvcHMuZm9ybSgpLnNldEZpZWxkVmFsaWRpdHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKCkuc2V0RmllbGRWYWxpZGl0eShjb25maWcuaWQgfHwgY29uZmlnLmRhdGFCaW5kaW5nLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiByZXN1bHQudmFsaWQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBmb3JjZU1hcmtlcjogcmVzdWx0LmZvcmNlTWFya2VyLFxuICAgICAgICAgICAgICAgICAgICBvblZhbGlkaXR5Q2hhbmdlOiAodmFsaWQsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIYXNFcnJvcighdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIHBhcnNlZENvbmZpZyk7XG4gICAgICAgICAgICBzZXRDb25maWcocGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkpO1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5nZXRWYWx1ZVBhdGgoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgcHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVPYmplY3QocGF0aC52YWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVQcm9wZXJ0eShwYXRoLnZhbHVlUHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihwcm9wcy5jb25maWcudmFsdWUpID9cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQocHJvcHMuY29uZmlnLmlkLnJlcGxhY2UoJy4nLCAnXycpICsgJ1ZhbHVlJywgcHJvcHMuY29uZmlnLnZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNjcmlwdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQsIHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZWxmLWFubm91bmNlOiB2YWxpZGF0ZSB0aGlzIGZpZWxkIGFnYWluc3QgY3VycmVudCBkYXRhIGFuZCBwdXNoXG4gICAgICAgICAgICAvLyB2ZXJkaWN0IHRvIHRoZSBmb3JtJ3MgdmFsaWRpdHkgcmVnaXN0ZXIgdmlhIHNldEZpZWxkVmFsaWRpdHkgKGluXG4gICAgICAgICAgICAvLyBkb1ZhbGlkYXRpb24pLiBNYXJrZXJzIGFyZSBzdXBwcmVzc2VkIGxvY2FsbHkgc28gaW5pdGlhbC1sb2FkXG4gICAgICAgICAgICAvLyB2YWxpZGF0aW9uIG5ldmVyIGZsYXNoZXMgZXJyb3IgVUkg4oCUIGV2ZW4gaWYgZ2xvYmFsIG1hcmtlcnMgYXJlXG4gICAgICAgICAgICAvLyBhbHJlYWR5IG9uIChlLmcuIGFzeW5jIGRhdGEgYXJyaXZpbmcgYWZ0ZXIgRm9ybSdzIENPTVBPTkVOVF9MT0FEXG4gICAgICAgICAgICAvLyBhbHJlYWR5IHJlLWVuYWJsZWQgbWFya2VycykuIENhY2hlIG1ha2VzIHJlcGVhdCBzZWxmLVxuICAgICAgICAgICAgLy8gYW5ub3VuY2VtZW50cyBjaGVhcCB3aGVuIChjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzKVxuICAgICAgICAgICAgLy8gdHVwbGUgaXMgdW5jaGFuZ2VkLlxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNseUVuYWJsZWQgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN2ID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRpb24ocHJvcHMudmFsdWVzLCBjdik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZhbHVlcywgY29uZmlnXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSB0cnVlICYmICFVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmFkZEZpZWxkKGNvbmZpZy5pZCB8fCBjb25maWcuZGF0YUJpbmRpbmcsIHByb3BzLmhhbmRsZSwgcHJvcHMucGFyZW50SWQsIHByb3BzLmJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIYXNFcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGZpZWxkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGRvIE5PVCB2YWxpZGF0ZSBvbiBtb3VudDogdmFsdWVSZWYuY3VycmVudCBpcyBub3RcbiAgICAgICAgICAgIC8vIHlldCBib3VuZCBmcm9tIHRoZSBmb3JtJ3MgbWFzdGVyIGRhdGEgYXQgdGhpcyBwb2ludCDigJQgYmluZCgpXG4gICAgICAgICAgICAvLyBydW5zIGluIGEgbGF0ZXIgcmVuZGVyIGN5Y2xlIHZpYSB0aGUgW3ZhbHVlT2JqZWN0XSB1c2VFZmZlY3QuXG4gICAgICAgICAgICAvLyBWYWxpZGF0aW5nIGhlcmUgd291bGQgbWFyayBldmVyeSBmaWVsZC13aXRoLW1hc3Rlci12YWx1ZSBhc1xuICAgICAgICAgICAgLy8gaW52YWxpZCAoY3VycmVudFZhbHVlPW51bGwpLCBwZXJtYW5lbnRseSBmbGlwcGluZyBmb3JtLnZhbHVlIHRvXG4gICAgICAgICAgICAvLyBudWxsLiBSZWdpc3RlciBzdGF5cyBlbXB0eSBmb3IgdGhpcyBmaWVsZCB1bnRpbCBlaXRoZXIgdXNlclxuICAgICAgICAgICAgLy8gaW50ZXJhY3Rpb24gKGhhbmRsZUNoYW5nZSDihpIgdmFsaWRhdGVGaWVsZCDihpIgZG9WYWxpZGF0aW9uIOKGklxuICAgICAgICAgICAgLy8gc2V0RmllbGRWYWxpZGl0eSkgb3IgYW4gZXhwbGljaXQgZm9ybS5hcGkudmFsaWRhdGVBbGwoKSBydW5zLlxuICAgICAgICAgICAgLy8gZm9ybS52YWx1ZSB0cmVhdHMgZW1wdHktcmVnaXN0ZXIgYXMgXCJvcHRpbWlzdGljYWxseSB2YWxpZFwiIOKAlCBzb1xuICAgICAgICAgICAgLy8gYW55IHNhdmUgZmxvdyBNVVNUIGNhbGwgZm9ybS5hcGkudmFsaWRhdGVBbGwoKSBiZWZvcmUgcmVhZGluZ1xuICAgICAgICAgICAgLy8gZm9ybS52YWx1ZSwgb3IgaW52YWxpZCBkYXRhIHdpbGwgcGFzcyB0aHJvdWdoIHNpbGVudGx5LlxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5mb3JtKCkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMocHJvcHMuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUZpZWxkKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyB8fCBwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGluaXRpYWxWYWx1ZUJvdW5kLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBsZXQgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobmV3VmFsdWUpICYmICFVdGlscy5pc051bGwodmFsdWVSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IG5ld1ZhbHVlLmlkICE9PSB2YWx1ZVJlZi5jdXJyZW50LmlkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnREFURScgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1RJTUUnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlUmVmLmN1cnJlbnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0dSSUQnICYmIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSB7XG4gICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5zcGxpY2UoMCwgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ubGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuZXdWYWx1ZUVsZW1lbnQgb2YgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ucHVzaChuZXdWYWx1ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmhhbmRsZUNoYW5nZSghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZykgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBpZCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgLy9hcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0SXRlbUNoYW5nZSA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuaGFuZGxlU2VsZWN0SXRlbUNoYW5nZShpZCwgc2VsZWN0T3B0aW9ucywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdEl0ZW1DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBzZWxlY3RJdGVtQ2hhbmdlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0T3B0aW9uIG9mIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbi5pZCA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0T3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcpID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogaWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcihuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZXMsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb1ZhbGlkYXRpb24odmFsdWVzLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcnNlVmFsdWU6ICh2YWx1ZSwgaW5ib3VuZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlUGFyc2VyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIodmFsdWUsIGluYm91bmQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgdmFsaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkLmN1cnJlbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJvd3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnJvd3NIYW5kbGVyID8gcHJvcHMucm93c0hhbmRsZXIoKSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkdyb3VwOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwoY29uZmlnLnZhbGlkYXRvcikgPyBjb25maWcudmFsaWRhdG9yLmdyb3VwIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNsZWFySGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuY2xlYXJIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjcm9sbFRvOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZVByb3BlcnR5KSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZVBhcnNlcikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVQYXJzZXIodmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0sIGZhbHNlKSA6IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIgPyBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZSwgZmFsc2UpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKHZhbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGRpc2FibGVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmlzaWJsZSh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVMb2FkQ29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcuZGlzYWJsZWQsIHBhcnNlZENvbmZpZy5pZCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1aXJlZE5ld1ZhbCA9ICFVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZhbGlkYXRvcikgP1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIHx8IFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPSByZXF1aXJlZCAhPT0gbnVsbCAmJiByZXF1aXJlZCAhPT0gcmVxdWlyZWROZXdWYWwgJiYgbG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRSZXF1aXJlZChyZXF1aXJlZE5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgcmVxdWlyZWQoaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKGlzUmVxdWlyZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtaW5EYXRlKG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNaW5EYXRlKG1pbkRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtYXhEYXRlKG1heERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNYXhEYXRlKG1heERhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBzZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgICAgIHNldFJlc2V0U3dpdGNoKCFyZXNldFN3aXRjaCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0RmllbGRSZXF1aXJlZChuZXdWYWwsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IHZhbGlkYXRlO1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKG5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5nZXRDaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvYWREYXRhKCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy5sb2FkRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMubG9hZERhdGFIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29uZmlnID9cbiAgICAgICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPVwiY29sLSotKlwiIGtleT17Y29uZmlnLmlkfSBzdHlsZT17e1xuICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWFyZ2luTGVmdCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/Lm1hcmdpbkxlZnQgOlxuICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5pbmRleCA9PT0gMCA/IDAgOiAnOHB4JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICF2aXNpYmxlIHx8IFV0aWxzLmdldENvbXBvbmVudEF0dHJpYnV0ZShjb25maWcsICdoaWRkZW4nLCBmYWxzZSkgPT09IHRydWUgPyAnbm9uZScgOiAnYmxvY2snXG4gICAgICAgIH19PlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVuKHtcbiAgICAgICAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICAgICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgdmFsdWVPYmplY3Q6IHZhbHVlT2JqZWN0LFxuICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eTogdmFsdWVQcm9wZXJ0eSxcbiAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlOiBoYW5kbGVWYWx1ZUNoYW5nZSxcbiAgICAgICAgICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICAgICAgICAgIHNldFNlbGVjdE9wdGlvbnM6IHNldFNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxuICAgICAgICAgICAgc2V0UmVzZXRTd2l0Y2g6IHNldFJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgcmVzZXRTd2l0Y2g6IHJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgaGFzRXJyb3I6IGhhc0Vycm9yLFxuICAgICAgICAgICAgZG9WYWxpZGF0aW9uOiBkb1ZhbGlkYXRpb24sXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGxvYWRpbmdSZWY6IGxvYWRpbmdSZWZcbiAgICAgICAgfSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFBd0MsU0FBQUQsdUJBQUFRLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakMsTUFBTUcsU0FBUyxHQUFJQyxLQUFLLElBQUs7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQTtFQUNoQyxNQUFNLENBQUNDLFFBQVEsRUFBRUMsV0FBVyxDQUFDLEdBQUdDLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUNyRCxNQUFNLENBQUNDLFlBQVksRUFBRUMsZUFBZSxDQUFDLEdBQUdILGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxNQUFNLENBQUNHLFdBQVcsRUFBRUMsY0FBYyxDQUFDLEdBQUdMLGNBQUss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
|