@qbs-origin/origin-form 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/action-step-handler.mjs +163 -0
  3. package/esm2022/lib/auth-client.service.mjs +69 -0
  4. package/esm2022/lib/enums/label.keys.mjs +721 -0
  5. package/esm2022/lib/form-css.helper.mjs +367 -0
  6. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
  7. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
  8. package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
  9. package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
  10. package/esm2022/lib/formly/formly-action.mjs +56 -0
  11. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
  12. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
  13. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
  14. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
  15. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
  16. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
  17. package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
  18. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
  19. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
  20. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
  21. package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
  22. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
  23. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
  24. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
  25. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
  26. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
  27. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
  28. package/esm2022/lib/model-population.helper.mjs +265 -0
  29. package/esm2022/lib/models/application-type.model.mjs +12 -0
  30. package/esm2022/lib/models/application.model.mjs +30 -0
  31. package/esm2022/lib/models/auth/users.model.mjs +2 -0
  32. package/esm2022/lib/models/dictionary.model.mjs +20 -0
  33. package/esm2022/lib/models/flux.model.mjs +105 -0
  34. package/esm2022/lib/models/forms.model.mjs +572 -0
  35. package/esm2022/lib/models/label-info.model.mjs +2 -0
  36. package/esm2022/lib/models/label.model.mjs +2 -0
  37. package/esm2022/lib/models/language.model.mjs +3 -0
  38. package/esm2022/lib/models/list.model.mjs +2 -0
  39. package/esm2022/lib/models/partner.model.mjs +3 -0
  40. package/esm2022/lib/models/treeview.model.mjs +15 -0
  41. package/esm2022/lib/origin-form-auth.service.mjs +40 -0
  42. package/esm2022/lib/origin-form-config.model.mjs +2 -0
  43. package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
  44. package/esm2022/lib/origin-form.component.mjs +2391 -0
  45. package/esm2022/lib/origin-form.module.mjs +479 -0
  46. package/esm2022/lib/origin-form.service.mjs +14 -0
  47. package/esm2022/lib/others/check-list.database.mjs +55 -0
  48. package/esm2022/lib/others/config-service.mjs +42 -0
  49. package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
  50. package/esm2022/lib/others/environment-type.mjs +21 -0
  51. package/esm2022/lib/others/external-link.directive.mjs +49 -0
  52. package/esm2022/lib/others/flux-helper.mjs +1397 -0
  53. package/esm2022/lib/others/picker.component.mjs +119 -0
  54. package/esm2022/lib/others/translation.pipe.mjs +21 -0
  55. package/esm2022/lib/others/translations-helper.mjs +258 -0
  56. package/esm2022/lib/others/utils.mjs +272 -0
  57. package/esm2022/lib/services/applicationData.service.mjs +145 -0
  58. package/esm2022/lib/services/auth-http.service.mjs +80 -0
  59. package/esm2022/lib/services/dialog.service.mjs +56 -0
  60. package/esm2022/lib/services/dictionary.service.mjs +198 -0
  61. package/esm2022/lib/services/forms.service.mjs +47 -0
  62. package/esm2022/lib/services/labels.service.mjs +29 -0
  63. package/esm2022/lib/services/language.service.mjs +24 -0
  64. package/esm2022/lib/services/open-banking.service.mjs +194 -0
  65. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
  66. package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
  67. package/esm2022/lib/services/otp.service.mjs +28 -0
  68. package/esm2022/lib/services/proxy.service.mjs +79 -0
  69. package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
  70. package/esm2022/lib/services/translation.service.mjs +27 -0
  71. package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
  72. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
  73. package/esm2022/lib/shared-components/grid.component.mjs +241 -0
  74. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
  75. package/esm2022/lib/theme-css.mjs +2254 -0
  76. package/esm2022/lib/theme-injector.service.mjs +26 -0
  77. package/esm2022/public-api.mjs +4 -0
  78. package/esm2022/qbs-origin-origin-form.mjs +5 -0
  79. package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
  80. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/action-step-handler.d.ts +49 -0
  83. package/lib/auth-client.service.d.ts +17 -0
  84. package/lib/enums/label.keys.d.ts +720 -0
  85. package/lib/form-css.helper.d.ts +28 -0
  86. package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
  87. package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
  88. package/lib/formly/custom-section-separator.component.d.ts +6 -0
  89. package/lib/formly/form-section-separator.component.d.ts +10 -0
  90. package/lib/formly/formly-action.d.ts +13 -0
  91. package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
  92. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
  93. package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
  94. package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
  95. package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
  96. package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
  97. package/lib/formly/formly-identification.component.d.ts +19 -0
  98. package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
  99. package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
  100. package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
  101. package/lib/formly/formly-row-fille.d.ts +6 -0
  102. package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
  103. package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
  104. package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
  105. package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
  106. package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
  107. package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
  108. package/lib/model-population.helper.d.ts +8 -0
  109. package/lib/models/application-type.model.d.ts +27 -0
  110. package/lib/models/application.model.d.ts +107 -0
  111. package/lib/models/auth/users.model.d.ts +20 -0
  112. package/lib/models/dictionary.model.d.ts +77 -0
  113. package/lib/models/flux.model.d.ts +101 -0
  114. package/lib/models/forms.model.d.ts +504 -0
  115. package/lib/models/label-info.model.d.ts +10 -0
  116. package/lib/models/label.model.d.ts +4 -0
  117. package/lib/models/language.model.d.ts +5 -0
  118. package/lib/models/list.model.d.ts +8 -0
  119. package/lib/models/partner.model.d.ts +12 -0
  120. package/lib/models/treeview.model.d.ts +17 -0
  121. package/lib/origin-form-auth.service.d.ts +15 -0
  122. package/lib/origin-form-config.model.d.ts +12 -0
  123. package/lib/origin-form-token.interceptor.d.ts +12 -0
  124. package/lib/origin-form.component.d.ts +231 -0
  125. package/lib/origin-form.module.d.ts +84 -0
  126. package/lib/origin-form.service.d.ts +6 -0
  127. package/lib/others/check-list.database.d.ts +16 -0
  128. package/lib/others/config-service.d.ts +22 -0
  129. package/lib/others/dictionary-label-info.d.ts +6 -0
  130. package/lib/others/environment-type.d.ts +8 -0
  131. package/lib/others/external-link.directive.d.ts +12 -0
  132. package/lib/others/flux-helper.d.ts +115 -0
  133. package/lib/others/picker.component.d.ts +36 -0
  134. package/lib/others/translation.pipe.d.ts +10 -0
  135. package/lib/others/translations-helper.d.ts +31 -0
  136. package/lib/others/utils.d.ts +37 -0
  137. package/lib/services/applicationData.service.d.ts +35 -0
  138. package/lib/services/auth-http.service.d.ts +21 -0
  139. package/lib/services/dialog.service.d.ts +20 -0
  140. package/lib/services/dictionary.service.d.ts +89 -0
  141. package/lib/services/forms.service.d.ts +17 -0
  142. package/lib/services/labels.service.d.ts +13 -0
  143. package/lib/services/language.service.d.ts +14 -0
  144. package/lib/services/open-banking.service.d.ts +137 -0
  145. package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
  146. package/lib/services/origin-form-signalr.service.d.ts +24 -0
  147. package/lib/services/otp.service.d.ts +22 -0
  148. package/lib/services/proxy.service.d.ts +29 -0
  149. package/lib/services/scroll-to-error.service.d.ts +54 -0
  150. package/lib/services/translation.service.d.ts +10 -0
  151. package/lib/shared-components/confirmation.component.d.ts +77 -0
  152. package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
  153. package/lib/shared-components/grid.component.d.ts +138 -0
  154. package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
  155. package/lib/theme-css.d.ts +2 -0
  156. package/lib/theme-injector.service.d.ts +8 -0
  157. package/package.json +42 -0
  158. package/public-api.d.ts +3 -0
  159. package/schematics-compiled/collection.json +10 -0
  160. package/schematics-compiled/ng-add/index.d.ts +2 -0
  161. package/schematics-compiled/ng-add/index.js +67 -0
  162. package/schematics-compiled/ng-add/index.js.map +1 -0
  163. package/schematics-compiled/ng-add/schema.json +8 -0
  164. package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
  165. package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
  166. package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
  167. package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
  168. package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
  169. package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
  170. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
  171. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
  172. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
  173. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
  174. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
  175. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
  176. package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
  177. package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
  178. package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
  179. package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
  180. package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
  181. package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
  182. package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
