@alfresco/adf-process-services-cloud 6.9.0 → 6.10.0-10006186111
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/esm2020/lib/app/app-list-cloud.module.mjs +5 -5
- package/esm2020/lib/app/components/app-details-cloud.component.mjs +5 -5
- package/esm2020/lib/app/components/app-list-cloud.component.mjs +4 -4
- package/esm2020/lib/app/services/apps-process-cloud.service.mjs +4 -4
- package/esm2020/lib/common/date-range-filter/date-range-filter.component.mjs +6 -6
- package/esm2020/lib/common/date-range-filter/date-range-filter.service.mjs +4 -4
- package/esm2020/lib/common/process-common.module.mjs +5 -5
- package/esm2020/lib/form/components/cloud-form-rendering.service.mjs +4 -4
- package/esm2020/lib/form/components/form-cloud-custom-outcomes.component.mjs +4 -4
- package/esm2020/lib/form/components/form-cloud.component.mjs +10 -12
- package/esm2020/lib/form/components/form-definition-selector-cloud.component.mjs +4 -4
- package/esm2020/lib/form/components/spinner/form-spinner.component.mjs +4 -4
- package/esm2020/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +11 -12
- package/esm2020/lib/form/components/widgets/attach-file/file-properties-table-cloud.component.mjs +5 -5
- package/esm2020/lib/form/components/widgets/attach-file/upload-cloud.widget.mjs +6 -7
- package/esm2020/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +7 -7
- package/esm2020/lib/form/components/widgets/data-table/data-table.widget.mjs +5 -5
- package/esm2020/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +11 -3
- package/esm2020/lib/form/components/widgets/date/date-cloud.widget.mjs +10 -11
- package/esm2020/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +5 -5
- package/esm2020/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +4 -4
- package/esm2020/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +20 -10
- package/esm2020/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +4 -4
- package/esm2020/lib/form/components/widgets/group/group-cloud.widget.mjs +7 -8
- package/esm2020/lib/form/components/widgets/people/people-cloud.widget.mjs +7 -8
- package/esm2020/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +4 -4
- package/esm2020/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +4 -4
- package/esm2020/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +6 -7
- package/esm2020/lib/form/form-cloud.module.mjs +5 -5
- package/esm2020/lib/form/services/content-cloud-node-selector.service.mjs +8 -8
- package/esm2020/lib/form/services/display-mode.service.mjs +4 -4
- package/esm2020/lib/form/services/form-cloud.service.mjs +7 -7
- package/esm2020/lib/form/services/form-definition-selector-cloud.service.mjs +4 -4
- package/esm2020/lib/form/services/process-cloud-content.service.mjs +10 -10
- package/esm2020/lib/form/services/spinner/form-cloud-spinner.service.mjs +4 -4
- package/esm2020/lib/group/components/group-cloud.component.mjs +12 -13
- package/esm2020/lib/group/group-cloud.module.mjs +5 -5
- package/esm2020/lib/group/pipe/group-initial.pipe.mjs +4 -4
- package/esm2020/lib/group/services/identity-group.service.mjs +4 -4
- package/esm2020/lib/material.module.mjs +135 -38
- package/esm2020/lib/people/components/people-cloud.component.mjs +12 -13
- package/esm2020/lib/people/people-cloud.module.mjs +5 -5
- package/esm2020/lib/people/services/identity-user.service.mjs +4 -4
- package/esm2020/lib/pipes/process-name-cloud.pipe.mjs +4 -4
- package/esm2020/lib/pipes/process-services-cloud-pipe.module.mjs +5 -5
- package/esm2020/lib/process/directives/cancel-process.directive.mjs +4 -4
- package/esm2020/lib/process/directives/process-directive.module.mjs +5 -5
- package/esm2020/lib/process/process-cloud.module.mjs +5 -5
- package/esm2020/lib/process/process-filters/components/edit-process-filter-cloud.component.mjs +34 -35
- package/esm2020/lib/process/process-filters/components/process-filter-dialog-cloud.component.mjs +7 -7
- package/esm2020/lib/process/process-filters/components/process-filters-cloud.component.mjs +5 -5
- package/esm2020/lib/process/process-filters/process-filters-cloud.module.mjs +5 -5
- package/esm2020/lib/process/process-filters/services/process-filter-cloud.service.mjs +4 -4
- package/esm2020/lib/process/process-header/components/process-header-cloud.component.mjs +10 -12
- package/esm2020/lib/process/process-header/process-header-cloud.module.mjs +5 -5
- package/esm2020/lib/process/process-list/components/process-list-cloud.component.mjs +4 -4
- package/esm2020/lib/process/process-list/process-list-cloud.module.mjs +5 -5
- package/esm2020/lib/process/process-list/services/process-list-cloud.service.mjs +4 -4
- package/esm2020/lib/process/process-list/services/process-task-list-cloud.service.mjs +4 -4
- package/esm2020/lib/process/services/process-cloud.service.mjs +4 -4
- package/esm2020/lib/process/start-process/components/start-process-cloud.component.mjs +14 -7
- package/esm2020/lib/process/start-process/services/start-process-cloud.service.mjs +4 -4
- package/esm2020/lib/process/start-process/start-process-cloud.module.mjs +5 -5
- package/esm2020/lib/process-services-cloud.module.mjs +5 -5
- package/esm2020/lib/rich-text-editor/rich-text-editor.component.mjs +13 -19
- package/esm2020/lib/rich-text-editor/rich-text-editor.module.mjs +5 -5
- package/esm2020/lib/services/base-cloud.service.mjs +4 -4
- package/esm2020/lib/services/local-preference-cloud.service.mjs +4 -4
- package/esm2020/lib/services/notification-cloud.service.mjs +4 -4
- package/esm2020/lib/services/user-preference-cloud.service.mjs +4 -4
- package/esm2020/lib/services/variable-mapper.sevice.mjs +4 -4
- package/esm2020/lib/task/directives/claim-task-cloud.directive.mjs +4 -4
- package/esm2020/lib/task/directives/complete-task.directive.mjs +4 -4
- package/esm2020/lib/task/directives/task-directive.module.mjs +5 -5
- package/esm2020/lib/task/directives/unclaim-task-cloud.directive.mjs +4 -4
- package/esm2020/lib/task/services/start-task-cloud.service.mjs +4 -4
- package/esm2020/lib/task/services/task-cloud.service.mjs +4 -4
- package/esm2020/lib/task/start-task/components/start-task-cloud.component.mjs +8 -8
- package/esm2020/lib/task/start-task/start-task-cloud.module.mjs +5 -5
- package/esm2020/lib/task/task-cloud.module.mjs +5 -5
- package/esm2020/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +4 -4
- package/esm2020/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +4 -4
- package/esm2020/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter-cloud.component.mjs +13 -14
- package/esm2020/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.mjs +13 -14
- package/esm2020/lib/task/task-filters/components/service-task-filters-cloud.component.mjs +5 -5
- package/esm2020/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +4 -4
- package/esm2020/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +7 -7
- package/esm2020/lib/task/task-filters/components/task-filters-cloud.component.mjs +5 -5
- package/esm2020/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +4 -4
- package/esm2020/lib/task/task-filters/services/task-filter-cloud.service.mjs +4 -4
- package/esm2020/lib/task/task-filters/task-filters-cloud.module.mjs +5 -5
- package/esm2020/lib/task/task-form/components/task-form-cloud.component.mjs +12 -6
- package/esm2020/lib/task/task-form/task-form.module.mjs +5 -5
- package/esm2020/lib/task/task-header/components/task-header-cloud.component.mjs +5 -5
- package/esm2020/lib/task/task-header/task-header-cloud.module.mjs +5 -5
- package/esm2020/lib/task/task-list/components/base-task-list-cloud.component.mjs +5 -5
- package/esm2020/lib/task/task-list/components/service-task-list-cloud.component.mjs +4 -4
- package/esm2020/lib/task/task-list/components/task-list-cloud.component.mjs +4 -4
- package/esm2020/lib/task/task-list/services/service-task-list-cloud.service.mjs +4 -4
- package/esm2020/lib/task/task-list/services/task-list-cloud.service.mjs +4 -4
- package/esm2020/lib/task/task-list/task-list-cloud.module.mjs +5 -5
- package/fesm2015/adf-process-services-cloud.mjs +5869 -5741
- package/fesm2015/adf-process-services-cloud.mjs.map +1 -1
- package/fesm2020/adf-process-services-cloud.mjs +3771 -3643
- package/fesm2020/adf-process-services-cloud.mjs.map +1 -1
- package/lib/app/components/app-details-cloud.component.d.ts +1 -1
- package/lib/app/components/app-list-cloud.component.d.ts +1 -1
- package/lib/common/date-range-filter/date-range-filter.component.d.ts +1 -1
- package/lib/form/components/form-cloud-custom-outcomes.component.d.ts +1 -1
- package/lib/form/components/form-cloud.component.d.ts +2 -2
- package/lib/form/components/form-cloud.component.scss +5 -8
- package/lib/form/components/form-definition-selector-cloud.component.d.ts +1 -1
- package/lib/form/components/spinner/form-spinner.component.d.ts +1 -1
- package/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.d.ts +1 -1
- package/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.scss +1 -3
- package/lib/form/components/widgets/attach-file/file-properties-table-cloud.component.d.ts +1 -1
- package/lib/form/components/widgets/attach-file/upload-cloud.widget.d.ts +1 -1
- package/lib/form/components/widgets/data-table/data-table.widget.d.ts +1 -1
- package/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.d.ts +1 -0
- package/lib/form/components/widgets/date/date-cloud.widget.d.ts +1 -1
- package/lib/form/components/widgets/date/date-cloud.widget.scss +7 -7
- package/lib/form/components/widgets/display-external-property/display-external-property.widget.d.ts +1 -1
- package/lib/form/components/widgets/display-external-property/display-external-property.widget.scss +1 -0
- package/lib/form/components/widgets/display-rich-text/display-rich-text.widget.d.ts +1 -1
- package/lib/form/components/widgets/dropdown/dropdown-cloud.widget.d.ts +3 -1
- package/lib/form/components/widgets/file-viewer/file-viewer.widget.d.ts +1 -1
- package/lib/form/components/widgets/group/group-cloud.widget.d.ts +1 -1
- package/lib/form/components/widgets/people/people-cloud.widget.d.ts +1 -1
- package/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.d.ts +1 -1
- package/lib/form/components/widgets/properties-viewer/properties-viewer.widget.d.ts +1 -1
- package/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.d.ts +1 -1
- package/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.scss +12 -0
- package/lib/group/components/group-cloud.component.d.ts +1 -1
- package/lib/material.module.d.ts +4 -5
- package/lib/models/process-instance-variable.model.d.ts +1 -1
- package/lib/people/components/people-cloud.component.d.ts +1 -1
- package/lib/process/directives/cancel-process.directive.d.ts +1 -1
- package/lib/process/process-filters/components/edit-process-filter-cloud.component.d.ts +1 -1
- package/lib/process/process-filters/components/process-filter-dialog-cloud.component.d.ts +1 -1
- package/lib/process/process-filters/components/process-filters-cloud.component.d.ts +1 -1
- package/lib/process/process-header/components/process-header-cloud.component.d.ts +3 -3
- package/lib/process/process-list/components/process-list-cloud.component.d.ts +1 -1
- package/lib/process/process-list/models/perocess-instance-cloud-view.model.d.ts +1 -1
- package/lib/process/start-process/components/start-process-cloud.component.d.ts +5 -2
- package/lib/rich-text-editor/rich-text-editor.component.d.ts +1 -3
- package/lib/rich-text-editor/rich-text-editor.component.scss +10 -0
- package/lib/services/form-fields.interfaces.d.ts +1 -1
- package/lib/task/directives/claim-task-cloud.directive.d.ts +1 -1
- package/lib/task/directives/complete-task.directive.d.ts +1 -1
- package/lib/task/directives/unclaim-task-cloud.directive.d.ts +1 -1
- package/lib/task/start-task/components/start-task-cloud.component.d.ts +1 -1
- package/lib/task/start-task/models/task-details-cloud.model.d.ts +2 -2
- package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/service-task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.d.ts +1 -1
- package/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-form/components/task-form-cloud.component.d.ts +5 -2
- package/lib/task/task-form/components/task-form-cloud.component.scss +15 -9
- package/lib/task/task-header/components/task-header-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/service-task-list-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/task-list-cloud.component.d.ts +1 -1
- package/lib/task/task-list/models/task-cloud-view.model.d.ts +1 -1
- package/lib/types.d.ts +1 -1
- package/package.json +6 -6
|
@@ -20,7 +20,7 @@ import { MatButtonModule } from '@angular/material/button';
|
|
|
20
20
|
import { MatCardModule } from '@angular/material/card';
|
|
21
21
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
22
22
|
import { MatChipsModule } from '@angular/material/chips';
|
|
23
|
-
import { MatNativeDateModule,
|
|
23
|
+
import { MatNativeDateModule, MatRippleModule, MatOptionModule } from '@angular/material/core';
|
|
24
24
|
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
|
|
25
25
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
26
26
|
import { MatDialogModule } from '@angular/material/dialog';
|
|
@@ -36,51 +36,148 @@ import { MatSelectModule } from '@angular/material/select';
|
|
|
36
36
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
37
37
|
import { MatTableModule } from '@angular/material/table';
|
|
38
38
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
39
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
40
39
|
import * as i0 from "@angular/core";
|
|
41
40
|
export class MaterialModule {
|
|
42
41
|
}
|
|
43
|
-
MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
44
|
-
MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
MatChipsModule,
|
|
64
|
-
|
|
42
|
+
MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
43
|
+
MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [MatAutocompleteModule,
|
|
44
|
+
MatButtonModule,
|
|
45
|
+
MatCardModule,
|
|
46
|
+
MatDialogModule,
|
|
47
|
+
MatCheckboxModule,
|
|
48
|
+
MatDatepickerModule,
|
|
49
|
+
MatGridListModule,
|
|
50
|
+
MatIconModule,
|
|
51
|
+
MatInputModule,
|
|
52
|
+
MatListModule,
|
|
53
|
+
MatOptionModule,
|
|
54
|
+
MatRadioModule,
|
|
55
|
+
MatSelectModule,
|
|
56
|
+
MatSlideToggleModule,
|
|
57
|
+
MatTableModule,
|
|
58
|
+
MatTabsModule,
|
|
59
|
+
MatProgressSpinnerModule,
|
|
60
|
+
MatNativeDateModule,
|
|
61
|
+
MatRippleModule,
|
|
62
|
+
MatChipsModule,
|
|
63
|
+
MatMenuModule,
|
|
64
|
+
MatExpansionModule], exports: [MatAutocompleteModule,
|
|
65
|
+
MatButtonModule,
|
|
66
|
+
MatCardModule,
|
|
67
|
+
MatDialogModule,
|
|
68
|
+
MatCheckboxModule,
|
|
69
|
+
MatDatepickerModule,
|
|
70
|
+
MatGridListModule,
|
|
71
|
+
MatIconModule,
|
|
72
|
+
MatInputModule,
|
|
73
|
+
MatListModule,
|
|
74
|
+
MatOptionModule,
|
|
75
|
+
MatRadioModule,
|
|
76
|
+
MatSelectModule,
|
|
77
|
+
MatSlideToggleModule,
|
|
78
|
+
MatTableModule,
|
|
79
|
+
MatTabsModule,
|
|
80
|
+
MatProgressSpinnerModule,
|
|
81
|
+
MatNativeDateModule,
|
|
82
|
+
MatRippleModule,
|
|
83
|
+
MatChipsModule,
|
|
84
|
+
MatMenuModule,
|
|
85
|
+
MatExpansionModule] });
|
|
86
|
+
MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, providers: [{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'never' } }], imports: [MatAutocompleteModule,
|
|
87
|
+
MatButtonModule,
|
|
88
|
+
MatCardModule,
|
|
89
|
+
MatDialogModule,
|
|
90
|
+
MatCheckboxModule,
|
|
91
|
+
MatDatepickerModule,
|
|
92
|
+
MatGridListModule,
|
|
93
|
+
MatIconModule,
|
|
94
|
+
MatInputModule,
|
|
95
|
+
MatListModule,
|
|
96
|
+
MatOptionModule,
|
|
97
|
+
MatRadioModule,
|
|
98
|
+
MatSelectModule,
|
|
99
|
+
MatSlideToggleModule,
|
|
100
|
+
MatTableModule,
|
|
101
|
+
MatTabsModule,
|
|
102
|
+
MatProgressSpinnerModule,
|
|
103
|
+
MatNativeDateModule,
|
|
104
|
+
MatRippleModule,
|
|
105
|
+
MatChipsModule,
|
|
106
|
+
MatMenuModule,
|
|
107
|
+
MatExpansionModule, MatAutocompleteModule,
|
|
108
|
+
MatButtonModule,
|
|
109
|
+
MatCardModule,
|
|
110
|
+
MatDialogModule,
|
|
111
|
+
MatCheckboxModule,
|
|
112
|
+
MatDatepickerModule,
|
|
113
|
+
MatGridListModule,
|
|
114
|
+
MatIconModule,
|
|
115
|
+
MatInputModule,
|
|
116
|
+
MatListModule,
|
|
117
|
+
MatOptionModule,
|
|
118
|
+
MatRadioModule,
|
|
119
|
+
MatSelectModule,
|
|
120
|
+
MatSlideToggleModule,
|
|
121
|
+
MatTableModule,
|
|
122
|
+
MatTabsModule,
|
|
123
|
+
MatProgressSpinnerModule,
|
|
124
|
+
MatNativeDateModule,
|
|
125
|
+
MatRippleModule,
|
|
126
|
+
MatChipsModule,
|
|
127
|
+
MatMenuModule,
|
|
128
|
+
MatExpansionModule] });
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, decorators: [{
|
|
65
130
|
type: NgModule,
|
|
66
131
|
args: [{
|
|
67
|
-
providers: [
|
|
68
|
-
{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'never' } }
|
|
69
|
-
],
|
|
132
|
+
providers: [{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'never' } }],
|
|
70
133
|
imports: [
|
|
71
|
-
MatAutocompleteModule,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
134
|
+
MatAutocompleteModule,
|
|
135
|
+
MatButtonModule,
|
|
136
|
+
MatCardModule,
|
|
137
|
+
MatDialogModule,
|
|
138
|
+
MatCheckboxModule,
|
|
139
|
+
MatDatepickerModule,
|
|
140
|
+
MatGridListModule,
|
|
141
|
+
MatIconModule,
|
|
142
|
+
MatInputModule,
|
|
143
|
+
MatListModule,
|
|
144
|
+
MatOptionModule,
|
|
145
|
+
MatRadioModule,
|
|
146
|
+
MatSelectModule,
|
|
147
|
+
MatSlideToggleModule,
|
|
148
|
+
MatTableModule,
|
|
149
|
+
MatTabsModule,
|
|
150
|
+
MatProgressSpinnerModule,
|
|
151
|
+
MatNativeDateModule,
|
|
152
|
+
MatRippleModule,
|
|
153
|
+
MatChipsModule,
|
|
154
|
+
MatMenuModule,
|
|
155
|
+
MatExpansionModule
|
|
76
156
|
],
|
|
77
157
|
exports: [
|
|
78
|
-
MatAutocompleteModule,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
158
|
+
MatAutocompleteModule,
|
|
159
|
+
MatButtonModule,
|
|
160
|
+
MatCardModule,
|
|
161
|
+
MatDialogModule,
|
|
162
|
+
MatCheckboxModule,
|
|
163
|
+
MatDatepickerModule,
|
|
164
|
+
MatGridListModule,
|
|
165
|
+
MatIconModule,
|
|
166
|
+
MatInputModule,
|
|
167
|
+
MatListModule,
|
|
168
|
+
MatOptionModule,
|
|
169
|
+
MatRadioModule,
|
|
170
|
+
MatSelectModule,
|
|
171
|
+
MatSlideToggleModule,
|
|
172
|
+
MatTableModule,
|
|
173
|
+
MatTabsModule,
|
|
174
|
+
MatProgressSpinnerModule,
|
|
175
|
+
MatNativeDateModule,
|
|
176
|
+
MatRippleModule,
|
|
177
|
+
MatChipsModule,
|
|
178
|
+
MatMenuModule,
|
|
179
|
+
MatExpansionModule
|
|
83
180
|
]
|
|
84
181
|
}]
|
|
85
182
|
}] });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9tYXRlcmlhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQXFEdkQsTUFBTSxPQUFPLGNBQWM7OzRHQUFkLGNBQWM7NkdBQWQsY0FBYyxZQWhEbkIscUJBQXFCO1FBQ3JCLGVBQWU7UUFDZixhQUFhO1FBQ2IsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLGVBQWU7UUFDZixjQUFjO1FBQ2QsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixjQUFjO1FBQ2QsYUFBYTtRQUNiLHdCQUF3QjtRQUN4QixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2Isa0JBQWtCLGFBR2xCLHFCQUFxQjtRQUNyQixlQUFlO1FBQ2YsYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsY0FBYztRQUNkLGFBQWE7UUFDYixlQUFlO1FBQ2YsY0FBYztRQUNkLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLGFBQWE7UUFDYix3QkFBd0I7UUFDeEIsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixjQUFjO1FBQ2QsYUFBYTtRQUNiLGtCQUFrQjs2R0FHYixjQUFjLGFBbERaLENBQUMsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsWUFFdkYscUJBQXFCO1FBQ3JCLGVBQWU7UUFDZixhQUFhO1FBQ2IsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLGVBQWU7UUFDZixjQUFjO1FBQ2QsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixjQUFjO1FBQ2QsYUFBYTtRQUNiLHdCQUF3QjtRQUN4QixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2Isa0JBQWtCLEVBR2xCLHFCQUFxQjtRQUNyQixlQUFlO1FBQ2YsYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsY0FBYztRQUNkLGFBQWE7UUFDYixlQUFlO1FBQ2YsY0FBYztRQUNkLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLGFBQWE7UUFDYix3QkFBd0I7UUFDeEIsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixjQUFjO1FBQ2QsYUFBYTtRQUNiLGtCQUFrQjs0RkFHYixjQUFjO2tCQW5EMUIsUUFBUTttQkFBQztvQkFDTixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDM0YsT0FBTyxFQUFFO3dCQUNMLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjtxQkFDckI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlLCBNYXRSaXBwbGVNb2R1bGUsIE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcblxuQE5nTW9kdWxlKHtcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUywgdXNlVmFsdWU6IHsgZmxvYXRMYWJlbDogJ25ldmVyJyB9IH1dLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0TGlzdE1vZHVsZSxcbiAgICAgICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0UmlwcGxlTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRDYXJkTW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBNYXRHcmlkTGlzdE1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdExpc3RNb2R1bGUsXG4gICAgICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICAgICAgTWF0UmFkaW9Nb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXG4gICAgICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEV4cGFuc2lvbk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxNb2R1bGUge31cbiJdfQ==
|
|
@@ -26,14 +26,13 @@ import * as i1 from "@angular/common";
|
|
|
26
26
|
import * as i2 from "@angular/material/autocomplete";
|
|
27
27
|
import * as i3 from "@angular/material/core";
|
|
28
28
|
import * as i4 from "@angular/material/icon";
|
|
29
|
-
import * as i5 from "@angular/material/
|
|
30
|
-
import * as i6 from "@angular/material/
|
|
31
|
-
import * as i7 from "@angular/material/
|
|
32
|
-
import * as i8 from "@angular/
|
|
33
|
-
import * as i9 from "@angular/
|
|
34
|
-
import * as i10 from "@
|
|
35
|
-
import * as i11 from "@
|
|
36
|
-
import * as i12 from "@ngx-translate/core";
|
|
29
|
+
import * as i5 from "@angular/material/input";
|
|
30
|
+
import * as i6 from "@angular/material/form-field";
|
|
31
|
+
import * as i7 from "@angular/material/chips";
|
|
32
|
+
import * as i8 from "@angular/forms";
|
|
33
|
+
import * as i9 from "@angular/material/progress-bar";
|
|
34
|
+
import * as i10 from "@alfresco/adf-core";
|
|
35
|
+
import * as i11 from "@ngx-translate/core";
|
|
37
36
|
export class PeopleCloudComponent {
|
|
38
37
|
constructor(identityUserService) {
|
|
39
38
|
this.identityUserService = identityUserService;
|
|
@@ -370,21 +369,21 @@ export class PeopleCloudComponent {
|
|
|
370
369
|
this.onDestroy$.complete();
|
|
371
370
|
}
|
|
372
371
|
}
|
|
373
|
-
PeopleCloudComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
374
|
-
PeopleCloudComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: { appName: "appName", mode: "mode", roles: "roles", validate: "validate", readOnly: "readOnly", required: "required", preSelectUsers: "preSelectUsers", excludedUsers: "excludedUsers", groupsRestriction: "groupsRestriction", userChipsCtrl: "userChipsCtrl", searchUserCtrl: "searchUserCtrl", title: "title" }, outputs: { selectUser: "selectUser", removeUser: "removeUser", changedUsers: "changedUsers", warning: "warning" }, providers: [FullNamePipe], viewQueries: [{ propertyName: "userInput", first: true, predicate: ["userInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-form-field floatLabel=\"auto\" class=\"adf-people-cloud\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <mat-label *ngIf=\"!isReadonly()\" id=\"adf-people-cloud-title-id\" class=\"adf-people-cloud-title\"\n [ngClass]=\"{'adf-people-cloud-title--focus': isFocused}\">{{ title | translate }}</mat-label>\n <mat-chip-list #userMultipleChipList [disabled]=\"isReadonly() || isValidationLoading()\" data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!(user.readonly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n matTooltip=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\">\n {{user | fullName}}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\">\n cancel\n </mat-icon>\n </mat-chip>\n <input *ngIf=\"!isReadonly()\" matInput\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [required]=\"required\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\" #userInput>\n </mat-chip-list>\n\n <mat-autocomplete autoActiveFirstOption class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\">\n <ng-container *ngIf=\"(searchUsers$ | async)?.length else noResults\" >\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\"\n class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{user.username}}\"\n data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials:'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{user | fullName}}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\" disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\">\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n <mat-progress-bar\n *ngIf=\"validationLoading\"\n mode=\"indeterminate\">\n </mat-progress-bar>\n\n <div class=\"adf-error-container\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate: { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate: { requiredLength: getValidationMaxLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate: { requiredLength: getValidationMinLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\" data-automation-id=\"invalid-users-typing-error\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-group-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-title{color:var(--adf-people-cloud-input-label-default-color)}.adf-people-cloud-title--focus{color:var(--adf-people-cloud-input-label-focus-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-people-cloud-autosuggest-result-active-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-people-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--adf-people-cloud-input-caption-error-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i8.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i8.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.FullNamePipe, name: "fullName" }, { kind: "pipe", type: i11.InitialUsernamePipe, name: "usernameInitials" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], animations: [
|
|
372
|
+
PeopleCloudComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PeopleCloudComponent, deps: [{ token: IDENTITY_USER_SERVICE_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
373
|
+
PeopleCloudComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: { appName: "appName", mode: "mode", roles: "roles", validate: "validate", readOnly: "readOnly", required: "required", preSelectUsers: "preSelectUsers", excludedUsers: "excludedUsers", groupsRestriction: "groupsRestriction", userChipsCtrl: "userChipsCtrl", searchUserCtrl: "searchUserCtrl", title: "title" }, outputs: { selectUser: "selectUser", removeUser: "removeUser", changedUsers: "changedUsers", warning: "warning" }, providers: [FullNamePipe], viewQueries: [{ propertyName: "userInput", first: true, predicate: ["userInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-form-field [floatLabel]=\"'auto'\" class=\"adf-people-cloud\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <ng-content select=\"[label]\"></ng-content>\n <mat-chip-grid #userMultipleChipList [disabled]=\"isReadonly() || isValidationLoading()\" data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!(user.readonly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\">\n {{user | fullName}}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\">\n cancel\n </mat-icon>\n </mat-chip-row>\n <input [disabled]=\"isReadonly()\" matInput\n #chipInput\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [placeholder]=\"title | translate\"\n [required]=\"required\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\" #userInput>\n </mat-chip-grid>\n\n <mat-autocomplete autoActiveFirstOption class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\">\n <ng-container *ngIf=\"(searchUsers$ | async)?.length else noResults\" >\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\"\n class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{user.username}}\"\n data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials:'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{user | fullName}}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\" disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\">\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n <mat-progress-bar\n *ngIf=\"validationLoading\"\n mode=\"indeterminate\">\n </mat-progress-bar>\n\n <div class=\"adf-error-container\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate: { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate: { requiredLength: getValidationMaxLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate: { requiredLength: getValidationMinLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\" data-automation-id=\"invalid-users-typing-error\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-group-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-title{color:var(--adf-people-cloud-input-label-default-color)}.adf-people-cloud-title--focus{color:var(--adf-people-cloud-input-label-focus-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-people-cloud-autosuggest-result-active-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-people-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--adf-people-cloud-input-caption-error-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.FullNamePipe, name: "fullName" }, { kind: "pipe", type: i10.InitialUsernamePipe, name: "usernameInitials" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], animations: [
|
|
375
374
|
trigger('transitionMessages', [
|
|
376
375
|
state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
|
|
377
376
|
transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
|
|
378
377
|
])
|
|
379
378
|
], encapsulation: i0.ViewEncapsulation.None });
|
|
380
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PeopleCloudComponent, decorators: [{
|
|
381
380
|
type: Component,
|
|
382
381
|
args: [{ selector: 'adf-cloud-people', animations: [
|
|
383
382
|
trigger('transitionMessages', [
|
|
384
383
|
state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
|
|
385
384
|
transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
|
|
386
385
|
])
|
|
387
|
-
], providers: [FullNamePipe], encapsulation: ViewEncapsulation.None, template: "<form>\n <mat-form-field floatLabel=\"auto\" class=\"adf-people-cloud\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <
|
|
386
|
+
], providers: [FullNamePipe], encapsulation: ViewEncapsulation.None, template: "<form>\n <mat-form-field [floatLabel]=\"'auto'\" class=\"adf-people-cloud\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <ng-content select=\"[label]\"></ng-content>\n <mat-chip-grid #userMultipleChipList [disabled]=\"isReadonly() || isValidationLoading()\" data-automation-id=\"adf-cloud-people-chip-list\">\n <mat-chip-row\n *ngFor=\"let user of selectedUsers\"\n [removable]=\"!(user.readonly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-' + user.username\"\n (removed)=\"onRemove(user)\"\n title=\"{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\">\n {{user | fullName}}\n <mat-icon\n matChipRemove\n *ngIf=\"!(user.readonly || readOnly)\"\n [attr.data-automation-id]=\"'adf-people-cloud-chip-remove-icon-' + user.username\">\n cancel\n </mat-icon>\n </mat-chip-row>\n <input [disabled]=\"isReadonly()\" matInput\n #chipInput\n [formControl]=\"searchUserCtrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"userMultipleChipList\"\n [placeholder]=\"title | translate\"\n [required]=\"required\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-cloud-input\"\n data-automation-id=\"adf-people-cloud-search-input\" #userInput>\n </mat-chip-grid>\n\n <mat-autocomplete autoActiveFirstOption class=\"adf-people-cloud-list\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\">\n <ng-container *ngIf=\"(searchUsers$ | async)?.length else noResults\" >\n <mat-option *ngFor=\"let user of searchUsers$ | async; let i = index\" [value]=\"user\"\n class=\"adf-people-cloud-option-active\">\n <div class=\"adf-people-cloud-row\" id=\"adf-people-cloud-user-{{user.username}}\"\n data-automation-id=\"adf-people-cloud-row\">\n <div [outerHTML]=\"user | usernameInitials:'adf-people-cloud-pic'\"></div>\n <span class=\"adf-people-label-name\"> {{user | fullName}}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !searchLoading\" disabled\n class=\"adf-people-cloud-option-not-active\"\n data-automation-id=\"adf-people-cloud-no-results\">\n <span> {{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName: searchedValue } }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n <mat-progress-bar\n *ngIf=\"validationLoading\"\n mode=\"indeterminate\">\n </mat-progress-bar>\n\n <div class=\"adf-error-container\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : validateUsersMessage } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate: { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate: { requiredLength: getValidationMaxLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate: { requiredLength: getValidationMinLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"(searchUserCtrl.hasError('required') || userChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchUserCtrl.hasError('searchTypingError') && !this.isFocused\"\n [@transitionMessages]=\"subscriptAnimationState\" data-automation-id=\"invalid-users-typing-error\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_USERS.ERROR.NOT_FOUND' | translate : { userName : searchedValue } }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-people-cloud{width:100%}.adf-people-cloud-option-not-active:not(.adf-people-cloud:active){background:inherit;color:var(--adf-group-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-title{color:var(--adf-people-cloud-input-label-default-color)}.adf-people-cloud-title--focus{color:var(--adf-people-cloud-input-label-focus-color)}.adf-people-cloud-list{margin:5px 0;padding:10px 0}.adf-people-cloud-option-active:not(.adf:disabled){color:var(--adf-people-cloud-autosuggest-result-active-color)}.adf-people-cloud-option-not-active:not(.adf:active){color:var(--adf-people-cloud-autosuggest-result-disabled-color)}.adf-people-cloud-row{display:flex;align-items:center;column-gap:10px}.adf-people-cloud-pic{background:var(--theme-primary-color);display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:100px;text-transform:uppercase}.adf-start-task-cloud-error{margin-top:-10px;position:absolute;height:20px}.adf-start-task-cloud-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}.adf-error,.adf-error-text,.adf-error-icon{color:var(--adf-people-cloud-input-caption-error-color)}\n"] }]
|
|
388
387
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
389
388
|
type: Inject,
|
|
390
389
|
args: [IDENTITY_USER_SERVICE_TOKEN]
|
|
@@ -424,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
424
423
|
type: ViewChild,
|
|
425
424
|
args: ['userInput']
|
|
426
425
|
}] } });
|
|
427
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVvcGxlLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxTQUFTLEVBRVQsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsS0FBSyxFQUlMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSWpGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWV0RixNQUFNLE9BQU8sb0JBQW9CO0lBNEc3QixZQUVZLG1CQUFpRDtRQUFqRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQThC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LFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLE9BQU87c0JBRE4sTUFBTTtnQkFJQyxTQUFTO3NCQURoQixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIElucHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2VNYXAsIHRhcCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGdWxsTmFtZVBpcGUgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSWRlbnRpdHlVc2VyTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvaWRlbnRpdHktdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBJZGVudGl0eVVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWRlbnRpdHktdXNlci5zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJREVOVElUWV9VU0VSX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi9zZXJ2aWNlcy9pZGVudGl0eS11c2VyLXNlcnZpY2UudG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1wZW9wbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wZW9wbGUtY2xvdWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Blb3BsZS1jbG91ZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcigndHJhbnNpdGlvbk1lc3NhZ2VzJywgW1xuICAgICAgICAgICAgc3RhdGUoJ2VudGVyJywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDAlKScgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBlbnRlcicsIFtzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJyB9KSwgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMiknKV0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtGdWxsTmFtZVBpcGVdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUGVvcGxlQ2xvdWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogTmFtZSBvZiB0aGUgYXBwbGljYXRpb24uIElmIHNwZWNpZmllZCwgdGhpcyBzaG93cyB0aGUgdXNlcnMgd2hvIGhhdmUgYWNjZXNzIHRvIHRoZSBhcHAuICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogVXNlciBzZWxlY3Rpb24gbW9kZSAoc2luZ2xlL211bHRpcGxlKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vZGU6IENvbXBvbmVudFNlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJztcblxuICAgIC8qKiBSb2xlIG5hbWVzIG9mIHRoZSB1c2VycyB0byBiZSBsaXN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICByb2xlczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgZW5hYmxlcyB0aGUgdmFsaWRhdGlvbiBvbiB0aGUgcHJlU2VsZWN0VXNlcnMgcGFzc2VkIGFzIGlucHV0LlxuICAgICAqIEluIGNhc2UgdGhlIGZsYWcgaXMgdHJ1ZSB0aGUgY29tcG9uZW50cyBjYWxsIHRoZSBpZGVudGl0eSBzZXJ2aWNlIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIGluZm9ybWF0aW9uIHBhc3NlZCBhcyBpbnB1dC5cbiAgICAgKiBPdGhlcndpc2UsIG5vIGNoZWNrIHdpbGwgYmUgZG9uZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbGlkYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBpbmZvIGluIHJlYWRvbmx5IG1vZGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBNYXJrIHRoaXMgZmllbGQgYXMgcmVxdWlyZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiB1c2VycyB0byBiZSBwcmUtc2VsZWN0ZWQuIEFsbCB1c2VycyBpbiB0aGVcbiAgICAgKiBhcnJheSBhcmUgcHJlLXNlbGVjdGVkIGluIG11bHRpIHNlbGVjdGlvbiBtb2RlLCBidXQgb25seSB0aGUgZmlyc3QgdXNlclxuICAgICAqIGlzIHByZS1zZWxlY3RlZCBpbiBzaW5nbGUgc2VsZWN0aW9uIG1vZGUuXG4gICAgICogTWFuZGF0b3J5IHByb3BlcnRpZXMgYXJlOiBpZCwgZW1haWwsIHVzZXJuYW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmVTZWxlY3RVc2VyczogSWRlbnRpdHlVc2VyTW9kZWxbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgdXNlcnMgdG8gYmUgZXhjbHVkZWQuXG4gICAgICogTWFuZGF0b3J5IHByb3BlcnRpZXMgYXJlOiBpZCwgZW1haWwsIHVzZXJuYW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBleGNsdWRlZFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBncm91cHMgdG8gcmVzdHJpY3QgdXNlciBzZWFyY2hlcy5cbiAgICAgKiBNYW5kYXRvcnkgcHJvcGVydHkgaXMgZ3JvdXAgbmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBzUmVzdHJpY3Rpb246IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogRm9ybUNvbnRyb2wgdG8gbGlzdCBvZiB1c2VycyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlckNoaXBzQ3RybDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgLyoqIEZvcm1Db250cm9sIHRvIHNlYXJjaCB0aGUgdXNlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVXNlckN0cmwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogZmFsc2UgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciB0cmFuc2xhdGlvbiBrZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgdXNlciBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eVVzZXJNb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBzZWxlY3RlZCB1c2VyIGlzIHJlbW92ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlVXNlciA9IG5ldyBFdmVudEVtaXR0ZXI8SWRlbnRpdHlVc2VyTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgdXNlciBzZWxlY3Rpb24gY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNoYW5nZWRVc2VycyA9IG5ldyBFdmVudEVtaXR0ZXI8SWRlbnRpdHlVc2VyTW9kZWxbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gd2FybmluZyBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgd2FybmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgndXNlcklucHV0JylcbiAgICBwcml2YXRlIHVzZXJJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIHByaXZhdGUgc2VhcmNoVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcbiAgICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgc2VsZWN0ZWRVc2VyczogSWRlbnRpdHlVc2VyTW9kZWxbXSA9IFtdO1xuICAgIGludmFsaWRVc2VyczogSWRlbnRpdHlVc2VyTW9kZWxbXSA9IFtdO1xuXG4gICAgc2VhcmNoVXNlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZGVudGl0eVVzZXJNb2RlbFtdPih0aGlzLnNlYXJjaFVzZXJzKTtcbiAgICBzdWJzY3JpcHRBbmltYXRpb25TdGF0ZTogc3RyaW5nID0gJ2VudGVyJztcbiAgICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gICAgdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgdmFsaWRhdGVVc2Vyc01lc3NhZ2U6IHN0cmluZztcbiAgICBzZWFyY2hlZFZhbHVlID0gJyc7XG5cbiAgICB2YWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgIHNlYXJjaExvYWRpbmcgPSBmYWxzZTtcblxuICAgIHR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJREVOVElUWV9VU0VSX1NFUlZJQ0VfVE9LRU4pXG4gICAgICAgIHByaXZhdGUgaWRlbnRpdHlVc2VyU2VydmljZTogSWRlbnRpdHlVc2VyU2VydmljZUludGVyZmFjZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkVXNlcnNDaGFuZ2VkKGNoYW5nZXMpIHx8IHRoaXMuaGFzTW9kZUNoYW5nZWQoY2hhbmdlcykgfHwgdGhpcy5pc1ZhbGlkYXRpb25DaGFuZ2VkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcmVTZWxlY3RVc2VycygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJlU2VsZWN0VXNlcnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcmVzZWxlY3RlZFVzZXJzQ2xlYXJlZChjaGFuZ2VzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdHJlYW0oKTtcbiAgICAgICAgdGhpcy50eXBpbmdVbmlxdWVWYWx1ZU5vdEVtcHR5JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IG5hbWUubGVuZ3RoID49IDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5VXNlclNlcnZpY2Uuc2VhcmNoKG5hbWUsIHsgcm9sZXM6IHRoaXMucm9sZXMsIHdpdGhpbkFwcGxpY2F0aW9uOiB0aGlzLmFwcE5hbWUsIGdyb3VwczogdGhpcy5ncm91cHNSZXN0cmljdGlvbiB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hVc2VycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJzO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigodXNlcikgPT4gIXRoaXMuaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHVzZXIpICYmICF0aGlzLmlzRXhjbHVkZWRVc2VyKHVzZXIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VycyQubmV4dCh0aGlzLnNlYXJjaFVzZXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVN0cmVhbSgpIHtcbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVGcm9tQ29udHJvbCQgPSB0aGlzLnNlYXJjaFVzZXJDdHJsLnZhbHVlQ2hhbmdlcztcblxuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZVR5cGVTdGluZyQgPSB0eXBpbmdWYWx1ZUZyb21Db250cm9sJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlSGFuZGxlRXJyb3JNZXNzYWdlJCA9IHR5cGluZ1ZhbHVlVHlwZVN0aW5nJC5waXBlKFxuICAgICAgICAgICAgdGFwKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VHlwaW5nRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlRGVib3VuY2VkVW5pcXVlJCA9IHR5cGluZ1ZhbHVlSGFuZGxlRXJyb3JNZXNzYWdlJC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgICAgICB0aGlzLnR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkID0gdHlwaW5nVmFsdWVEZWJvdW5jZWRVbmlxdWUkLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc2V0U2VhcmNoVXNlcnMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHNlYXJjaFVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlcnMgJiYgdGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maW5kKChzZWxlY3RlZFVzZXIpID0+IHRoaXMuZXF1YWxzVXNlcnMoc2VsZWN0ZWRVc2VyLCBzZWFyY2hVc2VyKSk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4Y2x1ZGVkVXNlcihzZWFyY2hVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5leGNsdWRlZFVzZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmV4Y2x1ZGVkVXNlcnMuZmluZCgoZXhjbHVkZWRVc2VyKSA9PiB0aGlzLmVxdWFsc1VzZXJzKGV4Y2x1ZGVkVXNlciwgc2VhcmNoVXNlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRQcmVTZWxlY3RVc2VycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFt0aGlzLnByZVNlbGVjdFVzZXJzWzBdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlZFVzZXJzKHRoaXMucHJlU2VsZWN0VXNlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlckNoaXBzQ3RybC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkVXNlcnNbMF0udXNlcm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVByZXNlbGVjdFVzZXJzKCk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXNlbGVjdGVkVXNlcnMoKTogSWRlbnRpdHlVc2VyTW9kZWxbXSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlTW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucHJlU2VsZWN0VXNlcnNbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRHVwbGljYXRlZFVzZXJzKHRoaXMucHJlU2VsZWN0VXNlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVByZXNlbGVjdFVzZXJzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB1c2VyIG9mIHRoaXMuZ2V0UHJlc2VsZWN0ZWRVc2VycygpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpdHlVc2VyU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNlYXJjaCh1c2VyLnVzZXJuYW1lLCB7IHJvbGVzOiB0aGlzLnJvbGVzLCB3aXRoaW5BcHBsaWNhdGlvbjogdGhpcy5hcHBOYW1lLCBncm91cHM6IHRoaXMuZ3JvdXBzUmVzdHJpY3Rpb24gfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIClbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXF1YWxzVXNlcnModXNlciwgdmFsaWRhdGlvblJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpO1xuICAgIH1cblxuICAgIGVxdWFsc1VzZXJzKHByZXNlbGVjdGVkVXNlcjogSWRlbnRpdHlVc2VyTW9kZWwsIGlkZW50aXR5VXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHByZXNlbGVjdGVkVXNlciAmJiBpZGVudGl0eVVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVByb3BlcnR5SWRlbnRpZmllcnMgPSBbJ2lkJywgJ3VzZXJuYW1lJywgJ2VtYWlsJ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHByZXNlbGVjdGVkVXNlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VsZWN0ZWRVc2VyW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIHVuaXF1ZVByb3BlcnR5SWRlbnRpZmllcnMuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVzZWxlY3RlZFVzZXJbcHJvcGVydHldID09PSBpZGVudGl0eVVzZXJbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVtb3ZlRHVwbGljYXRlZFVzZXJzKHVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdKTogSWRlbnRpdHlVc2VyTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB1c2Vycy5maWx0ZXIoXG4gICAgICAgICAgICAodXNlciwgaW5kZXgsIHNlbGYpID0+XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KChhdXhVc2VyKSA9PiB1c2VyLmlkID09PSBhdXhVc2VyLmlkICYmIHVzZXIudXNlcm5hbWUgPT09IGF1eFVzZXIudXNlcm5hbWUgJiYgdXNlci5lbWFpbCA9PT0gYXV4VXNlci5lbWFpbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdCh1c2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VyLmVtaXQodXNlcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVc2VyQWxyZWFkeVNlbGVjdGVkKHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbdXNlcl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXNlcklucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwuc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgdGhpcy51c2VyQ2hpcHNDb250cm9sVmFsdWUodGhpcy5zZWxlY3RlZFVzZXJzWzBdLnVzZXJuYW1lKTtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVXNlcnMuZW1pdCh0aGlzLnNlbGVjdGVkVXNlcnMpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaFVzZXJzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZSh1c2VyVG9SZW1vdmU6IElkZW50aXR5VXNlck1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlVXNlci5lbWl0KHVzZXJUb1JlbW92ZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlVXNlckZyb21TZWxlY3RlZCh1c2VyVG9SZW1vdmUpO1xuICAgICAgICB0aGlzLmNoYW5nZWRVc2Vycy5lbWl0KHRoaXMuc2VsZWN0ZWRVc2Vycyk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJDaGlwc0NvbnRyb2xWYWx1ZSgnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJDaGlwc0NvbnRyb2xWYWx1ZSh0aGlzLnNlbGVjdGVkVXNlcnNbMF0udXNlcm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZGF0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVVzZXJGcm9tVmFsaWRhdGlvbih1c2VyVG9SZW1vdmUpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ByZXNlbGVjdFZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWRVc2VycyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlZFVzZXJzKHRoaXMuaW52YWxpZFVzZXJzKTtcblxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkVXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUludmFsaWRVc2Vyc01lc3NhZ2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2FybmluZy5lbWl0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEX1BSRVNFTEVDVEVEX1VTRVJTJyxcbiAgICAgICAgICAgIHVzZXJzOiB0aGlzLmludmFsaWRVc2Vyc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVVzZXJGcm9tU2VsZWN0ZWQoeyBpZCwgdXNlcm5hbWUsIGVtYWlsIH06IElkZW50aXR5VXNlck1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4VG9SZW1vdmUgPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLmlkID09PSBpZCAmJiB1c2VyLnVzZXJuYW1lID09PSB1c2VybmFtZSAmJiB1c2VyLmVtYWlsID09PSBlbWFpbCk7XG5cbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuc3BsaWNlKGluZGV4VG9SZW1vdmUsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVVc2VyRnJvbVZhbGlkYXRpb24oeyBpZCwgdXNlcm5hbWUsIGVtYWlsIH06IElkZW50aXR5VXNlck1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4VG9SZW1vdmUgPSB0aGlzLmludmFsaWRVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IGlkICYmIHVzZXIudXNlcm5hbWUgPT09IHVzZXJuYW1lICYmIHVzZXIuZW1haWwgPT09IGVtYWlsKTtcblxuICAgICAgICBpZiAoaW5kZXhUb1JlbW92ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzLnNwbGljZShpbmRleFRvUmVtb3ZlLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbnZhbGlkVXNlcnNNZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcnNNZXNzYWdlID0gJyc7XG5cbiAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMuZm9yRWFjaCgoaW52YWxpZFVzZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuaW52YWxpZFVzZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcnNNZXNzYWdlICs9IGAke2ludmFsaWRVc2VyLnVzZXJuYW1lfSBgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcnNNZXNzYWdlICs9IGAke2ludmFsaWRVc2VyLnVzZXJuYW1lfSwgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzUHJlc2VsZWN0RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludmFsaWRVc2VycyAmJiB0aGlzLmludmFsaWRVc2Vycy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlOYW1lKHVzZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRnVsbE5hbWVQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0odXNlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NpbmdsZVNlbGVjdGlvblJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZU1vZGUoKSAmJiB0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS5yZWFkb25seSA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZVNlbGVjdFVzZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVTZWxlY3RVc2VycyAmJiB0aGlzLnByZVNlbGVjdFVzZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNNb2RlQ2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy5tb2RlICYmIGNoYW5nZXMubW9kZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMubW9kZS5wcmV2aW91c1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZGF0aW9uQ2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy52YWxpZGF0ZSAmJiBjaGFuZ2VzLnZhbGlkYXRlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy52YWxpZGF0ZS5wcmV2aW91c1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRVc2Vyc0NoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8ucHJlU2VsZWN0VXNlcnMgJiYgY2hhbmdlcy5wcmVTZWxlY3RVc2Vycy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMucHJlU2VsZWN0VXNlcnMucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkVXNlcnNDbGVhcmVkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/LnByZVNlbGVjdFVzZXJzPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2VhcmNoVXNlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hVc2VycyQubmV4dCh0aGlzLnNlYXJjaFVzZXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFR5cGluZ0Vycm9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLnNldEVycm9ycyh7XG4gICAgICAgICAgICBzZWFyY2hUeXBpbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXNlckNoaXBzQ29udHJvbFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMudXNlckNoaXBzQ3RybC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRVc2VycygpOiBJZGVudGl0eVVzZXJNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VycztcbiAgICB9XG5cbiAgICBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCB0aGlzLmlzU2luZ2xlU2VsZWN0aW9uUmVhZG9ubHkoKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkYXRpb25Mb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkgJiYgdGhpcy52YWxpZGF0aW9uTG9hZGluZztcbiAgICB9XG5cbiAgICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlzVG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG91Y2hlZDtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVzZXJzICYmICEhdGhpcy5zZWxlY3RlZFVzZXJzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpc0RpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RvdWNoZWQoKSAmJiAhdGhpcy5pc1NlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgc2V0Rm9jdXMoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgIH1cblxuICAgIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycztcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0aW9uUGF0dGVybigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm47XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvbk1heExlbmd0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnMubWF4bGVuZ3RoLnJlcXVpcmVkTGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRpb25NaW5MZW5ndGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxmb3JtPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwiYXV0b1wiIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZFwiIFtjbGFzcy5hZGYtaW52YWxpZF09XCJoYXNFcnJvcigpICYmIGlzRGlydHkoKVwiPlxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiIWlzUmVhZG9ubHkoKVwiIGlkPVwiYWRmLXBlb3BsZS1jbG91ZC10aXRsZS1pZFwiIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC10aXRsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FkZi1wZW9wbGUtY2xvdWQtdGl0bGUtLWZvY3VzJzogaXNGb2N1c2VkfVwiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtY2hpcC1saXN0ICN1c2VyTXVsdGlwbGVDaGlwTGlzdCBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSgpIHx8IGlzVmFsaWRhdGlvbkxvYWRpbmcoKVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1jbG91ZC1wZW9wbGUtY2hpcC1saXN0XCI+XG4gICAgICAgICAgICA8bWF0LWNoaXBcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdXNlciBvZiBzZWxlY3RlZFVzZXJzXCJcbiAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cIiEodXNlci5yZWFkb25seSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXBlb3BsZS1jbG91ZC1jaGlwLScgKyB1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJvblJlbW92ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7ICh1c2VyLnJlYWRvbmx5ID8gJ0FERl9DTE9VRF9HUk9VUFMuTUFOREFUT1JZJyA6ICcnKSB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIHt7dXNlciB8IGZ1bGxOYW1lfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgbWF0Q2hpcFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEodXNlci5yZWFkb25seSB8fCByZWFkT25seSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1wZW9wbGUtY2xvdWQtY2hpcC1yZW1vdmUtaWNvbi0nICsgdXNlci51c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFpc1JlYWRvbmx5KClcIiBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hVc2VyQ3RybFwiXG4gICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInVzZXJNdWx0aXBsZUNoaXBMaXN0XCJcbiAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRGb2N1cyh0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0Rm9jdXMoZmFsc2UpOyBtYXJrQXNUb3VjaGVkKClcIlxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGVvcGxlLWNsb3VkLXNlYXJjaC1pbnB1dFwiICN1c2VySW5wdXQ+XG4gICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cblxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSBhdXRvQWN0aXZlRmlyc3RPcHRpb24gY2xhc3M9XCJhZGYtcGVvcGxlLWNsb3VkLWxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvblNlbGVjdCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzZWFyY2hVc2VycyQgfCBhc3luYyk/Lmxlbmd0aCBlbHNlIG5vUmVzdWx0c1wiID5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1c2VyIG9mIHNlYXJjaFVzZXJzJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cInVzZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC1vcHRpb24tYWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtcm93XCIgaWQ9XCJhZGYtcGVvcGxlLWNsb3VkLXVzZXIte3t1c2VyLnVzZXJuYW1lfX1cIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXBlb3BsZS1jbG91ZC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbb3V0ZXJIVE1MXT1cInVzZXIgfCB1c2VybmFtZUluaXRpYWxzOidhZGYtcGVvcGxlLWNsb3VkLXBpYydcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtcGVvcGxlLWxhYmVsLW5hbWVcIj4ge3t1c2VyIHwgZnVsbE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignc2VhcmNoVHlwaW5nRXJyb3InKSAmJiAhc2VhcmNoTG9hZGluZ1wiIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtcGVvcGxlLWNsb3VkLW9wdGlvbi1ub3QtYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGVvcGxlLWNsb3VkLW5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7ICdBREZfQ0xPVURfVVNFUlMuRVJST1IuTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZSA6IHsgdXNlck5hbWU6IHNlYXJjaGVkVmFsdWUgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LXByb2dyZXNzLWJhclxuICAgICAgICAqbmdJZj1cInZhbGlkYXRpb25Mb2FkaW5nXCJcbiAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cbiAgICA8L21hdC1wcm9ncmVzcy1iYXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaGFzUHJlc2VsZWN0RXJyb3IoKSAmJiAhaXNWYWxpZGF0aW9uTG9hZGluZygpXCIgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBjbGFzcz1cImFkZi1lcnJvclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItdGV4dFwiPnt7ICdBREZfQ0xPVURfVVNFUlMuRVJST1IuTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZSA6IHsgdXNlck5hbWUgOiB2YWxpZGF0ZVVzZXJzTWVzc2FnZSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoVXNlckN0cmwuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9QQVRURVJOJyB8IHRyYW5zbGF0ZTogeyBwYXR0ZXJuOiBnZXRWYWxpZGF0aW9uUGF0dGVybigpIH0gfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignbWF4bGVuZ3RoJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfTUFYX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NYXhMZW5ndGgoKSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoVXNlckN0cmwuaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCIgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBjbGFzcz1cImFkZi1lcnJvclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItdGV4dFwiPnt7ICdBREZfQ0xPVURfUEVPUExFX0dST1VQUy5FUlJPUi5JTlZBTElEX01JTl9MRU5HVEgnIHwgdHJhbnNsYXRlOiB7IHJlcXVpcmVkTGVuZ3RoOiBnZXRWYWxpZGF0aW9uTWluTGVuZ3RoKCkgfSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIihzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCB1c2VyQ2hpcHNDdHJsLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSAmJiBpc0RpcnR5KClcIlxuICAgICAgICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBjbGFzcz1cImFkZi1lcnJvclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItdGV4dFwiPnt7ICdBREZfQ0xPVURfUEVPUExFX0dST1VQUy5FUlJPUi5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignc2VhcmNoVHlwaW5nRXJyb3InKSAmJiAhdGhpcy5pc0ZvY3VzZWRcIlxuICAgICAgICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJpbnZhbGlkLXVzZXJzLXR5cGluZy1lcnJvclwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZSA6IHNlYXJjaGVkVmFsdWUgfSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVvcGxlLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxTQUFTLEVBRVQsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsS0FBSyxFQUlMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSWpGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBZXRGLE1BQU0sT0FBTyxvQkFBb0I7SUE0RzdCLFlBRVksbUJBQWlEO1FBQWpELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBOEI7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VUFBVTtzQkFEVCxNQUFNO2dCQUtQLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsT0FBTztzQkFETixNQUFNO2dCQUlDLFNBQVM7c0JBRGhCLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZU1hcCwgdGFwLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZ1bGxOYW1lUGlwZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBJZGVudGl0eVVzZXJNb2RlbCB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eS11c2VyLm1vZGVsJztcbmltcG9ydCB7IElkZW50aXR5VXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZGVudGl0eS11c2VyLnNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElERU5USVRZX1VTRVJfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uL3NlcnZpY2VzL2lkZW50aXR5LXVzZXItc2VydmljZS50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLXBlb3BsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Blb3BsZS1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGVvcGxlLWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCd0cmFuc2l0aW9uTWVzc2FnZXMnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJyB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGVudGVyJywgW3N0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknIH0pLCBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKScpXSlcbiAgICAgICAgXSlcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0Z1bGxOYW1lUGlwZV0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQZW9wbGVDbG91ZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBOYW1lIG9mIHRoZSBhcHBsaWNhdGlvbi4gSWYgc3BlY2lmaWVkLCB0aGlzIHNob3dzIHRoZSB1c2VycyB3aG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGFwcC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcE5hbWU6IHN0cmluZztcblxuICAgIC8qKiBVc2VyIHNlbGVjdGlvbiBtb2RlIChzaW5nbGUvbXVsdGlwbGUpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogQ29tcG9uZW50U2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIFJvbGUgbmFtZXMgb2YgdGhlIHVzZXJzIHRvIGJlIGxpc3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGVzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBlbmFibGVzIHRoZSB2YWxpZGF0aW9uIG9uIHRoZSBwcmVTZWxlY3RVc2VycyBwYXNzZWQgYXMgaW5wdXQuXG4gICAgICogSW4gY2FzZSB0aGUgZmxhZyBpcyB0cnVlIHRoZSBjb21wb25lbnRzIGNhbGwgdGhlIGlkZW50aXR5IHNlcnZpY2UgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIGFzIGlucHV0LlxuICAgICAqIE90aGVyd2lzZSwgbm8gY2hlY2sgd2lsbCBiZSBkb25lLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsaWRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGluZm8gaW4gcmVhZG9ubHkgbW9kZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhpcyBmaWVsZCBhcyByZXF1aXJlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIHVzZXJzIHRvIGJlIHByZS1zZWxlY3RlZC4gQWxsIHVzZXJzIGluIHRoZVxuICAgICAqIGFycmF5IGFyZSBwcmUtc2VsZWN0ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCB1c2VyXG4gICAgICogaXMgcHJlLXNlbGVjdGVkIGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKiBNYW5kYXRvcnkgcHJvcGVydGllcyBhcmU6IGlkLCBlbWFpbCwgdXNlcm5hbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZVNlbGVjdFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiB1c2VycyB0byBiZSBleGNsdWRlZC5cbiAgICAgKiBNYW5kYXRvcnkgcHJvcGVydGllcyBhcmU6IGlkLCBlbWFpbCwgdXNlcm5hbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGV4Y2x1ZGVkVXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGdyb3VwcyB0byByZXN0cmljdCB1c2VyIHNlYXJjaGVzLlxuICAgICAqIE1hbmRhdG9yeSBwcm9wZXJ0eSBpcyBncm91cCBuYW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncm91cHNSZXN0cmljdGlvbjogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBGb3JtQ29udHJvbCB0byBsaXN0IG9mIHVzZXJzICovXG4gICAgQElucHV0KClcbiAgICB1c2VyQ2hpcHNDdHJsOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogZmFsc2UgfSk7XG5cbiAgICAvKiogRm9ybUNvbnRyb2wgdG8gc2VhcmNoIHRoZSB1c2VyICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hVc2VyQ3RybCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiBmYWxzZSB9KTtcblxuICAgIC8qKlxuICAgICAqIFBsYWNlaG9sZGVyIHRyYW5zbGF0aW9uIGtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSB1c2VyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdFVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElkZW50aXR5VXNlck1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHNlbGVjdGVkIHVzZXIgaXMgcmVtb3ZlZCBpbiBtdWx0aSBzZWxlY3Rpb24gbW9kZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZW1vdmVVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eVVzZXJNb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSB1c2VyIHNlbGVjdGlvbiBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2hhbmdlZFVzZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eVVzZXJNb2RlbFtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiB3YXJuaW5nIG9jY3Vycy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICB3YXJuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAVmlld0NoaWxkKCd1c2VySW5wdXQnKVxuICAgIHByaXZhdGUgdXNlcklucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSBzZWFyY2hVc2VyczogSWRlbnRpdHlVc2VyTW9kZWxbXSA9IFtdO1xuICAgIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBzZWxlY3RlZFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG4gICAgaW52YWxpZFVzZXJzOiBJZGVudGl0eVVzZXJNb2RlbFtdID0gW107XG5cbiAgICBzZWFyY2hVc2VycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkZW50aXR5VXNlck1vZGVsW10+KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgIHN1YnNjcmlwdEFuaW1hdGlvblN0YXRlOiBzdHJpbmcgPSAnZW50ZXInO1xuICAgIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgICB0b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB2YWxpZGF0ZVVzZXJzTWVzc2FnZTogc3RyaW5nO1xuICAgIHNlYXJjaGVkVmFsdWUgPSAnJztcblxuICAgIHZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgc2VhcmNoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdHlwaW5nVW5pcXVlVmFsdWVOb3RFbXB0eSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElERU5USVRZX1VTRVJfU0VSVklDRV9UT0tFTilcbiAgICAgICAgcHJpdmF0ZSBpZGVudGl0eVVzZXJTZXJ2aWNlOiBJZGVudGl0eVVzZXJTZXJ2aWNlSW50ZXJmYWNlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJlc2VsZWN0ZWRVc2Vyc0NoYW5nZWQoY2hhbmdlcykgfHwgdGhpcy5oYXNNb2RlQ2hhbmdlZChjaGFuZ2VzKSB8fCB0aGlzLmlzVmFsaWRhdGlvbkNoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ByZVNlbGVjdFVzZXJzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmVTZWxlY3RVc2VycygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkVXNlcnNDbGVhcmVkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0cmVhbSgpO1xuICAgICAgICB0aGlzLnR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKG5hbWU6IHN0cmluZykgPT4gbmFtZS5sZW5ndGggPj0gMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlVc2VyU2VydmljZS5zZWFyY2gobmFtZSwgeyByb2xlczogdGhpcy5yb2xlcywgd2l0aGluQXBwbGljYXRpb246IHRoaXMuYXBwTmFtZSwgZ3JvdXBzOiB0aGlzLmdyb3Vwc1Jlc3RyaWN0aW9uIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgodXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaFVzZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcnM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh1c2VyKSA9PiAhdGhpcy5pc1VzZXJBbHJlYWR5U2VsZWN0ZWQodXNlcikgJiYgIXRoaXMuaXNFeGNsdWRlZFVzZXIodXNlcikpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh1c2VyOiBJZGVudGl0eVVzZXJNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJzJC5uZXh0KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZUZyb21Db250cm9sJCA9IHRoaXMuc2VhcmNoVXNlckN0cmwudmFsdWVDaGFuZ2VzO1xuXG4gICAgICAgIGNvbnN0IHR5cGluZ1ZhbHVlVHlwZVN0aW5nJCA9IHR5cGluZ1ZhbHVlRnJvbUNvbnRyb2wkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVIYW5kbGVFcnJvck1lc3NhZ2UkID0gdHlwaW5nVmFsdWVUeXBlU3RpbmckLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUeXBpbmdFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVEZWJvdW5jZWRVbmlxdWUkID0gdHlwaW5nVmFsdWVIYW5kbGVFcnJvck1lc3NhZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgICAgIHRoaXMudHlwaW5nVW5pcXVlVmFsdWVOb3RFbXB0eSQgPSB0eXBpbmdWYWx1ZURlYm91bmNlZFVuaXF1ZSQucGlwZShcbiAgICAgICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucmVzZXRTZWFyY2hVc2VycygpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZGF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUgPT09IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VzZXJBbHJlYWR5U2VsZWN0ZWQoc2VhcmNoVXNlcjogSWRlbnRpdHlVc2VyTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VycyAmJiB0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZFVzZXJzLmZpbmQoKHNlbGVjdGVkVXNlcikgPT4gdGhpcy5lcXVhbHNVc2VycyhzZWxlY3RlZFVzZXIsIHNlYXJjaFVzZXIpKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRXhjbHVkZWRVc2VyKHNlYXJjaFVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkVXNlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZXhjbHVkZWRVc2Vycy5maW5kKChleGNsdWRlZFVzZXIpID0+IHRoaXMuZXF1YWxzVXNlcnMoZXhjbHVkZWRVc2VyLCBzZWFyY2hVc2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFByZVNlbGVjdFVzZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZU1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW3RoaXMucHJlU2VsZWN0VXNlcnNbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5wcmVTZWxlY3RVc2Vycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS51c2VybmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlUHJlc2VsZWN0VXNlcnMoKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJlc2VsZWN0ZWRVc2VycygpOiBJZGVudGl0eVVzZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wcmVTZWxlY3RVc2Vyc1swXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5wcmVTZWxlY3RVc2Vycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlUHJlc2VsZWN0VXNlcnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVzZXIgb2YgdGhpcy5nZXRQcmVzZWxlY3RlZFVzZXJzKCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGl0eVVzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VhcmNoKHVzZXIudXNlcm5hbWUsIHsgcm9sZXM6IHRoaXMucm9sZXMsIHdpdGhpbkFwcGxpY2F0aW9uOiB0aGlzLmFwcE5hbWUsIGdyb3VwczogdGhpcy5ncm91cHNSZXN0cmljdGlvbiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgKVswXTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lcXVhbHNVc2Vycyh1c2VyLCB2YWxpZGF0aW9uUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgZXF1YWxzVXNlcnMocHJlc2VsZWN0ZWRVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCwgaWRlbnRpdHlVc2VyOiBJZGVudGl0eVVzZXJNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocHJlc2VsZWN0ZWRVc2VyICYmIGlkZW50aXR5VXNlcikge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlUHJvcGVydHlJZGVudGlmaWVycyA9IFsnaWQnLCAndXNlcm5hbWUnLCAnZW1haWwnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXMocHJlc2VsZWN0ZWRVc2VyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZWxlY3RlZFVzZXJbcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgdW5pcXVlUHJvcGVydHlJZGVudGlmaWVycy5pbmNsdWRlcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXNlbGVjdGVkVXNlcltwcm9wZXJ0eV0gPT09IGlkZW50aXR5VXNlcltwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW1vdmVEdXBsaWNhdGVkVXNlcnModXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10pOiBJZGVudGl0eVVzZXJNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcihcbiAgICAgICAgICAgICh1c2VyLCBpbmRleCwgc2VsZikgPT5cbiAgICAgICAgICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKGF1eFVzZXIpID0+IHVzZXIuaWQgPT09IGF1eFVzZXIuaWQgJiYgdXNlci51c2VybmFtZSA9PT0gYXV4VXNlci51c2VybmFtZSAmJiB1c2VyLmVtYWlsID09PSBhdXhVc2VyLmVtYWlsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uU2VsZWN0KHVzZXI6IElkZW50aXR5VXNlck1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXIuZW1pdCh1c2VyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZU1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1VzZXJBbHJlYWR5U2VsZWN0ZWQodXNlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRVc2VycyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFt1c2VyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51c2VySW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLnVzZXJDaGlwc0NvbnRyb2xWYWx1ZSh0aGlzLnNlbGVjdGVkVXNlcnNbMF0udXNlcm5hbWUpO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRVc2Vycy5lbWl0KHRoaXMuc2VsZWN0ZWRVc2Vycyk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVXNlcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKHVzZXJUb1JlbW92ZTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVVc2VyLmVtaXQodXNlclRvUmVtb3ZlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVVc2VyRnJvbVNlbGVjdGVkKHVzZXJUb1JlbW92ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFVzZXJzLmVtaXQodGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudXNlckNoaXBzQ29udHJvbFZhbHVlKCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXNlckNoaXBzQ29udHJvbFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2Vyc1swXS51c2VybmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hVc2VyQ3RybC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJDdHJsLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckZyb21WYWxpZGF0aW9uKHVzZXJUb1JlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1ByZXNlbGVjdFZhbGlkYXRpb25FcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW52YWxpZFVzZXJzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVkVXNlcnModGhpcy5pbnZhbGlkVXNlcnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWRVc2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlSW52YWxpZFVzZXJzTWVzc2FnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YXJuaW5nLmVtaXQoe1xuICAgICAgICAgICAgbWVzc2FnZTogJ0lOVkFMSURfUFJFU0VMRUNURURfVVNFUlMnLFxuICAgICAgICAgICAgdXNlcnM6IHRoaXMuaW52YWxpZFVzZXJzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVXNlckZyb21TZWxlY3RlZCh7IGlkLCB1c2VybmFtZSwgZW1haWwgfTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IGlkICYmIHVzZXIudXNlcm5hbWUgPT09IHVzZXJuYW1lICYmIHVzZXIuZW1haWwgPT09IGVtYWlsKTtcblxuICAgICAgICBpZiAoaW5kZXhUb1JlbW92ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5zcGxpY2UoaW5kZXhUb1JlbW92ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVVzZXJGcm9tVmFsaWRhdGlvbih7IGlkLCB1c2VybmFtZSwgZW1haWwgfTogSWRlbnRpdHlVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuaW52YWxpZFVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gaWQgJiYgdXNlci51c2VybmFtZSA9PT0gdXNlcm5hbWUgJiYgdXNlci5lbWFpbCA9PT0gZW1haWwpO1xuXG4gICAgICAgIGlmIChpbmRleFRvUmVtb3ZlICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkVXNlcnMuc3BsaWNlKGluZGV4VG9SZW1vdmUsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUludmFsaWRVc2Vyc01lc3NhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgPSAnJztcblxuICAgICAgICB0aGlzLmludmFsaWRVc2Vycy5mb3JFYWNoKChpbnZhbGlkVXNlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5pbnZhbGlkVXNlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgKz0gYCR7aW52YWxpZFVzZXIudXNlcm5hbWV9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVc2Vyc01lc3NhZ2UgKz0gYCR7aW52YWxpZFVzZXIudXNlcm5hbWV9LCBgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYXNQcmVzZWxlY3RFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZFVzZXJzICYmIHRoaXMuaW52YWxpZFVzZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheU5hbWUodXNlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBGdWxsTmFtZVBpcGUucHJvdG90eXBlLnRyYW5zZm9ybSh1c2VyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTXVsdGlwbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlU2VsZWN0aW9uUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlTW9kZSgpICYmIHRoaXMuc2VsZWN0ZWRVc2Vycy5sZW5ndGggPT09IDEgJiYgdGhpcy5zZWxlY3RlZFVzZXJzWzBdLnJlYWRvbmx5ID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlU2VsZWN0VXNlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZVNlbGVjdFVzZXJzICYmIHRoaXMucHJlU2VsZWN0VXNlcnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc01vZGVDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/Lm1vZGUgJiYgY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkYXRpb25DaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/LnZhbGlkYXRlICYmIGNoYW5nZXMudmFsaWRhdGUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnZhbGlkYXRlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZFVzZXJzQ2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy5wcmVTZWxlY3RVc2VycyAmJiBjaGFuZ2VzLnByZVNlbGVjdFVzZXJzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5wcmVTZWxlY3RVc2Vycy5wcmV2aW91c1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRVc2Vyc0NsZWFyZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8ucHJlU2VsZWN0VXNlcnM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2hVc2VycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hVc2VycyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaFVzZXJzJC5uZXh0KHRoaXMuc2VhcmNoVXNlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHlwaW5nRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVXNlckN0cmwuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIHNlYXJjaFR5cGluZ0Vycm9yOiB0cnVlLFxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1c2VyQ2hpcHNDb250cm9sVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVzZXJDaGlwc0N0cmwuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnVzZXJDaGlwc0N0cmwubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy51c2VyQ2hpcHNDdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFVzZXJzKCk6IElkZW50aXR5VXNlck1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVzZXJzO1xuICAgIH1cblxuICAgIGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25SZWFkb25seSgpO1xuICAgIH1cblxuICAgIGlzVmFsaWRhdGlvbkxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLnZhbGlkYXRpb25Mb2FkaW5nO1xuICAgIH1cblxuICAgIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaXNUb3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3VjaGVkO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVXNlcnMgJiYgISF0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGlzRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG91Y2hlZCgpICYmICF0aGlzLmlzU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBzZXRGb2N1cyhpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VhcmNoVXNlckN0cmwuZXJyb3JzO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRpb25QYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycy5wYXR0ZXJuLnJlcXVpcmVkUGF0dGVybjtcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0aW9uTWF4TGVuZ3RoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJDdHJsLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvbk1pbkxlbmd0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hVc2VyQ3RybC5lcnJvcnMubWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGZvcm0+XG4gICAgPG1hdC1mb3JtLWZpZWxkIFtmbG9hdExhYmVsXT1cIidhdXRvJ1wiIGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZFwiIFtjbGFzcy5hZGYtaW52YWxpZF09XCJoYXNFcnJvcigpICYmIGlzRGlydHkoKVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bWF0LWNoaXAtZ3JpZCAjdXNlck11bHRpcGxlQ2hpcExpc3QgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkoKSB8fCBpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtY2xvdWQtcGVvcGxlLWNoaXAtbGlzdFwiPlxuICAgICAgICAgICAgPG1hdC1jaGlwLXJvd1xuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIHNlbGVjdGVkVXNlcnNcIlxuICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiISh1c2VyLnJlYWRvbmx5KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtcGVvcGxlLWNsb3VkLWNoaXAtJyArIHVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIm9uUmVtb3ZlKHVzZXIpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICh1c2VyLnJlYWRvbmx5ID8gJ0FERl9DTE9VRF9HUk9VUFMuTUFOREFUT1JZJyA6ICcnKSB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIHt7dXNlciB8IGZ1bGxOYW1lfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgbWF0Q2hpcFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEodXNlci5yZWFkb25seSB8fCByZWFkT25seSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1wZW9wbGUtY2xvdWQtY2hpcC1yZW1vdmUtaWNvbi0nICsgdXNlci51c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkoKVwiIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgI2NoaXBJbnB1dFxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hVc2VyQ3RybFwiXG4gICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInVzZXJNdWx0aXBsZUNoaXBMaXN0XCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEZvY3VzKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGb2N1cyhmYWxzZSk7IG1hcmtBc1RvdWNoZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wZW9wbGUtY2xvdWQtc2VhcmNoLWlucHV0XCIgI3VzZXJJbnB1dD5cbiAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuXG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uU2VsZWN0KCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImdldERpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNlYXJjaFVzZXJzJCB8IGFzeW5jKT8ubGVuZ3RoIGVsc2Ugbm9SZXN1bHRzXCIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVzZXIgb2Ygc2VhcmNoVXNlcnMkIHwgYXN5bmM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwidXNlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtcGVvcGxlLWNsb3VkLW9wdGlvbi1hY3RpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBlb3BsZS1jbG91ZC1yb3dcIiBpZD1cImFkZi1wZW9wbGUtY2xvdWQtdXNlci17e3VzZXIudXNlcm5hbWV9fVwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGVvcGxlLWNsb3VkLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtvdXRlckhUTUxdPVwidXNlciB8IHVzZXJuYW1lSW5pdGlhbHM6J2FkZi1wZW9wbGUtY2xvdWQtcGljJ1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1wZW9wbGUtbGFiZWwtbmFtZVwiPiB7e3VzZXIgfCBmdWxsTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vUmVzdWx0cz5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdzZWFyY2hUeXBpbmdFcnJvcicpICYmICFzZWFyY2hMb2FkaW5nXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wZW9wbGUtY2xvdWQtb3B0aW9uLW5vdC1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wZW9wbGUtY2xvdWQtbm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZTogc2VhcmNoZWRWYWx1ZSB9IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyXG4gICAgICAgICpuZ0lmPVwidmFsaWRhdGlvbkxvYWRpbmdcIlxuICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPlxuICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cblxuICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItY29udGFpbmVyXCI+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJoYXNQcmVzZWxlY3RFcnJvcigpICYmICFpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9VU0VSUy5FUlJPUi5OT1RfRk9VTkQnIHwgdHJhbnNsYXRlIDogeyB1c2VyTmFtZSA6IHZhbGlkYXRlVXNlcnNNZXNzYWdlIH0gfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcigncGF0dGVybicpXCIgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwic3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIiBjbGFzcz1cImFkZi1lcnJvclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItdGV4dFwiPnt7ICdBREZfQ0xPVURfUEVPUExFX0dST1VQUy5FUlJPUi5JTlZBTElEX1BBVFRFUk4nIHwgdHJhbnNsYXRlOiB7IHBhdHRlcm46IGdldFZhbGlkYXRpb25QYXR0ZXJuKCkgfSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9NQVhfTEVOR1RIJyB8IHRyYW5zbGF0ZTogeyByZXF1aXJlZExlbmd0aDogZ2V0VmFsaWRhdGlvbk1heExlbmd0aCgpIH0gfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hVc2VyQ3RybC5oYXNFcnJvcignbWlubGVuZ3RoJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NaW5MZW5ndGgoKSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiKHNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJDaGlwc0N0cmwuaGFzRXJyb3IoJ3JlcXVpcmVkJykpICYmIGlzRGlydHkoKVwiXG4gICAgICAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFVzZXJDdHJsLmhhc0Vycm9yKCdzZWFyY2hUeXBpbmdFcnJvcicpICYmICF0aGlzLmlzRm9jdXNlZFwiXG4gICAgICAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImludmFsaWQtdXNlcnMtdHlwaW5nLWVycm9yXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1VTRVJTLkVSUk9SLk5PVF9GT1VORCcgfCB0cmFuc2xhdGUgOiB7IHVzZXJOYW1lIDogc2VhcmNoZWRWYWx1ZSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
|