valtech-components 4.0.73 → 4.0.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/request-form/request-form.component.mjs +229 -0
- package/esm2022/lib/components/molecules/request-form/types.mjs +2 -0
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +2 -2
- package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +6 -6
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components.mjs +317 -103
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/request-form/request-form.component.d.ts +28 -0
- package/lib/components/molecules/request-form/types.d.ts +32 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, inject, signal } from '@angular/core';
|
|
3
|
+
import { Validators } from '@angular/forms';
|
|
4
|
+
import { IonButton, IonIcon } from '@ionic/angular/standalone';
|
|
5
|
+
import { addIcons } from 'ionicons';
|
|
6
|
+
import { checkmarkCircleOutline, closeCircleOutline } from 'ionicons/icons';
|
|
7
|
+
import { firstValueFrom } from 'rxjs';
|
|
8
|
+
import { RequestService } from '../../../services/requests/request.service';
|
|
9
|
+
import { FeedbackService } from '../../../services/feedback/feedback.service';
|
|
10
|
+
import { I18nService } from '../../../services/i18n';
|
|
11
|
+
import { ComponentStates, InputType } from '../../types';
|
|
12
|
+
import { FormComponent } from '../../organisms/form/form.component';
|
|
13
|
+
import { AttachmentUploaderComponent } from '../../organisms/attachment-uploader/attachment-uploader.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/common";
|
|
16
|
+
const REQUEST_FORM_I18N = {
|
|
17
|
+
es: {
|
|
18
|
+
title: 'Título',
|
|
19
|
+
titlePlaceholder: 'Describe brevemente tu solicitud',
|
|
20
|
+
titleValidation: 'El título debe tener al menos 3 caracteres',
|
|
21
|
+
description: 'Descripción',
|
|
22
|
+
descriptionPlaceholder: 'Añade más detalles aquí',
|
|
23
|
+
descriptionValidation: 'La descripción es demasiado larga',
|
|
24
|
+
submit: 'Enviar',
|
|
25
|
+
success: 'Solicitud enviada exitosamente',
|
|
26
|
+
error: 'Error al enviar la solicitud',
|
|
27
|
+
},
|
|
28
|
+
en: {
|
|
29
|
+
title: 'Title',
|
|
30
|
+
titlePlaceholder: 'Briefly describe your request',
|
|
31
|
+
titleValidation: 'Title must be at least 3 characters',
|
|
32
|
+
description: 'Description',
|
|
33
|
+
descriptionPlaceholder: 'Add more details here',
|
|
34
|
+
descriptionValidation: 'Description is too long',
|
|
35
|
+
submit: 'Submit',
|
|
36
|
+
success: 'Request submitted successfully',
|
|
37
|
+
error: 'Error submitting the request',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
export class RequestFormComponent {
|
|
41
|
+
constructor() {
|
|
42
|
+
this.props = { type: '' };
|
|
43
|
+
this.onSubmit = new EventEmitter();
|
|
44
|
+
this.onCancel = new EventEmitter();
|
|
45
|
+
this.i18n = inject(I18nService);
|
|
46
|
+
this.requestService = inject(RequestService);
|
|
47
|
+
this.feedbackService = inject(FeedbackService);
|
|
48
|
+
this.isSubmitting = signal(false);
|
|
49
|
+
this.isSuccess = signal(false);
|
|
50
|
+
this.error = signal(null);
|
|
51
|
+
this.currentAttachments = [];
|
|
52
|
+
addIcons({ checkmarkCircleOutline, closeCircleOutline });
|
|
53
|
+
if (!this.i18n.hasNamespace('RequestForm')) {
|
|
54
|
+
this.i18n.registerDefaults('RequestForm', REQUEST_FORM_I18N);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
ngOnInit() {
|
|
58
|
+
this.formProps = this.buildFormProps();
|
|
59
|
+
}
|
|
60
|
+
buildFormProps() {
|
|
61
|
+
return {
|
|
62
|
+
name: '',
|
|
63
|
+
sections: [
|
|
64
|
+
{
|
|
65
|
+
name: '',
|
|
66
|
+
order: 0,
|
|
67
|
+
fields: [
|
|
68
|
+
{
|
|
69
|
+
token: 'request-title',
|
|
70
|
+
name: 'title',
|
|
71
|
+
label: this.props.titleLabel ?? this.t('title'),
|
|
72
|
+
hint: '',
|
|
73
|
+
placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
|
|
74
|
+
type: InputType.TEXT,
|
|
75
|
+
order: 1,
|
|
76
|
+
validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
|
|
77
|
+
errors: {
|
|
78
|
+
required: this.t('titleValidation'),
|
|
79
|
+
minlength: this.t('titleValidation'),
|
|
80
|
+
maxlength: this.t('titleValidation'),
|
|
81
|
+
},
|
|
82
|
+
state: ComponentStates.ENABLED,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
token: 'request-description',
|
|
86
|
+
name: 'description',
|
|
87
|
+
label: this.props.descriptionLabel ?? this.t('description'),
|
|
88
|
+
hint: '',
|
|
89
|
+
placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
|
|
90
|
+
type: InputType.TEXTAREA,
|
|
91
|
+
order: 2,
|
|
92
|
+
validators: [Validators.maxLength(5000)],
|
|
93
|
+
errors: { maxlength: this.t('descriptionValidation') },
|
|
94
|
+
state: ComponentStates.ENABLED,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
actions: {
|
|
100
|
+
type: 'submit',
|
|
101
|
+
color: 'dark',
|
|
102
|
+
fill: 'solid',
|
|
103
|
+
shape: 'round',
|
|
104
|
+
expand: 'block',
|
|
105
|
+
text: this.props.submitButtonText ?? this.t('submit'),
|
|
106
|
+
state: ComponentStates.ENABLED,
|
|
107
|
+
},
|
|
108
|
+
state: ComponentStates.ENABLED,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async handleFormSubmit(submitted) {
|
|
112
|
+
if (this.isSubmitting())
|
|
113
|
+
return;
|
|
114
|
+
if (this.currentAttachments.some(a => a.status === 'uploading'))
|
|
115
|
+
return;
|
|
116
|
+
this.isSubmitting.set(true);
|
|
117
|
+
this.error.set(null);
|
|
118
|
+
this.isSuccess.set(false);
|
|
119
|
+
this.formProps.state = ComponentStates.WORKING;
|
|
120
|
+
this.formProps.actions.state = ComponentStates.WORKING;
|
|
121
|
+
try {
|
|
122
|
+
const title = submitted.fields['title'].trim();
|
|
123
|
+
const description = submitted.fields['description']?.trim() ?? '';
|
|
124
|
+
const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
|
|
125
|
+
const result = await firstValueFrom(this.requestService.createRequest({
|
|
126
|
+
type: this.props.type,
|
|
127
|
+
title,
|
|
128
|
+
fields: {
|
|
129
|
+
...(description ? { description } : {}),
|
|
130
|
+
...(attachmentUrls.length ? { attachmentUrls } : {}),
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
this.isSuccess.set(true);
|
|
134
|
+
this.onSubmit.emit({
|
|
135
|
+
requestId: result.requestId,
|
|
136
|
+
request: result.request,
|
|
137
|
+
type: this.props.type,
|
|
138
|
+
title,
|
|
139
|
+
attachmentUrls,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
this.error.set(err.error?.message || err.message || this.t('error'));
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
this.isSubmitting.set(false);
|
|
147
|
+
this.formProps.state = ComponentStates.ENABLED;
|
|
148
|
+
this.formProps.actions.state = ComponentStates.ENABLED;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
onAttachmentsChange(items) {
|
|
152
|
+
this.currentAttachments = items;
|
|
153
|
+
}
|
|
154
|
+
onCancelClick() {
|
|
155
|
+
this.onCancel.emit();
|
|
156
|
+
}
|
|
157
|
+
t(key) {
|
|
158
|
+
return this.i18n.t(key, 'RequestForm');
|
|
159
|
+
}
|
|
160
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RequestFormComponent, isStandalone: true, selector: "val-request-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
|
|
162
|
+
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
163
|
+
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
164
|
+
@if (props.showAttachments !== false) {
|
|
165
|
+
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@if (error()) {
|
|
169
|
+
<div class="request-alert error">
|
|
170
|
+
<ion-icon name="close-circle-outline" aria-hidden="true" />
|
|
171
|
+
<span>{{ error() }}</span>
|
|
172
|
+
</div>
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@if (isSuccess()) {
|
|
176
|
+
<div class="request-alert success">
|
|
177
|
+
<ion-icon name="checkmark-circle-outline" aria-hidden="true" />
|
|
178
|
+
<span>{{ props.successMessage || t('success') }}</span>
|
|
179
|
+
</div>
|
|
180
|
+
}
|
|
181
|
+
</val-form>
|
|
182
|
+
|
|
183
|
+
@if (props.cancelButtonText) {
|
|
184
|
+
<ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
|
|
185
|
+
{{ props.cancelButtonText }}
|
|
186
|
+
</ion-button>
|
|
187
|
+
}
|
|
188
|
+
</div>
|
|
189
|
+
`, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
190
|
+
}
|
|
191
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, decorators: [{
|
|
192
|
+
type: Component,
|
|
193
|
+
args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, IonButton, IonIcon], template: `
|
|
194
|
+
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
195
|
+
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
196
|
+
@if (props.showAttachments !== false) {
|
|
197
|
+
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
@if (error()) {
|
|
201
|
+
<div class="request-alert error">
|
|
202
|
+
<ion-icon name="close-circle-outline" aria-hidden="true" />
|
|
203
|
+
<span>{{ error() }}</span>
|
|
204
|
+
</div>
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@if (isSuccess()) {
|
|
208
|
+
<div class="request-alert success">
|
|
209
|
+
<ion-icon name="checkmark-circle-outline" aria-hidden="true" />
|
|
210
|
+
<span>{{ props.successMessage || t('success') }}</span>
|
|
211
|
+
</div>
|
|
212
|
+
}
|
|
213
|
+
</val-form>
|
|
214
|
+
|
|
215
|
+
@if (props.cancelButtonText) {
|
|
216
|
+
<ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
|
|
217
|
+
{{ props.cancelButtonText }}
|
|
218
|
+
</ion-button>
|
|
219
|
+
}
|
|
220
|
+
</div>
|
|
221
|
+
`, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"] }]
|
|
222
|
+
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], onSubmit: [{
|
|
225
|
+
type: Output
|
|
226
|
+
}], onCancel: [{
|
|
227
|
+
type: Output
|
|
228
|
+
}] } });
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvcmVxdWVzdC1mb3JtL3JlcXVlc3QtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBMkMsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQzs7O0FBSWhILE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsRUFBRSxFQUFFO1FBQ0YsS0FBSyxFQUFFLFFBQVE7UUFDZixnQkFBZ0Is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Q0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0F0SVUsb0JBQW9CO21HQUFwQixvQkFBb0IsaUtBdEVyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVCwyZkE3QlMsWUFBWSw2SEFBRSxhQUFhLDhIQUFFLDJCQUEyQix1SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQXVFM0Usb0JBQW9CO2tCQTFFaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJUO3dEQTJDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIGNsb3NlQ2lyY2xlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrL2ZlZWRiYWNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudEl0ZW0gfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvYXR0YWNobWVudC11cGxvYWRlci90eXBlcyc7XG5pbXBvcnQgeyBSZXF1ZXN0Rm9ybU1ldGFkYXRhLCBSZXF1ZXN0U3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgUkVRVUVTVF9GT1JNX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgdGl0bGU6ICdUw610dWxvJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnRGVzY3JpYmUgYnJldmVtZW50ZSB0dSBzb2xpY2l0dWQnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ0VsIHTDrXR1bG8gZGViZSB0ZW5lciBhbCBtZW5vcyAzIGNhcmFjdGVyZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcGNpw7NuJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQcOxYWRlIG3DoXMgZGV0YWxsZXMgYXF1w60nLFxuICAgIGRlc2NyaXB0aW9uVmFsaWRhdGlvbjogJ0xhIGRlc2NyaXBjacOzbiBlcyBkZW1hc2lhZG8gbGFyZ2EnLFxuICAgIHN1Ym1pdDogJ0VudmlhcicsXG4gICAgc3VjY2VzczogJ1NvbGljaXR1ZCBlbnZpYWRhIGV4aXRvc2FtZW50ZScsXG4gICAgZXJyb3I6ICdFcnJvciBhbCBlbnZpYXIgbGEgc29saWNpdHVkJyxcbiAgfSxcbiAgZW46IHtcbiAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnQnJpZWZseSBkZXNjcmliZSB5b3VyIHJlcXVlc3QnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ1RpdGxlIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQWRkIG1vcmUgZGV0YWlscyBoZXJlJyxcbiAgICBkZXNjcmlwdGlvblZhbGlkYXRpb246ICdEZXNjcmlwdGlvbiBpcyB0b28gbG9uZycsXG4gICAgc3VibWl0OiAnU3VibWl0JyxcbiAgICBzdWNjZXNzOiAnUmVxdWVzdCBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICBlcnJvcjogJ0Vycm9yIHN1Ym1pdHRpbmcgdGhlIHJlcXVlc3QnLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXJlcXVlc3QtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1Db21wb25lbnQsIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1mb3JtLXdyYXBwZXJcIiBbY2xhc3MuY29tcGFjdF09XCJwcm9wcy5jb21wYWN0XCIgW25nQ2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIj5cbiAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwiZm9ybVByb3BzXCIgKG9uU3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKHByb3BzLnNob3dBdHRhY2htZW50cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICA8dmFsLWF0dGFjaG1lbnQtdXBsb2FkZXIgW3Byb3BzXT1cInsgbWF4RmlsZXM6IDUgfVwiIChhdHRhY2htZW50c0NoYW5nZSk9XCJvbkF0dGFjaG1lbnRzQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChlcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlcXVlc3QtYWxlcnQgZXJyb3JcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgZXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1hbGVydCBzdWNjZXNzXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCB0KCdzdWNjZXNzJykgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvdmFsLWZvcm0+XG5cbiAgICAgIEBpZiAocHJvcHMuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCIgZXhwYW5kPVwiYmxvY2tcIiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAge3sgcHJvcHMuY2FuY2VsQnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5yZXF1ZXN0LWZvcm0td3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuXG4gICAgICAgICYuY29tcGFjdCB7XG4gICAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnJlcXVlc3QtYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNhbmNlbC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVxdWVzdEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogUmVxdWVzdEZvcm1NZXRhZGF0YSA9IHsgdHlwZTogJycgfTtcblxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlcXVlc3RTdWJtaXRFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZSA9IGluamVjdChSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgZmVlZGJhY2tTZXJ2aWNlID0gaW5qZWN0KEZlZWRiYWNrU2VydmljZSk7XG5cbiAgZm9ybVByb3BzITogRm9ybU1ldGFkYXRhO1xuXG4gIGlzU3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIGlzU3VjY2VzcyA9IHNpZ25hbChmYWxzZSk7XG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgY3VycmVudEF0dGFjaG1lbnRzOiBBdHRhY2htZW50SXRlbVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoeyBjaGVja21hcmtDaXJjbGVPdXRsaW5lLCBjbG9zZUNpcmNsZU91dGxpbmUgfSk7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKCdSZXF1ZXN0Rm9ybScpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnUmVxdWVzdEZvcm0nLCBSRVFVRVNUX0ZPUk1fSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b2tlbjogJ3JlcXVlc3QtdGl0bGUnLFxuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMudCgndGl0bGUnKSxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRpdGxlUGxhY2Vob2xkZXIgPz8gdGhpcy50KCd0aXRsZVBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApXSxcbiAgICAgICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRoaXMudCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICAgICAgICAgIG1heGxlbmd0aDogdGhpcy50KCd0aXRsZVZhbGlkYXRpb24nKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSBhcyBJbnB1dE1ldGFkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b2tlbjogJ3JlcXVlc3QtZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5kZXNjcmlwdGlvbkxhYmVsID8/IHRoaXMudCgnZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uUGxhY2Vob2xkZXIgPz8gdGhpcy50KCdkZXNjcmlwdGlvblBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhUQVJFQSxcbiAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MDAwKV0sXG4gICAgICAgICAgICAgIGVycm9yczogeyBtYXhsZW5ndGg6IHRoaXMudCgnZGVzY3JpcHRpb25WYWxpZGF0aW9uJykgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSBhcyBJbnB1dE1ldGFkYXRhLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgdGV4dDogdGhpcy5wcm9wcy5zdWJtaXRCdXR0b25UZXh0ID8/IHRoaXMudCgnc3VibWl0JyksXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZvcm1TdWJtaXQoc3VibWl0dGVkOiBGb3JtU3VibWl0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50QXR0YWNobWVudHMuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpIHJldHVybjtcblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmlzU3VjY2Vzcy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gKHN1Ym1pdHRlZC5maWVsZHNbJ3RpdGxlJ10gYXMgc3RyaW5nKS50cmltKCk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChzdWJtaXR0ZWQuZmllbGRzWydkZXNjcmlwdGlvbiddIGFzIHN0cmluZyk/LnRyaW0oKSA/PyAnJztcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcmxzID0gdGhpcy5jdXJyZW50QXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpLm1hcChhID0+IGEudXJsISk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmNyZWF0ZVJlcXVlc3Qoe1xuICAgICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihhdHRhY2htZW50VXJscy5sZW5ndGggPyB7IGF0dGFjaG1lbnRVcmxzIH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdCh7XG4gICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdDogcmVzdWx0LnJlcXVlc3QsXG4gICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGF0dGFjaG1lbnRVcmxzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVyci5lcnJvcj8ubWVzc2FnZSB8fCBlcnIubWVzc2FnZSB8fCB0aGlzLnQoJ2Vycm9yJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybVByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG4gIH1cblxuICBvbkF0dGFjaG1lbnRzQ2hhbmdlKGl0ZW1zOiBBdHRhY2htZW50SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QXR0YWNobWVudHMgPSBpdGVtcztcbiAgfVxuXG4gIG9uQ2FuY2VsQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ1JlcXVlc3RGb3JtJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlcXVlc3QtZm9ybS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0Rm9ybU1ldGFkYXRhIHtcbiAgLyoqIFJlcXVlc3QgdHlwZSBpZGVudGlmaWVyIChlLmcuICdzdXBwb3J0X3RpY2tldCcsICdmZWF0dXJlX3JlcXVlc3QnKS4gUmVxdWlyZWQuICovXG4gIHR5cGU6IHN0cmluZztcblxuICAvKiogTGFiZWwgZm9yIHRoZSB0aXRsZSBmaWVsZCAqL1xuICB0aXRsZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHRpdGxlIGZpZWxkICovXG4gIHRpdGxlUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIGZvciB0aGUgZGVzY3JpcHRpb24gZmllbGQgKi9cbiAgZGVzY3JpcHRpb25MYWJlbD86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCAqL1xuICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKiBTdWJtaXQgYnV0dG9uIHRleHQgKi9cbiAgc3VibWl0QnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKiogQ2FuY2VsIGJ1dHRvbiB0ZXh0IOKAlCBpZiBvbWl0dGVkLCBubyBjYW5jZWwgYnV0dG9uIGlzIHNob3duICovXG4gIGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFNob3cgYXR0YWNobWVudCB1cGxvYWRlciAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2hvd0F0dGFjaG1lbnRzPzogYm9vbGVhbjtcblxuICAvKiogQ3VzdG9tIHN1Y2Nlc3MgbWVzc2FnZSDigJQgb3ZlcnJpZGVzIGkxOG4gZGVmYXVsdCAqL1xuICBzdWNjZXNzTWVzc2FnZT86IHN0cmluZztcblxuICAvKiogQ29tcGFjdCBtb2RlIChsZXNzIHNwYWNpbmcpICovXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xuXG4gIC8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBmb3IgdGhlIHdyYXBwZXIgKi9cbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFN1Ym1pdEV2ZW50IHtcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IEFwcFJlcXVlc3Q7XG4gIHR5cGU6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgYXR0YWNobWVudFVybHM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
|