@sumaris-net/ngx-components 18.10.28 → 18.11.0
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/esm2022/src/app/core/services/model/entity.model.mjs +65 -1
- package/esm2022/src/app/shared/dates.mjs +2 -2
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +1 -1
- package/esm2022/src/app/shared/image/image.service.mjs +1 -1
- package/esm2022/src/app/shared/inputs.mjs +14 -10
- package/fesm2022/sumaris-net.ngx-components.mjs +76 -9
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/services/model/entity.model.d.ts +23 -0
- package/src/app/shared/dates.d.ts +1 -1
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +1 -0
- package/src/app/shared/image/image.service.d.ts +1 -0
- package/src/app/shared/inputs.d.ts +3 -2
- package/src/assets/manifest.json +1 -1
|
@@ -106,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
106
106
|
}, {
|
|
107
107
|
type: Optional
|
|
108
108
|
}] }] });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2ltYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUduRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFHM0UsTUFBTSxPQUFPLFlBQWEsU0FBUSxnQkFBZ0I7SUFLcEM7SUFDQTtJQUNBO0lBQ0E7SUFDaUM7SUFSckMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFFL0IsWUFDWSxRQUF5QixFQUN6QixRQUE4QixFQUM5QixTQUEyQixFQUMzQixpQkFBb0MsRUFDSCxXQUF5QjtRQUVwRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFOTixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ0gsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUFHcEUsSUFBSSxDQUFDLE1BQU0sR0FB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QixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNoQyxHQUFHLElBQUk7YUFDUixDQUFDO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLDBCQUEwQjtRQUMxRCxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUNoQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMscUNBQXFDO2FBQ3ZFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFBLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQTVGVSxZQUFZLHNKQVNiLFdBQVc7NEdBVFYsWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBVTdCLE1BQU07MkJBQUMsV0FBVzs7MEJBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzIH0gZnJvbSAnLi4vZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7IEltYWdlc1V0aWxzIH0gZnJvbSAnLi4vZmlsZS9pbWFnZXMudXRpbHMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5IH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICcuL2ltYWdlLm1vZGVsJztcbmltcG9ydCB7IENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5pbXBvcnQgeyBDYW1lcmEsIENhbWVyYVJlc3VsdFR5cGUsIEltYWdlT3B0aW9ucyB9IGZyb20gJ0BjYXBhY2l0b3IvY2FtZXJhJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJbWFnZVNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZWZhdWx0TWF4SGVpZ2h0ID0gMTAyNDtcbiAgcHJpdmF0ZSBkZWZhdWx0TWF4V2lkdGggPSAxMDI0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBlbnZpcm9ubWVudD86IEVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2ltYWdlXSBDcmVhdGluZyBzZXJ2aWNlYCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhbWVyYSA9IENhcGFjaXRvci5pc1BsdWdpbkF2YWlsYWJsZSgnQ2FtZXJhJyk7XG4gICAgICBjb25zb2xlLmluZm8oYFtpbWFnZV0gU3RhcnRpbmcuLi4ge2NhbWVyYTogJHtjYW1lcmF9fWApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IGNoZWNrIENhbWVyYSBwbHVnaW46ICcgKyAoZXJyPy5tZXNzYWdlIHx8IGVycikpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZChcbiAgICBldmVudD86IEV2ZW50LFxuICAgIG9wdHM/OiB7IG1heEhlaWdodD86IG51bWJlcjsgbWF3V2lkdGg/OiBudW1iZXI7IHF1YWxpdHk/OiBudW1iZXI7IG11bHRpcGxlPzogYm9vbGVhbjsgYXV0b0hpZGVEcm9wQXJlYT86IGJvb2xlYW4gfSAmIE9taXQ8XG4gICAgICBJbWFnZU9wdGlvbnMsXG4gICAgICAncmVzdWx0VHlwZSdcbiAgICA+XG4gICk6IFByb21pc2U8SW1hZ2VbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICAvLyBJZiBkZXNrdG9wOiBvcGVuIHVwbG9hZCBwb3BvdmVyXG4gICAgaWYgKCF0aGlzLnBsYXRmb3JtLmlzQ29yZG92YSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRVcGxvYWRlZEltYWdlcyhldmVudCwgb3B0cyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbaW1hZ2Utc2VydmljZV0gQWRkaW5nIGltYWdlLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IENhbWVyYS5nZXRQaG90byh7XG4gICAgICAgIGhlaWdodDogdGhpcy5kZWZhdWx0TWF4SGVpZ2h0LFxuICAgICAgICB3aWR0aDogdGhpcy5kZWZhdWx0TWF4V2lkdGgsXG4gICAgICAgIHByb21wdExhYmVsQ2FuY2VsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uQlROX0NBTkNFTCcpLFxuICAgICAgICBwcm9tcHRMYWJlbFBpY3R1cmU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0lNQUdFLkJUTl9DQU1FUkFfU09VUkNFJyksXG4gICAgICAgIHJlc3VsdFR5cGU6IENhbWVyYVJlc3VsdFR5cGUuRGF0YVVybCxcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgaWYgKHRoaXMuX2RlYnVnICYmIGRhdGEuZXhpZikge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW1hZ2Utc2VydmljZV0gSW1hZ2UgYWRkZWQsIHdpdGggZXhpZjpgLCBkYXRhLmV4aWYpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1xuICAgICAgICA8SW1hZ2U+e1xuICAgICAgICAgIGRhdGFVcmw6IGRhdGEuZGF0YVVybCxcbiAgICAgICAgICBleGlmOiBkYXRhLmV4aWYsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5pbmZvKGBbaW1hZ2Utc2VydmljZV0gRXJyb3Igd2hpbGUgYWRkaW5nIGltYWdlOiAke2Vycj8ubWVzc2FnZSB8fCBlcnJ9IC0+ICR7ZXJyPy5vcmlnaW5hbFN0YWNrIHx8ICcnfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFVwbG9hZGVkSW1hZ2VzKFxuICAgIGV2ZW50PzogRXZlbnQsXG4gICAgb3B0cz86IHsgbWF4SGVpZ2h0PzogbnVtYmVyOyBtYXdXaWR0aD86IG51bWJlcjsgcXVhbGl0eT86IG51bWJlcjsgbXVsdGlwbGU/OiBib29sZWFuOyBhdXRvSGlkZURyb3BBcmVhPzogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8SW1hZ2VbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgRmlsZXNVdGlscy5zaG93VXBsb2FkUG9wb3Zlcih0aGlzLnBvcG92ZXJDb250cm9sbGVyLCBldmVudCwge1xuICAgICAgdW5pcXVlRmlsZTogb3B0cz8ubXVsdGlwbGUgIT09IHRydWUsXG4gICAgICBhdXRvSGlkZURyb3BBcmVhOiBvcHRzPy5hdXRvSGlkZURyb3BBcmVhICE9PSBmYWxzZSxcbiAgICAgIGZpbGVFeHRlbnNpb246ICcucG5nLCAuanBnJyxcbiAgICAgIGluc3RhbnRVcGxvYWQ6IHRydWUsXG4gICAgICB1cGxvYWRGbjogKGZpbGUpID0+XG4gICAgICAgIEltYWdlc1V0aWxzLnJlYWRBc0RhdGFVUkwoZmlsZSwge1xuICAgICAgICAgIG1heFdpZHRoOiB0aGlzLmRlZmF1bHRNYXhXaWR0aCxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHRoaXMuZGVmYXVsdE1heEhlaWdodCxcbiAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkoZGF0YSkpIHJldHVybjsgLy8gTm8gZmlsZXMgdXBsb2FkZWQ6IHNraXBcbiAgICByZXR1cm4gKGRhdGEgfHwgW10pXG4gICAgICAubWFwKChmaWxlKSA9PiBmaWxlLnJlc3BvbnNlLmJvZHkpIC8vIEdldCByZXNwb25zZSBib2R5ID0gZGF0YSBhcyBiYXNlNjRcbiAgICAgIC5tYXAoKGRhdGFVcmwpID0+IDxJbWFnZT57IGRhdGFVcmwgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isFocusableElement } from './focusable';
|
|
2
|
-
import { isNil, isNilOrBlank, isNotEmptyArray, isNotNil, toBoolean, toNumber } from './functions';
|
|
2
|
+
import { isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, toBoolean, toNumber } from './functions';
|
|
3
3
|
export function selectInputContentFromEvent(event) {
|
|
4
4
|
if (!event || event.defaultPrevented)
|
|
5
5
|
return false;
|
|
@@ -80,8 +80,7 @@ export function moveInputCaretToSeparator(event, separator, forward) {
|
|
|
80
80
|
// DEBUG
|
|
81
81
|
//console.debug("Input text value: ", value);
|
|
82
82
|
//console.debug("Cursor at: ", caretPosition);
|
|
83
|
-
//console.debug("Text after cursor: ", value.
|
|
84
|
-
//console.debug("Next separator at: ", value.indexOf(separator, caretPosition));
|
|
83
|
+
//console.debug("Text after cursor: ", value.substring(caretPosition));
|
|
85
84
|
forward = forward !== false;
|
|
86
85
|
const separatorIndex = forward ? value.indexOf(separator, caretPosition) : value.lastIndexOf(separator, caretPosition);
|
|
87
86
|
if (separatorIndex !== -1 && ((forward && separatorIndex + 1 < value.length) || (!forward && separatorIndex > 0))) {
|
|
@@ -116,7 +115,7 @@ export function filterNumberInput(event, allowDecimals, decimalSeparator) {
|
|
|
116
115
|
}
|
|
117
116
|
else {
|
|
118
117
|
//input command entered of delete, backspace or one of the 4 direction up, down, left and right, or negative sign
|
|
119
|
-
if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode
|
|
118
|
+
if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode === 46 || event.which === 8 || event.keyCode === 9 || event.keyCode === 45) {
|
|
120
119
|
//console.debug('input command entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);
|
|
121
120
|
// OK
|
|
122
121
|
}
|
|
@@ -170,19 +169,24 @@ export function tabindexComparator(a, b) {
|
|
|
170
169
|
export function canHaveFocus(input, opts) {
|
|
171
170
|
if (!input)
|
|
172
171
|
return false;
|
|
172
|
+
if (opts?.isEmpty && opts.isNotEmpty)
|
|
173
|
+
throw new Error('Cannot use both options onlyEmptyInput and onlyNotEmptyInput at the same time. Please use only one of them.');
|
|
174
|
+
return (
|
|
173
175
|
// Exclude disabled element
|
|
174
|
-
|
|
176
|
+
!toBoolean(input.disabled, false) &&
|
|
175
177
|
// Exclude hidden element
|
|
176
178
|
!toBoolean(input.hidden, false) &&
|
|
177
179
|
// Exclude minTabIndex < element.tabIndex
|
|
178
|
-
(isNil(opts
|
|
180
|
+
(isNil(opts?.minTabindex) || toNumber(input.tabIndex, input.tabindex) > opts.minTabindex) &&
|
|
179
181
|
// Exclude maxTabIndex > element.tabIndex
|
|
180
|
-
(isNil(opts
|
|
182
|
+
(isNil(opts?.maxTabindex) || toNumber(input.tabIndex, input.tabindex) < opts.maxTabindex) &&
|
|
183
|
+
// Exclude not nil input value
|
|
184
|
+
(!opts?.isEmpty || isNilOrBlank(input.value)) &&
|
|
181
185
|
// Exclude nil input value
|
|
182
|
-
(!opts
|
|
186
|
+
(!opts?.isNotEmpty || isNotNilOrBlank(input.value)));
|
|
183
187
|
}
|
|
184
188
|
export function getFocusableInputElements(elements, opts) {
|
|
185
|
-
opts = { sortByTabIndex: false,
|
|
189
|
+
opts = { sortByTabIndex: false, ...opts };
|
|
186
190
|
// Focus to first input
|
|
187
191
|
const filteredElements = elements
|
|
188
192
|
// Transform to input
|
|
@@ -272,4 +276,4 @@ export function getInputRangeFromCaretIndex(caretIndex, inputRanges) {
|
|
|
272
276
|
}
|
|
273
277
|
return null;
|
|
274
278
|
}
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxLQUFZO0lBQ3RELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25ELE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQTBCLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW1EO0lBQ3BGLDJDQUEyQztJQUMzQyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUN2SCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixvQkFBb0I7SUFDcEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVDLElBQUksT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMscURBQXFELEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixLQUE2QyxFQUM3QyxVQUFrQixFQUNsQixRQUFpQixFQUNqQixTQUEyQztJQUUzQyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMzRCxhQUFhO1FBQ2IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVDLElBQUksQ0FBQztZQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFVO0lBQ3pDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ2pKLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxLQUFvQixFQUFFLFNBQWlCLEVBQUUsT0FBaUI7SUFDbEcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQztJQUNsQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXhCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLFFBQVE7SUFDUixpREFBaUQ7SUFFakQsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7SUFFbkUsa0JBQWtCO0lBQ2xCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFlLENBQUM7SUFFcEMsbUJBQW1CO0lBQ25CLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLElBQUksQ0FBQztRQUNILElBQUksS0FBSyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0MsUUFBUTtZQUNSLDZDQUE2QztZQUM3Qyw4Q0FBOEM7WUFDOUMsb0VBQW9FO1lBQ3BFLGdGQUFnRjtZQUVoRixPQUFPLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQztZQUU1QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN2SCxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLGNBQWMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEgsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDNUIsZ0NBQWdDO29CQUNoQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pFLDBCQUEwQjt3QkFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFvQixFQUFFLGFBQXNCLEVBQUUsZ0JBQXlCO0lBQ3ZHLHlFQUF5RTtJQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6RixxR0FBcUc7UUFDckcsS0FBSztJQUNQLENBQUM7SUFDRCxvQkFBb0I7U0FDZixJQUNILGFBQWE7UUFDYixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxFQUN6SCxDQUFDO1FBQ0Qsa0VBQWtFO1FBQ2xFLEtBQUs7SUFDUCxDQUFDO1NBQU0sQ0FBQztRQUNOLGlIQUFpSDtRQUNqSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3pJLHNHQUFzRztZQUN0RyxLQUFLO1FBQ1AsQ0FBQztRQUNELCtCQUErQjthQUMxQixDQUFDO1lBQ0osNkhBQTZIO1lBQzdILEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFVLE9BQXNCO0lBQ3hELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLFlBQVk7UUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEMsQ0FBQztRQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFVLE9BQXNCLEVBQUUsUUFBZ0I7SUFDM0UsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO1NBQU0sSUFBSSxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM1QyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsQ0FBQztBQUNILENBQUM7QUFTRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQVc7SUFDeEMsT0FBTyxDQUNMLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUMxQixDQUFDLE9BQU8sSUFBSSxNQUFNO1lBQ2hCLHlGQUF5RjtZQUN6RixVQUFVLElBQUksTUFBTTtZQUNwQixVQUFVLElBQUksTUFBTSxDQUFDLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBVSxNQUFxQjtJQUMzRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ2hHLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQWUsRUFBRSxDQUFlO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDeEMsT0FBTyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQWFELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBbUIsRUFBRSxJQUEwQjtJQUMxRSxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLDJCQUEyQjtJQUMzQixPQUFPLENBQ0wsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7UUFDakMseUJBQXlCO1FBQ3pCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQy9CLHlDQUF5QztRQUN6QyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEYseUNBQXlDO1FBQ3pDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN4RiwwQkFBMEI7UUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3ZELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFFBQStCLEVBQUUsSUFBK0I7SUFDeEcsSUFBSSxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUVwRSx1QkFBdUI7SUFDdkIsTUFBTSxnQkFBZ0IsR0FBbUIsUUFBUTtRQUUvQyxxQkFBcUI7U0FDcEIsR0FBRyxDQUFDLGNBQWMsQ0FBQztTQUVuQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNoQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLFFBQVE7UUFDUixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztZQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxRQUFRLGVBQWUsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFTCxtQkFBbUI7SUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBVSxLQUF3QixFQUFFLFFBQWtDLEVBQUUsSUFBK0I7SUFDbkkseURBQXlEO0lBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFdkgsK0JBQStCO0lBQy9CLE1BQU0sZUFBZSxHQUFtQix5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXRHLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDckMsd0JBQXdCO1FBQ3hCLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQVUsS0FBd0IsRUFBRSxRQUFrQyxFQUFFLElBQStCO0lBQ3ZJLHlEQUF5RDtJQUN6RCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXZILCtCQUErQjtJQUMvQixNQUFNLGVBQWUsR0FBbUIseUJBQXlCLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV0RyxJQUFJLGVBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3JDLHVCQUF1QjtRQUN2QixlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsK0JBQStCLENBQUMsSUFBeUI7SUFDdkUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9DLFFBQVE7WUFDUix5RUFBeUU7WUFFekUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QixXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUM1QyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFVBQWtCLEVBQUUsV0FBdUI7SUFDckYsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGVFbGVtZW50IH0gZnJvbSAnLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRDb250ZW50KGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IGFueSk6IGJvb2xlYW4ge1xuICAvLyBEZXRlY3QgZGVwcmVjYXRlZCB1c2FnZSAoYmVmb3JlIDE4LjIuMjEpXG4gIGlmIChpbnB1dD8udGFyZ2V0IHx8IGlucHV0IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICBjb25zb2xlLndhcm4oJ0RFUFJFQ0FURUQgdXNhZ2Ugc2luY2UgMTguMi4yMSAtIFBsZWFzZSB1c2Ugc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KCkgaW5zdGVhZCBzZWxlY3RJbnB1dENvbnRlbnQoKScpO1xuICAgIGlucHV0ID0gaW5wdXQudGFyZ2V0O1xuICB9XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIC8vIE5vdGhpbmcgdG8gc2VsZWN0XG4gIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBpbnB1dC5zZWxlY3RSYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3RSYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdFJhbmdlKCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdCgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dFJhbmdlKFxuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgZW5kSW5kZXg/OiBudW1iZXIsXG4gIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZSdcbikge1xuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTm8gY29udGVudFxuICAgIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggPz8gc3RhcnRJbmRleCwgZGlyZWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgcmFuZ2UnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oaW5wdXQ6IGFueSk6IG51bWJlciB7XG4gIGlmIChpbnB1dCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA/IChpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBpbnB1dC5zZWxlY3Rpb25TdGFydCA6IGlucHV0LnNlbGVjdGlvbkVuZCkgOiBpbnB1dC5zZWxlY3Rpb25TdGFydDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZXBhcmF0b3I6IHN0cmluZywgZm9yd2FyZD86IGJvb2xlYW4pIHtcbiAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXNlcGFyYXRvcikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGlucHV0KTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2NhcmV0UG9zaXRpb249JywgY2FyZXRQb3NpdGlvbik7XG5cbiAgaWYgKGNhcmV0UG9zaXRpb24gPT09IC0xKSByZXR1cm4gdHJ1ZTsgLy8gQ2FyZXQgcG9zIG5vdCBmb3VuZDogc2tpcFxuXG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlIGFzIHN0cmluZztcblxuICAvLyBObyBjb250ZW50OiBza2lwXG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBpZiAodmFsdWUgJiYgY2FyZXRQb3NpdGlvbiA8PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJJbnB1dCB0ZXh0IHZhbHVlOiBcIiwgdmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3Vyc29yIGF0OiBcIiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJUZXh0IGFmdGVyIGN1cnNvcjogXCIsIHZhbHVlLnN1YnN0cihjYXJldFBvc2l0aW9uKSk7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJOZXh0IHNlcGFyYXRvciBhdDogXCIsIHZhbHVlLmluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSk7XG5cbiAgICAgIGZvcndhcmQgPSBmb3J3YXJkICE9PSBmYWxzZTtcblxuICAgICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSBmb3J3YXJkID8gdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pIDogdmFsdWUubGFzdEluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChzZXBhcmF0b3JJbmRleCAhPT0gLTEgJiYgKChmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ICsgMSA8IHZhbHVlLmxlbmd0aCkgfHwgKCFmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ID4gMCkpKSB7XG4gICAgICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIC8vIE1vdmUgYWZ0ZXIgdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHNlbGVjdElucHV0UmFuZ2UoaW5wdXQsIHNlcGFyYXRvckluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpKSkge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtb3ZlIGNhcmV0IHRvIG5leHQgc2VwYXJhdG9yJywgZXJyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCwgYWxsb3dEZWNpbWFsczogYm9vbGVhbiwgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZykge1xuICAvL2lucHV0IG51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gIGlmICgoZXZlbnQud2hpY2ggPj0gNDggJiYgZXZlbnQud2hpY2ggPD0gNTcpIHx8IChldmVudC53aGljaCA+PSAzNyAmJiBldmVudC53aGljaCA8PSA0MCkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgIC8vIE9LXG4gIH1cbiAgLy8gRGVjaW1hbCBzZXBhcmF0b3JcbiAgZWxzZSBpZiAoXG4gICAgYWxsb3dEZWNpbWFscyAmJlxuICAgICgoIWRlY2ltYWxTZXBhcmF0b3IgJiYgKGV2ZW50LmtleSA9PT0gJy4nIHx8IGV2ZW50LmtleSA9PT0gJywnKSkgfHwgKGRlY2ltYWxTZXBhcmF0b3IgJiYgZXZlbnQua2V5ID09PSBkZWNpbWFsU2VwYXJhdG9yKSlcbiAgKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBkZWNpbWFsIHNlcGFyYXRvciBlbnRlcmVkIDonICsgZXZlbnQuY29kZSk7XG4gICAgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvL2lucHV0IGNvbW1hbmQgZW50ZXJlZCBvZiBkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodCwgb3IgbmVnYXRpdmUgc2lnblxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09IDQ2IHx8IGV2ZW50LndoaWNoID09IDggfHwgZXZlbnQua2V5Q29kZSA9PSA5IHx8IGV2ZW50LmtleUNvZGUgPT0gNDUpIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgLy8gT0tcbiAgICB9XG4gICAgLy8gQ2FuY2VsIG90aGVyIGtleWJvYXJkIGV2ZW50c1xuICAgIGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBub3QgbnVtYmVyIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSArICcgJyArIGV2ZW50LmNvZGUgKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c0lucHV0PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4pIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gYXNJbnB1dEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpbnB1dEVsZW1lbnQpIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBmb2N1cyBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRhYkluZGV4PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4sIHRhYkluZGV4OiBudW1iZXIpIHtcbiAgaWYgKGlzSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC50YWJpbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2UgaWYgKGVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50KSkge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGNoYW5nZSB0YWJpbmRleCBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBGb2N1c2FibGVFbGVtZW50IHtcbiAgdGFiaW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBhbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dEVsZW1lbnQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSW5wdXRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICBpc0ZvY3VzYWJsZUVsZW1lbnQob2JqZWN0KSAmJlxuICAgICgndmFsdWUnIGluIG9iamVjdCB8fFxuICAgICAgLy8gaGFzIHZhbHVlIGlzIG5vdCBhbHdheXMgc2V0IChuZWl0aGVyIHRhYmluZGV4KSBjaGVjayBvbiAyIHByb3BlcnRpZXMgd2l0aCBhIGxvZ2ljYWwgT1JcbiAgICAgICd0YWJpbmRleCcgaW4gb2JqZWN0IHx8XG4gICAgICAndGFiSW5kZXgnIGluIG9iamVjdClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzSW5wdXRFbGVtZW50PFQgPSBhbnk+KG9iamVjdDogRWxlbWVudFJlZjxUPik6IElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmplY3QpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQob2JqZWN0KSkgcmV0dXJuIG9iamVjdDtcbiAgICBpZiAob2JqZWN0Lm5hdGl2ZUVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQob2JqZWN0Lm5hdGl2ZUVsZW1lbnQpKSByZXR1cm4gb2JqZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmluZGV4Q29tcGFyYXRvcihhOiBJbnB1dEVsZW1lbnQsIGI6IElucHV0RWxlbWVudCkge1xuICBjb25zdCB2YWx1ZUEgPSBhLnRhYmluZGV4IHx8IGEudGFiSW5kZXg7XG4gIGNvbnN0IHZhbHVlQiA9IGIudGFiaW5kZXggfHwgYi50YWJJbmRleDtcbiAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6IHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5HYWluRm9jdXNPcHRpb25zIHtcbiAgbWluVGFiaW5kZXg/OiBudW1iZXI7XG4gIG1heFRhYmluZGV4PzogbnVtYmVyO1xuICBleGNsdWRlRW1wdHlJbnB1dD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zIGV4dGVuZHMgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIHNvcnRCeVRhYkluZGV4PzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuSGF2ZUZvY3VzKGlucHV0OiBJbnB1dEVsZW1lbnQsIG9wdHM/OiBDYW5HYWluRm9jdXNPcHRpb25zKTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZTtcbiAgLy8gRXhjbHVkZSBkaXNhYmxlZCBlbGVtZW50XG4gIHJldHVybiAoXG4gICAgIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSkgJiZcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1pblRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpID4gb3B0cy5taW5UYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG1heFRhYkluZGV4ID4gZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1heFRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpIDwgb3B0cy5tYXhUYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cy5leGNsdWRlRW1wdHlJbnB1dCB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogSW5wdXRFbGVtZW50W10ge1xuICBvcHRzID0geyBzb3J0QnlUYWJJbmRleDogZmFsc2UsIGV4Y2x1ZGVFbXB0eUlucHV0OiBmYWxzZSwgLi4ub3B0cyB9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXggfHwgaW5wdXQudGFiaW5kZXh9fWAsIGlucHV0KTtcbiAgICAgIHJldHVybiBpbmNsdWRlZDtcbiAgICB9KTtcblxuICAvLyBTb3J0IGJ5IHRhYkluZGV4XG4gIGlmIChvcHRzLnNvcnRCeVRhYkluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHMuc29ydCh0YWJpbmRleENvbXBhcmF0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dDxUID0gYW55PihldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxUPj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBib29sZWFuIHtcbiAgLy8gQ2FuY2VsbGluZyBldmVudCAoZS5nLiB3aGVuIGVtaXR0ZWQgYnkgKGtleWRvd24udGFiKSApXG4gIGlmIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvLyBHZXQgY3VycmVudCBpbmRleFxuICBjb25zdCBtaW5UYWJpbmRleCA9IGV2ZW50ICYmIGlzSW5wdXRFbGVtZW50KGV2ZW50LnRhcmdldCkgPyBldmVudC50YXJnZXQudGFiSW5kZXggfHwgZXZlbnQudGFyZ2V0LnRhYmluZGV4IDogdW5kZWZpbmVkO1xuXG4gIC8vIEdldCBmb2N1c2FibGUgaW5wdXQgZWxlbWVudHNcbiAgY29uc3QgZm9jdXNhYmxlSW5wdXRzOiBJbnB1dEVsZW1lbnRbXSA9IGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHMsIHsgbWluVGFiaW5kZXgsIC4uLm9wdHMgfSk7XG5cbiAgaWYgKGlzTm90RW1wdHlBcnJheShmb2N1c2FibGVJbnB1dHMpKSB7XG4gICAgLy8gRm9jdXMgb24gZmlyc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzWzBdLmZvY3VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c1ByZXZpb3VzSW5wdXQ8VCA9IGFueT4oZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8VD4+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogYm9vbGVhbiB7XG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWF4VGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gZXZlbnQudGFyZ2V0LnRhYkluZGV4IHx8IGV2ZW50LnRhcmdldC50YWJpbmRleCA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1heFRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGxhc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzW2ZvY3VzYWJsZUlucHV0cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhtYXNrOiAoc3RyaW5nIHwgUmVnRXhwKVtdKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgZmlyc3RfaW5kZXg6IG51bWJlcjtcbiAgbGV0IGxhc3RfaW5kZXg6IG51bWJlcjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgbWFza1tpXS50b1N0cmluZygpID09PSAnL1srLV0vJykge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnVE9ETyBwdXNoIHN0YXJ0IG1hc2snLCB7IGksIG1hc2s6IG1hc2tbaV0udG9TdHJpbmcoKSB9KTtcblxuICAgICAgcmVzdWx0LnB1c2goWzAsIDBdKTtcbiAgICB9IGVsc2UgaWYgKG1hc2tbaV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChpc05pbChmaXJzdF9pbmRleCkpIHtcbiAgICAgICAgZmlyc3RfaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3ROaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGxhc3RfaW5kZXggPSBpIC0gMTtcbiAgICAgICAgcmVzdWx0LnB1c2goW2ZpcnN0X2luZGV4LCBsYXN0X2luZGV4XSk7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gbnVsbDtcbiAgICAgICAgbGFzdF9pbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChtYXNrW21hc2subGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICBsYXN0X2luZGV4ID0gbWFzay5sZW5ndGggLSAxO1xuICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFJhbmdlRnJvbUNhcmV0SW5kZXgoY2FyZXRJbmRleDogbnVtYmVyLCBpbnB1dFJhbmdlczogbnVtYmVyW11bXSk6IG51bWJlcltdIHtcbiAgZm9yIChjb25zdCBpbnB1dFJhbmdlIG9mIGlucHV0UmFuZ2VzKSB7XG4gICAgaWYgKGNhcmV0SW5kZXggPj0gaW5wdXRSYW5nZVswXSAmJiBjYXJldEluZGV4IDw9IGlucHV0UmFuZ2VbMV0gKyAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRSYW5nZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBWTtJQUN0RCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNuRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUEwQixDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFtRDtJQUNwRiwyQ0FBMkM7SUFDM0MsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLHdHQUF3RyxDQUFDLENBQUM7UUFDdkgsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEIsb0JBQW9CO0lBQ3BCLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QyxJQUFJLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztR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Q0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBa0IsRUFBRSxXQUF1QjtJQUNyRixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25FLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c2FibGVFbGVtZW50LCBpc0ZvY3VzYWJsZUVsZW1lbnQgfSBmcm9tICcuL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXIgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gc2VsZWN0SW5wdXRDb250ZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBhbnkpOiBib29sZWFuIHtcbiAgLy8gRGV0ZWN0IGRlcHJlY2F0ZWQgdXNhZ2UgKGJlZm9yZSAxOC4yLjIxKVxuICBpZiAoaW5wdXQ/LnRhcmdldCB8fCBpbnB1dCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgY29uc29sZS53YXJuKCdERVBSRUNBVEVEIHVzYWdlIHNpbmNlIDE4LjIuMjEgLSBQbGVhc2UgdXNlIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudCgpIGluc3RlYWQgc2VsZWN0SW5wdXRDb250ZW50KCknKTtcbiAgICBpbnB1dCA9IGlucHV0LnRhcmdldDtcbiAgfVxuICBpZiAoIWlucHV0KSByZXR1cm4gdHJ1ZTtcblxuICAvLyBOb3RoaW5nIHRvIHNlbGVjdFxuICBpZiAoaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaW5wdXQuc2VsZWN0UmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2VsZWN0UmFuZ2UoaW5wdXQudmFsdWUubGVuZ3RoLCAwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHNlbGVjdCBpbnB1dCBjb250ZW50LCB1c2luZyBzZWxlY3RSYW5nZSgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHNlbGVjdCBpbnB1dCBjb250ZW50LCB1c2luZyBzZWxlY3QoKScsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRSYW5nZShcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIGVuZEluZGV4PzogbnVtYmVyLFxuICBkaXJlY3Rpb24/OiAnYmFja3dhcmQnIHwgJ2ZvcndhcmQnIHwgJ25vbmUnXG4pIHtcbiAgaWYgKGlucHV0ICYmIHR5cGVvZiBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIE5vIGNvbnRlbnRcbiAgICBpZiAoaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ID8/IHN0YXJ0SW5kZXgsIGRpcmVjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IHJhbmdlJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJldFBvc2l0aW9uKGlucHV0OiBhbnkpOiBudW1iZXIge1xuICBpZiAoaW5wdXQgJiYgaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPyAoaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gaW5wdXQuc2VsZWN0aW9uU3RhcnQgOiBpbnB1dC5zZWxlY3Rpb25FbmQpIDogaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudDogS2V5Ym9hcmRFdmVudCwgc2VwYXJhdG9yOiBzdHJpbmcsIGZvcndhcmQ/OiBib29sZWFuKSB7XG4gIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFzZXBhcmF0b3IpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgYW55O1xuICBpZiAoIWlucHV0KSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbihpbnB1dCk7XG5cbiAgLy8gREVCVUdcbiAgLy9jb25zb2xlLmRlYnVnKCdjYXJldFBvc2l0aW9uPScsIGNhcmV0UG9zaXRpb24pO1xuXG4gIGlmIChjYXJldFBvc2l0aW9uID09PSAtMSkgcmV0dXJuIHRydWU7IC8vIENhcmV0IHBvcyBub3QgZm91bmQ6IHNraXBcblxuICAvLyBHZXQgaW5wdXQgdmFsdWVcbiAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZSBhcyBzdHJpbmc7XG5cbiAgLy8gTm8gY29udGVudDogc2tpcFxuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHZhbHVlICYmIGNhcmV0UG9zaXRpb24gPD0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiSW5wdXQgdGV4dCB2YWx1ZTogXCIsIHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkN1cnNvciBhdDogXCIsIGNhcmV0UG9zaXRpb24pO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVGV4dCBhZnRlciBjdXJzb3I6IFwiLCB2YWx1ZS5zdWJzdHJpbmcoY2FyZXRQb3NpdGlvbikpO1xuXG4gICAgICBmb3J3YXJkID0gZm9yd2FyZCAhPT0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gZm9yd2FyZCA/IHZhbHVlLmluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSA6IHZhbHVlLmxhc3RJbmRleE9mKHNlcGFyYXRvciwgY2FyZXRQb3NpdGlvbik7XG4gICAgICBpZiAoc2VwYXJhdG9ySW5kZXggIT09IC0xICYmICgoZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCArIDEgPCB2YWx1ZS5sZW5ndGgpIHx8ICghZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCA+IDApKSkge1xuICAgICAgICBpZiAoaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAvLyBNb3ZlIGFmdGVyIHRoZSBuZXh0IHNlcGFyYXRvclxuICAgICAgICAgIGlmIChzZWxlY3RJbnB1dFJhbmdlKGlucHV0LCBzZXBhcmF0b3JJbmRleCArIChmb3J3YXJkID8gMSA6IC0xKSkpIHtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbW92ZSBjYXJldCB0byBuZXh0IHNlcGFyYXRvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTnVtYmVySW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFsbG93RGVjaW1hbHM6IGJvb2xlYW4sIGRlY2ltYWxTZXBhcmF0b3I/OiBzdHJpbmcpIHtcbiAgLy9pbnB1dCBudW1iZXIgZW50ZXJlZCBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodFxuICBpZiAoKGV2ZW50LndoaWNoID49IDQ4ICYmIGV2ZW50LndoaWNoIDw9IDU3KSB8fCAoZXZlbnQud2hpY2ggPj0gMzcgJiYgZXZlbnQud2hpY2ggPD0gNDApKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAvLyBPS1xuICB9XG4gIC8vIERlY2ltYWwgc2VwYXJhdG9yXG4gIGVsc2UgaWYgKFxuICAgIGFsbG93RGVjaW1hbHMgJiZcbiAgICAoKCFkZWNpbWFsU2VwYXJhdG9yICYmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykpIHx8IChkZWNpbWFsU2VwYXJhdG9yICYmIGV2ZW50LmtleSA9PT0gZGVjaW1hbFNlcGFyYXRvcikpXG4gICkge1xuICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgZGVjaW1hbCBzZXBhcmF0b3IgZW50ZXJlZCA6JyArIGV2ZW50LmNvZGUpO1xuICAgIC8vIE9LXG4gIH0gZWxzZSB7XG4gICAgLy9pbnB1dCBjb21tYW5kIGVudGVyZWQgb2YgZGVsZXRlLCBiYWNrc3BhY2Ugb3Igb25lIG9mIHRoZSA0IGRpcmVjdGlvbiB1cCwgZG93biwgbGVmdCBhbmQgcmlnaHQsIG9yIG5lZ2F0aXZlIHNpZ25cbiAgICBpZiAoKGV2ZW50LmtleUNvZGUgPj0gMzcgJiYgZXZlbnQua2V5Q29kZSA8PSA0MCkgfHwgZXZlbnQua2V5Q29kZSA9PT0gNDYgfHwgZXZlbnQud2hpY2ggPT09IDggfHwgZXZlbnQua2V5Q29kZSA9PT0gOSB8fCBldmVudC5rZXlDb2RlID09PSA0NSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBjb21tYW5kIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAvLyBPS1xuICAgIH1cbiAgICAvLyBDYW5jZWwgb3RoZXIga2V5Ym9hcmQgZXZlbnRzXG4gICAgZWxzZSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzSW5wdXQ8VCA9IGFueT4oZWxlbWVudDogRWxlbWVudFJlZjxUPikge1xuICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhc0lucHV0RWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGlucHV0RWxlbWVudCkgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gIGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGZvY3VzIG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGFiSW5kZXg8VCA9IGFueT4oZWxlbWVudDogRWxlbWVudFJlZjxUPiwgdGFiSW5kZXg6IG51bWJlcikge1xuICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBlbGVtZW50LnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSBpZiAoZWxlbWVudCAmJiBpc0lucHV0RWxlbWVudChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gY2hhbmdlIHRhYmluZGV4IG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0RWxlbWVudCBleHRlbmRzIEZvY3VzYWJsZUVsZW1lbnQge1xuICB0YWJpbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdmFsdWU6IGFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0lucHV0RWxlbWVudChvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBJbnB1dEVsZW1lbnQge1xuICByZXR1cm4gKFxuICAgIGlzRm9jdXNhYmxlRWxlbWVudChvYmplY3QpICYmXG4gICAgKCd2YWx1ZScgaW4gb2JqZWN0IHx8XG4gICAgICAvLyBoYXMgdmFsdWUgaXMgbm90IGFsd2F5cyBzZXQgKG5laXRoZXIgdGFiaW5kZXgpIGNoZWNrIG9uIDIgcHJvcGVydGllcyB3aXRoIGEgbG9naWNhbCBPUlxuICAgICAgJ3RhYmluZGV4JyBpbiBvYmplY3QgfHxcbiAgICAgICd0YWJJbmRleCcgaW4gb2JqZWN0KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNJbnB1dEVsZW1lbnQ8VCA9IGFueT4ob2JqZWN0OiBFbGVtZW50UmVmPFQ+KTogSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIGlmIChpc0lucHV0RWxlbWVudChvYmplY3QpKSByZXR1cm4gb2JqZWN0O1xuICAgIGlmIChvYmplY3QubmF0aXZlRWxlbWVudCAmJiBpc0lucHV0RWxlbWVudChvYmplY3QubmF0aXZlRWxlbWVudCkpIHJldHVybiBvYmplY3QubmF0aXZlRWxlbWVudDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFiaW5kZXhDb21wYXJhdG9yKGE6IElucHV0RWxlbWVudCwgYjogSW5wdXRFbGVtZW50KSB7XG4gIGNvbnN0IHZhbHVlQSA9IGEudGFiaW5kZXggfHwgYS50YWJJbmRleDtcbiAgY29uc3QgdmFsdWVCID0gYi50YWJpbmRleCB8fCBiLnRhYkluZGV4O1xuICByZXR1cm4gdmFsdWVBID09PSB2YWx1ZUIgPyAwIDogdmFsdWVBID4gdmFsdWVCID8gMSA6IC0xO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbkdhaW5Gb2N1c09wdGlvbnMge1xuICBtaW5UYWJpbmRleD86IG51bWJlcjtcbiAgbWF4VGFiaW5kZXg/OiBudW1iZXI7XG4gIGlzRW1wdHk/OiBib29sZWFuO1xuICBpc05vdEVtcHR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMgZXh0ZW5kcyBDYW5HYWluRm9jdXNPcHRpb25zIHtcbiAgc29ydEJ5VGFiSW5kZXg/OiBib29sZWFuO1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5IYXZlRm9jdXMoaW5wdXQ6IElucHV0RWxlbWVudCwgb3B0cz86IENhbkdhaW5Gb2N1c09wdGlvbnMpOiBib29sZWFuIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlO1xuICBpZiAob3B0cz8uaXNFbXB0eSAmJiBvcHRzLmlzTm90RW1wdHkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIGJvdGggb3B0aW9ucyBvbmx5RW1wdHlJbnB1dCBhbmQgb25seU5vdEVtcHR5SW5wdXQgYXQgdGhlIHNhbWUgdGltZS4gUGxlYXNlIHVzZSBvbmx5IG9uZSBvZiB0aGVtLicpO1xuICByZXR1cm4gKFxuICAgIC8vIEV4Y2x1ZGUgZGlzYWJsZWQgZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuZGlzYWJsZWQsIGZhbHNlKSAmJlxuICAgIC8vIEV4Y2x1ZGUgaGlkZGVuIGVsZW1lbnRcbiAgICAhdG9Cb29sZWFuKGlucHV0LmhpZGRlbiwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBtaW5UYWJJbmRleCA8IGVsZW1lbnQudGFiSW5kZXhcbiAgICAoaXNOaWwob3B0cz8ubWluVGFiaW5kZXgpIHx8IHRvTnVtYmVyKGlucHV0LnRhYkluZGV4LCBpbnB1dC50YWJpbmRleCkgPiBvcHRzLm1pblRhYmluZGV4KSAmJlxuICAgIC8vIEV4Y2x1ZGUgbWF4VGFiSW5kZXggPiBlbGVtZW50LnRhYkluZGV4XG4gICAgKGlzTmlsKG9wdHM/Lm1heFRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpIDwgb3B0cy5tYXhUYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG5vdCBuaWwgaW5wdXQgdmFsdWVcbiAgICAoIW9wdHM/LmlzRW1wdHkgfHwgaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSkgJiZcbiAgICAvLyBFeGNsdWRlIG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cz8uaXNOb3RFbXB0eSB8fCBpc05vdE5pbE9yQmxhbmsoaW5wdXQudmFsdWUpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogSW5wdXRFbGVtZW50W10ge1xuICBvcHRzID0geyBzb3J0QnlUYWJJbmRleDogZmFsc2UsIC4uLm9wdHMgfTtcblxuICAvLyBGb2N1cyB0byBmaXJzdCBpbnB1dFxuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzOiBJbnB1dEVsZW1lbnRbXSA9IGVsZW1lbnRzXG5cbiAgICAvLyBUcmFuc2Zvcm0gdG8gaW5wdXRcbiAgICAubWFwKGFzSW5wdXRFbGVtZW50KVxuXG4gICAgLmZpbHRlcigoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVkID0gY2FuSGF2ZUZvY3VzKGlucHV0LCBvcHRzKTtcbiAgICAgIC8vIERFQlVHXG4gICAgICBpZiAoaW5wdXQgJiYgb3B0cy5kZWJ1ZylcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2lucHV0c10gRm9jdXNhYmxlIGlucHV0IHtjYW5Gb2N1czogJHtpbmNsdWRlZH0sIHRhYkluZGV4OiAke2lucHV0LnRhYkluZGV4IHx8IGlucHV0LnRhYmluZGV4fX1gLCBpbnB1dCk7XG4gICAgICByZXR1cm4gaW5jbHVkZWQ7XG4gICAgfSk7XG5cbiAgLy8gU29ydCBieSB0YWJJbmRleFxuICBpZiAob3B0cy5zb3J0QnlUYWJJbmRleCkge1xuICAgIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzLnNvcnQodGFiaW5kZXhDb21wYXJhdG9yKTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNOZXh0SW5wdXQ8VCA9IGFueT4oZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8VD4+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogYm9vbGVhbiB7XG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWluVGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gZXZlbnQudGFyZ2V0LnRhYkluZGV4IHx8IGV2ZW50LnRhcmdldC50YWJpbmRleCA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1pblRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1swXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNQcmV2aW91c0lucHV0PFQgPSBhbnk+KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFQ+Piwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1heFRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IGV2ZW50LnRhcmdldC50YWJJbmRleCB8fCBldmVudC50YXJnZXQudGFiaW5kZXggOiB1bmRlZmluZWQ7XG5cbiAgLy8gR2V0IGZvY3VzYWJsZSBpbnB1dCBlbGVtZW50c1xuICBjb25zdCBmb2N1c2FibGVJbnB1dHM6IElucHV0RWxlbWVudFtdID0gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50cywgeyBtYXhUYWJpbmRleCwgLi4ub3B0cyB9KTtcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZvY3VzYWJsZUlucHV0cykpIHtcbiAgICAvLyBGb2N1cyBvbiBsYXN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1tmb2N1c2FibGVJbnB1dHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2sobWFzazogKHN0cmluZyB8IFJlZ0V4cClbXSk6IG51bWJlcltdW10ge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGZpcnN0X2luZGV4OiBudW1iZXI7XG4gIGxldCBsYXN0X2luZGV4OiBudW1iZXI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSAwICYmIG1hc2tbaV0udG9TdHJpbmcoKSA9PT0gJy9bKy1dLycpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1RPRE8gcHVzaCBzdGFydCBtYXNrJywgeyBpLCBtYXNrOiBtYXNrW2ldLnRvU3RyaW5nKCkgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKFswLCAwXSk7XG4gICAgfSBlbHNlIGlmIChtYXNrW2ldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoaXNOaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKGZpcnN0X2luZGV4KSkge1xuICAgICAgICBsYXN0X2luZGV4ID0gaSAtIDE7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICAgICAgICBmaXJzdF9pbmRleCA9IG51bGw7XG4gICAgICAgIGxhc3RfaW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobWFza1ttYXNrLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgbGFzdF9pbmRleCA9IG1hc2subGVuZ3RoIC0gMTtcbiAgICByZXN1bHQucHVzaChbZmlyc3RfaW5kZXgsIGxhc3RfaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRSYW5nZUZyb21DYXJldEluZGV4KGNhcmV0SW5kZXg6IG51bWJlciwgaW5wdXRSYW5nZXM6IG51bWJlcltdW10pOiBudW1iZXJbXSB7XG4gIGZvciAoY29uc3QgaW5wdXRSYW5nZSBvZiBpbnB1dFJhbmdlcykge1xuICAgIGlmIChjYXJldEluZGV4ID49IGlucHV0UmFuZ2VbMF0gJiYgY2FyZXRJbmRleCA8PSBpbnB1dFJhbmdlWzFdICsgMSkge1xuICAgICAgcmV0dXJuIGlucHV0UmFuZ2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
|
|
@@ -1250,7 +1250,7 @@ class DateUtils {
|
|
|
1250
1250
|
static isAtDay(date, weekday, timezone) {
|
|
1251
1251
|
let momentDate = date && fromDateISOString(date);
|
|
1252
1252
|
if (!momentDate)
|
|
1253
|
-
return
|
|
1253
|
+
return false;
|
|
1254
1254
|
if (timezone)
|
|
1255
1255
|
momentDate = momentDate.clone().tz(timezone).startOf('day');
|
|
1256
1256
|
return momentDate.day() === weekday;
|
|
@@ -1481,8 +1481,7 @@ function moveInputCaretToSeparator(event, separator, forward) {
|
|
|
1481
1481
|
// DEBUG
|
|
1482
1482
|
//console.debug("Input text value: ", value);
|
|
1483
1483
|
//console.debug("Cursor at: ", caretPosition);
|
|
1484
|
-
//console.debug("Text after cursor: ", value.
|
|
1485
|
-
//console.debug("Next separator at: ", value.indexOf(separator, caretPosition));
|
|
1484
|
+
//console.debug("Text after cursor: ", value.substring(caretPosition));
|
|
1486
1485
|
forward = forward !== false;
|
|
1487
1486
|
const separatorIndex = forward ? value.indexOf(separator, caretPosition) : value.lastIndexOf(separator, caretPosition);
|
|
1488
1487
|
if (separatorIndex !== -1 && ((forward && separatorIndex + 1 < value.length) || (!forward && separatorIndex > 0))) {
|
|
@@ -1517,7 +1516,7 @@ function filterNumberInput(event, allowDecimals, decimalSeparator) {
|
|
|
1517
1516
|
}
|
|
1518
1517
|
else {
|
|
1519
1518
|
//input command entered of delete, backspace or one of the 4 direction up, down, left and right, or negative sign
|
|
1520
|
-
if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode
|
|
1519
|
+
if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode === 46 || event.which === 8 || event.keyCode === 9 || event.keyCode === 45) {
|
|
1521
1520
|
//console.debug('input command entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);
|
|
1522
1521
|
// OK
|
|
1523
1522
|
}
|
|
@@ -1571,19 +1570,24 @@ function tabindexComparator(a, b) {
|
|
|
1571
1570
|
function canHaveFocus(input, opts) {
|
|
1572
1571
|
if (!input)
|
|
1573
1572
|
return false;
|
|
1573
|
+
if (opts?.isEmpty && opts.isNotEmpty)
|
|
1574
|
+
throw new Error('Cannot use both options onlyEmptyInput and onlyNotEmptyInput at the same time. Please use only one of them.');
|
|
1575
|
+
return (
|
|
1574
1576
|
// Exclude disabled element
|
|
1575
|
-
|
|
1577
|
+
!toBoolean(input.disabled, false) &&
|
|
1576
1578
|
// Exclude hidden element
|
|
1577
1579
|
!toBoolean(input.hidden, false) &&
|
|
1578
1580
|
// Exclude minTabIndex < element.tabIndex
|
|
1579
|
-
(isNil(opts
|
|
1581
|
+
(isNil(opts?.minTabindex) || toNumber(input.tabIndex, input.tabindex) > opts.minTabindex) &&
|
|
1580
1582
|
// Exclude maxTabIndex > element.tabIndex
|
|
1581
|
-
(isNil(opts
|
|
1583
|
+
(isNil(opts?.maxTabindex) || toNumber(input.tabIndex, input.tabindex) < opts.maxTabindex) &&
|
|
1584
|
+
// Exclude not nil input value
|
|
1585
|
+
(!opts?.isEmpty || isNilOrBlank(input.value)) &&
|
|
1582
1586
|
// Exclude nil input value
|
|
1583
|
-
(!opts
|
|
1587
|
+
(!opts?.isNotEmpty || isNotNilOrBlank(input.value)));
|
|
1584
1588
|
}
|
|
1585
1589
|
function getFocusableInputElements(elements, opts) {
|
|
1586
|
-
opts = { sortByTabIndex: false,
|
|
1590
|
+
opts = { sortByTabIndex: false, ...opts };
|
|
1587
1591
|
// Focus to first input
|
|
1588
1592
|
const filteredElements = elements
|
|
1589
1593
|
// Transform to input
|
|
@@ -8113,6 +8117,69 @@ class EntityUtils {
|
|
|
8113
8117
|
}
|
|
8114
8118
|
return target;
|
|
8115
8119
|
}
|
|
8120
|
+
/**
|
|
8121
|
+
* Recursively converts any object, entity, or array to a plain JavaScript object.
|
|
8122
|
+
* This method handles entities by calling their asObject() method, processes arrays recursively,
|
|
8123
|
+
* and provides protection against circular references.
|
|
8124
|
+
*
|
|
8125
|
+
* @param {any} source - The source object, entity, array, or primitive value to convert
|
|
8126
|
+
* @param {any} [opts] - Optional configuration object passed to entity asObject() methods
|
|
8127
|
+
* @param {WeakSet} [visited=new WeakSet()] - Internal parameter for circular reference detection
|
|
8128
|
+
* @returns {any} A plain JavaScript object representation of the source
|
|
8129
|
+
*
|
|
8130
|
+
* @example
|
|
8131
|
+
* // Convert a simple entity
|
|
8132
|
+
* const plainObject = EntityUtils.asObject(myEntity);
|
|
8133
|
+
*
|
|
8134
|
+
* @example
|
|
8135
|
+
* // Convert an array of entities
|
|
8136
|
+
* const plainArray = EntityUtils.asObject([entity1, entity2]);
|
|
8137
|
+
*
|
|
8138
|
+
* @example
|
|
8139
|
+
* // Convert with options
|
|
8140
|
+
* const result = EntityUtils.asObject(myEntity, { minify: true });
|
|
8141
|
+
*/
|
|
8142
|
+
static asObject(source, opts, visited = new WeakSet()) {
|
|
8143
|
+
if (!source)
|
|
8144
|
+
return source;
|
|
8145
|
+
if (Array.isArray(source))
|
|
8146
|
+
return source.map((item) => EntityUtils.asObject(item, opts, visited));
|
|
8147
|
+
if (EntityUtils.isEntity(source))
|
|
8148
|
+
return source.asObject(opts);
|
|
8149
|
+
if (typeof source === 'function')
|
|
8150
|
+
return undefined;
|
|
8151
|
+
if (typeof source !== 'object')
|
|
8152
|
+
return source;
|
|
8153
|
+
// Protection against circular references
|
|
8154
|
+
if (visited.has(source)) {
|
|
8155
|
+
console.warn('[EntityUtils.asObject] Circular reference detected, skipping object');
|
|
8156
|
+
return {}; // or return null based on your needs
|
|
8157
|
+
}
|
|
8158
|
+
visited.add(source);
|
|
8159
|
+
// Handle special objects
|
|
8160
|
+
if (isMoment(source) || typeof source.toISOString === 'function')
|
|
8161
|
+
return source.toISOString();
|
|
8162
|
+
if (source instanceof RegExp)
|
|
8163
|
+
return source.toString();
|
|
8164
|
+
// Create a copy
|
|
8165
|
+
const target = { ...source };
|
|
8166
|
+
// Serialize all properties recursively
|
|
8167
|
+
Object.keys(target).forEach((key) => {
|
|
8168
|
+
const value = target[key];
|
|
8169
|
+
// Handle arrays
|
|
8170
|
+
if (Array.isArray(value)) {
|
|
8171
|
+
target[key] = value.map((item) => EntityUtils.asObject(item, opts, visited));
|
|
8172
|
+
}
|
|
8173
|
+
// Handle objects (including entities)
|
|
8174
|
+
else if (value && typeof value === 'object') {
|
|
8175
|
+
target[key] = EntityUtils.asObject(value, opts, visited);
|
|
8176
|
+
}
|
|
8177
|
+
// Primitive values are already copied by spread operator
|
|
8178
|
+
});
|
|
8179
|
+
// Remove object from Set after processing
|
|
8180
|
+
visited.delete(source);
|
|
8181
|
+
return target;
|
|
8182
|
+
}
|
|
8116
8183
|
}
|
|
8117
8184
|
|
|
8118
8185
|
function suggestFromArray(items, value, filter, sortBy, sortDirection, opts) {
|