special-forms 16.2.1 → 17.0.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 (86) hide show
  1. package/esm2022/lib/components/index.mjs +13 -13
  2. package/esm2022/lib/components/special-autocomplete/special-autocomplete.component.mjs +75 -75
  3. package/esm2022/lib/components/special-autocomplete/special-autocomplete.interface.mjs +2 -2
  4. package/esm2022/lib/components/special-checkbox/special-checkbox.component.mjs +39 -36
  5. package/esm2022/lib/components/special-checkbox/special-checkbox.interface.mjs +3 -2
  6. package/esm2022/lib/components/special-datepicker/special-datepicker.component.mjs +43 -40
  7. package/esm2022/lib/components/special-datepicker/special-datepicker.interface.mjs +3 -2
  8. package/esm2022/lib/components/special-dropdown/special-dropdown.component.mjs +48 -47
  9. package/esm2022/lib/components/special-dropdown/special-dropdown.interface.mjs +3 -2
  10. package/esm2022/lib/components/special-form/special-form.component.mjs +99 -99
  11. package/esm2022/lib/components/special-form/special-form.module.mjs +78 -78
  12. package/esm2022/lib/components/special-input/special-input.component.mjs +56 -56
  13. package/esm2022/lib/components/special-input/special-input.interface.mjs +2 -2
  14. package/esm2022/lib/components/special-label/special-label.component.mjs +27 -27
  15. package/esm2022/lib/components/special-label/special-label.interface.mjs +2 -2
  16. package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.mjs +97 -97
  17. package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.mjs +2 -2
  18. package/esm2022/lib/components/special-richtext/special-richtext.component.mjs +54 -45
  19. package/esm2022/lib/components/special-richtext/special-richtext.interface.mjs +3 -2
  20. package/esm2022/lib/components/special-text-area/special-text-area.component.mjs +44 -44
  21. package/esm2022/lib/components/special-text-area/special-text-area.interface.mjs +2 -2
  22. package/esm2022/lib/components/special-upload/special-upload.component.mjs +84 -84
  23. package/esm2022/lib/components/special-upload/special-upload.interface.mjs +2 -2
  24. package/esm2022/lib/core/aux-data/control-types.enum.mjs +17 -17
  25. package/esm2022/lib/core/aux-data/input-types.mjs +15 -15
  26. package/esm2022/lib/core/forms/special-forms.mjs +240 -260
  27. package/esm2022/lib/core/interfaces/field-basics.interfaces.mjs +1 -1
  28. package/esm2022/lib/core/interfaces/form.interfaces.mjs +2 -2
  29. package/esm2022/lib/core/interfaces/special-control.interface.mjs +2 -2
  30. package/esm2022/lib/core/masks/currency.mask.mjs +10 -10
  31. package/esm2022/lib/core/masks/index.mjs +2 -2
  32. package/esm2022/lib/core/masks/number.mask.mjs +2 -2
  33. package/esm2022/lib/core/pipes/controls-list-pipe/controls-list.pipe.mjs +17 -17
  34. package/esm2022/lib/core/pipes/error-message-pipe/error.pipe.mjs +22 -22
  35. package/esm2022/lib/core/pipes/index.mjs +3 -3
  36. package/esm2022/lib/core/pipes/text-by-function/text-by-function.pipe.mjs +21 -21
  37. package/esm2022/lib/core/services/error-state-matcher/error-matcher.mjs +12 -12
  38. package/esm2022/lib/core/services/index.mjs +3 -3
  39. package/esm2022/lib/core/services/special-form-builder/special-form-builder.service.mjs +156 -156
  40. package/esm2022/public-api.mjs +12 -12
  41. package/esm2022/special-forms.mjs +4 -4
  42. package/fesm2022/special-forms.mjs +1018 -1024
  43. package/fesm2022/special-forms.mjs.map +1 -1
  44. package/index.d.ts +5 -5
  45. package/lib/components/index.d.ts +23 -23
  46. package/lib/components/special-autocomplete/special-autocomplete.component.d.ts +19 -19
  47. package/lib/components/special-autocomplete/special-autocomplete.interface.d.ts +19 -18
  48. package/lib/components/special-checkbox/special-checkbox.component.d.ts +12 -11
  49. package/lib/components/special-checkbox/special-checkbox.interface.d.ts +13 -12
  50. package/lib/components/special-datepicker/special-datepicker.component.d.ts +13 -12
  51. package/lib/components/special-datepicker/special-datepicker.interface.d.ts +12 -11
  52. package/lib/components/special-dropdown/special-dropdown.component.d.ts +11 -11
  53. package/lib/components/special-dropdown/special-dropdown.interface.d.ts +17 -16
  54. package/lib/components/special-form/special-form.component.d.ts +31 -31
  55. package/lib/components/special-form/special-form.module.d.ts +20 -20
  56. package/lib/components/special-input/special-input.component.d.ts +15 -15
  57. package/lib/components/special-input/special-input.interface.d.ts +17 -16
  58. package/lib/components/special-label/special-label.component.d.ts +13 -13
  59. package/lib/components/special-label/special-label.interface.d.ts +13 -12
  60. package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.d.ts +22 -22
  61. package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.d.ts +19 -18
  62. package/lib/components/special-richtext/special-richtext.component.d.ts +17 -17
  63. package/lib/components/special-richtext/special-richtext.interface.d.ts +10 -9
  64. package/lib/components/special-text-area/special-text-area.component.d.ts +13 -13
  65. package/lib/components/special-text-area/special-text-area.interface.d.ts +8 -7
  66. package/lib/components/special-upload/special-upload.component.d.ts +21 -21
  67. package/lib/components/special-upload/special-upload.interface.d.ts +12 -11
  68. package/lib/core/aux-data/control-types.enum.d.ts +16 -16
  69. package/lib/core/aux-data/input-types.d.ts +2 -2
  70. package/lib/core/forms/special-forms.d.ts +108 -123
  71. package/lib/core/interfaces/field-basics.interfaces.d.ts +22 -22
  72. package/lib/core/interfaces/form.interfaces.d.ts +58 -55
  73. package/lib/core/interfaces/special-control.interface.d.ts +4 -4
  74. package/lib/core/masks/currency.mask.d.ts +1 -1
  75. package/lib/core/masks/index.d.ts +2 -2
  76. package/lib/core/masks/number.mask.d.ts +1 -1
  77. package/lib/core/pipes/controls-list-pipe/controls-list.pipe.d.ts +11 -11
  78. package/lib/core/pipes/error-message-pipe/error.pipe.d.ts +12 -12
  79. package/lib/core/pipes/index.d.ts +3 -3
  80. package/lib/core/pipes/text-by-function/text-by-function.pipe.d.ts +7 -7
  81. package/lib/core/services/error-state-matcher/error-matcher.d.ts +8 -8
  82. package/lib/core/services/index.d.ts +3 -3
  83. package/lib/core/services/special-form-builder/special-form-builder.service.d.ts +25 -25
  84. package/lib/styles/tailwind-final.scss +31 -0
  85. package/package.json +9 -9
  86. package/public-api.d.ts +9 -9
