@ecodev/natural 61.0.1 → 61.0.2
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/lib/classes/abstract-detail.mjs +36 -33
- package/esm2022/lib/classes/abstract-editable-list.mjs +8 -6
- package/esm2022/lib/classes/abstract-list.mjs +74 -55
- package/esm2022/lib/classes/abstract-navigable-list.mjs +9 -9
- package/esm2022/lib/classes/cumulative-changes.mjs +3 -5
- package/esm2022/lib/classes/data-source.mjs +3 -2
- package/esm2022/lib/classes/query-variable-manager.mjs +3 -3
- package/esm2022/lib/directives/http-prefix.directive.mjs +4 -6
- package/esm2022/lib/modules/alert/alert.service.mjs +5 -7
- package/esm2022/lib/modules/alert/confirm.component.mjs +4 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +21 -19
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +22 -24
- package/esm2022/lib/modules/avatar/sources/source.mjs +2 -1
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +17 -18
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +4 -6
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +12 -12
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +4 -6
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +3 -3
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +3 -3
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +4 -6
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +4 -3
- package/esm2022/lib/modules/common/services/memory-storage.mjs +4 -6
- package/esm2022/lib/modules/common/services/seo.service.mjs +12 -11
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +38 -33
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +8 -6
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +13 -12
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +20 -19
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +18 -17
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +19 -18
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +11 -9
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +21 -19
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +7 -7
- package/esm2022/lib/modules/file/abstract-file.mjs +51 -47
- package/esm2022/lib/modules/file/component/file.component.mjs +44 -31
- package/esm2022/lib/modules/file/file-drop.directive.mjs +10 -13
- package/esm2022/lib/modules/file/file-select.directive.mjs +9 -12
- package/esm2022/lib/modules/file/file.service.mjs +13 -15
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +7 -8
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +9 -7
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +8 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +4 -2
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +63 -46
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +16 -18
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +12 -4
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +4 -6
- package/esm2022/lib/modules/icon/icon.directive.mjs +9 -9
- package/esm2022/lib/modules/logger/error-handler.mjs +7 -7
- package/esm2022/lib/modules/matomo/matomo.service.mjs +10 -9
- package/esm2022/lib/modules/panels/abstract-panel.mjs +23 -19
- package/esm2022/lib/modules/panels/panels.component.mjs +4 -4
- package/esm2022/lib/modules/panels/panels.service.mjs +49 -41
- package/esm2022/lib/modules/relations/relations.component.mjs +64 -35
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +15 -13
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +4 -2
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +5 -7
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +9 -11
- package/esm2022/lib/modules/search/group/group.component.mjs +12 -11
- package/esm2022/lib/modules/search/input/input.component.mjs +77 -63
- package/esm2022/lib/modules/search/search/search.component.mjs +29 -31
- package/esm2022/lib/modules/select/abstract-select.component.mjs +66 -39
- package/esm2022/lib/modules/select/select/select.component.mjs +51 -48
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +21 -8
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +27 -19
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +3 -3
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +30 -24
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +3 -3
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +13 -15
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +42 -44
- package/esm2022/lib/modules/stamp/stamp.component.mjs +4 -3
- package/esm2022/lib/modules/table-button/table-button.component.mjs +16 -13
- package/esm2022/lib/services/abstract-model.service.mjs +17 -7
- package/esm2022/lib/services/debounce.service.mjs +7 -9
- package/esm2022/lib/services/enum.service.mjs +4 -6
- package/esm2022/lib/services/link-mutation.service.mjs +8 -6
- package/esm2022/lib/services/persistence.service.mjs +6 -8
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +3 -3
- package/fesm2022/ecodev-natural.mjs +1234 -1051
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -3,22 +3,26 @@ import { Observable } from 'rxjs';
|
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class NaturalAbstractPanel {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
6
|
+
destroyRef = inject(DestroyRef);
|
|
7
|
+
/**
|
|
8
|
+
* The data property is the container where the resolved content is stored
|
|
9
|
+
* When loading a component from a panel opening (dialog), receives the data provided by the service
|
|
10
|
+
*/
|
|
11
|
+
data = {};
|
|
12
|
+
/**
|
|
13
|
+
* Bind isFrontPanel style class on root component
|
|
14
|
+
*/
|
|
15
|
+
isFrontPanel = false;
|
|
16
|
+
/**
|
|
17
|
+
* Bind isPanel style class on root component
|
|
18
|
+
*/
|
|
19
|
+
isPanel = false;
|
|
20
|
+
/**
|
|
21
|
+
* Merging of data provided by the very root component (that is in a route context) and inherited data through panels
|
|
22
|
+
* TODO: provide type with available attributes
|
|
23
|
+
*/
|
|
24
|
+
panelData;
|
|
25
|
+
panelService;
|
|
22
26
|
/**
|
|
23
27
|
* Bind click on panels, to allow the selection of those who are behind
|
|
24
28
|
*/
|
|
@@ -53,8 +57,8 @@ export class NaturalAbstractPanel {
|
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
|
-
static
|
|
57
|
-
static
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
61
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractPanel, isStandalone: true, host: { listeners: { "click": "clickPanel()" }, properties: { "class.isFrontPanel": "this.isFrontPanel", "class.isPanel": "this.isPanel" } }, ngImport: i0 });
|
|
58
62
|
}
|
|
59
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractPanel, decorators: [{
|
|
60
64
|
type: Directive,
|
|
@@ -69,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
69
73
|
type: HostListener,
|
|
70
74
|
args: ['click']
|
|
71
75
|
}] } });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHdkYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHOUQsTUFBTSxPQUFPLG9CQUFvQjtJQUNWLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQ7OztPQUdHO0lBQ0ksSUFBSSxHQUFRLEVBQUUsQ0FBQztJQUV0Qjs7T0FFRztJQUN1QyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRS9EOztPQUVHO0lBQ2tDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFckQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFvQjtJQUM3QixZQUFZLENBQXdCO0lBRTNDOztPQUVHO0lBRUksVUFBVTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLFNBQTJCO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztnQkFDbEQsa0dBQWtHO2dCQUNsRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDbEYsSUFBSSxDQUFDLElBQUksR0FBRzt3QkFDUixHQUFHLElBQUksQ0FBQyxJQUFJO3dCQUNaLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJO3dCQUN2QixLQUFLLEVBQUUsS0FBSztxQkFDZixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxJQUFJLEdBQUc7b0JBQ1IsR0FBRyxJQUFJLENBQUMsSUFBSTtvQkFDWixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtpQkFDekIsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQzt1R0E1RFEsb0JBQW9COzJGQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDOzhCQVlpQixZQUFZO3NCQUFyRCxXQUFXO3VCQUFDLG9CQUFvQjtnQkFLSSxPQUFPO3NCQUEzQyxXQUFXO3VCQUFDLGVBQWU7Z0JBYXJCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVzdHJveVJlZiwgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXR1cmFsUGFuZWxzU2VydmljZX0gZnJvbSAnLi9wYW5lbHMuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxQYW5lbERhdGF9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBEaXJlY3RpdmUoe3N0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdFBhbmVsIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBwcm9wZXJ0eSBpcyB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSByZXNvbHZlZCBjb250ZW50IGlzIHN0b3JlZFxuICAgICAqIFdoZW4gbG9hZGluZyBhIGNvbXBvbmVudCBmcm9tIGEgcGFuZWwgb3BlbmluZyAoZGlhbG9nKSwgcmVjZWl2ZXMgdGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YTogYW55ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGlzRnJvbnRQYW5lbCBzdHlsZSBjbGFzcyBvbiByb290IGNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaXNGcm9udFBhbmVsJykgcHVibGljIGlzRnJvbnRQYW5lbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQmluZCBpc1BhbmVsIHN0eWxlIGNsYXNzIG9uIHJvb3QgY29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pc1BhbmVsJykgcHVibGljIGlzUGFuZWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdpbmcgb2YgZGF0YSBwcm92aWRlZCBieSB0aGUgdmVyeSByb290IGNvbXBvbmVudCAodGhhdCBpcyBpbiBhIHJvdXRlIGNvbnRleHQpIGFuZCBpbmhlcml0ZWQgZGF0YSB0aHJvdWdoIHBhbmVsc1xuICAgICAqIFRPRE86IHByb3ZpZGUgdHlwZSB3aXRoIGF2YWlsYWJsZSBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHVibGljIHBhbmVsRGF0YT86IE5hdHVyYWxQYW5lbERhdGE7XG4gICAgcHVibGljIHBhbmVsU2VydmljZT86IE5hdHVyYWxQYW5lbHNTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQmluZCBjbGljayBvbiBwYW5lbHMsIHRvIGFsbG93IHRoZSBzZWxlY3Rpb24gb2YgdGhvc2Ugd2hvIGFyZSBiZWhpbmRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIGNsaWNrUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0Zyb250UGFuZWwgJiYgdGhpcy5wYW5lbFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlLmdvVG9QYW5lbEJ5Q29tcG9uZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gcGFuZWwgb3BlbnMgYW5kIGNvbXBvbmVudCBpcyBsb2FkZWRcbiAgICAgKiBSdW5zIGJlZm9yZSBuZ09uSW5pdCgpXG4gICAgICovXG4gICAgcHVibGljIGluaXRQYW5lbChwYW5lbERhdGE6IE5hdHVyYWxQYW5lbERhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYW5lbERhdGEgPSBwYW5lbERhdGE7XG4gICAgICAgIHRoaXMuaXNQYW5lbCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMucGFuZWxEYXRhPy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lbERhdGEuZGF0YS5tb2RlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gbW9kZWwgdG8ga25vdyB3aGVuIEFwb2xsbyBjYWNoZSBpcyBjaGFuZ2VkLCBzbyB3ZSBjYW4gcmVmbGVjdCBpdCBpbnRvIGBkYXRhLm1vZGVsYFxuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxEYXRhLmRhdGEubW9kZWwucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wYW5lbERhdGE/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnBhbmVsRGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -3,18 +3,18 @@ import { ActivatedRoute } from '@angular/router';
|
|
|
3
3
|
import { NaturalPanelsService } from './panels.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class NaturalPanelsComponent {
|
|
6
|
+
panelsService = inject(NaturalPanelsService);
|
|
6
7
|
// PanelsComponent is kind of a "ghost" component to respond to an url matcher in route config,
|
|
7
8
|
// An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/
|
|
8
9
|
constructor() {
|
|
9
|
-
this.panelsService = inject(NaturalPanelsService);
|
|
10
10
|
const route = inject(ActivatedRoute);
|
|
11
11
|
this.panelsService.start(route);
|
|
12
12
|
}
|
|
13
13
|
ngOnDestroy() {
|
|
14
14
|
this.panelsService.stop();
|
|
15
15
|
}
|
|
16
|
-
static
|
|
17
|
-
static
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: NaturalPanelsComponent, isStandalone: true, selector: "natural-panels", ngImport: i0, template: '', isInline: true });
|
|
18
18
|
}
|
|
19
19
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsComponent, decorators: [{
|
|
20
20
|
type: Component,
|
|
@@ -24,4 +24,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
24
24
|
standalone: true,
|
|
25
25
|
}]
|
|
26
26
|
}], ctorParameters: () => [] });
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3BhbmVscy9wYW5lbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWEsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFPdEQsTUFBTSxPQUFPLHNCQUFzQjtJQUNkLGFBQWEsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUU5RCwrRkFBK0Y7SUFDL0YscUlBQXFJO0lBQ3JJO1FBQ0ksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO3VHQWJRLHNCQUFzQjsyRkFBdEIsc0JBQXNCLDBFQUhyQixFQUFFOzsyRkFHSCxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge05hdHVyYWxQYW5lbHNTZXJ2aWNlfSBmcm9tICcuL3BhbmVscy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXBhbmVscycsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQYW5lbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFuZWxzU2VydmljZSA9IGluamVjdChOYXR1cmFsUGFuZWxzU2VydmljZSk7XG5cbiAgICAvLyBQYW5lbHNDb21wb25lbnQgaXMga2luZCBvZiBhIFwiZ2hvc3RcIiBjb21wb25lbnQgdG8gcmVzcG9uZCB0byBhbiB1cmwgbWF0Y2hlciBpbiByb3V0ZSBjb25maWcsXG4gICAgLy8gQW4gVXJsTWF0Y2hlciAobWF0Y2hlciBhdHRyaWJ1dGUpIGlzIHJlcXVpcmVkIHRvIGNhdGNoIHVybHMgd2l0aCBhbiB1bmRlZmluZWQgbnVtYmVyIG9mIHBhcmFtcyBpbiB1cmwgYWZ0ZXIgYSBnaXZlbiBwYXJhbSAvcGFuZWxzL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gICAgICAgIHRoaXMucGFuZWxzU2VydmljZS5zdGFydChyb3V0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVsc1NlcnZpY2Uuc3RvcCgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -19,52 +19,60 @@ function compareConfigs(a, b) {
|
|
|
19
19
|
* @dynamic
|
|
20
20
|
*/
|
|
21
21
|
export class NaturalPanelsService {
|
|
22
|
+
router = inject(Router);
|
|
23
|
+
dialog = inject(MatDialog);
|
|
24
|
+
injector = inject(Injector);
|
|
25
|
+
hooksConfig = inject(PanelsHooksConfig);
|
|
26
|
+
panelWidth = '960px';
|
|
22
27
|
/**
|
|
23
28
|
* Because of this static property Panels are **not** compatible with SSR.
|
|
24
29
|
* And we cannot make it non-static, because `UrlMatcher` cannot be injected.
|
|
25
30
|
*/
|
|
26
|
-
static
|
|
31
|
+
static _opened = false;
|
|
27
32
|
static get opened() {
|
|
28
33
|
return this._opened;
|
|
29
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Stream that emits when all open dialog have finished closing
|
|
37
|
+
*/
|
|
38
|
+
afterAllClosed = new Subject();
|
|
39
|
+
/**
|
|
40
|
+
* Cache for panels counter. Works more like an ID.
|
|
41
|
+
* Is used to give an unique identifier to multiple similar panels configurations
|
|
42
|
+
*/
|
|
43
|
+
counter = 1;
|
|
44
|
+
/**
|
|
45
|
+
* Class applied to dialog overlay related with panels
|
|
46
|
+
* If change, change CSS too
|
|
47
|
+
*/
|
|
48
|
+
panelClass = 'panel';
|
|
49
|
+
/**
|
|
50
|
+
* Cache for panels setup before navigation change.
|
|
51
|
+
* Used to detect panels openings/closings and adapt for new configuration
|
|
52
|
+
*/
|
|
53
|
+
oldFullConfig = [];
|
|
54
|
+
/**
|
|
55
|
+
* Cache for subscription stop
|
|
56
|
+
*/
|
|
57
|
+
routeSub;
|
|
58
|
+
/**
|
|
59
|
+
* Cache for subscription stop
|
|
60
|
+
*/
|
|
61
|
+
navSub;
|
|
62
|
+
/**
|
|
63
|
+
* Horizontal gaps between panels
|
|
64
|
+
*/
|
|
65
|
+
panelsOffsetH = 35;
|
|
66
|
+
/**
|
|
67
|
+
* Vertical gaps between panels
|
|
68
|
+
*/
|
|
69
|
+
panelsOffsetV = 40;
|
|
70
|
+
/**
|
|
71
|
+
* Cache of previous screen size
|
|
72
|
+
* Used to change panels stack orientation on small screens
|
|
73
|
+
*/
|
|
74
|
+
isVertical = false;
|
|
30
75
|
constructor() {
|
|
31
|
-
this.router = inject(Router);
|
|
32
|
-
this.dialog = inject(MatDialog);
|
|
33
|
-
this.injector = inject(Injector);
|
|
34
|
-
this.hooksConfig = inject(PanelsHooksConfig);
|
|
35
|
-
this.panelWidth = '960px';
|
|
36
|
-
/**
|
|
37
|
-
* Stream that emits when all open dialog have finished closing
|
|
38
|
-
*/
|
|
39
|
-
this.afterAllClosed = new Subject();
|
|
40
|
-
/**
|
|
41
|
-
* Cache for panels counter. Works more like an ID.
|
|
42
|
-
* Is used to give an unique identifier to multiple similar panels configurations
|
|
43
|
-
*/
|
|
44
|
-
this.counter = 1;
|
|
45
|
-
/**
|
|
46
|
-
* Class applied to dialog overlay related with panels
|
|
47
|
-
* If change, change CSS too
|
|
48
|
-
*/
|
|
49
|
-
this.panelClass = 'panel';
|
|
50
|
-
/**
|
|
51
|
-
* Cache for panels setup before navigation change.
|
|
52
|
-
* Used to detect panels openings/closings and adapt for new configuration
|
|
53
|
-
*/
|
|
54
|
-
this.oldFullConfig = [];
|
|
55
|
-
/**
|
|
56
|
-
* Horizontal gaps between panels
|
|
57
|
-
*/
|
|
58
|
-
this.panelsOffsetH = 35;
|
|
59
|
-
/**
|
|
60
|
-
* Vertical gaps between panels
|
|
61
|
-
*/
|
|
62
|
-
this.panelsOffsetV = 40;
|
|
63
|
-
/**
|
|
64
|
-
* Cache of previous screen size
|
|
65
|
-
* Used to change panels stack orientation on small screens
|
|
66
|
-
*/
|
|
67
|
-
this.isVertical = false;
|
|
68
76
|
const breakpointObserver = inject(BreakpointObserver);
|
|
69
77
|
// Watch media to know if display panels horizontally or vertically
|
|
70
78
|
breakpointObserver
|
|
@@ -309,8 +317,8 @@ export class NaturalPanelsService {
|
|
|
309
317
|
dialog.updatePosition(position);
|
|
310
318
|
}
|
|
311
319
|
}
|
|
312
|
-
static
|
|
313
|
-
static
|
|
320
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
321
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, providedIn: 'root' });
|
|
314
322
|
}
|
|
315
323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, decorators: [{
|
|
316
324
|
type: Injectable,
|
|
@@ -318,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
318
326
|
providedIn: 'root',
|
|
319
327
|
}]
|
|
320
328
|
}], ctorParameters: () => [] });
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFNSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUss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QUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7WUFDNUYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQzs4R0FuWFEsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7Z2V0U3RhY2tDb25maWd9IGZyb20gJy4vcGFuZWxzLnVybG1hdGNoZXInO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUGFuZWxDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsRGF0YSxcbiAgICBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgIE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZSxcbiAgICBQYW5lbHNIb29rc0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHNlZ21lbnRzVG9TdHJpbmcoc2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQ29uZmlncyhhOiBOYXR1cmFsUGFuZWxDb25maWcsIGI6IE5hdHVyYWxQYW5lbENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLnJvdXRlLnBhdGggPT09IGIucm91dGUucGF0aCAmJiBhLnJ1bGUgPT09IGIucnVsZSAmJiBpc0VxdWFsKGEucGFyYW1zLCBiLnBhcmFtcyk7XG59XG5cbi8qKlxuICogVE9ETzogaW1wbGVtZW50IHJvdXRlIHVwZGF0ZSB3aGVuIGNsb3NpbmcgZGlhbG9nIHdpdGggZXNjYXBlXG4gKiBAZHluYW1pY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsUGFuZWxzU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByaXZhdGUgaG9va3NDb25maWcgPSBpbmplY3Q8TmF0dXJhbFBhbmVsc0hvb2tzQ29uZmlnPihQYW5lbHNIb29rc0NvbmZpZyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhbmVsV2lkdGggPSAnOTYwcHgnO1xuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmVydGljYWwgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgICAgICAgLy8gIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyXG4gICAgICAgICAgICAub2JzZXJ2ZShCcmVha3BvaW50cy5YU21hbGwpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVydGljYWwgPSByZXN1bHQubWF0Y2hlcztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1YiA9IHJvdXRlLnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHMoc2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICAgIGlmICghKGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWJvcnQgYW5kIHByb3BhZ2F0ZSBuYXZpZ2F0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoZXYudXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgaGFja2lzaDogd2UgaGFyZGNvZGUgYW4gaW1wb3NzaWJsZSB1cmwgdG8gdHJpZ2dlciBub3JtYWwgbmF2aWdhdGlvbiBlcnJvciBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYW5lbHMtcmVhY2hlZC1pbnZhbGlkLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcblxuICAgICAgICAgICAgLy8gcGMgc3RhbmRzIGZvciBcInBhbmVsIGNvdW50ZXJcIiwgcmVxdWlyZWQgdG8gZ2l2ZSBhbiBpZGVudGlmaWNhdGlvbiB0byBwYW5lbHMgd2l0aCBleGFjdCBzYW1lIGNvbmZpZ1xuICAgICAgICAgICAgLy8gRS5nIC9uZXdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVybCA9IGV2LnVybCArICc7cGM9JyArIHRoaXMuY291bnRlcjtcblxuICAgICAgICAgICAgLy8gU2VnbWVudHMgbWF0Y2hpbmcgZnJvbSB3YW50ZWQgdXJsLiBFLmcgfiBbJ25ldyddXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVclNlZ21lbnRzID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkucGFyc2Uod2FudGVkVXJsKS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG5cbiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGFueSBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHdhbnRlZFVyU2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLCB0aGlzLmluamVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHdhbnRlZENvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwod2FudGVkQ29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZXMuIEUuZyBbJ29iamVjdGl2ZScsICdvYmplY3RpdmUnLCAxMjMsICdyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWdtZW50cyA9IGZsYXR0ZW4oXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubWFwKGQgPT4gZC5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExhc3Qgc2VnbWVudC4gRS5nIFsncmlzayddXG4gICAgICAgICAgICBjb25zdCBsYXN0T2ZDdXJyZW50U2VnbWVudHMgPSBjdXJyZW50U2VnbWVudHMuc2xpY2UoLTEpO1xuXG4gICAgICAgICAgICAvLyBDb25maWcgZm9yIFsncmlzaycsICduZXcnXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuZFdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKFxuICAgICAgICAgICAgICAgIGxhc3RPZkN1cnJlbnRTZWdtZW50cy5jb25jYXQod2FudGVkVXJTZWdtZW50cyksXG4gICAgICAgICAgICAgICAgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjdXJyZW50QW5kV2FudGVkQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBnaXZlbiBjb25maWd1cmF0aW9uIHRvIGFkZCBpbiB0aGUgZW5kIG9mIGN1cnJlbnQgdXJsXG4gICAgICogTmV1dHJhbGl6ZXMgcm91dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9ySGFuZGxlciA9IHRoaXMucm91dGVyLmVycm9ySGFuZGxlcjtcblxuICAgICAgICAvLyBOdWxsaWZ5IGVycm9yIGhhbmRsZXIgKHdpbGwgYmUgZGUtbmV1dHJhbGl6ZWQgYWZ0ZXIgcm91dGUgcmVkaXJlY3Rpb24pXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHNhbWUgdXJsICsgL3Jpc2svbmV3IFJlc3VsdCA6IC9yaXNrL3Jpc2svbmV3XG4gICAgICAgIGNvbnN0IG5ld1VybCA9IGNvbmZpZy5tYXAoY29uZiA9PiBzZWdtZW50c1RvU3RyaW5nKGNvbmYucm91dGUuc2VnbWVudHMpKS5qb2luKCcvJyk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwgKyAnLycgKyBuZXdVcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgbmF2aWdhdGlvbiBoYXMgZW5kZWQsIHJlc3RvcmUgb3JpZ2luYWwgZXJyb3IgaGFuZGxlciBiZWNhdXNlIGhlJ3Mgbm90IGEgYmFkIGd1eVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gb3JpZ2luYWxFcnJvckhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BhbmVsQnlDb21wb25lbnQoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5nZXRQYW5lbEluZGV4KGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QZW51bHRpbWF0ZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIG5ldyB1cmwgdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSBzZWdtZW50cyBmcm9tIHRoZSBwYW5lbHMgd2Ugd2FudCB0byBzdGF5IG9wZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9QYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBFeHRyYWN0cyB1cmwgc2VnbWVudHMgZnJvbSBuZXh0IHBhbmVsIHVudGlsIGxhc3Qgb25lXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzXG4gICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgLm1hcChkaWFsb2cgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50c1RvU3RyaW5nKGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBleHRyYSBzZWdtZW50cyBhbmQgcmVkaXJlY3RzIHRvIHJvb3RcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwucmVwbGFjZSgnLycgKyB1cmwsICcnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW5nIGEgcGFuZWwgaXMgZXF1aXZhbGVudCB0byBjbG9zZSBhbGwgdGhvc2UgdGhhdCBhcmUgaW4gZnJvbnQgb2YgaGltXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHBhbmVsIGluIHN0YWNrLiBUaGUgbW9zdCBiZWhpbmQgKHRoZSBmaXJzdCBvbmUpIGlzIDAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBsYXN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gVXBkYXRlIG5ldyBwYW5lbHMgc2V0IHBvc2l0aW9uc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxOyBpID49IGluZGV4ICsgMTsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxhc3REaWFsb2cuYWZ0ZXJDbG9zZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIG5ldyBwYW5lbHMgaWYgdXJsIGhhcyBjaGFuZ2VkIHdpdGggbmV3IHNlZ21lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQYW5lbHMoc2VnbWVudHM6IFVybFNlZ21lbnRbXSwgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB1cmwgc2VnbWVudHMgaW50byBhIGNvbmZpZyB3aXRoIGNvbXBvbmVudCBuYW1lIGFuZCBJRCBpZiBwcm92aWRlZCBpbiBuZXh0IHNlZ21lbnRcbiAgICAgICAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBjb25maWdzLCBlYWNoIGNvbmZpZyByZXByZXNlbnRzIHRoZSBjb250ZW50IHJlbGF0aXZlIHRvIGEgcGFuZWxcbiAgICAgICAgY29uc3QgbmV3RnVsbENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLCByb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9SZW1vdmUgPSBkaWZmZXJlbmNlV2l0aCh0aGlzLm9sZEZ1bGxDb25maWcsIG5ld0Z1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvQWRkID0gZGlmZmVyZW5jZVdpdGgobmV3RnVsbENvbmZpZywgdGhpcy5vbGRGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZk5leHRQYW5lbCA9IHRoaXMub2xkRnVsbENvbmZpZy5sZW5ndGggLSBjb25maWdzVG9SZW1vdmUubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBBZGQgYW5kIHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiAhY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSBhZGQgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBuZXdGdWxsQ29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYWxsIHNlcnZpY2VzLCB0aGVuIG9wZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWxzKFxuICAgICAgICBuZXdJdGVtc0NvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgICAgIGZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICk6IE9ic2VydmFibGU8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4oKTtcblxuICAgICAgICAvLyBSZXNvbHZlIGV2ZXJ5dGhpbmcgYmVmb3JlIG9wZW5pbmcgYSBzaW5nbGUgcGFuZWxcbiAgICAgICAgY29uc3QgcmVzb2x2ZXMgPSBuZXdJdGVtc0NvbmZpZy5tYXAoY29uZiA9PiB0aGlzLmdldFJlc29sdmVkRGF0YShjb25mKSk7XG5cbiAgICAgICAgLy8gRm9ya0pvaW4gZW1pdHMgd2hlbiBhbGwgcHJvbWlzZXMgYXJlIGV4ZWN1dGVkO1xuICAgICAgICBmb3JrSm9pbihyZXNvbHZlcykuc3Vic2NyaWJlKHJlc29sdmVkUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIC8vIEZvciBlYWNoIG5ldyBjb25maWcgZW50cnksIG9wZW4gYSBuZXcgcGFuZWxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3SXRlbXNDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBuZXdJdGVtc0NvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbURhdGE6IE5hdHVyYWxQYW5lbERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBvZiBhY3R1YWwgcGFuZWwgcm91dGVcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSByZXNvbHZlZCBieSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBpbiBjb21wb25lbnQgYnkgY2FsbGluZyB0aGlzLnBhbmVsRGF0YS5kYXRhLnh5elxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXNvbHZlZFJlc3VsdFtpXSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2FibGVPYmplY3RzOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaG9va3NDb25maWc/LmJlZm9yZU9wZW5QYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlc3VsdDogcmVzb2x2ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFuZWxzQ29uZmlnOiBmdWxsQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhID0gdGhpcy5ob29rc0NvbmZpZy5iZWZvcmVPcGVuUGFuZWwodGhpcy5pbmplY3RvciwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKGNvbmZpZy5jb21wb25lbnQsIGl0ZW1EYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV0uYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc29sdmVkRGF0YShjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZyk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICAgICAgaWYgKCFjb25maWcucmVzb2x2ZSB8fCAoY29uZmlnLnJlc29sdmUgJiYgT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvbHZlS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPHVua25vd24+PiA9IHt9O1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZy5pbmplY3RvcjtcblxuICAgICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIHJlc29sdmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZERhdGFba2V5XSA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gY29uZmlnLnJlc29sdmVba2V5XShjb25maWcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlc29sdmVkRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWwoY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxOYXR1cmFsQWJzdHJhY3RQYW5lbD4sIGRhdGE6IE5hdHVyYWxQYW5lbERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZjogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5wYW5lbENsYXNzLFxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQWJzdHJhY3RQYW5lbD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZik7XG5cbiAgICAgICAgLy8gUGFuZWxpc2FibGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMvZnVuY3Rpb25zXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0UGFuZWwoZGF0YSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UGFuZWxJbmRleChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KGluZGV4IC0gMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBwYW5lbCBwb3NpdGlvbiAoaW5kZXgpIGJ5IHNlYXJjaGluZyBtYXRjaGluZyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhbmVsSW5kZXgoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZmluZEluZGV4KGRpYWxvZyA9PiBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgcGFuZWxzIGZyb20gc3RhcnQgdW50aWwgZ2l2ZW4gaW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcGFuZWxzIHRoYXQgYXJlIHN0aWxsIG9wZW5lZCwgaWdub3JlIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5J2xsIGJlIGNsb3NlZFxuICAgICAgICBjb25zdCBhZmZlY3RlZEVsZW1lbnRzID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gYWZmZWN0ZWRFbGVtZW50c1tpXTtcblxuICAgICAgICAgICAgLy8gU2V0IGFsbCBwYW5lbHMgYXMgXCJoaWRkZW5cIiBleGNlcHQgbGFzdCBvbmUuIElzRnJvbnRQYW5lbCBhdHRyaWJ1dGUgY2F1c2VzIGEgQ1NTIHRoYXQgaGlkZXMgYm9keSB2aWEgaG9zdGJpbmRpbmdcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5pc0Zyb250UGFuZWwgPSBpID09PSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxTZXJ2aWNlID0gdGhpcztcblxuICAgICAgICAgICAgLy8gQXNzaWduIG9mZnNldFxuICAgICAgICAgICAgY29uc3QgZGVlcCA9IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMSAtIGk7XG5cbiAgICAgICAgICAgIGxldCBwb3NpdGlvbjogYW55ID0ge3JpZ2h0OiBkZWVwICogdGhpcy5wYW5lbHNPZmZzZXRIICsgJ3B4J307XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2FsICYmIGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGkgKiB0aGlzLnBhbmVsc09mZnNldFYgKyAncHgnO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ge3RvcDogdG9wLCByaWdodDogJzBweCd9O1xuICAgICAgICAgICAgICAgIGRpYWxvZy51cGRhdGVTaXplKHRoaXMucGFuZWxXaWR0aCwgYGNhbGMoMTAwJSAtICR7dG9wfSlgKTsgLy8gY2FsbCBiZWZvcmUgdXBkYXRlUG9zaXRpb25cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVNpemUodGhpcy5wYW5lbFdpZHRoLCBgMTAwJWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2cudXBkYXRlUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFNSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUNaLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQTJCLGlCQUFpQixDQUFDLENBQUM7SUFFekQsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUV0Qzs7O09BR0c7SUFDSyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN4QixNQUFNLEtBQUssTUFBTTtRQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ2EsY0FBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDckQ7OztPQUdHO0lBQ0ssT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNwQjs7O09BR0c7SUFDSyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBRTdCOzs7T0FHRztJQUNLLGFBQWEsR0FBeUIsRUFBRSxDQUFDO0lBRWpEOztPQUVHO0lBQ0ssUUFBUSxDQUFnQjtJQUVoQzs7T0FFRztJQUNLLE1BQU0sQ0FBZ0I7SUFFOUI7O09BRUc7SUFDSyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRTNCOztPQUVHO0lBQ0ssYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUUzQjs7O09BR0c7SUFDSyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCO1FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RCxvRUFBb0U7UUFDcEUsa0JBQWtCO2FBQ2IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7YUFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBcUI7UUFDOUIsb0JBQW9CLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU87WUFDWCxDQUFDO1lBRUQsdUNBQXVDO1lBQ3ZDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVaLG9HQUFvRztnQkFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFFeEQsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFZixxR0FBcUc7WUFDckcsV0FBVztZQUNYLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFakQsbURBQW1EO1lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFFcEcseUJBQXlCO1lBQ3pCLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXZHLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsMEVBQTBFO1lBQzFFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUN4RixDQUFDO1lBRUYsNkJBQTZCO1lBQzdCLE1BQU0scUJBQXFCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhELDZCQUE2QjtZQUM3QixNQUFNLHNCQUFzQixHQUFHLGNBQWMsQ0FDekMscUJBQXFCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQzlDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FDaEIsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssd0JBQXdCLENBQUMsTUFBNEI7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUV0RCx5RUFBeUU7UUFDekUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsMkRBQTJEO1FBQzNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2hFLHdGQUF3RjtZQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxJQUFJO1FBQ1Asb0JBQW9CLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLFNBQStCO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsS0FBYTtRQUNsQyx1REFBdUQ7UUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2FBQzlCLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQ2hCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNWLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVmLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUvRSxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxRQUFzQixFQUFFLE1BQWlDO1FBQzFFLDhGQUE4RjtRQUM5RixzRkFBc0Y7UUFDdEYsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVoRixJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hELHdCQUF3QjtZQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUNsRyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7YUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQ2QsY0FBb0MsRUFDcEMsVUFBZ0M7UUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFFdEQsbURBQW1EO1FBQ25ELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFeEUsaURBQWlEO1FBQ2pELFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDMUMsOENBQThDO1lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsSUFBSSxRQUFRLEdBQXFCO29CQUM3QiwrQkFBK0I7b0JBQy9CLE1BQU0sRUFBRSxNQUFNO29CQUVkLDJCQUEyQjtvQkFDM0Isc0RBQXNEO29CQUN0RCxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsZUFBZSxFQUFFLEVBQUU7aUJBQ3RCLENBQUM7Z0JBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDO29CQUNwQyxNQUFNLEtBQUssR0FBaUM7d0JBQ3hDLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixXQUFXLEVBQUUsTUFBTTt3QkFDbkIsY0FBYyxFQUFFLGNBQWM7d0JBQzlCLGdCQUFnQixFQUFFLFVBQVU7cUJBQy9CLENBQUM7b0JBRUYsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckYsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUEwQjtRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEYsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUF3QyxFQUFFLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxzQkFBMkQsRUFBRSxJQUFzQjtRQUNqRyxNQUFNLElBQUksR0FBb0I7WUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3RCLFFBQVEsRUFBRTtnQkFDTixHQUFHLEVBQUUsR0FBRztnQkFDUixLQUFLLEVBQUUsR0FBRzthQUNiO1NBQ0osQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUF1QixzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2Riw2Q0FBNkM7UUFDN0MsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhLENBQUMsU0FBK0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDWCxDQUFDO1FBRUQsdUZBQXVGO1FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5DLGtIQUFrSDtZQUNsSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBRTdDLGdCQUFnQjtZQUNoQixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU3QyxJQUFJLFFBQVEsR0FBUSxFQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLFFBQVEsR0FBRyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1lBQzVGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7dUdBblhRLG9CQUFvQjsyR0FBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgRGVmYXVsdFVybFNlcmlhbGl6ZXIsIE5hdmlnYXRpb25FcnJvciwgUm91dGVyLCBVcmxTZWdtZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkaWZmZXJlbmNlV2l0aCwgZmxhdHRlbiwgaXNFcXVhbH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge2dldFN0YWNrQ29uZmlnfSBmcm9tICcuL3BhbmVscy51cmxtYXRjaGVyJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFBhbmVsQ29uZmlnLFxuICAgIE5hdHVyYWxQYW5lbERhdGEsXG4gICAgTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCxcbiAgICBOYXR1cmFsUGFuZWxzSG9va3NDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGUsXG4gICAgUGFuZWxzSG9va3NDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBzZWdtZW50c1RvU3RyaW5nKHNlZ21lbnRzOiBVcmxTZWdtZW50W10pOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWdtZW50cy5tYXAocyA9PiBzLnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZUNvbmZpZ3MoYTogTmF0dXJhbFBhbmVsQ29uZmlnLCBiOiBOYXR1cmFsUGFuZWxDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5yb3V0ZS5wYXRoID09PSBiLnJvdXRlLnBhdGggJiYgYS5ydWxlID09PSBiLnJ1bGUgJiYgaXNFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpO1xufVxuXG4vKipcbiAqIFRPRE86IGltcGxlbWVudCByb3V0ZSB1cGRhdGUgd2hlbiBjbG9zaW5nIGRpYWxvZyB3aXRoIGVzY2FwZVxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBhbmVsc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIGhvb2tzQ29uZmlnID0gaW5qZWN0PE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZz4oUGFuZWxzSG9va3NDb25maWcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYW5lbFdpZHRoID0gJzk2MHB4JztcblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzdGF0aWMgcHJvcGVydHkgUGFuZWxzIGFyZSAqKm5vdCoqIGNvbXBhdGlibGUgd2l0aCBTU1IuXG4gICAgICogQW5kIHdlIGNhbm5vdCBtYWtlIGl0IG5vbi1zdGF0aWMsIGJlY2F1c2UgYFVybE1hdGNoZXJgIGNhbm5vdCBiZSBpbmplY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfb3BlbmVkID0gZmFsc2U7XG4gICAgcHVibGljIHN0YXRpYyBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gYWxsIG9wZW4gZGlhbG9nIGhhdmUgZmluaXNoZWQgY2xvc2luZ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhZnRlckFsbENsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBjb3VudGVyLiBXb3JrcyBtb3JlIGxpa2UgYW4gSUQuXG4gICAgICogSXMgdXNlZCB0byBnaXZlIGFuIHVuaXF1ZSBpZGVudGlmaWVyIHRvIG11bHRpcGxlIHNpbWlsYXIgcGFuZWxzIGNvbmZpZ3VyYXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBhcHBsaWVkIHRvIGRpYWxvZyBvdmVybGF5IHJlbGF0ZWQgd2l0aCBwYW5lbHNcbiAgICAgKiBJZiBjaGFuZ2UsIGNoYW5nZSBDU1MgdG9vXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbENsYXNzID0gJ3BhbmVsJztcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBwYW5lbHMgc2V0dXAgYmVmb3JlIG5hdmlnYXRpb24gY2hhbmdlLlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IHBhbmVscyBvcGVuaW5ncy9jbG9zaW5ncyBhbmQgYWRhcHQgZm9yIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbGRGdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBzdWJzY3JpcHRpb24gc3RvcFxuICAgICAqL1xuICAgIHByaXZhdGUgbmF2U3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRIID0gMzU7XG5cbiAgICAvKipcbiAgICAgKiBWZXJ0aWNhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRWID0gNDA7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBvZiBwcmV2aW91cyBzY3JlZW4gc2l6ZVxuICAgICAqIFVzZWQgdG8gY2hhbmdlIHBhbmVscyBzdGFjayBvcmllbnRhdGlvbiBvbiBzbWFsbCBzY3JlZW5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnRPYnNlcnZlciA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xuXG4gICAgICAgIC8vICBXYXRjaCBtZWRpYSB0byBrbm93IGlmIGRpc3BsYXkgcGFuZWxzIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5XG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoQnJlYWtwb2ludHMuWFNtYWxsKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlcnRpY2FsID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydChyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICAgICAgTmF0dXJhbFBhbmVsc1NlcnZpY2UuX29wZW5lZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm91dGVTdWIgPSByb3V0ZS51cmwuc3Vic2NyaWJlKHNlZ21lbnRzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFuZWxzKHNlZ21lbnRzLCByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmF2U3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldiA9PiB7XG4gICAgICAgICAgICBpZiAoIShldiBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFib3J0IGFuZCBwcm9wYWdhdGUgbmF2aWdhdGlvbiBlcnJvclxuICAgICAgICAgICAgaWYgKGV2LnVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IGhhY2tpc2g6IHdlIGhhcmRjb2RlIGFuIGltcG9zc2libGUgdXJsIHRvIHRyaWdnZXIgbm9ybWFsIG5hdmlnYXRpb24gZXJyb3IgbWVjaGFuaXNtXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgncGFuZWxzLXJlYWNoZWQtaW52YWxpZC11cmwnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb3VudGVyKys7XG5cbiAgICAgICAgICAgIC8vIHBjIHN0YW5kcyBmb3IgXCJwYW5lbCBjb3VudGVyXCIsIHJlcXVpcmVkIHRvIGdpdmUgYW4gaWRlbnRpZmljYXRpb24gdG8gcGFuZWxzIHdpdGggZXhhY3Qgc2FtZSBjb25maWdcbiAgICAgICAgICAgIC8vIEUuZyAvbmV3XG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVcmwgPSBldi51cmwgKyAnO3BjPScgKyB0aGlzLmNvdW50ZXI7XG5cbiAgICAgICAgICAgIC8vIFNlZ21lbnRzIG1hdGNoaW5nIGZyb20gd2FudGVkIHVybC4gRS5nIH4gWyduZXcnXVxuICAgICAgICAgICAgY29uc3Qgd2FudGVkVXJTZWdtZW50cyA9IG5ldyBEZWZhdWx0VXJsU2VyaWFsaXplcigpLnBhcnNlKHdhbnRlZFVybCkucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzO1xuXG4gICAgICAgICAgICAvLyBEb24ndCBtYXRjaCBhbnkgY29uZmlnXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRDb25maWcgPSBnZXRTdGFja0NvbmZpZyh3YW50ZWRVclNlZ21lbnRzLCByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcywgdGhpcy5pbmplY3Rvcik7XG5cbiAgICAgICAgICAgIGlmICh3YW50ZWRDb25maWcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKHdhbnRlZENvbmZpZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGVzLiBFLmcgWydvYmplY3RpdmUnLCAnb2JqZWN0aXZlJywgMTIzLCAncmlzayddXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VnbWVudHMgPSBmbGF0dGVuKFxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLm1hcChkID0+IGQuY29tcG9uZW50SW5zdGFuY2UucGFuZWxEYXRhLmNvbmZpZy5yb3V0ZS5zZWdtZW50cyksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMYXN0IHNlZ21lbnQuIEUuZyBbJ3Jpc2snXVxuICAgICAgICAgICAgY29uc3QgbGFzdE9mQ3VycmVudFNlZ21lbnRzID0gY3VycmVudFNlZ21lbnRzLnNsaWNlKC0xKTtcblxuICAgICAgICAgICAgLy8gQ29uZmlnIGZvciBbJ3Jpc2snLCAnbmV3J11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBbmRXYW50ZWRDb25maWcgPSBnZXRTdGFja0NvbmZpZyhcbiAgICAgICAgICAgICAgICBsYXN0T2ZDdXJyZW50U2VnbWVudHMuY29uY2F0KHdhbnRlZFVyU2VnbWVudHMpLFxuICAgICAgICAgICAgICAgIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY3VycmVudEFuZFdhbnRlZENvbmZpZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZXMgZ2l2ZW4gY29uZmlndXJhdGlvbiB0byBhZGQgaW4gdGhlIGVuZCBvZiBjdXJyZW50IHVybFxuICAgICAqIE5ldXRyYWxpemVzIHJvdXRlciBlcnJvciBoYW5kbGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKGNvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvckhhbmRsZXIgPSB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXI7XG5cbiAgICAgICAgLy8gTnVsbGlmeSBlcnJvciBoYW5kbGVyICh3aWxsIGJlIGRlLW5ldXRyYWxpemVkIGFmdGVyIHJvdXRlIHJlZGlyZWN0aW9uKVxuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXIgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byBzYW1lIHVybCArIC9yaXNrL25ldyBSZXN1bHQgOiAvcmlzay9yaXNrL25ld1xuICAgICAgICBjb25zdCBuZXdVcmwgPSBjb25maWcubWFwKGNvbmYgPT4gc2VnbWVudHNUb1N0cmluZyhjb25mLnJvdXRlLnNlZ21lbnRzKSkuam9pbignLycpO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsICsgJy8nICsgbmV3VXJsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEFmdGVyIG5hdmlnYXRpb24gaGFzIGVuZGVkLCByZXN0b3JlIG9yaWdpbmFsIGVycm9yIGhhbmRsZXIgYmVjYXVzZSBoZSdzIG5vdCBhIGJhZCBndXlcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9IG9yaWdpbmFsRXJyb3JIYW5kbGVyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcbiAgICAgICAgTmF0dXJhbFBhbmVsc1NlcnZpY2UuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm5hdlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuYWZ0ZXJBbGxDbG9zZWQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QYW5lbEJ5Q29tcG9uZW50KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZ2V0UGFuZWxJbmRleChjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbyB0byBwYW5lbCBtYXRjaGluZyBnaXZlbiBjb21wb25lbnQuIENhdXNlcyBhbiB1cmwgY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGVudWx0aW1hdGVQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBuZXcgdXJsIHRoYXQgb25seSBpbmNsdWRlcyB0aGUgc2VnbWVudHMgZnJvbSB0aGUgcGFuZWxzIHdlIHdhbnQgdG8gc3RheSBvcGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvUGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gRXh0cmFjdHMgdXJsIHNlZ21lbnRzIGZyb20gbmV4dCBwYW5lbCB1bnRpbCBsYXN0IG9uZVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1xuICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgIC5tYXAoZGlhbG9nID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudHNUb1N0cmluZyhkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxEYXRhLmNvbmZpZy5yb3V0ZS5zZWdtZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgICAvLyBSZW1vdmUgZXh0cmEgc2VnbWVudHMgYW5kIHJlZGlyZWN0cyB0byByb290XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoJy8nICsgdXJsLCAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGluZyBhIHBhbmVsIGlzIGVxdWl2YWxlbnQgdG8gY2xvc2UgYWxsIHRob3NlIHRoYXQgYXJlIGluIGZyb250IG9mIGhpbVxuICAgICAqIEBwYXJhbSBpbmRleCBvZiBwYW5lbCBpbiBzdGFjay4gVGhlIG1vc3QgYmVoaW5kICh0aGUgZmlyc3Qgb25lKSBpcyAwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbGFzdERpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBuZXcgcGFuZWxzIHNldCBwb3NpdGlvbnNcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMTsgaSA+PSBpbmRleCArIDE7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbaV0uY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXN0RGlhbG9nLmFmdGVyQ2xvc2VkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBuZXcgcGFuZWxzIGlmIHVybCBoYXMgY2hhbmdlZCB3aXRoIG5ldyBzZWdtZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlUGFuZWxzKHNlZ21lbnRzOiBVcmxTZWdtZW50W10sIHJvdXRlczogTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGVbXSk6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdXJsIHNlZ21lbnRzIGludG8gYSBjb25maWcgd2l0aCBjb21wb25lbnQgbmFtZSBhbmQgSUQgaWYgcHJvdmlkZWQgaW4gbmV4dCBzZWdtZW50XG4gICAgICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgY29uZmlncywgZWFjaCBjb25maWcgcmVwcmVzZW50cyB0aGUgY29udGVudCByZWxhdGl2ZSB0byBhIHBhbmVsXG4gICAgICAgIGNvbnN0IG5ld0Z1bGxDb25maWcgPSBnZXRTdGFja0NvbmZpZyhzZWdtZW50cywgcm91dGVzLCB0aGlzLmluamVjdG9yKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvUmVtb3ZlID0gZGlmZmVyZW5jZVdpdGgodGhpcy5vbGRGdWxsQ29uZmlnLCBuZXdGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb0FkZCA9IGRpZmZlcmVuY2VXaXRoKG5ld0Z1bGxDb25maWcsIHRoaXMub2xkRnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXh0UGFuZWwgPSB0aGlzLm9sZEZ1bGxDb25maWcubGVuZ3RoIC0gY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gQWRkIGFuZCByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgIWNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgYWRkIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gbmV3RnVsbENvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIGFsbCBzZXJ2aWNlcywgdGhlbiBvcGVuIHBhbmVsc1xuICAgICAqL1xuICAgIHByaXZhdGUgb3BlblBhbmVscyhcbiAgICAgICAgbmV3SXRlbXNDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICAgICBmdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICApOiBPYnNlcnZhYmxlPE9ic2VydmFibGU8YW55PiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PE9ic2VydmFibGU8YW55PiB8IG51bGw+KCk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBldmVyeXRoaW5nIGJlZm9yZSBvcGVuaW5nIGEgc2luZ2xlIHBhbmVsXG4gICAgICAgIGNvbnN0IHJlc29sdmVzID0gbmV3SXRlbXNDb25maWcubWFwKGNvbmYgPT4gdGhpcy5nZXRSZXNvbHZlZERhdGEoY29uZikpO1xuXG4gICAgICAgIC8vIEZvcmtKb2luIGVtaXRzIHdoZW4gYWxsIHByb21pc2VzIGFyZSBleGVjdXRlZDtcbiAgICAgICAgZm9ya0pvaW4ocmVzb2x2ZXMpLnN1YnNjcmliZShyZXNvbHZlZFJlc3VsdCA9PiB7XG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBuZXcgY29uZmlnIGVudHJ5LCBvcGVuIGEgbmV3IHBhbmVsXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0l0ZW1zQ29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gbmV3SXRlbXNDb25maWdbaV07XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1EYXRhOiBOYXR1cmFsUGFuZWxEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25maWcgb2YgYWN0dWFsIHBhbmVsIHJvdXRlXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIERhdGEgcmVzb2x2ZWQgYnkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgaW4gY29tcG9uZW50IGJ5IGNhbGxpbmcgdGhpcy5wYW5lbERhdGEuZGF0YS54eXpcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzb2x2ZWRSZXN1bHRbaV0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmthYmxlT2JqZWN0czogW10sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzQ29uZmlnPy5iZWZvcmVPcGVuUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQ6IE5hdHVyYWxQYW5lbHNCZWZvcmVPcGVuUGFuZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXN1bHQ6IHJlc29sdmVkUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhbmVsc0NvbmZpZzogZnVsbENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YSA9IHRoaXMuaG9va3NDb25maWcuYmVmb3JlT3BlblBhbmVsKHRoaXMuaW5qZWN0b3IsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbChjb25maWcuY29tcG9uZW50LCBpdGVtRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNvbHZlZERhdGEoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWcpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgICAgIGlmICghY29uZmlnLnJlc29sdmUgfHwgKGNvbmZpZy5yZXNvbHZlICYmIE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZUtleXMgPSBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YTogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj4gPSB7fTtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWcuaW5qZWN0b3I7XG5cbiAgICAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgICAgICAgICByZXNvbHZlS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWREYXRhW2tleV0gPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGNvbmZpZy5yZXNvbHZlW2tleV0oY29uZmlnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihyZXNvbHZlZERhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8TmF0dXJhbEFic3RyYWN0UGFuZWw+LCBkYXRhOiBOYXR1cmFsUGFuZWxEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmY6IE1hdERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucGFuZWxDbGFzcyxcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBhbmVsV2lkdGgsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48TmF0dXJhbEFic3RyYWN0UGFuZWw+KGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGNvbmYpO1xuXG4gICAgICAgIC8vIFBhbmVsaXNhYmxlIGludGVyZmFjZSBhdHRyaWJ1dGVzL2Z1bmN0aW9uc1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5pdFBhbmVsKGRhdGEpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFBhbmVsSW5kZXgoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleChpbmRleCAtIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gcGFuZWwgcG9zaXRpb24gKGluZGV4KSBieSBzZWFyY2hpbmcgbWF0Y2hpbmcgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmZpbmRJbmRleChkaWFsb2cgPT4gZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlID09PSBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRpb25zIHBhbmVscyBmcm9tIHN0YXJ0IHVudGlsIGdpdmVuIGluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIHBhbmVscyB0aGF0IGFyZSBzdGlsbCBvcGVuZWQsIGlnbm9yZSB0aGUgb3RoZXJzIGJlY2F1c2UgdGhleSdsbCBiZSBjbG9zZWRcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRFbGVtZW50cyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGFmZmVjdGVkRWxlbWVudHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNldCBhbGwgcGFuZWxzIGFzIFwiaGlkZGVuXCIgZXhjZXB0IGxhc3Qgb25lLiBJc0Zyb250UGFuZWwgYXR0cmlidXRlIGNhdXNlcyBhIENTUyB0aGF0IGhpZGVzIGJvZHkgdmlhIGhvc3RiaW5kaW5nXG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UuaXNGcm9udFBhbmVsID0gaSA9PT0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsU2VydmljZSA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIEFzc2lnbiBvZmZzZXRcbiAgICAgICAgICAgIGNvbnN0IGRlZXAgPSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDEgLSBpO1xuXG4gICAgICAgICAgICBsZXQgcG9zaXRpb246IGFueSA9IHtyaWdodDogZGVlcCAqIHRoaXMucGFuZWxzT2Zmc2V0SCArICdweCd9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCAmJiBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSBpICogdGhpcy5wYW5lbHNPZmZzZXRWICsgJ3B4JztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHt0b3A6IHRvcCwgcmlnaHQ6ICcwcHgnfTtcbiAgICAgICAgICAgICAgICBkaWFsb2cudXBkYXRlU2l6ZSh0aGlzLnBhbmVsV2lkdGgsIGBjYWxjKDEwMCUgLSAke3RvcH0pYCk7IC8vIGNhbGwgYmVmb3JlIHVwZGF0ZVBvc2l0aW9uXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWxvZy51cGRhdGVTaXplKHRoaXMucGFuZWxXaWR0aCwgYDEwMCVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|