@@ -0,0 +1,119 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { Observable, map, startWith } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/input";
7
+ import * as i4 from "@angular/material/form-field";
8
+ import * as i5 from "@angular/material/autocomplete";
9
+ import * as i6 from "@angular/material/core";
10
+ import * as i7 from "@angular/material/chips";
11
+ import * as i8 from "@angular/material/icon";
12
+ export class PickerComponent {
13
+ constructor(builder) {
14
+ this.builder = builder;
15
+ this.selections = [];
16
+ this.readonly = false;
17
+ this.inputVisible = true;
18
+ this.displayProperty = 'name';
19
+ this.iconProperty = 'icon';
20
+ this.picked = new EventEmitter();
21
+ this.removed = new EventEmitter();
22
+ this.form = this.builder.group({
23
+ picker: [''],
24
+ });
25
+ this.groups = [];
26
+ }
27
+ ngOnInit() {
28
+ this.refresh();
29
+ }
30
+ ngOnChanges(changes) {
31
+ if (changes['data']) {
32
+ this.refresh();
33
+ }
34
+ if (changes['selections']) {
35
+ this.refresh();
36
+ }
37
+ }
38
+ refresh() {
39
+ if (this.data instanceof Observable) {
40
+ this.data.subscribe({
41
+ next: (data) => {
42
+ this.getItems(data);
43
+ },
44
+ });
45
+ }
46
+ else {
47
+ this.getItems(this.data);
48
+ }
49
+ }
50
+ getItems(data) {
51
+ this.groups = [];
52
+ if (data && data.length) {
53
+ data.forEach((item) => {
54
+ if (item) {
55
+ const letter = item[this.displayProperty][0];
56
+ if (!this.groups.some((i) => i.key == letter)) {
57
+ this.groups.push({ key: letter, values: [] });
58
+ }
59
+ const object = this.groups.find((i) => i.key == letter);
60
+ object?.values.push(item);
61
+ }
62
+ });
63
+ this.groups.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
64
+ this.options = this.form.get('picker').valueChanges.pipe(startWith(''), map((value) => this.filter(value || '')));
65
+ }
66
+ }
67
+ filter(value) {
68
+ if (typeof value === 'string') {
69
+ return this.groups
70
+ .map((group) => ({
71
+ key: group.key,
72
+ values: filter(group.values, this.selections, value, this.displayProperty),
73
+ }))
74
+ .filter((group) => group.values.length > 0);
75
+ }
76
+ return [];
77
+ }
78
+ selected(value) {
79
+ this.selections.push(value);
80
+ this.form.get('picker')?.setValue('');
81
+ this.picked.emit(value);
82
+ }
83
+ remove(value) {
84
+ this.selections.splice(this.selections.findIndex((i) => i[this.displayProperty] === value[this.displayProperty]), 1);
85
+ this.form.get('picker')?.setValue('');
86
+ this.removed.emit(value);
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PickerComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PickerComponent, selector: "shared-picker", inputs: { data: "data", selections: "selections", placeholder: "placeholder", readonly: "readonly", inputVisible: "inputVisible", displayProperty: "displayProperty", iconProperty: "iconProperty" }, outputs: { picked: "picked", removed: "removed" }, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\" class=\"w-100 hide-hint\" [class.disabled]=\"readonly\" [hidden]=\"true\"\n *ngIf=\"inputVisible\">\n <input type=\"text\" matInput [placeholder]=\"placeholder ?? ''\" [readonly]=\"readonly\" [disabled]=\"readonly\"\n formControlName=\"picker\" [matAutocomplete]=\"autocomplete\" />\n <mat-icon matPrefix>\n <i-tabler name=\"arrow-down-right\" class=\"icon-20 d-flex\"></i-tabler>\n </mat-icon>\n\n <mat-autocomplete #autocomplete=\"matAutocomplete\" (optionSelected)=\"selected($event.option.value)\">\n <mat-optgroup *ngFor=\"let group of options | async\" [label]=\"group.key\">\n <mat-option *ngFor=\"let value of group.values\" [value]=\"value\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n </mat-option>\n </mat-optgroup>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-chip-set>\n <mat-chip *ngFor=\"let value of selections\" (removed)=\"remove(value)\" [disabled]=\"readonly\" class=\"f-s-14\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n</form>", styles: [".button-cell{display:flex;align-items:center}::ng-deep mat-form-field.disabled{opacity:.6;pointer-events:none}::ng-deep mat-form-field.disabled .mat-form-field-outline{border-color:#bdbdbd!important}::ng-deep mat-form-field.disabled .mat-input-element{color:#9e9e9e!important;cursor:not-allowed!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.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: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PickerComponent, decorators: [{
92
+ type: Component,
93
+ args: [{ selector: 'shared-picker', template: "<form [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\" class=\"w-100 hide-hint\" [class.disabled]=\"readonly\" [hidden]=\"true\"\n *ngIf=\"inputVisible\">\n <input type=\"text\" matInput [placeholder]=\"placeholder ?? ''\" [readonly]=\"readonly\" [disabled]=\"readonly\"\n formControlName=\"picker\" [matAutocomplete]=\"autocomplete\" />\n <mat-icon matPrefix>\n <i-tabler name=\"arrow-down-right\" class=\"icon-20 d-flex\"></i-tabler>\n </mat-icon>\n\n <mat-autocomplete #autocomplete=\"matAutocomplete\" (optionSelected)=\"selected($event.option.value)\">\n <mat-optgroup *ngFor=\"let group of options | async\" [label]=\"group.key\">\n <mat-option *ngFor=\"let value of group.values\" [value]=\"value\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n </mat-option>\n </mat-optgroup>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-chip-set>\n <mat-chip *ngFor=\"let value of selections\" (removed)=\"remove(value)\" [disabled]=\"readonly\" class=\"f-s-14\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n</form>", styles: [".button-cell{display:flex;align-items:center}::ng-deep mat-form-field.disabled{opacity:.6;pointer-events:none}::ng-deep mat-form-field.disabled .mat-form-field-outline{border-color:#bdbdbd!important}::ng-deep mat-form-field.disabled .mat-input-element{color:#9e9e9e!important;cursor:not-allowed!important}\n"] }]
94
+ }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { data: [{
95
+ type: Input
96
+ }], selections: [{
97
+ type: Input
98
+ }], placeholder: [{
99
+ type: Input
100
+ }], readonly: [{
101
+ type: Input
102
+ }], inputVisible: [{
103
+ type: Input
104
+ }], displayProperty: [{
105
+ type: Input
106
+ }], iconProperty: [{
107
+ type: Input
108
+ }], picked: [{
109
+ type: Output
110
+ }], removed: [{
111
+ type: Output
112
+ }] } });
113
+ export const filter = (options, selections, value, displayProperty) => {
114
+ return options.filter((item) => (value
115
+ ? item[displayProperty].toLowerCase().includes(value.toLowerCase())
116
+ : true) &&
117
+ !selections?.some((i) => i[displayProperty] == item[displayProperty]));
118
+ };
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL290aGVycy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPbEQsTUFBTSxPQUFPLGVBQWU7SUFtQjFCLFlBQW9CLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFqQi9CLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFHaEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixvQkFBZSxHQUFXLE1BQU0sQ0FBQztRQUNqQyxpQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUM3QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsV0FBTSxHQUFZLEVBQUUsQ0FBQztJQUdzQixDQUFDO0lBRTVDLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BC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LEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTs7QUF3R1QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQ3BCLE9BQWMsRUFDZCxVQUFpQixFQUNqQixLQUFhLEVBQ2IsZUFBdUIsRUFDYixFQUFFO0lBQ1osT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxLQUFLO1FBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FDeEUsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaGFyZWQtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcbiAgQElucHV0KCkgc2VsZWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KClcbiAgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaW5wdXRWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheVByb3BlcnR5OiBzdHJpbmcgPSAnbmFtZSc7XG4gIEBJbnB1dCgpIGljb25Qcm9wZXJ0eTogc3RyaW5nID0gJ2ljb24nO1xuICBAT3V0cHV0KCkgcGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybSA9IHRoaXMuYnVpbGRlci5ncm91cCh7XG4gICAgcGlja2VyOiBbJyddLFxuICB9KTtcblxuICBncm91cHM6IEdyb3VwW10gPSBbXTtcbiAgb3B0aW9uczogT2JzZXJ2YWJsZTxHcm91cFtdPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICB0aGlzLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRJdGVtcyhkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldEl0ZW1zKHRoaXMuZGF0YSBhcyBhbnlbXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXRlbXMoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIGNvbnN0IGxldHRlciA9IGl0ZW1bdGhpcy5kaXNwbGF5UHJvcGVydHldWzBdO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmdyb3Vwcy5zb21lKChpKSA9PiBpLmtleSA9PSBsZXR0ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKHsga2V5OiBsZXR0ZXIsIHZhbHVlczogW10gfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5ncm91cHMuZmluZCgoaSkgPT4gaS5rZXkgPT0gbGV0dGVyKTtcbiAgICAgICAgICBvYmplY3Q/LnZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ncm91cHMuc29ydCgoYSwgYikgPT4gKGEua2V5IDwgYi5rZXkgPyAtMSA6IGEua2V5ID4gYi5rZXkgPyAxIDogMCkpO1xuXG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmZvcm0uZ2V0KCdwaWNrZXInKSEudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuZmlsdGVyKHZhbHVlIHx8ICcnKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXIodmFsdWU6IHN0cmluZyk6IEdyb3VwW10ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cHNcbiAgICAgICAgLm1hcCgoZ3JvdXApID0+ICh7XG4gICAgICAgICAga2V5OiBncm91cC5rZXksXG4gICAgICAgICAgdmFsdWVzOiBmaWx0ZXIoXG4gICAgICAgICAgICBncm91cC52YWx1ZXMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5XG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC52YWx1ZXMubGVuZ3RoID4gMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgc2VsZWN0ZWQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHZhbHVlKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdwaWNrZXInKT8uc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5waWNrZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9ucy5zcGxpY2UoXG4gICAgICB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAoaSkgPT4gaVt0aGlzLmRpc3BsYXlQcm9wZXJ0eV0gPT09IHZhbHVlW3RoaXMuZGlzcGxheVByb3BlcnR5XVxuICAgICAgKSxcbiAgICAgIDFcbiAgICApO1xuICAgIHRoaXMuZm9ybS5nZXQoJ3BpY2tlcicpPy5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZXM6IGFueVtdO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gKFxuICBvcHRpb25zOiBhbnlbXSxcbiAgc2VsZWN0aW9uczogYW55W10sXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGRpc3BsYXlQcm9wZXJ0eTogc3RyaW5nXG4pOiBzdHJpbmdbXSA9PiB7XG4gIHJldHVybiBvcHRpb25zLmZpbHRlcihcbiAgICAoaXRlbSkgPT5cbiAgICAgICh2YWx1ZVxuICAgICAgICA/IGl0ZW1bZGlzcGxheVByb3BlcnR5XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICFzZWxlY3Rpb25zPy5zb21lKChpKSA9PiBpW2Rpc3BsYXlQcm9wZXJ0eV0gPT0gaXRlbVtkaXNwbGF5UHJvcGVydHldKVxuICApO1xufTtcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctMTAwIGhpZGUtaGludFwiIFtjbGFzcy5kaXNhYmxlZF09XCJyZWFkb25seVwiIFtoaWRkZW5dPVwidHJ1ZVwiXG4gICAgKm5nSWY9XCJpbnB1dFZpc2libGVcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPz8gJydcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGlja2VyXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIiAvPlxuICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+XG4gICAgICA8aS10YWJsZXIgbmFtZT1cImFycm93LWRvd24tcmlnaHRcIiBjbGFzcz1cImljb24tMjAgZC1mbGV4XCI+PC9pLXRhYmxlcj5cbiAgICA8L21hdC1pY29uPlxuXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiPlxuICAgICAgPG1hdC1vcHRncm91cCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygb3B0aW9ucyB8IGFzeW5jXCIgW2xhYmVsXT1cImdyb3VwLmtleVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ3JvdXAudmFsdWVzXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jZWxsXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ2YWx1ZVtpY29uUHJvcGVydHldXCI+e3sgdmFsdWVbaWNvblByb3BlcnR5XSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICB7eyB2YWx1ZVtkaXNwbGF5UHJvcGVydHldIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LW9wdGdyb3VwPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWNoaXAtc2V0PlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygc2VsZWN0aW9uc1wiIChyZW1vdmVkKT1cInJlbW92ZSh2YWx1ZSlcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiBjbGFzcz1cImYtcy0xNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jZWxsXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInZhbHVlW2ljb25Qcm9wZXJ0eV1cIj57eyB2YWx1ZVtpY29uUHJvcGVydHldIH19PC9tYXQtaWNvbj5cbiAgICAgICAge3sgdmFsdWVbZGlzcGxheVByb3BlcnR5XSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XG4gICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2hpcD5cbiAgPC9tYXQtY2hpcC1zZXQ+XG48L2Zvcm0+Il19
@@ -0,0 +1,21 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/translation.service";
4
+ export class TranslatePipe {
5
+ constructor(translationService) {
6
+ this.translationService = translationService;
7
+ }
8
+ transform(value, args) {
9
+ return this.translationService.translate(value);
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
12
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, name: "translate", pure: false }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, decorators: [{
15
+ type: Pipe,
16
+ args: [{
17
+ name: 'translate',
18
+ pure: false,
19
+ }]
20
+ }], ctorParameters: () => [{ type: i1.TranslationService }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3RyYW5zbGF0aW9uLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU9wRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFJLENBQUM7SUFFL0QsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFVO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDOytHQUxVLGFBQWE7NkdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAndHJhbnNsYXRlJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSkgeyB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGFyZ3M/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUodmFsdWUpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,258 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { StepControlType } from "../models/flux.model";
3
+ import * as i0 from "@angular/core";
4
+ export class TranslationsHelper {
5
+ static createComponentErrorsTranslations(langs, componentType) {
6
+ switch (componentType) {
7
+ case StepControlType.ManualInput: return this.createInputErrorsTranslations(langs);
8
+ case StepControlType.CheckBox:
9
+ case StepControlType.Dictionary: return this.createDefaultErrorsTranslations(langs);
10
+ case StepControlType.DownloadDocuments: return this.createDownloadErrorsTranslations(langs);
11
+ case StepControlType.UploadDocuments: return this.createUploadErrorsTranslations(langs);
12
+ case StepControlType.ViewDocuments: return this.createViewErrorsTranslations(langs);
13
+ }
14
+ return [];
15
+ }
16
+ static createDownloadErrorsTranslations(langs) {
17
+ const tInfo = [
18
+ {
19
+ code: 'failToDownload',
20
+ translations: this.createLabelsInfo(langs, 'Failed to download.', 'Nu am reușit sa descarc.')
21
+ },
22
+ {
23
+ code: 'noDocumentsToDownload',
24
+ translations: this.createLabelsInfo(langs, 'No documents to download.', 'Nu sunt documente de descărcat.')
25
+ },
26
+ ];
27
+ return tInfo;
28
+ }
29
+ static createUploadErrorsTranslations(langs) {
30
+ const tInfo = [
31
+ {
32
+ code: 'invalidType',
33
+ translations: this.createLabelsInfo(langs, 'Invalid type', 'Tip invalid')
34
+ },
35
+ {
36
+ code: 'maxSize',
37
+ translations: this.createLabelsInfo(langs, 'The item exceeds the maximum size of {0}.', 'Fișierul depașeste dimensiunea maxima de {0}.')
38
+ },
39
+ {
40
+ code: 'isMandatory',
41
+ translations: this.createLabelsInfo(langs, 'The item is mandatory.', 'Acest fișier este obligatoriu.')
42
+ },
43
+ {
44
+ code: 'waitForUpload',
45
+ translations: this.createLabelsInfo(langs, 'Please wait for upload to finish.', 'Vă rugam așteptați incărcarea fișierelor.')
46
+ },
47
+ ];
48
+ return tInfo;
49
+ }
50
+ static createViewErrorsTranslations(langs) {
51
+ const tInfo = [
52
+ {
53
+ code: 'failToView',
54
+ translations: this.createLabelsInfo(langs, 'Failed to view', 'Nu am reușit sa vizualizez')
55
+ },
56
+ {
57
+ code: 'noDocumentsToShow',
58
+ translations: this.createLabelsInfo(langs, 'No documents to show', 'Nu sunt documente de afișat')
59
+ },
60
+ ];
61
+ return tInfo;
62
+ }
63
+ static createInputErrorsTranslations(langs) {
64
+ const tInfo = [
65
+ {
66
+ code: 'isMandatoryValidation',
67
+ translations: this.createLabelsInfo(langs, 'This field is required.', 'Acest câmp este obligatoriu.')
68
+ },
69
+ {
70
+ code: 'simpleValidation',
71
+ translations: this.createLabelsInfo(langs, 'This field is invalid.', 'Acest câmp este invalid.')
72
+ },
73
+ {
74
+ code: 'throughApiValidation',
75
+ translations: this.createLabelsInfo(langs, 'This field is invalid.', 'Acest câmp este invalid.')
76
+ },
77
+ ];
78
+ return tInfo;
79
+ }
80
+ static createDefaultErrorsTranslations(langs) {
81
+ const tInfo = [
82
+ {
83
+ code: 'isMandatoryValidation',
84
+ translations: this.createLabelsInfo(langs, 'This field is required.', 'Acest câmp este obligatoriu.')
85
+ }
86
+ ];
87
+ return tInfo;
88
+ }
89
+ static createCheckEmailTranslations(langs) {
90
+ const tInfo = [
91
+ this.createTranslation(langs, 'name', 'common.others.name', 'Check email', 'Verifica email'),
92
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
93
+ this.createTranslation(langs, 'emailLabel', 'flux.systemSteps.email.emailLabel', 'Email', 'Email'),
94
+ this.createTranslation(langs, 'emailButtonLabel', 'flux.systemSteps.email.emailButtonLabel', 'Send code', 'Trimite cod'),
95
+ this.createTranslation(langs, 'otpLabel', 'flux.systemSteps.email.otpLabel', 'Verification code', 'Cod de verificare'),
96
+ this.createTranslation(langs, 'otpButtonLabel', 'flux.systemSteps.email.otpButtonLabel', 'Verify', 'Verifică'),
97
+ this.createTranslation(langs, 'emailRequiredLabel', 'flux.components.email.emailRequiredLabel', 'Email is required', 'Email-ul este obligatoriu'),
98
+ this.createTranslation(langs, 'emailErrorLabel', 'flux.systemSteps.email.emailErrorLabel', 'Email is not valid', 'Email-ul nu este valid'),
99
+ this.createTranslation(langs, 'otpErrorLabel', 'flux.systemSteps.email.otpErrorLabel', 'Code verification error', 'Eroare la verificare cod'),
100
+ this.createTranslation(langs, 'otpSuccessLabel', 'flux.systemSteps.email.otpSuccessLabel', 'Code verification successful', 'Verificarea codului a fost realizată cu succes'),
101
+ ];
102
+ return tInfo;
103
+ }
104
+ static createCheckPhoneTranslations(langs) {
105
+ const tInfo = [
106
+ this.createTranslation(langs, 'name', 'common.others.name', 'Check phone', 'Verifica telefon'),
107
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
108
+ this.createTranslation(langs, 'phoneLabel', 'flux.systemSteps.phone.phoneLabel', 'Phone', 'Telefon'),
109
+ this.createTranslation(langs, 'phoneButtonLabel', 'flux.systemSteps.phone.phoneButtonLabel', 'Send code', 'Trimite cod'),
110
+ this.createTranslation(langs, 'otpLabel', 'flux.systemSteps.email.otpLabel', 'Verification code', 'Cod de verificare'),
111
+ this.createTranslation(langs, 'otpButtonLabel', 'flux.systemSteps.email.otpButtonLabel', 'Verify', 'Verifică'),
112
+ this.createTranslation(langs, 'phoneRequiredLabel', 'flux.components.phone.phoneRequiredLabel', 'Phone number is required', 'Numărul de telefon este obligatoriu'),
113
+ this.createTranslation(langs, 'phoneErrorLabel', 'flux.systemSteps.phone.phoneErrorLabel', 'Phone number is not valid', 'Numărul de telefon nu este valid'),
114
+ this.createTranslation(langs, 'otpErrorLabel', 'flux.systemSteps.email.otpErrorLabel', 'Code verification error', 'Eroare la verificare cod'),
115
+ this.createTranslation(langs, 'otpSuccessLabel', 'flux.systemSteps.email.otpSuccessLabel', 'Code verification successful', 'Verificarea codului a fost realizată cu succes'),
116
+ ];
117
+ return tInfo;
118
+ }
119
+ static createIdScanTranslations(langs) {
120
+ const tInfo = [
121
+ this.createTranslation(langs, 'name', 'common.others.name', 'Id scan', 'Scanare act identitate'),
122
+ this.createTranslation(langs, 'description', 'common.others.description', 'Step to scan id document', 'Pas pentru încarcarea documentului de identitate'),
123
+ this.createTranslation(langs, 'uploadFileButtonLabel', 'flux.systemSteps.idScan.uploadButtonTextLabel', 'Upload file', 'Încarcă fișier'),
124
+ this.createTranslation(langs, 'takePictureButtonLabel', 'flux.systemSteps.idScan.takePictureButtonTextLabel', 'Take picture', 'Realizează o fotografie'),
125
+ ];
126
+ return tInfo;
127
+ }
128
+ static createPauseTranslations(langs) {
129
+ const tInfo = [
130
+ this.createTranslation(langs, 'name', 'common.others.name', 'Pause', 'Pauză'),
131
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
132
+ this.createTranslation(langs, 'offerReadyMessage', 'flux.systemSteps.pause.offerReadyMessageLabel', 'Your offer has been processed. Click on the link below to continue the flow.', 'Oferta dumneavoastra a fost procesata. Click pe link-ul de mai jos pentru a continua fluxul.'),
133
+ this.createTranslation(langs, 'continueOffersLinkMessageLabel', 'flux.systemSteps.pause.continueOffersLinkMessageLabel', 'Continue flow', 'Continuare flux'),
134
+ this.createTranslation(langs, 'offerReadySmsMessageLabel', 'flux.systemSteps.pause.offerReadySmsMessageLabel', 'Your offer has been processed. Click on the link below to continue the flow.', 'Oferta dumneavoastra a fost procesata. Click pe link-ul de mai jos pentru a continua fluxul.'),
135
+ ];
136
+ return tInfo;
137
+ }
138
+ static createActionTranslations(langs) {
139
+ const tInfo = [
140
+ this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading message', 'Mesaj de așteptare'),
141
+ ];
142
+ return tInfo;
143
+ }
144
+ static createStatusTranslations(langs) {
145
+ const tInfo = [
146
+ this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading message', 'Mesaj de așteptare'),
147
+ ];
148
+ return tInfo;
149
+ }
150
+ static createKycTranslations(langs) {
151
+ const tInfo = [
152
+ this.createTranslation(langs, 'name', 'common.others.name', 'KYC', 'KYC'),
153
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
154
+ this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading identification step...', 'Se încarcă pasul de identificare...'),
155
+ ];
156
+ return tInfo;
157
+ }
158
+ static createPaymentsTranslations(langs) {
159
+ const tInfo = [
160
+ this.createTranslation(langs, 'name', 'common.others.name', 'Payment', 'Plată'),
161
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
162
+ this.createTranslation(langs, 'cardenrolButtonLabel', 'cardenrol.cardenrolButtonLabel', 'Enrol card', 'Înrolează card'),
163
+ this.createTranslation(langs, 'cardenrolFailureLabel', 'cardenrol.cardenrolFailureLabel', 'Error enrolling card', 'Eroare la înrolare card'),
164
+ this.createTranslation(langs, 'cardenrolSuccessLabel', 'cardenrol.cardenrolSuccessLabel', 'Success enrolling card', 'Succes la înrolare card'),
165
+ ];
166
+ return tInfo;
167
+ }
168
+ static createOpenBankingTranslations(langs) {
169
+ const tInfo = [
170
+ this.createTranslation(langs, 'name', 'common.others.name', 'Open Banking', 'Open Banking'),
171
+ this.createTranslation(langs, 'description', 'common.others.description', 'Connect your bank account', 'Conectați contul bancar'),
172
+ this.createTranslation(langs, 'initialMessageTranslations', 'flux.systemSteps.openBanking.initialMessage', 'To continue, we need to verify your bank account information. Click Next to proceed.', 'Pentru a continua, trebuie să verificăm informațiile contului dvs. bancar. Faceți clic pe Următorul pentru a continua.'),
173
+ this.createTranslation(langs, 'waitingMessageTranslations', 'flux.systemSteps.openBanking.waitingMessage', 'Please wait while we retrieve your account information...', 'Vă rugăm să așteptați până când preluăm informațiile contului dvs...'),
174
+ this.createTranslation(langs, 'consentErrorMessageTranslations', 'flux.systemSteps.openBanking.consentErrorMessage', 'You must provide consent to continue. Please try again.', 'Trebuie să oferiți consimțământul pentru a continua. Vă rugăm să încercați din nou.'),
175
+ this.createTranslation(langs, 'completionMessageTranslations', 'flux.systemSteps.openBanking.completionMessage', 'Account information successfully retrieved.', 'Informațiile contului au fost preluate cu succes.'),
176
+ this.createTranslation(langs, 'retryButtonLabelTranslations', 'flux.systemSteps.openBanking.retryButtonLabel', 'Retry', 'Reîncearcă'),
177
+ // Button translations
178
+ this.createTranslation(langs, 'nextButtonTranslations', 'flux.systemSteps.openBanking.nextButton', 'Next', 'Următorul'),
179
+ this.createTranslation(langs, 'continueButtonTranslations', 'flux.systemSteps.openBanking.continueButton', 'Continue', 'Continuă'),
180
+ // UI labels
181
+ this.createTranslation(langs, 'selectBankTranslations', 'flux.systemSteps.openBanking.selectBank', 'Select your bank', 'Selectați banca dvs.'),
182
+ this.createTranslation(langs, 'consentTitleTranslations', 'flux.systemSteps.openBanking.consentTitle', 'Bank Authorization', 'Autorizare bancară'),
183
+ this.createTranslation(langs, 'consentDescriptionTranslations', 'flux.systemSteps.openBanking.consentDescription', 'Please complete the authorization process with your bank', 'Vă rugăm să completați procesul de autorizare cu banca dvs.'),
184
+ this.createTranslation(langs, 'waitingForAuthorizationTranslations', 'flux.systemSteps.openBanking.waitingForAuthorization', 'Waiting for authorization...', 'Se așteaptă autorizarea...'),
185
+ this.createTranslation(langs, 'popupWindowMessageTranslations', 'flux.systemSteps.openBanking.popupWindowMessage', 'A new window has opened for bank authorization. Please complete the process there.', 'S-a deschis o fereastră nouă pentru autorizare bancară. Vă rugăm să completați procesul acolo.'),
186
+ this.createTranslation(langs, 'popupBlockerMessageTranslations', 'flux.systemSteps.openBanking.popupBlockerMessage', 'If the window didn\'t open, please check your popup blocker settings.', 'Dacă fereastra nu s-a deschis, vă rugăm să verificați setările blocatorului de popup-uri.'),
187
+ this.createTranslation(langs, 'accountsRetrievedTranslations', 'flux.systemSteps.openBanking.accountsRetrieved', 'Accounts retrieved', 'Conturi preluate'),
188
+ this.createTranslation(langs, 'transactionsRetrievedTranslations', 'flux.systemSteps.openBanking.transactionsRetrieved', 'Transactions retrieved', 'Tranzacții preluate'),
189
+ this.createTranslation(langs, 'accountsFoundTranslations', 'flux.systemSteps.openBanking.accountsFound', '{0} account(s) found', '{0} cont(uri) găsite'),
190
+ this.createTranslation(langs, 'transactionsSummaryTranslations', 'flux.systemSteps.openBanking.transactionsSummary', '{0} transaction(s) retrieved for the last {1} month(s)', '{0} tranzacție(i) preluate pentru ultimele {1} lună(i)'),
191
+ ];
192
+ return tInfo;
193
+ }
194
+ static createCustomStepTranslations(langs) {
195
+ const tInfo = [
196
+ this.createTranslation(langs, 'name', 'common.others.name', 'Custom step', 'Pas custom'),
197
+ this.createTranslation(langs, 'description', 'common.others.description', '', ''),
198
+ ];
199
+ return tInfo;
200
+ }
201
+ static createViewOfferStepTranslations(langs) {
202
+ const tInfo = [
203
+ this.createTranslation(langs, 'name', 'common.others.name', 'View offer', 'Vizualizare ofertă'),
204
+ this.createTranslation(langs, 'description', 'common.others.description', 'View offer step', 'Pas pentru vizualizare ofertă'),
205
+ ];
206
+ return tInfo;
207
+ }
208
+ static createSignTranslations(langs) {
209
+ const tInfo = [
210
+ this.createTranslation(langs, 'name', 'common.others.name', 'Sign documents', 'Semnare documente'),
211
+ this.createTranslation(langs, 'description', 'common.others.description', 'Sign documents step', 'Pas pentru semnare documente'),
212
+ ];
213
+ return tInfo;
214
+ }
215
+ static createGenerateDocumentsTranslations(langs) {
216
+ const tInfo = [
217
+ this.createTranslation(langs, 'name', 'common.others.name', 'Generate documents', 'Generare documente'),
218
+ this.createTranslation(langs, 'description', 'common.others.description', 'Generate documents step', 'Pas pentru generare documente'),
219
+ ];
220
+ return tInfo;
221
+ }
222
+ static createTranslation(langs, name, translationKey, enValue, roValue) {
223
+ return {
224
+ name: name,
225
+ translationKey: translationKey,
226
+ values: this.createLabelsInfo(langs, enValue, roValue),
227
+ };
228
+ }
229
+ static createLabelsInfo(supportedLanguages, enValue, roValue) {
230
+ return this.createLabelsInfoCore(supportedLanguages, [
231
+ { iso: 'en', value: enValue },
232
+ { iso: 'ro', value: roValue },
233
+ ]);
234
+ }
235
+ static createLabelsInfoCore(supportedLanguages, values) {
236
+ let list = [];
237
+ values.forEach((v) => {
238
+ const langId = supportedLanguages.find((lang) => lang.iso === v.iso)?.id;
239
+ if (langId && langId > 0) {
240
+ list.push({
241
+ languageId: langId,
242
+ languageIso: v.iso,
243
+ value: v.value,
244
+ });
245
+ }
246
+ });
247
+ return list;
248
+ }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
250
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, providedIn: 'root' }); }
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, decorators: [{
253
+ type: Injectable,
254
+ args: [{
255
+ providedIn: 'root',
256
+ }]
257
+ }] });
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb25zLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3RyYW5zbGF0aW9ucy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBUXZELE1BQU0sT0FBTyxrQkFBa0I7SUFFdEIsTUFBTSxDQUFDLGlDQUFpQyxDQUM3QyxLQUFpQixFQUNqQixhQUE4QjtRQUU5QixRQUFRLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLEtBQUssZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25GLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRixLQUFLLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVGLEtBQUssZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLEtBQUssZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxNQUFNLENBQUMsZ0NBQWdDLENBQzdDLEtBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUF3QjtZQUNqQztnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsQ0FBQzthQUM5RjtZQUNEO2dCQUNFLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLDJCQUEyQixFQUFFLGlDQUFpQyxDQUFDO2FBQzNHO1NBQ0YsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyw4QkFBOEIsQ0FDM0MsS0FBaUI7UUFFakIsTUFBTSxLQUFLLEdBQXdCO1lBQ2pDO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDO2FBQzFFO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsMkNBQTJDLEVBQUUsK0NBQStDLENBQUM7YUFDekk7WUFDRDtnQkFDRSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsZ0NBQWdDLENBQUM7YUFDdkc7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZUFBZTtnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsbUNBQW1DLEVBQUUsMkNBQTJDLENBQUM7YUFDN0g7U0FDRixDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLDRCQUE0QixDQUN6QyxLQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBd0I7WUFDakM7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO2FBQzNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLENBQUM7YUFDbEc7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLDZCQUE2QixDQUMxQyxLQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBd0I7WUFDakM7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsOEJBQThCLENBQUM7YUFDdEc7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsQ0FBQzthQUNqRztZQUNEO2dCQUNFLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixDQUFDO2FBQ2pHO1NBQ0YsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQywrQkFBK0IsQ0FDNUMsS0FBaUI7UUFFakIsTUFBTSxLQUFLLEdBQXdCO1lBQ2pDO2dCQUNFLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixDQUFDO2FBQ3RHO1NBQ0YsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBaUI7UUFFakIsTUFBTSxLQUFLLEdBQXNCO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLE1BQU0sRUFDTixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixDQUNqQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsRUFBRSxFQUNGLEVBQUUsQ0FDSDtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLFlBQVksRUFDWixtQ0FBbUMsRUFDbkMsT0FBTyxFQUNQLE9BQU8sQ0FDUjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGtCQUFrQixFQUNsQix5Q0FBeUMsRUFDekMsV0FBVyxFQUNYLGFBQWEsQ0FDZDtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLFVBQVUsRUFDVixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ25CLG1CQUFtQixDQUNwQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGdCQUFnQixFQUNoQix1Q0FBdUMsRUFDdkMsUUFBUSxFQUNSLFVBQVUsQ0FDWDtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLG9CQUFvQixFQUNwQiwwQ0FBMEMsRUFDMUMsbUJBQW1CLEVBQ25CLDJCQUEyQixDQUM1QjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGlCQUFpQixFQUNqQix3Q0FBd0MsRUFDeEMsb0JBQW9CLEVBQ3BCLHdCQUF3QixDQUN6QjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGVBQWUsRUFDZixzQ0FBc0MsRUFDdEMseUJBQXlCLEVBQ3pCLDBCQUEwQixDQUMzQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGlCQUFpQixFQUNqQix3Q0FBd0MsRUFDeEMsOEJBQThCLEVBQzlCLGdEQUFnRCxDQUNqRDtTQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsNEJBQTRCLENBQ3hDLEtBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixrQkFBa0IsQ0FDbkI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBQzNCLEVBQUUsRUFDRixFQUFFLENBQ0g7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxZQUFZLEVBQ1osbUNBQW1DLEVBQ25DLE9BQU8sRUFDUCxTQUFTLENBQ1Y7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxrQkFBa0IsRUFDbEIseUNBQXlDLEVBQ3pDLFdBQVcsRUFDWCxhQUFhLENBQ2Q7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxVQUFVLEVBQ1YsaUNBQWlDLEVBQ2pDLG1CQUFtQixFQUNuQixtQkFBbUIsQ0FDcEI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsdUNBQXVDLEVBQ3ZDLFFBQVEsRUFDUixVQUFVLENBQ1g7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsMENBQTBDLEVBQzFDLDBCQUEwQixFQUMxQixxQ0FBcUMsQ0FDdEM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxpQkFBaUIsRUFDakIsd0NBQXdDLEVBQ3hDLDJCQUEyQixFQUMzQixrQ0FBa0MsQ0FDbkM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxlQUFlLEVBQ2Ysc0NBQXNDLEVBQ3RDLHlCQUF5QixFQUN6QiwwQkFBMEIsQ0FDM0I7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxpQkFBaUIsRUFDakIsd0NBQXdDLEVBQ3hDLDhCQUE4QixFQUM5QixnREFBZ0QsQ0FDakQ7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQWlCO1FBQ3RELE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCx3QkFBd0IsQ0FDekI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQixrREFBa0QsQ0FDbkQ7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsK0NBQStDLEVBQy9DLGFBQWEsRUFDYixnQkFBZ0IsQ0FDakI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCx3QkFBd0IsRUFDeEIsb0RBQW9ELEVBQ3BELGNBQWMsRUFDZCx5QkFBeUIsQ0FDMUI7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQWlCO1FBQ3JELE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxPQUFPLENBQ1I7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBQzNCLEVBQUUsRUFDRixFQUFFLENBQ0g7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxtQkFBbUIsRUFDbkIsK0NBQStDLEVBQy9DLDhFQUE4RSxFQUM5RSw4RkFBOEYsQ0FDL0Y7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxnQ0FBZ0MsRUFDaEMsdURBQXVELEVBQ3ZELGVBQWUsRUFDZixpQkFBaUIsQ0FDbEI7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCwyQkFBMkIsRUFDM0Isa0RBQWtELEVBQ2xELDhFQUE4RSxFQUM5RSw4RkFBOEYsQ0FDL0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQWlCO1FBQ3RELE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCw0QkFBNEIsRUFDNUIsOENBQThDLEVBQzlDLGlCQUFpQixFQUNqQixvQkFBb0IsQ0FDckI7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQWlCO1FBQ3RELE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCw0QkFBNEIsRUFDNUIsOENBQThDLEVBQzlDLGlCQUFpQixFQUNqQixvQkFBb0IsQ0FDckI7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQWlCO1FBQ25ELE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsRUFBRSxFQUNGLEVBQUUsQ0FDSDtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLDRCQUE0QixFQUM1Qiw4Q0FBOEMsRUFDOUMsZ0NBQWdDLEVBQ2hDLHFDQUFxQyxDQUN0QztTQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxPQUFPLENBQ1I7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBQzNCLEVBQUUsRUFDRixFQUFFLENBQ0g7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWixnQkFBZ0IsQ0FDakI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLHNCQUFzQixFQUN0Qix5QkFBeUIsQ0FDMUI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLHdCQUF3QixFQUN4Qix5QkFBeUIsQ0FDMUI7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLDZCQUE2QixDQUN6QyxLQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBc0I7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxDQUNmO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsYUFBYSxFQUNiLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0IseUJBQXlCLENBQzFCO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsNEJBQTRCLEVBQzVCLDZDQUE2QyxFQUM3QyxzRkFBc0YsRUFDdEYsd0hBQXdILENBQ3pIO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsNEJBQTRCLEVBQzVCLDZDQUE2QyxFQUM3QywyREFBMkQsRUFDM0Qsc0VBQXNFLENBQ3ZFO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsaUNBQWlDLEVBQ2pDLGtEQUFrRCxFQUNsRCx5REFBeUQsRUFDekQscUZBQXFGLENBQ3RGO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsK0JBQStCLEVBQy9CLGdEQUFnRCxFQUNoRCw2Q0FBNkMsRUFDN0MsbURBQW1ELENBQ3BEO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsOEJBQThCLEVBQzlCLCtDQUErQyxFQUMvQyxPQUFPLEVBQ1AsWUFBWSxDQUNiO1lBQ0Qsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLHdCQUF3QixFQUN4Qix5Q0FBeUMsRUFDekMsTUFBTSxFQUNOLFdBQVcsQ0FDWjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLDRCQUE0QixFQUM1Qiw2Q0FBNkMsRUFDN0MsVUFBVSxFQUNWLFVBQVUsQ0FDWDtZQUNELFlBQVk7WUFDWixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCx3QkFBd0IsRUFDeEIseUNBQXlDLEVBQ3pDLGtCQUFrQixFQUNsQixzQkFBc0IsQ0FDdkI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCwwQkFBMEIsRUFDMUIsMkNBQTJDLEVBQzNDLG9CQUFvQixFQUNwQixvQkFBb0IsQ0FDckI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxnQ0FBZ0MsRUFDaEMsaURBQWlELEVBQ2pELDBEQUEwRCxFQUMxRCw2REFBNkQsQ0FDOUQ7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxxQ0FBcUMsRUFDckMsc0RBQXNELEVBQ3RELDhCQUE4QixFQUM5Qiw0QkFBNEIsQ0FDN0I7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxnQ0FBZ0MsRUFDaEMsaURBQWlELEVBQ2pELG9GQUFvRixFQUNwRixnR0FBZ0csQ0FDakc7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxpQ0FBaUMsRUFDakMsa0RBQWtELEVBQ2xELHVFQUF1RSxFQUN2RSwyRkFBMkYsQ0FDNUY7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCwrQkFBK0IsRUFDL0IsZ0RBQWdELEVBQ2hELG9CQUFvQixFQUNwQixrQkFBa0IsQ0FDbkI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxtQ0FBbUMsRUFDbkMsb0RBQW9ELEVBQ3BELHdCQUF3QixFQUN4QixxQkFBcUIsQ0FDdEI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCwyQkFBMkIsRUFDM0IsNENBQTRDLEVBQzVDLHNCQUFzQixFQUN0QixzQkFBc0IsQ0FDdkI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxpQ0FBaUMsRUFDakMsa0RBQWtELEVBQ2xELHdEQUF3RCxFQUN4RCx3REFBd0QsQ0FDekQ7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUN4QyxLQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBc0I7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsWUFBWSxDQUNiO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixLQUFLLEVBQ0wsYUFBYSxFQUNiLDJCQUEyQixFQUMzQixFQUFFLEVBQ0YsRUFBRSxDQUNIO1NBQ0YsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLE1BQU0sQ0FBQywrQkFBK0IsQ0FDM0MsS0FBaUI7UUFFakIsTUFBTSxLQUFLLEdBQXNCO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLE1BQU0sRUFDTixvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLG9CQUFvQixDQUNyQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLCtCQUErQixDQUNoQztTQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBaUI7UUFDcEQsTUFBTSxLQUFLLEdBQXNCO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLE1BQU0sRUFDTixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixDQUNwQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLDhCQUE4QixDQUMvQjtTQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsbUNBQW1DLENBQy9DLEtBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFzQjtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsQ0FDckI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLEtBQUssRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QiwrQkFBK0IsQ0FDaEM7U0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUM5QixLQUFpQixFQUNqQixJQUFZLEVBQ1osY0FBc0IsRUFDdEIsT0FBZSxFQUNmLE9BQWU7UUFFZixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixjQUFjLEVBQUUsY0FBYztZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1NBQ3ZELENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUE4QixFQUFFLE9BQWUsRUFBRSxPQUFlO1FBQzdGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFO1lBQ25ELEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQzdCLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsb0JBQW9CLENBQ2pDLGtCQUE4QixFQUM5QixNQUF3QztRQUV4QyxJQUFJLElBQUksR0FBZ0IsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6RSxJQUFJLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRztvQkFDbEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2lCQUNmLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0F4ckJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN0ZXBDb250cm9sVHlwZSB9IGZyb20gXCIuLi9tb2RlbHMvZmx1eC5tb2RlbFwiO1xuaW1wb3J0IHsgRXJyb3JUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vbW9kZWxzL2Zvcm1zLm1vZGVsXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkluZm8sIExhYmVsSW5mbyB9IGZyb20gXCIuLi9tb2RlbHMvbGFiZWwtaW5mby5tb2RlbFwiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UgfSBmcm9tIFwiLi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbnNIZWxwZXIge1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29tcG9uZW50RXJyb3JzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdLFxuICAgIGNvbXBvbmVudFR5cGU6IFN0ZXBDb250cm9sVHlwZVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLk1hbnVhbElucHV0OiByZXR1cm4gdGhpcy5jcmVhdGVJbnB1dEVycm9yc1RyYW5zbGF0aW9ucyhsYW5ncyk7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5DaGVja0JveDpcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnk6IHJldHVybiB0aGlzLmNyZWF0ZURlZmF1bHRFcnJvcnNUcmFuc2xhdGlvbnMobGFuZ3MpO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuRG93bmxvYWREb2N1bWVudHM6IHJldHVybiB0aGlzLmNyZWF0ZURvd25sb2FkRXJyb3JzVHJhbnNsYXRpb25zKGxhbmdzKTtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlVwbG9hZERvY3VtZW50czogcmV0dXJuIHRoaXMuY3JlYXRlVXBsb2FkRXJyb3JzVHJhbnNsYXRpb25zKGxhbmdzKTtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlZpZXdEb2N1bWVudHM6IHJldHVybiB0aGlzLmNyZWF0ZVZpZXdFcnJvcnNUcmFuc2xhdGlvbnMobGFuZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVEb3dubG9hZEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2ZhaWxUb0Rvd25sb2FkJyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdGYWlsZWQgdG8gZG93bmxvYWQuJywgJ051IGFtIHJldciZaXQgc2EgZGVzY2FyYy4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ25vRG9jdW1lbnRzVG9Eb3dubG9hZCcsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnTm8gZG9jdW1lbnRzIHRvIGRvd25sb2FkLicsICdOdSBzdW50IGRvY3VtZW50ZSBkZSBkZXNjxINyY2F0LicpXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlVXBsb2FkRXJyb3JzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IEVycm9yVHJhbnNsYXRpb25zW10ge1xuICAgIGNvbnN0IHRJbmZvOiBFcnJvclRyYW5zbGF0aW9uc1tdID0gW1xuICAgICAge1xuICAgICAgICBjb2RlOiAnaW52YWxpZFR5cGUnLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ0ludmFsaWQgdHlwZScsICdUaXAgaW52YWxpZCcpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb2RlOiAnbWF4U2l6ZScsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhlIGl0ZW0gZXhjZWVkcyB0aGUgbWF4aW11bSBzaXplIG9mIHswfS4nLCAnRmnImWllcnVsIGRlcGHImWVzdGUgZGltZW5zaXVuZWEgbWF4aW1hIGRlIHswfS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdUaGUgaXRlbSBpcyBtYW5kYXRvcnkuJywgJ0FjZXN0IGZpyJlpZXIgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ3dhaXRGb3JVcGxvYWQnLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1BsZWFzZSB3YWl0IGZvciB1cGxvYWQgdG8gZmluaXNoLicsICdWxIMgcnVnYW0gYciZdGVwdGHIm2kgaW5jxINyY2FyZWEgZmnImWllcmVsb3IuJylcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVZpZXdFcnJvcnNUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogRXJyb3JUcmFuc2xhdGlvbnNbXSB7XG4gICAgY29uc3QgdEluZm86IEVycm9yVHJhbnNsYXRpb25zW10gPSBbXG4gICAgICB7XG4gICAgICAgIGNvZGU6ICdmYWlsVG9WaWV3JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdGYWlsZWQgdG8gdmlldycsICdOdSBhbSByZXXImWl0IHNhIHZpenVhbGl6ZXonKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ25vRG9jdW1lbnRzVG9TaG93JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdObyBkb2N1bWVudHMgdG8gc2hvdycsICdOdSBzdW50IGRvY3VtZW50ZSBkZSBhZmnImWF0JylcbiAgICAgIH0sXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVJbnB1dEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ3NpbXBsZVZhbGlkYXRpb24nLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1RoaXMgZmllbGQgaXMgaW52YWxpZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBpbnZhbGlkLicpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb2RlOiAndGhyb3VnaEFwaVZhbGlkYXRpb24nLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1RoaXMgZmllbGQgaXMgaW52YWxpZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBpbnZhbGlkLicpXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlRGVmYXVsdEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVDaGVja0VtYWlsVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ0NoZWNrIGVtYWlsJyxcbiAgICAgICAgJ1ZlcmlmaWNhIGVtYWlsJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZW1haWxMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLmVtYWlsTGFiZWwnLFxuICAgICAgICAnRW1haWwnLFxuICAgICAgICAnRW1haWwnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdlbWFpbEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwuZW1haWxCdXR0b25MYWJlbCcsXG4gICAgICAgICdTZW5kIGNvZGUnLFxuICAgICAgICAnVHJpbWl0ZSBjb2QnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvdHBMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cExhYmVsJyxcbiAgICAgICAgJ1ZlcmlmaWNhdGlvbiBjb2RlJyxcbiAgICAgICAgJ0NvZCBkZSB2ZXJpZmljYXJlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5lbWFpbC5vdHBCdXR0b25MYWJlbCcsXG4gICAgICAgICdWZXJpZnknLFxuICAgICAgICAnVmVyaWZpY8SDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZW1haWxSZXF1aXJlZExhYmVsJyxcbiAgICAgICAgJ2ZsdXguY29tcG9uZW50cy5lbWFpbC5lbWFpbFJlcXVpcmVkTGFiZWwnLFxuICAgICAgICAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICAgICAgICAnRW1haWwtdWwgZXN0ZSBvYmxpZ2F0b3JpdSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2VtYWlsRXJyb3JMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLmVtYWlsRXJyb3JMYWJlbCcsXG4gICAgICAgICdFbWFpbCBpcyBub3QgdmFsaWQnLFxuICAgICAgICAnRW1haWwtdWwgbnUgZXN0ZSB2YWxpZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cEVycm9yTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5lbWFpbC5vdHBFcnJvckxhYmVsJyxcbiAgICAgICAgJ0NvZGUgdmVyaWZpY2F0aW9uIGVycm9yJyxcbiAgICAgICAgJ0Vyb2FyZSBsYSB2ZXJpZmljYXJlIGNvZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdDb2RlIHZlcmlmaWNhdGlvbiBzdWNjZXNzZnVsJyxcbiAgICAgICAgJ1ZlcmlmaWNhcmVhIGNvZHVsdWkgYSBmb3N0IHJlYWxpemF0xIMgY3Ugc3VjY2VzJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ2hlY2tQaG9uZVRyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdDaGVjayBwaG9uZScsXG4gICAgICAgICdWZXJpZmljYSB0ZWxlZm9uJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncGhvbmVMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLnBob25lLnBob25lTGFiZWwnLFxuICAgICAgICAnUGhvbmUnLFxuICAgICAgICAnVGVsZWZvbidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3Bob25lQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5waG9uZS5waG9uZUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1NlbmQgY29kZScsXG4gICAgICAgICdUcmltaXRlIGNvZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cExhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwub3RwTGFiZWwnLFxuICAgICAgICAnVmVyaWZpY2F0aW9uIGNvZGUnLFxuICAgICAgICAnQ29kIGRlIHZlcmlmaWNhcmUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvdHBCdXR0b25MYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1ZlcmlmeScsXG4gICAgICAgICdWZXJpZmljxIMnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdwaG9uZVJlcXVpcmVkTGFiZWwnLFxuICAgICAgICAnZmx1eC5jb21wb25lbnRzLnBob25lLnBob25lUmVxdWlyZWRMYWJlbCcsXG4gICAgICAgICdQaG9uZSBudW1iZXIgaXMgcmVxdWlyZWQnLFxuICAgICAgICAnTnVtxINydWwgZGUgdGVsZWZvbiBlc3RlIG9ibGlnYXRvcml1J1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncGhvbmVFcnJvckxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGhvbmUucGhvbmVFcnJvckxhYmVsJyxcbiAgICAgICAgJ1Bob25lIG51bWJlciBpcyBub3QgdmFsaWQnLFxuICAgICAgICAnTnVtxINydWwgZGUgdGVsZWZvbiBudSBlc3RlIHZhbGlkJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwRXJyb3JMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cEVycm9yTGFiZWwnLFxuICAgICAgICAnQ29kZSB2ZXJpZmljYXRpb24gZXJyb3InLFxuICAgICAgICAnRXJvYXJlIGxhIHZlcmlmaWNhcmUgY29kJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwub3RwU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ0NvZGUgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NmdWwnLFxuICAgICAgICAnVmVyaWZpY2FyZWEgY29kdWx1aSBhIGZvc3QgcmVhbGl6YXTEgyBjdSBzdWNjZXMnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVJZFNjYW5UcmFuc2xhdGlvbnMobGFuZ3M6IExhbmd1YWdlW10pOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdJZCBzY2FuJyxcbiAgICAgICAgJ1NjYW5hcmUgYWN0IGlkZW50aXRhdGUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICdjb21tb24ub3RoZXJzLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgJ1N0ZXAgdG8gc2NhbiBpZCBkb2N1bWVudCcsXG4gICAgICAgICdQYXMgcGVudHJ1IMOubmNhcmNhcmVhIGRvY3VtZW50dWx1aSBkZSBpZGVudGl0YXRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAndXBsb2FkRmlsZUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuaWRTY2FuLnVwbG9hZEJ1dHRvblRleHRMYWJlbCcsXG4gICAgICAgICdVcGxvYWQgZmlsZScsXG4gICAgICAgICfDjm5jYXJjxIMgZmnImWllcidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3Rha2VQaWN0dXJlQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5pZFNjYW4udGFrZVBpY3R1cmVCdXR0b25UZXh0TGFiZWwnLFxuICAgICAgICAnVGFrZSBwaWN0dXJlJyxcbiAgICAgICAgJ1JlYWxpemVhesSDIG8gZm90b2dyYWZpZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBhdXNlVHJhbnNsYXRpb25zKGxhbmdzOiBMYW5ndWFnZVtdKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnUGF1c2UnLFxuICAgICAgICAnUGF1esSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcblxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvZmZlclJlYWR5TWVzc2FnZScsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLnBhdXNlLm9mZmVyUmVhZHlNZXNzYWdlTGFiZWwnLFxuICAgICAgICAnWW91ciBvZmZlciBoYXMgYmVlbiBwcm9jZXNzZWQuIENsaWNrIG9uIHRoZSBsaW5rIGJlbG93IHRvIGNvbnRpbnVlIHRoZSBmbG93LicsXG4gICAgICAgICdPZmVydGEgZHVtbmVhdm9hc3RyYSBhIGZvc3QgcHJvY2VzYXRhLiBDbGljayBwZSBsaW5rLXVsIGRlIG1haSBqb3MgcGVudHJ1IGEgY29udGludWEgZmx1eHVsLidcbiAgICAgICksXG5cbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnY29udGludWVPZmZlcnNMaW5rTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGF1c2UuY29udGludWVPZmZlcnNMaW5rTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ0NvbnRpbnVlIGZsb3cnLFxuICAgICAgICAnQ29udGludWFyZSBmbHV4J1xuICAgICAgKSxcblxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvZmZlclJlYWR5U21zTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGF1c2Uub2ZmZXJSZWFkeVNtc01lc3NhZ2VMYWJlbCcsXG4gICAgICAgICdZb3VyIG9mZmVyIGhhcyBiZWVuIHByb2Nlc3NlZC4gQ2xpY2sgb24gdGhlIGxpbmsgYmVsb3cgdG8gY29udGludWUgdGhlIGZsb3cuJyxcbiAgICAgICAgJ09mZXJ0YSBkdW1uZWF2b2FzdHJhIGEgZm9zdCBwcm9jZXNhdGEuIENsaWNrIHBlIGxpbmstdWwgZGUgbWFpIGpvcyBwZW50cnUgYSBjb250aW51YSBmbHV4dWwuJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQWN0aW9uVHJhbnNsYXRpb25zKGxhbmdzOiBMYW5ndWFnZVtdKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbG9hZGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnYXBwQ29uZmlnRWRpdC5mbHV4LmN1c3RvbVN0ZXAubG9hZGluZ01lc3NhZ2UnLFxuICAgICAgICAnTG9hZGluZyBtZXNzYWdlJyxcbiAgICAgICAgJ01lc2FqIGRlIGHImXRlcHRhcmUnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTdGF0dXNUcmFuc2xhdGlvbnMobGFuZ3M6IExhbmd1YWdlW10pOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdhcHBDb25maWdFZGl0LmZsdXguY3VzdG9tU3RlcC5sb2FkaW5nTWVzc2FnZScsXG4gICAgICAgICdMb2FkaW5nIG1lc3NhZ2UnLFxuICAgICAgICAnTWVzYWogZGUgYciZdGVwdGFyZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUt5Y1RyYW5zbGF0aW9ucyhsYW5nczogTGFuZ3VhZ2VbXSk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKGxhbmdzLCAnbmFtZScsICdjb21tb24ub3RoZXJzLm5hbWUnLCAnS1lDJywgJ0tZQycpLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICdjb21tb24ub3RoZXJzLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgJycsXG4gICAgICAgICcnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdhcHBDb25maWdFZGl0LmZsdXguY3VzdG9tU3RlcC5sb2FkaW5nTWVzc2FnZScsXG4gICAgICAgICdMb2FkaW5nIGlkZW50aWZpY2F0aW9uIHN0ZXAuLi4nLFxuICAgICAgICAnU2Ugw65uY2FyY8SDIHBhc3VsIGRlIGlkZW50aWZpY2FyZS4uLidcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBheW1lbnRzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ1BheW1lbnQnLFxuICAgICAgICAnUGxhdMSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnY2FyZGVucm9sQnV0dG9uTGFiZWwnLFxuICAgICAgICAnY2FyZGVucm9sLmNhcmRlbnJvbEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ0Vucm9sIGNhcmQnLFxuICAgICAgICAnw45ucm9sZWF6xIMgY2FyZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NhcmRlbnJvbEZhaWx1cmVMYWJlbCcsXG4gICAgICAgICdjYXJkZW5yb2wuY2FyZGVucm9sRmFpbHVyZUxhYmVsJyxcbiAgICAgICAgJ0Vycm9yIGVucm9sbGluZyBjYXJkJyxcbiAgICAgICAgJ0Vyb2FyZSBsYSDDrm5yb2xhcmUgY2FyZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NhcmRlbnJvbFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdjYXJkZW5yb2wuY2FyZGVucm9sU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ1N1Y2Nlc3MgZW5yb2xsaW5nIGNhcmQnLFxuICAgICAgICAnU3VjY2VzIGxhIMOubnJvbGFyZSBjYXJkJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlT3BlbkJhbmtpbmdUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnT3BlbiBCYW5raW5nJyxcbiAgICAgICAgJ09wZW4gQmFua2luZydcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMuZGVzY3JpcHRpb24nLFxuICAgICAgICAnQ29ubmVjdCB5b3VyIGJhbmsgYWNjb3VudCcsXG4gICAgICAgICdDb25lY3RhyJtpIGNvbnR1bCBiYW5jYXInXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdpbml0aWFsTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmluaXRpYWxNZXNzYWdlJyxcbiAgICAgICAgJ1RvIGNvbnRpbnVlLCB3ZSBuZWVkIHRvIHZlcmlmeSB5b3VyIGJhbmsgYWNjb3VudCBpbmZvcm1hdGlvbi4gQ2xpY2sgTmV4dCB0byBwcm9jZWVkLicsXG4gICAgICAgICdQZW50cnUgYSBjb250aW51YSwgdHJlYnVpZSBzxIMgdmVyaWZpY8SDbSBpbmZvcm1hyJtpaWxlIGNvbnR1bHVpIGR2cy4gYmFuY2FyLiBGYWNlyJtpIGNsaWMgcGUgVXJtxIN0b3J1bCBwZW50cnUgYSBjb250aW51YS4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd3YWl0aW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLndhaXRpbmdNZXNzYWdlJyxcbiAgICAgICAgJ1BsZWFzZSB3YWl0IHdoaWxlIHdlIHJldHJpZXZlIHlvdXIgYWNjb3VudCBpbmZvcm1hdGlvbi4uLicsXG4gICAgICAgICdWxIMgcnVnxINtIHPEgyBhyJl0ZXB0YcibaSBww6JuxIMgY8OibmQgcHJlbHXEg20gaW5mb3JtYcibaWlsZSBjb250dWx1aSBkdnMuLi4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdjb25zZW50RXJyb3JNZXNzYWdlVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29uc2VudEVycm9yTWVzc2FnZScsXG4gICAgICAgICdZb3UgbXVzdCBwcm92aWRlIGNvbnNlbnQgdG8gY29udGludWUuIFBsZWFzZSB0cnkgYWdhaW4uJyxcbiAgICAgICAgJ1RyZWJ1aWUgc8SDIG9mZXJpyJtpIGNvbnNpbcibxINtw6JudHVsIHBlbnRydSBhIGNvbnRpbnVhLiBWxIMgcnVnxINtIHPEgyDDrm5jZXJjYcibaSBkaW4gbm91LidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbXBsZXRpb25NZXNzYWdlVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29tcGxldGlvbk1lc3NhZ2UnLFxuICAgICAgICAnQWNjb3VudCBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLicsXG4gICAgICAgICdJbmZvcm1hyJtpaWxlIGNvbnR1bHVpIGF1IGZvc3QgcHJlbHVhdGUgY3Ugc3VjY2VzLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3JldHJ5QnV0dG9uTGFiZWxUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5yZXRyeUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1JldHJ5JyxcbiAgICAgICAgJ1Jlw65uY2VhcmPEgydcbiAgICAgICksXG4gICAgICAvLyBCdXR0b24gdHJhbnNsYXRpb25zXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25leHRCdXR0b25UcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5uZXh0QnV0dG9uJyxcbiAgICAgICAgJ05leHQnLFxuICAgICAgICAnVXJtxIN0b3J1bCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnRpbnVlQnV0dG9uVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29udGludWVCdXR0b24nLFxuICAgICAgICAnQ29udGludWUnLFxuICAgICAgICAnQ29udGludcSDJ1xuICAgICAgKSxcbiAgICAgIC8vIFVJIGxhYmVsc1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdzZWxlY3RCYW5rVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuc2VsZWN0QmFuaycsXG4gICAgICAgICdTZWxlY3QgeW91ciBiYW5rJyxcbiAgICAgICAgJ1NlbGVjdGHIm2kgYmFuY2EgZHZzLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnNlbnRUaXRsZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmNvbnNlbnRUaXRsZScsXG4gICAgICAgICdCYW5rIEF1dGhvcml6YXRpb24nLFxuICAgICAgICAnQXV0b3JpemFyZSBiYW5jYXLEgydcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnNlbnREZXNjcmlwdGlvblRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmNvbnNlbnREZXNjcmlwdGlvbicsXG4gICAgICAgICdQbGVhc2UgY29tcGxldGUgdGhlIGF1dGhvcml6YXRpb24gcHJvY2VzcyB3aXRoIHlvdXIgYmFuaycsXG4gICAgICAgICdWxIMgcnVnxINtIHPEgyBjb21wbGV0YcibaSBwcm9jZXN1bCBkZSBhdXRvcml6YXJlIGN1IGJhbmNhIGR2cy4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd3YWl0aW5nRm9yQXV0aG9yaXphdGlvblRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLndhaXRpbmdGb3JBdXRob3JpemF0aW9uJyxcbiAgICAgICAgJ1dhaXRpbmcgZm9yIGF1dGhvcml6YXRpb24uLi4nLFxuICAgICAgICAnU2UgYciZdGVhcHTEgyBhdXRvcml6YXJlYS4uLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3BvcHVwV2luZG93TWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLnBvcHVwV2luZG93TWVzc2FnZScsXG4gICAgICAgICdBIG5ldyB3aW5kb3cgaGFzIG9wZW5lZCBmb3IgYmFuayBhdXRob3JpemF0aW9uLiBQbGVhc2UgY29tcGxldGUgdGhlIHByb2Nlc3MgdGhlcmUuJyxcbiAgICAgICAgJ1MtYSBkZXNjaGlzIG8gZmVyZWFzdHLEgyBub3XEgyBwZW50cnUgYXV0b3JpemFyZSBiYW5jYXLEgy4gVsSDIHJ1Z8SDbSBzxIMgY29tcGxldGHIm2kgcHJvY2VzdWwgYWNvbG8uJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncG9wdXBCbG9ja2VyTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLnBvcHVwQmxvY2tlck1lc3NhZ2UnLFxuICAgICAgICAnSWYgdGhlIHdpbmRvdyBkaWRuXFwndCBvcGVuLCBwbGVhc2UgY2hlY2sgeW91ciBwb3B1cCBibG9ja2VyIHNldHRpbmdzLicsXG4gICAgICAgICdEYWPEgyBmZXJlYXN0cmEgbnUgcy1hIGRlc2NoaXMsIHbEgyBydWfEg20gc8SDIHZlcmlmaWNhyJtpIHNldMSDcmlsZSBibG9jYXRvcnVsdWkgZGUgcG9wdXAtdXJpLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2FjY291bnRzUmV0cmlldmVkVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuYWNjb3VudHNSZXRyaWV2ZWQnLFxuICAgICAgICAnQWNjb3VudHMgcmV0cmlldmVkJyxcbiAgICAgICAgJ0NvbnR1cmkgcHJlbHVhdGUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd0cmFuc2FjdGlvbnNSZXRyaWV2ZWRUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy50cmFuc2FjdGlvbnNSZXRyaWV2ZWQnLFxuICAgICAgICAnVHJhbnNhY3Rpb25zIHJldHJpZXZlZCcsXG4gICAgICAgICdUcmFuemFjyJtpaSBwcmVsdWF0ZSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2FjY291bnRzRm91bmRUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5hY2NvdW50c0ZvdW5kJyxcbiAgICAgICAgJ3swfSBhY2NvdW50KHMpIGZvdW5kJyxcbiAgICAgICAgJ3swfSBjb250KHVyaSkgZ8SDc2l0ZSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3RyYW5zYWN0aW9uc1N1bW1hcnlUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy50cmFuc2FjdGlvbnNTdW1tYXJ5JyxcbiAgICAgICAgJ3swfSB0cmFuc2FjdGlvbihzKSByZXRyaWV2ZWQgZm9yIHRoZSBsYXN0IHsxfSBtb250aChzKScsXG4gICAgICAgICd7MH0gdHJhbnphY8ibaWUoaSkgcHJlbHVhdGUgcGVudHJ1IHVsdGltZWxlIHsxfSBsdW7EgyhpKSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUN1c3RvbVN0ZXBUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnQ3VzdG9tIHN0ZXAnLFxuICAgICAgICAnUGFzIGN1c3RvbSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMuZGVzY3JpcHRpb24nLFxuICAgICAgICAnJyxcbiAgICAgICAgJydcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVZpZXdPZmZlclN0ZXBUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnVmlldyBvZmZlcicsXG4gICAgICAgICdWaXp1YWxpemFyZSBvZmVydMSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdWaWV3IG9mZmVyIHN0ZXAnLFxuICAgICAgICAnUGFzIHBlbnRydSB2aXp1YWxpemFyZSBvZmVydMSDJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlU2lnblRyYW5zbGF0aW9ucyhsYW5nczogTGFuZ3VhZ2VbXSk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ1NpZ24gZG9jdW1lbnRzJyxcbiAgICAgICAgJ1NlbW5hcmUgZG9jdW1lbnRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdTaWduIGRvY3VtZW50cyBzdGVwJyxcbiAgICAgICAgJ1BhcyBwZW50cnUgc2VtbmFyZSBkb2N1bWVudGUnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVHZW5lcmF0ZURvY3VtZW50c1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdHZW5lcmF0ZSBkb2N1bWVudHMnLFxuICAgICAgICAnR2VuZXJhcmUgZG9jdW1lbnRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdHZW5lcmF0ZSBkb2N1bWVudHMgc3RlcCcsXG4gICAgICAgICdQYXMgcGVudHJ1IGdlbmVyYXJlIGRvY3VtZW50ZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVUcmFuc2xhdGlvbihcbiAgICBsYW5nczogTGFuZ3VhZ2VbXSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25LZXk6IHN0cmluZyxcbiAgICBlblZhbHVlOiBzdHJpbmcsXG4gICAgcm9WYWx1ZTogc3RyaW5nXG4gICk6IFRyYW5zbGF0aW9uSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0cmFuc2xhdGlvbktleTogdHJhbnNsYXRpb25LZXksXG4gICAgICB2YWx1ZXM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgZW5WYWx1ZSwgcm9WYWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTGFiZWxzSW5mbyhzdXBwb3J0ZWRMYW5ndWFnZXM6IExhbmd1YWdlW10sIGVuVmFsdWU6IHN0cmluZywgcm9WYWx1ZTogc3RyaW5nKTogTGFiZWxJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxhYmVsc0luZm9Db3JlKHN1cHBvcnRlZExhbmd1YWdlcywgW1xuICAgICAgeyBpc286ICdlbicsIHZhbHVlOiBlblZhbHVlIH0sXG4gICAgICB7IGlzbzogJ3JvJywgdmFsdWU6IHJvVmFsdWUgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUxhYmVsc0luZm9Db3JlKFxuICAgIHN1cHBvcnRlZExhbmd1YWdlczogTGFuZ3VhZ2VbXSxcbiAgICB2YWx1ZXM6IHsgaXNvOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdXG4gICk6IExhYmVsSW5mb1tdIHtcbiAgICBsZXQgbGlzdDogTGFiZWxJbmZvW10gPSBbXTtcbiAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgY29uc3QgbGFuZ0lkID0gc3VwcG9ydGVkTGFuZ3VhZ2VzLmZpbmQoKGxhbmcpID0+IGxhbmcuaXNvID09PSB2Lmlzbyk/LmlkO1xuICAgICAgaWYgKGxhbmdJZCAmJiBsYW5nSWQgPiAwKSB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbGFuZ3VhZ2VJZDogbGFuZ0lkLFxuICAgICAgICAgIGxhbmd1YWdlSXNvOiB2LmlzbyxcbiAgICAgICAgICB2YWx1ZTogdi52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbn1cbiJdfQ==