@@ -1,260 +1,240 @@
1
- import { FormArray, FormControl, FormGroup, } from '@angular/forms';
2
- export class SpecialFormControl extends FormControl {
3
- constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, errorMessages, disabled, }) {
4
- super(defaultValue, validators, asyncValidators);
5
- this.name = name;
6
- this.placeholder = placeholder;
7
- this.label = label;
8
- this.tooltip = tooltip;
9
- this.icon = icon;
10
- this.elementId = elementId;
11
- this.settings = settings;
12
- this.type = type;
13
- this.styleClasses = styleClasses;
14
- this.hidden = hidden;
15
- this.length = length;
16
- this.readOnly = readOnly;
17
- this.required = required;
18
- this.errorMessages = errorMessages;
19
- disabled ? this.disable() : this.enable();
20
- }
21
- markAsDirty(opts) {
22
- super.markAsDirty(opts);
23
- this.updateValueAndValidity();
24
- }
25
- markAsPristine(opts) {
26
- super.markAsPristine(opts);
27
- this.updateValueAndValidity();
28
- }
29
- markAsTouched(opts) {
30
- super.markAsTouched(opts);
31
- this.updateValueAndValidity();
32
- }
33
- markAsUntouched(opts) {
34
- super.markAsUntouched(opts);
35
- this.updateValueAndValidity();
36
- }
37
- markAllAsTouched() {
38
- super.markAllAsTouched();
39
- this.updateValueAndValidity();
40
- }
41
- setReadOnly(status = true) {
42
- this.readOnly = status;
43
- }
44
- setDisabled(status = true) {
45
- status ? this.disable() : this.enable();
46
- }
47
- setHidden(status = true) {
48
- this.hidden = status;
49
- }
50
- }
51
- export class SpecialFormGroup extends FormGroup {
52
- constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, disabled, }, controls) {
53
- super(controls, validators, asyncValidators);
54
- this.name = name;
55
- this.placeholder = placeholder;
56
- this.label = label;
57
- this.tooltip = tooltip;
58
- this.icon = icon;
59
- this.elementId = elementId;
60
- this.settings = settings;
61
- this.type = type;
62
- this.styleClasses = styleClasses;
63
- this.hidden = hidden;
64
- this.length = length;
65
- this.readOnly = readOnly;
66
- this.required = required;
67
- this.defaultValue = defaultValue;
68
- disabled ? this.disable() : this.enable();
69
- }
70
- getDirty() {
71
- this.markAsDirty();
72
- Object.values(this.controls).forEach((control) => {
73
- if (control instanceof SpecialFormControl) {
74
- control.markAsDirty();
75
- }
76
- else if (control instanceof SpecialFormGroup) {
77
- control.getDirty();
78
- }
79
- else if (control instanceof SpecialFormArray) {
80
- control.getDirty();
81
- }
82
- });
83
- }
84
- specialReset(value = {}) {
85
- const aux = {};
86
- Object.entries(this.controls).map(([key, control]) => {
87
- if (control instanceof SpecialFormControl) {
88
- aux[key] = control.defaultValue;
89
- }
90
- else if (control instanceof SpecialFormArray) {
91
- control.clear();
92
- }
93
- });
94
- this.reset({ ...aux, ...value });
95
- }
96
- setReadOnly(status = true) {
97
- Object.values(this.controls).map((value) => {
98
- if (value instanceof SpecialFormControl ||
99
- value instanceof SpecialFormArray ||
100
- value instanceof SpecialFormGroup) {
101
- value.setReadOnly(status);
102
- }
103
- });
104
- }
105
- setReadOnlyByFields(fieldsObject) {
106
- Object.entries(fieldsObject).map(([key, value]) => {
107
- const control = this.controls[key];
108
- if (control instanceof SpecialFormControl) {
109
- control.readOnly = value;
110
- }
111
- });
112
- }
113
- setHiddenByFields(fields) {
114
- Object.entries(fields).map(([key, value]) => {
115
- const control = this.controls[key];
116
- if (control instanceof SpecialFormControl) {
117
- control.hidden = value;
118
- }
119
- });
120
- }
121
- setDisabled(status) {
122
- Object.values(this.controls).map((value) => {
123
- if (value instanceof SpecialFormControl ||
124
- value instanceof SpecialFormArray ||
125
- value instanceof SpecialFormGroup) {
126
- value.setDisabled(status);
127
- }
128
- });
129
- }
130
- setDisabledByFields(fieldsObject) {
131
- Object.entries(fieldsObject).map((entries) => {
132
- if (this.controls[entries[0]] instanceof SpecialFormControl) {
133
- entries[1]
134
- ? this.controls[entries[0]].enable()
135
- : this.controls[entries[0]].disable();
136
- }
137
- });
138
- }
139
- /**
140
- * donde value es el objeto semilla y detailForm es un arreglo de form key para dar un marco al formarray
141
- */
142
- setFormValue(value) {
143
- this.specialReset(value);
144
- Object.entries(this.controls)
145
- .filter(([_key, control]) => control instanceof SpecialFormArray)
146
- .map(([key, control]) => {
147
- control.fillFormArray(value[key]);
148
- });
149
- }
150
- /**
151
- * Método que retorna
152
- */
153
- getIdPkey() {
154
- return Object.values(this.controls).find((control) => control instanceof SpecialFormControl && control.type === 'PRIMARY-KEY');
155
- }
156
- }
157
- export class SpecialFormArray extends FormArray {
158
- constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, placeholder, readOnly, required, tooltip, errorMessages, disabled, }, formCreation, controls) {
159
- super(controls, validators, asyncValidators);
160
- this.formCreation = formCreation;
161
- this.form = this.formCreation();
162
- this.name = name;
163
- this.placeholder = placeholder;
164
- this.label = label;
165
- this.tooltip = tooltip;
166
- this.icon = icon;
167
- this.elementId = elementId;
168
- this.settings = settings;
169
- this.type = type;
170
- this.styleClasses = styleClasses;
171
- this.hidden = hidden;
172
- this.readOnly = readOnly;
173
- this.required = required;
174
- this.defaultValue = defaultValue;
175
- this.errorMessages = errorMessages;
176
- disabled ? this.disable() : this.enable();
177
- }
178
- fillFormArray(data) {
179
- this.form.reset();
180
- this.clear();
181
- data.forEach((item) => {
182
- const form = this.formCreation(item);
183
- this.push(form);
184
- });
185
- }
186
- addItem() {
187
- const form = this.formCreation(this.form.value);
188
- this.form.specialReset();
189
- this.push(form);
190
- this.markAsDirty();
191
- }
192
- specialPush(index) {
193
- const form = this.formCreation(this.form.value);
194
- if (!index)
195
- this.push(form);
196
- else
197
- this.controls[index].reset(this.form.value);
198
- }
199
- specialInsert(index = 0) {
200
- const form = this.formCreation(this.form.value);
201
- this.insert(index, form);
202
- }
203
- specialEdit(index, newValue) {
204
- this.controls[index].reset({ ...this.controls[index].value, ...newValue });
205
- this.markAsDirty();
206
- }
207
- /**
208
- * Vuelve todos los controles del formArray de lectura o de sololectura
209
- * @param status
210
- */
211
- setReadOnly(status) {
212
- this.readOnly = status;
213
- this.controls.forEach((control) => {
214
- if (control instanceof SpecialFormGroup) {
215
- control.setReadOnly(status);
216
- }
217
- });
218
- }
219
- /**
220
- * Vuelve todos los controles del formArray habilitados o deshabilitados
221
- * @param status
222
- */
223
- setDisabled(status) {
224
- status ? this.disable() : this.enable();
225
- this.controls.forEach((control) => {
226
- if (control instanceof SpecialFormGroup) {
227
- control.setDisabled(status);
228
- }
229
- });
230
- }
231
- /**
232
- * Permite editar un control especifico.
233
- * @param index
234
- */
235
- editControl(index) {
236
- this.form.reset(this.controls[index].value);
237
- }
238
- getDirty() {
239
- this.markAsDirty();
240
- this.form.getDirty();
241
- this.controls.forEach((item) => {
242
- item.getDirty();
243
- });
244
- }
245
- recursiveFillForm(form, data) {
246
- Object.entries(form.controls).map(([key, control]) => {
247
- if (control instanceof FormControl) {
248
- control.setValue(data[key]);
249
- }
250
- else if (control instanceof FormArray) {
251
- data[key].forEach(() => { });
252
- }
253
- else if (control instanceof FormGroup) {
254
- control.reset(data[key]);
255
- }
256
- });
257
- return form;
258
- }
259
- }
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3Jtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFXeEIsTUFBTSxPQUFPLGtCQUNYLFNBQVEsV0FBVztJQWtCbkIsWUFBWSxFQUNWLElBQUksRUFDSixRQUFRLEVBQ1IsSUFBSSxFQUNKLFVBQVUsRUFDVixlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLElBQUksRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE9BQU8sRUFDUCxhQUFhLEVBQ2IsUUFBUSxHQUNPO1FBQ2YsS0FBSyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFhLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFN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OlsiaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVDb250cm9sVHlwZXMgfSBmcm9tICcuLi9hdXgtZGF0YS9jb250cm9sLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmllbGRCYXNpY0RhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZpZWxkLWJhc2ljcy5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBJQXJyYXlTZXR0aW5ncyxcclxuICBJRm9ybVNldHRpbmdzLFxyXG4gIFRTcGVjaWFsRmllbGRzLFxyXG4gIFRTcGVjaWFsRm9ybSxcclxuICBUU3BlY2lhbEFycmF5LFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS5pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1Db250cm9sPFQ+XHJcbiAgZXh0ZW5kcyBGb3JtQ29udHJvbFxyXG4gIGltcGxlbWVudHMgSUZpZWxkQmFzaWNEYXRhXHJcbntcclxuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XHJcbiAgcHVibGljIGljb246IHN0cmluZztcclxuICBwdWJsaWMgZWxlbWVudElkOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0eWxlQ2xhc3Nlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcclxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgcHVibGljIHNldHRpbmdzOiBUO1xyXG4gIHB1YmxpYyB0eXBlOiBFQ29udHJvbFR5cGVzO1xyXG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcih7XHJcbiAgICBuYW1lLFxyXG4gICAgc2V0dGluZ3MsXHJcbiAgICB0eXBlLFxyXG4gICAgdmFsaWRhdG9ycyxcclxuICAgIGFzeW5jVmFsaWRhdG9ycyxcclxuICAgIGVsZW1lbnRJZCxcclxuICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgIGhpZGRlbixcclxuICAgIGljb24sXHJcbiAgICBsYWJlbCxcclxuICAgIGxlbmd0aCxcclxuICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgcmVhZE9ubHksXHJcbiAgICByZXF1aXJlZCxcclxuICAgIHRvb2x0aXAsXHJcbiAgICBlcnJvck1lc3NhZ2VzLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgfTogVFNwZWNpYWxGaWVsZHMpIHtcclxuICAgIHN1cGVyKGRlZmF1bHRWYWx1ZSwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncyBhcyBUO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuc3R5bGVDbGFzc2VzID0gc3R5bGVDbGFzc2VzO1xyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGVycm9yTWVzc2FnZXM7XHJcbiAgICBkaXNhYmxlZCA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc0RpcnR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgc3VwZXIubWFya0FzRGlydHkob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgc3VwZXIubWFya0FzUHJpc3RpbmUob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcbiAgb3ZlcnJpZGUgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBc1RvdWNoZWQob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbWFya0FsbEFzVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbihzdGF0dXMgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmhpZGRlbiA9IHN0YXR1cztcclxuICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtR3JvdXAgZXh0ZW5kcyBGb3JtR3JvdXAgaW1wbGVtZW50cyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3R5bGVDbGFzc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgaGlkZGVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICBwdWJsaWMgc2V0dGluZ3M6IElGb3JtU2V0dGluZ3M7XHJcbiAgcHVibGljIHR5cGU6IEVDb250cm9sVHlwZXMuZm9ybTtcclxuICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzZXR0aW5ncyxcclxuICAgICAgdHlwZSxcclxuICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxyXG4gICAgICBlbGVtZW50SWQsXHJcbiAgICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgICAgZGVmYXVsdFZhbHVlLFxyXG4gICAgICBoaWRkZW4sXHJcbiAgICAgIGljb24sXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICBsZW5ndGgsXHJcbiAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICByZWFkT25seSxcclxuICAgICAgcmVxdWlyZWQsXHJcbiAgICAgIHRvb2x0aXAsXHJcbiAgICAgIGRpc2FibGVkLFxyXG4gICAgfTogVFNwZWNpYWxGb3JtLFxyXG4gICAgY29udHJvbHM6IHtcclxuICAgICAgW2tleTogc3RyaW5nXTogU3BlY2lhbEZvcm1Db250cm9sPGFueT47XHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb250cm9scywgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnN0eWxlQ2xhc3NlcyA9IHN0eWxlQ2xhc3NlcztcclxuICAgIHRoaXMuaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHkoKSB7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLmdldERpcnR5KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQXJyYXkpIHtcclxuICAgICAgICBjb250cm9sLmdldERpcnR5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbFJlc2V0KHZhbHVlID0ge30pIHtcclxuICAgIGNvbnN0IGF1eDogYW55ID0ge307XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKS5tYXAoKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgYXV4W2tleV0gPSBjb250cm9sLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSkge1xyXG4gICAgICAgIGNvbnRyb2wuY2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNldCh7IC4uLmF1eCwgLi4udmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShzdGF0dXM6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sIHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5IHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUdyb3VwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlLnNldFJlYWRPbmx5KHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHlCeUZpZWxkcyhmaWVsZHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZHNPYmplY3QpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW2tleV07XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgY29udHJvbC5yZWFkT25seSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbkJ5RmllbGRzKGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNba2V5XTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLmhpZGRlbiA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbnRyb2xzKS5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCB8fFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSB8fFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cFxyXG4gICAgICApIHtcclxuICAgICAgICB2YWx1ZS5zZXREaXNhYmxlZChzdGF0dXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkQnlGaWVsZHMoZmllbGRzT2JqZWN0OiBhbnkpIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc09iamVjdCkubWFwKChlbnRyaWVzKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2xzW2VudHJpZXNbMF1dIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgZW50cmllc1sxXVxyXG4gICAgICAgICAgPyB0aGlzLmNvbnRyb2xzW2VudHJpZXNbMF1dLmVuYWJsZSgpXHJcbiAgICAgICAgICA6IHRoaXMuY29udHJvbHNbZW50cmllc1swXV0uZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRvbmRlIHZhbHVlIGVzIGVsIG9iamV0byBzZW1pbGxhIHkgZGV0YWlsRm9ybSBlcyB1biBhcnJlZ2xvIGRlIGZvcm0ga2V5IHBhcmEgZGFyIHVuIG1hcmNvIGFsIGZvcm1hcnJheVxyXG4gICAqL1xyXG5cclxuICBzZXRGb3JtVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zcGVjaWFsUmVzZXQodmFsdWUpO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scylcclxuICAgICAgLmZpbHRlcigoW19rZXksIGNvbnRyb2xdKSA9PiBjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSlcclxuICAgICAgLm1hcCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgICAoY29udHJvbCBhcyBTcGVjaWFsRm9ybUFycmF5KS5maWxsRm9ybUFycmF5KHZhbHVlW2tleV0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIHJldG9ybmFcclxuICAgKi9cclxuXHJcbiAgZ2V0SWRQa2V5KCk6IFNwZWNpYWxGb3JtQ29udHJvbDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLmZpbmQoXHJcbiAgICAgIChjb250cm9sKSA9PlxyXG4gICAgICAgIGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wgJiYgY29udHJvbC50eXBlID09PSAnUFJJTUFSWS1LRVknXHJcbiAgICApIGFzIFNwZWNpYWxGb3JtQ29udHJvbDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtQXJyYXkgZXh0ZW5kcyBGb3JtQXJyYXkgaW1wbGVtZW50cyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3R5bGVDbGFzc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBzZXR0aW5nczogSUFycmF5U2V0dGluZ3M7XHJcbiAgcHVibGljIHR5cGU6IEVDb250cm9sVHlwZXM7XHJcbiAgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55O1xyXG4gIHB1YmxpYyBmb3JtOiBTcGVjaWFsRm9ybUdyb3VwO1xyXG4gIHByaXZhdGUgZm9ybUNyZWF0aW9uOiAodmFsdWU/OiBhbnkpID0+IFNwZWNpYWxGb3JtR3JvdXA7XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzZXR0aW5ncyxcclxuICAgICAgdHlwZSxcclxuICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxyXG4gICAgICBlbGVtZW50SWQsXHJcbiAgICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgICAgZGVmYXVsdFZhbHVlLFxyXG4gICAgICBoaWRkZW4sXHJcbiAgICAgIGljb24sXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICBwbGFjZWhvbGRlcixcclxuICAgICAgcmVhZE9ubHksXHJcbiAgICAgIHJlcXVpcmVkLFxyXG4gICAgICB0b29sdGlwLFxyXG4gICAgICBlcnJvck1lc3NhZ2VzLFxyXG4gICAgICBkaXNhYmxlZCxcclxuICAgIH06IFRTcGVjaWFsQXJyYXksXHJcbiAgICBmb3JtQ3JlYXRpb246ICgpID0+IFNwZWNpYWxGb3JtR3JvdXAsXHJcbiAgICBjb250cm9sczogQWJzdHJhY3RDb250cm9sW11cclxuICApIHtcclxuICAgIHN1cGVyKGNvbnRyb2xzLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ3JlYXRpb24gPSBmb3JtQ3JlYXRpb247XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcclxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLmljb24gPSBpY29uO1xyXG4gICAgdGhpcy5lbGVtZW50SWQgPSBlbGVtZW50SWQ7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5zdHlsZUNsYXNzZXMgPSBzdHlsZUNsYXNzZXM7XHJcbiAgICB0aGlzLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlcztcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZmlsbEZvcm1BcnJheShkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNyZWF0aW9uKGl0ZW0pO1xyXG4gICAgICB0aGlzLnB1c2goZm9ybSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuZm9ybS5zcGVjaWFsUmVzZXQoKTtcclxuICAgIHRoaXMucHVzaChmb3JtKTtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxQdXNoKGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIGlmICghaW5kZXgpIHRoaXMucHVzaChmb3JtKTtcclxuICAgIGVsc2UgdGhpcy5jb250cm9sc1tpbmRleF0ucmVzZXQodGhpcy5mb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxJbnNlcnQoaW5kZXggPSAwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuaW5zZXJ0KGluZGV4LCBmb3JtKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxFZGl0KGluZGV4OiBudW1iZXIsIG5ld1ZhbHVlOiBPYmplY3QpIHtcclxuICAgIHRoaXMuY29udHJvbHNbaW5kZXhdLnJlc2V0KHsgLi4udGhpcy5jb250cm9sc1tpbmRleF0udmFsdWUsIC4uLm5ld1ZhbHVlIH0pO1xyXG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVnVlbHZlIHRvZG9zIGxvcyBjb250cm9sZXMgZGVsIGZvcm1BcnJheSBkZSBsZWN0dXJhIG8gZGUgc29sb2xlY3R1cmFcclxuICAgKiBAcGFyYW0gc3RhdHVzXHJcbiAgICovXHJcblxyXG4gIHNldFJlYWRPbmx5KHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLnNldFJlYWRPbmx5KHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVnVlbHZlIHRvZG9zIGxvcyBjb250cm9sZXMgZGVsIGZvcm1BcnJheSBoYWJpbGl0YWRvcyBvIGRlc2hhYmlsaXRhZG9zXHJcbiAgICogQHBhcmFtIHN0YXR1c1xyXG4gICAqL1xyXG5cclxuICBzZXREaXNhYmxlZChzdGF0dXM6IGJvb2xlYW4pIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLnNldERpc2FibGVkKHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWl0ZSBlZGl0YXIgdW4gY29udHJvbCBlc3BlY2lmaWNvLlxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqL1xyXG5cclxuICBlZGl0Q29udHJvbChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZvcm0ucmVzZXQodGhpcy5jb250cm9sc1tpbmRleF0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHkoKSB7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmZvcm0uZ2V0RGlydHkoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAoPFNwZWNpYWxGb3JtR3JvdXA+aXRlbSkuZ2V0RGlydHkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVjdXJzaXZlRmlsbEZvcm0oZm9ybTogRm9ybUdyb3VwLCBkYXRhOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybS5jb250cm9scykubWFwKChba2V5LCBjb250cm9sXSkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShkYXRhW2tleV0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICBkYXRhW2tleV0uZm9yRWFjaCgoKSA9PiB7fSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wucmVzZXQoZGF0YVtrZXldKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { FormArray, FormControl, FormGroup, } from '@angular/forms';
2
+ export class SpecialFormControl extends FormControl {
3
+ constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, errorMessages, disabled, }) {
4
+ super(defaultValue, validators, asyncValidators);
5
+ this.name = name;
6
+ this.placeholder = placeholder;
7
+ this.label = label;
8
+ this.tooltip = tooltip;
9
+ this.icon = icon;
10
+ this.elementId = elementId;
11
+ this.settings = settings;
12
+ this.type = type;
13
+ this.styleClasses = styleClasses;
14
+ this.hidden = hidden;
15
+ this.length = length;
16
+ this.readOnly = readOnly;
17
+ this.required = required;
18
+ this.errorMessages = errorMessages;
19
+ disabled ? this.disable() : this.enable();
20
+ }
21
+ setReadOnly(status = true) {
22
+ this.readOnly = status;
23
+ }
24
+ setDisabled(status = true) {
25
+ status ? this.disable() : this.enable();
26
+ }
27
+ setHidden(status = true) {
28
+ this.hidden = status;
29
+ }
30
+ }
31
+ export class SpecialFormGroup extends FormGroup {
32
+ constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, disabled, }, controls) {
33
+ super(controls, validators, asyncValidators);
34
+ this.name = name;
35
+ this.placeholder = placeholder;
36
+ this.label = label;
37
+ this.tooltip = tooltip;
38
+ this.icon = icon;
39
+ this.elementId = elementId;
40
+ this.settings = settings;
41
+ this.type = type;
42
+ this.styleClasses = styleClasses;
43
+ this.hidden = hidden;
44
+ this.length = length;
45
+ this.readOnly = readOnly;
46
+ this.required = required;
47
+ this.defaultValue = defaultValue;
48
+ disabled ? this.disable() : this.enable();
49
+ }
50
+ getDirty() {
51
+ this.markAsDirty();
52
+ Object.values(this.controls).forEach((control) => {
53
+ if (control instanceof SpecialFormControl) {
54
+ control.markAsDirty();
55
+ }
56
+ else if (control instanceof SpecialFormGroup) {
57
+ control.getDirty();
58
+ }
59
+ else if (control instanceof SpecialFormArray) {
60
+ control.getDirty();
61
+ }
62
+ });
63
+ }
64
+ specialReset(value = {}) {
65
+ const aux = {};
66
+ Object.entries(this.controls).map(([key, control]) => {
67
+ if (control instanceof SpecialFormControl) {
68
+ aux[key] = control.defaultValue;
69
+ }
70
+ else if (control instanceof SpecialFormArray) {
71
+ control.clear();
72
+ }
73
+ });
74
+ this.reset({ ...aux, ...value });
75
+ }
76
+ setReadOnly(status = true) {
77
+ Object.values(this.controls).map((value) => {
78
+ if (value instanceof SpecialFormControl ||
79
+ value instanceof SpecialFormArray ||
80
+ value instanceof SpecialFormGroup) {
81
+ value.setReadOnly(status);
82
+ }
83
+ });
84
+ }
85
+ setReadOnlyByFields(fieldsObject) {
86
+ Object.entries(fieldsObject).map(([key, value]) => {
87
+ const control = this.controls[key];
88
+ if (control instanceof SpecialFormControl) {
89
+ control.readOnly = value;
90
+ }
91
+ });
92
+ }
93
+ setHiddenByFields(fields) {
94
+ Object.entries(fields).map(([key, value]) => {
95
+ const control = this.controls[key];
96
+ if (control instanceof SpecialFormControl) {
97
+ control.hidden = value;
98
+ }
99
+ });
100
+ }
101
+ setDisabled(status) {
102
+ Object.values(this.controls).map((value) => {
103
+ if (value instanceof SpecialFormControl ||
104
+ value instanceof SpecialFormArray ||
105
+ value instanceof SpecialFormGroup) {
106
+ value.setDisabled(status);
107
+ }
108
+ });
109
+ }
110
+ setDisabledByFields(fieldsObject) {
111
+ Object.entries(fieldsObject).map((entries) => {
112
+ if (this.controls[entries[0]] instanceof SpecialFormControl) {
113
+ entries[1]
114
+ ? this.controls[entries[0]].enable()
115
+ : this.controls[entries[0]].disable();
116
+ }
117
+ });
118
+ }
119
+ /**
120
+ * donde value es el objeto semilla y detailForm es un arreglo de form key para dar un marco al formarray
121
+ */
122
+ setFormValue(value) {
123
+ this.specialReset(value);
124
+ Object.entries(this.controls)
125
+ .filter(([_key, control]) => control instanceof SpecialFormArray)
126
+ .map(([key, control]) => {
127
+ control.fillFormArray(value[key]);
128
+ });
129
+ }
130
+ /**
131
+ * Método que retorna
132
+ */
133
+ getIdPkey() {
134
+ return Object.values(this.controls).find((control) => control instanceof SpecialFormControl && control.type === 'PRIMARY-KEY');
135
+ }
136
+ }
137
+ export class SpecialFormArray extends FormArray {
138
+ constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, placeholder, readOnly, required, tooltip, errorMessages, disabled, }, formCreation, controls) {
139
+ super(controls, validators, asyncValidators);
140
+ this.formCreation = formCreation;
141
+ this.form = this.formCreation();
142
+ this.name = name;
143
+ this.placeholder = placeholder;
144
+ this.label = label;
145
+ this.tooltip = tooltip;
146
+ this.icon = icon;
147
+ this.elementId = elementId;
148
+ this.settings = settings;
149
+ this.type = type;
150
+ this.styleClasses = styleClasses;
151
+ this.hidden = hidden;
152
+ this.readOnly = readOnly;
153
+ this.required = required;
154
+ this.defaultValue = defaultValue;
155
+ this.errorMessages = errorMessages;
156
+ disabled ? this.disable() : this.enable();
157
+ }
158
+ fillFormArray(data) {
159
+ this.form.reset();
160
+ this.clear();
161
+ data.forEach((item) => {
162
+ const form = this.formCreation(item);
163
+ this.push(form);
164
+ });
165
+ }
166
+ addItem() {
167
+ const form = this.formCreation(this.form.value);
168
+ this.form.specialReset();
169
+ this.push(form);
170
+ this.markAsDirty();
171
+ }
172
+ specialPush(index) {
173
+ const form = this.formCreation(this.form.value);
174
+ if (!index)
175
+ this.push(form);
176
+ else
177
+ this.controls[index].reset(this.form.value);
178
+ }
179
+ specialInsert(index = 0) {
180
+ const form = this.formCreation(this.form.value);
181
+ this.insert(index, form);
182
+ }
183
+ specialEdit(index, newValue) {
184
+ this.controls[index].reset({ ...this.controls[index].value, ...newValue });
185
+ this.markAsDirty();
186
+ }
187
+ /**
188
+ * Vuelve todos los controles del formArray de lectura o de sololectura
189
+ * @param status
190
+ */
191
+ setReadOnly(status) {
192
+ this.readOnly = status;
193
+ this.controls.forEach((control) => {
194
+ if (control instanceof SpecialFormGroup) {
195
+ control.setReadOnly(status);
196
+ }
197
+ });
198
+ }
199
+ /**
200
+ * Vuelve todos los controles del formArray habilitados o deshabilitados
201
+ * @param status
202
+ */
203
+ setDisabled(status) {
204
+ status ? this.disable() : this.enable();
205
+ this.controls.forEach((control) => {
206
+ if (control instanceof SpecialFormGroup) {
207
+ control.setDisabled(status);
208
+ }
209
+ });
210
+ }
211
+ /**
212
+ * Permite editar un control especifico.
213
+ * @param index
214
+ */
215
+ editControl(index) {
216
+ this.form.reset(this.controls[index].value);
217
+ }
218
+ getDirty() {
219
+ this.markAsDirty();
220
+ this.form.getDirty();
221
+ this.controls.forEach((item) => {
222
+ item.getDirty();
223
+ });
224
+ }
225
+ recursiveFillForm(form, data) {
226
+ Object.entries(form.controls).map(([key, control]) => {
227
+ if (control instanceof FormControl) {
228
+ control.setValue(data[key]);
229
+ }
230
+ else if (control instanceof FormArray) {
231
+ data[key].forEach(() => { });
232
+ }
233
+ else if (control instanceof FormGroup) {
234
+ control.reset(data[key]);
235
+ }
236
+ });
237
+ return form;
238
+ }
239
+ }
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3Jtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFZeEIsTUFBTSxPQUFPLGtCQUF5QyxTQUFRLFdBQVc7SUFnQnZFLFlBQVksRUFDVixJQUFJLEVBQ0osUUFBUSxFQUNSLElBQUksRUFDSixVQUFVLEVBQ1YsZUFBZSxFQUNmLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1AsYUFBYSxFQUNiLFFBQVEsR0FDTztRQUNmLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFB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QUFPLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3QjtpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0I7aUJBQU0sSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFQ29udHJvbFR5cGVzIH0gZnJvbSAnLi4vYXV4LWRhdGEvY29udHJvbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgSUZpZWxkQmFzaWNEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWVsZC1iYXNpY3MuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgSUFycmF5U2V0dGluZ3MsXHJcbiAgSUZvcm1TZXR0aW5ncyxcclxuICBUU3BlY2lhbEZpZWxkcyxcclxuICBUU3BlY2lhbEZvcm0sXHJcbiAgVFNwZWNpYWxBcnJheSxcclxuICBUUmF3RmllbGRzLFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS5pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1Db250cm9sPFQgZXh0ZW5kcyBUUmF3RmllbGRzPiBleHRlbmRzIEZvcm1Db250cm9sIHtcclxuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogVFsncGxhY2Vob2xkZXInXTtcclxuICBwdWJsaWMgbGFiZWw6IFRbJ2xhYmVsJ107XHJcbiAgcHVibGljIHRvb2x0aXA6IFRbJ3Rvb2x0aXAnXTtcclxuICBwdWJsaWMgaWNvbjogVFsnaWNvbiddO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IFRbJ2VsZW1lbnRJZCddO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IFRbJ3N0eWxlQ2xhc3NlcyddO1xyXG4gIHB1YmxpYyBsZW5ndGg6IFRbJ2xlbmd0aCddO1xyXG4gIHB1YmxpYyByZXF1aXJlZDogVFsncmVxdWlyZWQnXTtcclxuICBwdWJsaWMgaGlkZGVuOiBUWydoaWRkZW4nXTtcclxuICBwdWJsaWMgcmVhZE9ubHk6IFRbJ3JlYWRPbmx5J107XHJcbiAgcHVibGljIHNldHRpbmdzOiBUWydzZXR0aW5ncyddO1xyXG4gIHB1YmxpYyB0eXBlOiBUWyd0eXBlJ107XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IFRbJ2Vycm9yTWVzc2FnZXMnXTtcclxuXHJcbiAgY29uc3RydWN0b3Ioe1xyXG4gICAgbmFtZSxcclxuICAgIHNldHRpbmdzLFxyXG4gICAgdHlwZSxcclxuICAgIHZhbGlkYXRvcnMsXHJcbiAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICBlbGVtZW50SWQsXHJcbiAgICBzdHlsZUNsYXNzZXMsXHJcbiAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICBoaWRkZW4sXHJcbiAgICBpY29uLFxyXG4gICAgbGFiZWwsXHJcbiAgICBsZW5ndGgsXHJcbiAgICBwbGFjZWhvbGRlcixcclxuICAgIHJlYWRPbmx5LFxyXG4gICAgcmVxdWlyZWQsXHJcbiAgICB0b29sdGlwLFxyXG4gICAgZXJyb3JNZXNzYWdlcyxcclxuICAgIGRpc2FibGVkLFxyXG4gIH06IFRTcGVjaWFsRmllbGRzKSB7XHJcbiAgICBzdXBlcihkZWZhdWx0VmFsdWUsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcclxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLmljb24gPSBpY29uO1xyXG4gICAgdGhpcy5lbGVtZW50SWQgPSBlbGVtZW50SWQ7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5zdHlsZUNsYXNzZXMgPSBzdHlsZUNsYXNzZXM7XHJcbiAgICB0aGlzLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlcztcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbihzdGF0dXMgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmhpZGRlbiA9IHN0YXR1cztcclxuICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtR3JvdXAgZXh0ZW5kcyBGb3JtR3JvdXB7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XHJcbiAgcHVibGljIGVsZW1lbnRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBzZXR0aW5nczogSUZvcm1TZXR0aW5ncztcclxuICBwdWJsaWMgdHlwZTogRUNvbnRyb2xUeXBlcy5mb3JtO1xyXG4gIHB1YmxpYyBkZWZhdWx0VmFsdWU6IGFueTtcclxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHNldHRpbmdzLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICAgIGVsZW1lbnRJZCxcclxuICAgICAgc3R5bGVDbGFzc2VzLFxyXG4gICAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICAgIGhpZGRlbixcclxuICAgICAgaWNvbixcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIGxlbmd0aCxcclxuICAgICAgcGxhY2Vob2xkZXIsXHJcbiAgICAgIHJlYWRPbmx5LFxyXG4gICAgICByZXF1aXJlZCxcclxuICAgICAgdG9vbHRpcCxcclxuICAgICAgZGlzYWJsZWQsXHJcbiAgICB9OiBUU3BlY2lhbEZvcm0sXHJcbiAgICBjb250cm9sczoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBTcGVjaWFsRm9ybUNvbnRyb2w8YW55PjtcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGNvbnRyb2xzLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XHJcbiAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgdGhpcy5pY29uID0gaWNvbjtcclxuICAgIHRoaXMuZWxlbWVudElkID0gZWxlbWVudElkO1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuc3R5bGVDbGFzc2VzID0gc3R5bGVDbGFzc2VzO1xyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgZGlzYWJsZWQgPyB0aGlzLmRpc2FibGUoKSA6IHRoaXMuZW5hYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eSgpIHtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0RGlydHkoKTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSkge1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0RGlydHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzcGVjaWFsUmVzZXQodmFsdWUgPSB7fSkge1xyXG4gICAgY29uc3QgYXV4OiBhbnkgPSB7fTtcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpLm1hcCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBhdXhba2V5XSA9IGNvbnRyb2wuZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5KSB7XHJcbiAgICAgICAgY29udHJvbC5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2V0KHsgLi4uYXV4LCAuLi52YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wgfHxcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQXJyYXkgfHxcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdmFsdWUuc2V0UmVhZE9ubHkoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seUJ5RmllbGRzKGZpZWxkc09iamVjdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc09iamVjdCkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNba2V5XTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLnJlYWRPbmx5ID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SGlkZGVuQnlGaWVsZHMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sc1trZXldO1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wuaGlkZGVuID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWQoc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sIHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5IHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUdyb3VwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlLnNldERpc2FibGVkKHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRCeUZpZWxkcyhmaWVsZHNPYmplY3Q6IGFueSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzT2JqZWN0KS5tYXAoKGVudHJpZXMpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udHJvbHNbZW50cmllc1swXV0gaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBlbnRyaWVzWzFdXHJcbiAgICAgICAgICA/IHRoaXMuY29udHJvbHNbZW50cmllc1swXV0uZW5hYmxlKClcclxuICAgICAgICAgIDogdGhpcy5jb250cm9sc1tlbnRyaWVzWzBdXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZG9uZGUgdmFsdWUgZXMgZWwgb2JqZXRvIHNlbWlsbGEgeSBkZXRhaWxGb3JtIGVzIHVuIGFycmVnbG8gZGUgZm9ybSBrZXkgcGFyYSBkYXIgdW4gbWFyY28gYWwgZm9ybWFycmF5XHJcbiAgICovXHJcblxyXG4gIHNldEZvcm1WYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNwZWNpYWxSZXNldCh2YWx1ZSk7XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKVxyXG4gICAgICAuZmlsdGVyKChbX2tleSwgY29udHJvbF0pID0+IGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5KVxyXG4gICAgICAubWFwKChba2V5LCBjb250cm9sXSkgPT4ge1xyXG4gICAgICAgIChjb250cm9sIGFzIFNwZWNpYWxGb3JtQXJyYXkpLmZpbGxGb3JtQXJyYXkodmFsdWVba2V5XSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgcmV0b3JuYVxyXG4gICAqL1xyXG5cclxuICBnZXRJZFBrZXkoKTogU3BlY2lhbEZvcm1Db250cm9sPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykuZmluZChcclxuICAgICAgKGNvbnRyb2wpID0+XHJcbiAgICAgICAgY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCAmJiBjb250cm9sLnR5cGUgPT09ICdQUklNQVJZLUtFWSdcclxuICAgICkgYXMgU3BlY2lhbEZvcm1Db250cm9sPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1BcnJheSBleHRlbmRzIEZvcm1BcnJheSBpbXBsZW1lbnRzIElGaWVsZEJhc2ljRGF0YSB7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XHJcbiAgcHVibGljIGVsZW1lbnRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgcHVibGljIHNldHRpbmdzOiBJQXJyYXlTZXR0aW5ncztcclxuICBwdWJsaWMgdHlwZTogRUNvbnRyb2xUeXBlcztcclxuICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGZvcm06IFNwZWNpYWxGb3JtR3JvdXA7XHJcbiAgcHJpdmF0ZSBmb3JtQ3JlYXRpb246ICh2YWx1ZT86IGFueSkgPT4gU3BlY2lhbEZvcm1Hcm91cDtcclxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHNldHRpbmdzLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICAgIGVsZW1lbnRJZCxcclxuICAgICAgc3R5bGVDbGFzc2VzLFxyXG4gICAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICAgIGhpZGRlbixcclxuICAgICAgaWNvbixcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICByZWFkT25seSxcclxuICAgICAgcmVxdWlyZWQsXHJcbiAgICAgIHRvb2x0aXAsXHJcbiAgICAgIGVycm9yTWVzc2FnZXMsXHJcbiAgICAgIGRpc2FibGVkLFxyXG4gICAgfTogVFNwZWNpYWxBcnJheSxcclxuICAgIGZvcm1DcmVhdGlvbjogKCkgPT4gU3BlY2lhbEZvcm1Hcm91cCxcclxuICAgIGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29udHJvbHMsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1DcmVhdGlvbiA9IGZvcm1DcmVhdGlvbjtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUNyZWF0aW9uKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnN0eWxlQ2xhc3NlcyA9IHN0eWxlQ2xhc3NlcztcclxuICAgIHRoaXMuaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xyXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBlcnJvck1lc3NhZ2VzO1xyXG4gICAgZGlzYWJsZWQgPyB0aGlzLmRpc2FibGUoKSA6IHRoaXMuZW5hYmxlKCk7XHJcbiAgfVxyXG5cclxuICBmaWxsRm9ybUFycmF5KGRhdGE6IGFueVtdKSB7XHJcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24oaXRlbSk7XHJcbiAgICAgIHRoaXMucHVzaChmb3JtKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5mb3JtLnNwZWNpYWxSZXNldCgpO1xyXG4gICAgdGhpcy5wdXNoKGZvcm0pO1xyXG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbFB1c2goaW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgaWYgKCFpbmRleCkgdGhpcy5wdXNoKGZvcm0pO1xyXG4gICAgZWxzZSB0aGlzLmNvbnRyb2xzW2luZGV4XS5yZXNldCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbEluc2VydChpbmRleCA9IDApIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5pbnNlcnQoaW5kZXgsIGZvcm0pO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbEVkaXQoaW5kZXg6IG51bWJlciwgbmV3VmFsdWU6IE9iamVjdCkge1xyXG4gICAgdGhpcy5jb250cm9sc1tpbmRleF0ucmVzZXQoeyAuLi50aGlzLmNvbnRyb2xzW2luZGV4XS52YWx1ZSwgLi4ubmV3VmFsdWUgfSk7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWdWVsdmUgdG9kb3MgbG9zIGNvbnRyb2xlcyBkZWwgZm9ybUFycmF5IGRlIGxlY3R1cmEgbyBkZSBzb2xvbGVjdHVyYVxyXG4gICAqIEBwYXJhbSBzdGF0dXNcclxuICAgKi9cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gc3RhdHVzO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0UmVhZE9ubHkoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWdWVsdmUgdG9kb3MgbG9zIGNvbnRyb2xlcyBkZWwgZm9ybUFycmF5IGhhYmlsaXRhZG9zIG8gZGVzaGFiaWxpdGFkb3NcclxuICAgKiBAcGFyYW0gc3RhdHVzXHJcbiAgICovXHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgc3RhdHVzID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RGlzYWJsZWQoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtaXRlIGVkaXRhciB1biBjb250cm9sIGVzcGVjaWZpY28uXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICovXHJcblxyXG4gIGVkaXRDb250cm9sKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZm9ybS5yZXNldCh0aGlzLmNvbnRyb2xzW2luZGV4XS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eSgpIHtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZm9ybS5nZXREaXJ0eSgpO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICg8U3BlY2lhbEZvcm1Hcm91cD5pdGVtKS5nZXREaXJ0eSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWN1cnNpdmVGaWxsRm9ybShmb3JtOiBGb3JtR3JvdXAsIGRhdGE6IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICBPYmplY3QuZW50cmllcyhmb3JtLmNvbnRyb2xzKS5tYXAoKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKGRhdGFba2V5XSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgIGRhdGFba2V5XS5mb3JFYWNoKCgpID0+IHt9KTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY29udHJvbC5yZXNldChkYXRhW2tleV0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzaWNzLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL2ZpZWxkLWJhc2ljcy5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpZWxkQmFzaWNEYXRhIHtcclxuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdG9vbHRpcDogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuICBlbGVtZW50SWQ6IHN0cmluZztcclxuICBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBsZW5ndGg6IG51bWJlcjtcclxuICByZXF1aXJlZDogYm9vbGVhbjtcclxuICBoaWRkZW46IGJvb2xlYW47XHJcbiAgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ6Ym9vbGVhbjtcclxuICBlcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZERhdGEgZXh0ZW5kcyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGw7XHJcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbltdIHwgbnVsbDtcclxuICBkZWZhdWx0VmFsdWU6IGFueTtcclxufVxyXG4iXX0=