@dignite-ng/expand.cms 3.0.0-rc.43 → 3.0.0-rc.47

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 (32) hide show
  1. package/esm2022/lib/cms.module.mjs +6 -2
  2. package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +33 -3
  3. package/esm2022/lib/components/admin/entries/create.component.mjs +39 -8
  4. package/esm2022/lib/components/admin/entries/edit.component.mjs +55 -50
  5. package/esm2022/lib/components/admin/entries/entries.component.mjs +4 -3
  6. package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.mjs +7 -7
  7. package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +40 -7
  8. package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +50 -10
  9. package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +44 -9
  10. package/esm2022/lib/pipes/get-localized-entries-by-slug.pipe.mjs +43 -0
  11. package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.mjs +1 -1
  12. package/esm2022/lib/proxy/dignite/cms/admin/entries/entry-admin.service.mjs +6 -1
  13. package/esm2022/lib/proxy/dignite/cms/admin/fields/models.mjs +1 -1
  14. package/esm2022/lib/proxy/dignite/cms/fields/models.mjs +1 -1
  15. package/esm2022/lib/proxy/dignite/cms/sections/models.mjs +1 -1
  16. package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +3 -3
  17. package/fesm2022/dignite-ng-expand.cms.mjs +311 -90
  18. package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
  19. package/lib/cms.module.d.ts +2 -1
  20. package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +5 -0
  21. package/lib/components/admin/entries/create.component.d.ts +3 -0
  22. package/lib/components/admin/entries/edit.component.d.ts +1 -0
  23. package/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.d.ts +0 -6
  24. package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +4 -0
  25. package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +4 -0
  26. package/lib/components/dynamic-form/table/table-control.component.d.ts +4 -0
  27. package/lib/pipes/get-localized-entries-by-slug.pipe.d.ts +10 -0
  28. package/lib/proxy/dignite/cms/admin/entries/entry-admin.service.d.ts +1 -0
  29. package/lib/proxy/dignite/cms/admin/fields/models.d.ts +2 -2
  30. package/lib/proxy/dignite/cms/fields/models.d.ts +1 -1
  31. package/lib/proxy/dignite/cms/sections/models.d.ts +2 -2
  32. package/package.json +1 -1
@@ -9,7 +9,7 @@ import { FormBuilder } from '@angular/forms';
9
9
  import { ActivatedRoute } from '@angular/router';
10
10
  // import { EntryAdminService } from '../../../proxy/admin/entries';
11
11
  import { ECmsComponent } from '../../../enums';
12
- import { UpdateListService } from '@dignite-ng/expand.core';
12
+ import { LocationBackService, UpdateListService } from '@dignite-ng/expand.core';
13
13
  import { CreateOrUpdateEntryInputBase } from './create-or-update-entry-input-base';
14
14
  import { ValidatorsService } from '@dignite-ng/expand.core';
15
15
  import { finalize } from 'rxjs';
@@ -52,6 +52,54 @@ export class EditComponent {
52
52
  this.entryInfo = '';
53
53
  /**显示条目类型信息 */
54
54
  this.showEntryTypeInfo = '';
55
+ // /**获取表单所有字段是否通过验证 */
56
+ // getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
57
+ // const validationStatus: { [key: string]: any } = {};
58
+ // // 递归遍历表单组和表单控件集合
59
+ // const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
60
+ // if (form instanceof FormGroup) {
61
+ // Object.keys(form.controls).forEach(key => {
62
+ // const control = form.controls[key];
63
+ // // const displayName = key.charAt(0).toUpperCase() + key.slice(1);
64
+ // const displayName = key;
65
+ // const fullKey = prefix ? `${prefix}.${displayName}` : displayName;
66
+ // if (control instanceof FormControl) {
67
+ // validationStatus[fullKey] = control.valid;
68
+ // } else if (control instanceof FormArray) {
69
+ // traverseForm(control, fullKey);
70
+ // } else if (control instanceof FormGroup) {
71
+ // traverseForm(control, fullKey);
72
+ // }
73
+ // });
74
+ // } else if (form instanceof FormArray) {
75
+ // form.controls.forEach((control, index) => {
76
+ // const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;
77
+ // if (control instanceof FormControl) {
78
+ // validationStatus[fullKey] = control.valid;
79
+ // } else if (control instanceof FormArray) {
80
+ // traverseForm(control, fullKey);
81
+ // } else if (control instanceof FormGroup) {
82
+ // traverseForm(control, fullKey);
83
+ // }
84
+ // });
85
+ // }
86
+ // };
87
+ // traverseForm(formEntity);
88
+ // return validationStatus;
89
+ // }
90
+ /**获取表单验证状态 */
91
+ // getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
92
+ // const validationStatus: { [key: string]: any } = {};
93
+ // const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
94
+ // //检查form是否为FormGroup还是formArray,如果是FormGroup则继续遍历,如果是FormArray则遍历FormArray
95
+ // if (form instanceof FormGroup) {
96
+ // } else if (form instanceof FormArray) {
97
+ // }
98
+ // }
99
+ // traverseForm(formEntity);
100
+ // return validationStatus
101
+ // }
102
+ this._LocationBackService = inject(LocationBackService);
55
103
  this.isSubmit = false;
56
104
  this.draftValue = '';
57
105
  }
@@ -120,6 +168,7 @@ export class EditComponent {
120
168
  const displayName = key.charAt(0).toUpperCase() + key.slice(1);
121
169
  info = `"${this._LocalizationService.instant(`${module}::${displayName}`)}" `;
122
170
  }
171
+ console.log('info', info, input[key]);
123
172
  info = info + this._LocalizationService.instant(`AbpValidation::ThisFieldIsNotValid.`);
124
173
  //使用abp多语言提示
125
174
  this.toaster.warn(info);
@@ -128,53 +177,6 @@ export class EditComponent {
128
177
  }
129
178
  return false;
130
179
  }
131
- // /**获取表单所有字段是否通过验证 */
132
- // getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
133
- // const validationStatus: { [key: string]: any } = {};
134
- // // 递归遍历表单组和表单控件集合
135
- // const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
136
- // if (form instanceof FormGroup) {
137
- // Object.keys(form.controls).forEach(key => {
138
- // const control = form.controls[key];
139
- // // const displayName = key.charAt(0).toUpperCase() + key.slice(1);
140
- // const displayName = key;
141
- // const fullKey = prefix ? `${prefix}.${displayName}` : displayName;
142
- // if (control instanceof FormControl) {
143
- // validationStatus[fullKey] = control.valid;
144
- // } else if (control instanceof FormArray) {
145
- // traverseForm(control, fullKey);
146
- // } else if (control instanceof FormGroup) {
147
- // traverseForm(control, fullKey);
148
- // }
149
- // });
150
- // } else if (form instanceof FormArray) {
151
- // form.controls.forEach((control, index) => {
152
- // const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;
153
- // if (control instanceof FormControl) {
154
- // validationStatus[fullKey] = control.valid;
155
- // } else if (control instanceof FormArray) {
156
- // traverseForm(control, fullKey);
157
- // } else if (control instanceof FormGroup) {
158
- // traverseForm(control, fullKey);
159
- // }
160
- // });
161
- // }
162
- // };
163
- // traverseForm(formEntity);
164
- // return validationStatus;
165
- // }
166
- /**获取表单验证状态 */
167
- // getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
168
- // const validationStatus: { [key: string]: any } = {};
169
- // const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
170
- // //检查form是否为FormGroup还是formArray,如果是FormGroup则继续遍历,如果是FormArray则遍历FormArray
171
- // if (form instanceof FormGroup) {
172
- // } else if (form instanceof FormArray) {
173
- // }
174
- // }
175
- // traverseForm(formEntity);
176
- // return validationStatus
177
- // }
178
180
  /**提交 */
179
181
  save() {
180
182
  this.cultureInput.enable();
@@ -204,7 +206,10 @@ export class EditComponent {
204
206
  }))
205
207
  .subscribe(res => {
206
208
  this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
207
- this.backTo();
209
+ this._LocationBackService.backTo({
210
+ url: `/cms/admin/entries`,
211
+ replenish: '/create'
212
+ });
208
213
  this._updateListService.updateList();
209
214
  });
210
215
  }
@@ -241,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
241
246
  type: ViewChild,
242
247
  args: ['submitclick', { static: true }]
243
248
  }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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UUFBUSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2FBQ3JDO1NBQ0Ysb0pDNUJILGlxQkFVQTs7MkZEb0JhLGFBQWE7a0JBWHpCLFNBQVM7K0JBQ0UsVUFBVSxhQUdUO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFFBQVEsRUFBRSxhQUFhLENBQUMsWUFBWTt5QkFDckM7cUJBQ0Y7OEJBYzJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC91c2UtbGlmZWN5Y2xlLWludGVyZmFjZSAqL1xuXG5pbXBvcnQgeyBFWFRFTlNJT05TX0lERU5USUZJRVIgfSBmcm9tICdAYWJwL25nLmNvbXBvbmVudHMvZXh0ZW5zaWJsZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbi8vIGltcG9ydCB7IEVudHJ5QWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvYWRtaW4vZW50cmllcyc7XG5pbXBvcnQgeyBFQ21zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgVXBkYXRlTGlzdFNlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVPclVwZGF0ZUVudHJ5SW5wdXRCYXNlIH0gZnJvbSAnLi9jcmVhdGUtb3ItdXBkYXRlLWVudHJ5LWlucHV0LWJhc2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50cnlBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9lbnRyaWVzJztcbmltcG9ydCB7IENsYXNzaWNFZGl0b3IsIEVzc2VudGlhbHMsIFBhcmFncmFwaCwgQm9sZCwgSXRhbGljIH0gZnJvbSAnY2tlZGl0b3I1JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY21zLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRVhURU5TSU9OU19JREVOVElGSUVSLFxuICAgICAgdXNlVmFsdWU6IEVDbXNDb21wb25lbnQuRW50cmllc19FZGl0LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSBfdXBkYXRlTGlzdFNlcnZpY2UgPSBpbmplY3QoVXBkYXRlTGlzdFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ZXIgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xuICBwdWJsaWMgX2xvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgX0VudHJ5QWRtaW5TZXJ2aWNlID0gaW5qZWN0KEVudHJ5QWRtaW5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfTG9jYWxpemF0aW9uU2VydmljZSA9IGluamVjdChMb2NhbGl6YXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfVmFsaWRhdG9yc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdG9yc1NlcnZpY2UpO1xuICBwcml2YXRlIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICAvKirooajljZXpqozor4HnirbmgIFcbiAgICoge1xuICAgKiAgdGl0bGU6dHJ1ZSxcbiAgICogfVxuICAgKi9cbiAgZm9ybVZhbGlkYXRpb246IGFueSA9ICcnO1xuICAvKirooajljZXlrp7kvZMgKi9cbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICAvKiror63oqIAgKi9cbiAgY3VsdHVyZU5hbWU6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67nsbvlnotpZCAqL1xuICBlbnRyeVR5cGVJZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKueJiOWdl2lkICovXG4gIHNlY3Rpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebrueJiOacrGlkICovXG4gIGVudHJ5VmVyc2lvbklkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uuaWQgKi9cbiAgZW50cmllSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67kv6Hmga8gKi9cbiAgZW50cnlJbmZvOiBhbnkgPSAnJztcblxuICAvKirmmK/lkKbojYnnqL/mjqfku7YqL1xuICBnZXQgZHJhZnRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRW50aXR5Py5nZXQoJ2RyYWZ0JykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cbiAgLyoq6K+t6KiA5o6n5Lu2ICovXG4gIGdldCBjdWx0dXJlSW5wdXQoKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnY3VsdHVyZScpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XG4gICAgdGhpcy5lbnRyaWVJZCA9IHBhcmFtcy5lbnRyaWVJZDtcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB0aGlzLmZiLmdyb3VwKG5ldyBDcmVhdGVPclVwZGF0ZUVudHJ5SW5wdXRCYXNlKCkpO1xuICAgIGF3YWl0IHRoaXMuZ2V0RW50cnlJbmZvKCk7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQucGF0Y2hWYWx1ZSh0aGlzLmN1bHR1cmVOYW1lKTtcbiAgfVxuICAvKirojrflj5bmnaHnm67kv6Hmga8gKi9cbiAgZ2V0RW50cnlJbmZvKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRW50cnlBZG1pblNlcnZpY2UuZ2V0KHRoaXMuZW50cmllSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLmN1bHR1cmVOYW1lID0gcmVzLmN1bHR1cmU7XG4gICAgICAgIHRoaXMuZW50cnlUeXBlSWQgPSByZXMuZW50cnlUeXBlSWQ7XG4gICAgICAgIHRoaXMuc2VjdGlvbklkID0gcmVzLnNlY3Rpb25JZDtcbiAgICAgICAgdGhpcy5lbnRyeUluZm8gPSByZXM7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoq5pi+56S65p2h55uu57G75Z6L5L+h5oGvICovXG4gIHNob3dFbnRyeVR5cGVJbmZvOiBhbnkgPSAnJztcbiAgLyoq5Y+N6aaI5a2Q57qn6aG16Z2i5L+h5oGvICovXG4gIF9mZWVkYmFja0NoaWxkSW5mbyhldmVudCkge1xuICAgIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8gPSBldmVudD8uc2hvd0VudHJ5VHlwZSB8fCAnJztcbiAgfVxuICAvLyAvKirlvZPov5Tlm57nu5PmnpzkuLp0cnVl5pe26KGo56S65pyq6YCa6L+H6aqM6K+BICovXG4gIGlzQ2hlY2tGb3JtQ21zKGlucHV0LCBtb2R1bGUpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgaWYgKGlucHV0W2tleV0gPT09IGZhbHNlKSB7XG4gICAgICAgIGxldCBpbmZvID0gYGA7XG4gICAgICAgIC8v5qOA5p+la2V55Lit5piv5ZCm5ZCr5pyJRXh0cmFQcm9wZXJ0aWVzLlxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdleHRyYVByb3BlcnRpZXMuJykpIHtcbiAgICAgICAgICBjb25zdCBhcnIgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBrZXlOYW1lID0gYXJyWzFdO1xuICAgICAgICAgIC8vIGlmIChrZXlOYW1lLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICAvLyAgIC8v5L2/55So5q2j5YiZ5o+Q5Y+Wa2V5TmFtZeS4rVtd5Lit55qE5pWw5a2X5LiL5qCHLOW5tuS4lOi9rOWMluS4uuaVsOWtl+exu+Wei++8jOW5tuS4lOWOu+aOiWtleU5hbWXkuK3nmoRbKl1cbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnIgPSBrZXlOYW1lLm1hdGNoKC9cXGQrL2cpO1xuICAgICAgICAgIC8vICAgY29uc3Qga2V5TmFtZUFyck51bSA9IGtleU5hbWVBcnIubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnJOdW1TdHIgPSBrZXlOYW1lQXJyTnVtLmpvaW4oJy4nKTtcblxuICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+WwhmtleU5hbWXnmoTpppblrZfmr43ovazkuLrlsI/lhplcbiAgICAgICAgICAgIGNvbnN0IGtleU5hbWVMb3dlciA9IGtleU5hbWU7XG4gICAgICAgICAgICAvLyBjb25zdCBrZXlOYW1lTG93ZXIgPSBrZXlOYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsga2V5TmFtZS5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dFbnRyeVR5cGVJbmZvICYmIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8uZmllbGRUYWJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8uZmllbGRUYWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBpdGVtLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpZWxkLm5hbWUgPT0ga2V5TmFtZUxvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluZm8gPSBgXCIke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgJHttb2R1bGV9Ojoke2l0ZW0ubmFtZX3kuIvnmoQke2VsLmZpZWxkLmRpc3BsYXlOYW1lfeWtl+autWApfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGAke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICBgJHttb2R1bGV9OjpUaGV7MX1GaWVsZFVuZGVyVGhlezB9VEFCYCxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgZWwuZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gICAgICAgICAgaW5mbyA9IGBcIiR7dGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGAke21vZHVsZX06OiR7ZGlzcGxheU5hbWV9YCl9XCIgYDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvID0gaW5mbyArIHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RWYWxpZC5gKTtcbiAgICAgICAgLy/kvb/nlKhhYnDlpJror63oqIDmj5DnpLpcbiAgICAgICAgdGhpcy50b2FzdGVyLndhcm4oaW5mbyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyAvKirojrflj5booajljZXmiYDmnInlrZfmrrXmmK/lkKbpgJrov4fpqozor4EgKi9cbiAgLy8gZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXMoZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIC8vICAgY29uc3QgdmFsaWRhdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8vICAgLy8g6YCS5b2S6YGN5Y6G6KGo5Y2V57uE5ZKM6KGo5Y2V5o6n5Lu26ZuG5ZCIXG4gIC8vICAgY29uc3QgdHJhdmVyc2VGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgcHJlZml4ID0gJycpID0+IHtcbiAgLy8gICAgIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gIC8vICAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xuICAvLyAgICAgICAgIC8vIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAvLyAgICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5O1xuICAvLyAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9LiR7ZGlzcGxheU5hbWV9YCA6IGRpc3BsYXlOYW1lO1xuICAvLyAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgLy8gICAgICAgICAgIHZhbGlkYXRpb25TdGF0dXNbZnVsbEtleV0gPSBjb250cm9sLnZhbGlkO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9IGVsc2UgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgLy8gICAgICAgZm9ybS5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9WyR7aW5kZXh9XWAgOiBgWyR7aW5kZXh9XWA7XG4gIC8vICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAvLyAgICAgICAgICAgdmFsaWRhdGlvblN0YXR1c1tmdWxsS2V5XSA9IGNvbnRyb2wudmFsaWQ7XG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gIC8vICAgICAgICAgICB0cmF2ZXJzZUZvcm0oY29udHJvbCwgZnVsbEtleSk7XG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gIC8vICAgICAgICAgICB0cmF2ZXJzZUZvcm0oY29udHJvbCwgZnVsbEtleSk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgIH1cbiAgLy8gICB9O1xuXG4gIC8vICAgdHJhdmVyc2VGb3JtKGZvcm1FbnRpdHkpO1xuXG4gIC8vICAgcmV0dXJuIHZhbGlkYXRpb25TdGF0dXM7XG4gIC8vIH1cblxuICAvKirojrflj5booajljZXpqozor4HnirbmgIEgKi9cbiAgLy8gZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXMoZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIC8vICAgY29uc3QgdmFsaWRhdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8vICAgY29uc3QgdHJhdmVyc2VGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgcHJlZml4ID0gJycpID0+IHtcbiAgLy8gICAgIC8v5qOA5p+lZm9ybeaYr+WQpuS4ukZvcm1Hcm91cOi/mOaYr2Zvcm1BcnJheSzlpoLmnpzmmK9Gb3JtR3JvdXDliJnnu6fnu63pgY3ljoYs5aaC5p6c5pivRm9ybUFycmF55YiZ6YGN5Y6GRm9ybUFycmF5XG4gIC8vICAgICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBcbiAgLy8gICAgIH0gZWxzZSBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICBcbiAgLy8gICAgIH0gXG5cbiAgLy8gICB9XG4gIC8vICAgdHJhdmVyc2VGb3JtKGZvcm1FbnRpdHkpO1xuICAvLyAgIHJldHVybiB2YWxpZGF0aW9uU3RhdHVzXG4gIC8vIH1cblxuICAvKirmj5DkuqQgKi9cbiAgc2F2ZSgpIHtcbiAgICB0aGlzLmN1bHR1cmVJbnB1dC5lbmFibGUoKTtcbiAgICB0aGlzLmRyYWZ0SW5wdXQucGF0Y2hWYWx1ZSh0aGlzLmRyYWZ0VmFsdWUgfHwgZmFsc2UpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5mb3JtRW50aXR5Py52YWx1ZTtcbiAgICBpbnB1dC5jdWx0dXJlID0gdGhpcy5jdWx0dXJlTmFtZTtcbiAgICBpbnB1dC5wdWJsaXNoVGltZSA9IG5ldyBEYXRlKFxuICAgICAgbmV3IERhdGUoaW5wdXQucHVibGlzaFRpbWUpLmdldFRpbWUoKSArIDggKiA2MCAqIDYwICogMTAwMCxcbiAgICApLnRvSVNPU3RyaW5nKCk7XG4gICAgaW5wdXQuY29uY3VycmVuY3lTdGFtcCA9IHRoaXMuZW50cnlJbmZvLmNvbmN1cnJlbmN5U3RhbXA7XG4gICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKHRoaXMuZm9ybUVudGl0eSk7XG4gICAgLy8gaWYgKHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmlzQ2hlY2tGb3JtKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSl7XG4gICAgLy8gICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgLy8gICByZXR1cm4gdGhpcy5jdWx0dXJlSW5wdXQuZGlzYWJsZSgpO1xuICAgIC8vIH1cblxuICAgIC8vIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLmdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKHRoaXMuZm9ybUVudGl0eSk7XG4gICAgaWYgKHRoaXMuaXNDaGVja0Zvcm1DbXModGhpcy5mb3JtVmFsaWRhdGlvbiwgJ0NtcycpKSB7XG4gICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5jdWx0dXJlSW5wdXQuZGlzYWJsZSgpO1xuICAgIH1cbiAgICAvLyB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIC8vIHJldHVybiB0aGlzLmlzU3VibWl0PWZhbHNlO1xuICAgIGlmICghdGhpcy5mb3JtRW50aXR5LnZhbGlkKSByZXR1cm47XG4gICAgdGhpcy5fRW50cnlBZG1pblNlcnZpY2VcbiAgICAgIC51cGRhdGUodGhpcy5lbnRyeUluZm8uaWQsIGlucHV0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgdGhpcy5iYWNrVG8oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgfSk7XG4gIH1cbiAgaXNTdWJtaXQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgZHJhZnRWYWx1ZTogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKueCueWHu+aPkOS6pCAqL1xuICBjbGlja1N1Ym1pdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXQpIHJldHVybjtcbiAgICB0aGlzLmlzU3VibWl0ID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWZ0VmFsdWUgPSB0eXBlO1xuICAgIHRoaXMuY3VsdHVyZUlucHV0LmVuYWJsZSgpO1xuICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XG4gIH1cblxuICAvKirov5Tlm57kuIrkuIDpobUgKi9cbiAgYmFja1RvKCkge1xuICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgfVxufVxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInQ21zOjpFZGl0J3wgYWJwTG9jYWxpemF0aW9uXCIgW3Rvb2xiYXJdPVwidHJ1ZVwiPlxuICAgIDxmb3JtIGNsYXNzPVwicm93IGctMyBuZWVkcy12YWxpZGF0aW9uXCJcbiAgICAgICAgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCIgIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiICAoc3VibWl0KT1cInNhdmUoKVwiID5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1FbnRpdHkmJmVudHJ5SW5mb1wiPlxuICAgICAgICAgICAgICAgIDxjbXMtY3JlYXRlLW9yLWVkaXQtZW50cmllcyAgW3NlY3Rpb25JZF09XCJzZWN0aW9uSWRcIiBbZW50cnlUeXBlSWRdPVwiZW50cnlUeXBlSWRcIiBbaXNFZGl0XT1cInRydWVcIiBbc2VsZWN0XT1cImVudHJ5SW5mb1wiICAoZmVlZGJhY2tDaGlsZEluZm8pPVwiX2ZlZWRiYWNrQ2hpbGRJbmZvKCRldmVudClcIiAgW2VudGl0eV09XCJmb3JtRW50aXR5XCI+PC9jbXMtY3JlYXRlLW9yLWVkaXQtZW50cmllcz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgIDwvZm9ybT5cbjwvYWJwLXBhZ2U+XG4iXX0=
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUs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QUUsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVztJQUNYLE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7OEdBck9VLGFBQWE7a0dBQWIsYUFBYSxtQ0FQYjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLFFBQVEsRUFBRSxhQUFhLENBQUMsWUFBWTthQUNyQztTQUNGLG9KQzVCSCxpcUJBVUE7OzJGRG9CYSxhQUFhO2tCQVh6QixTQUFTOytCQUNFLFVBQVUsYUFHVDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFlBQVk7eUJBQ3JDO3FCQUNGOzhCQWMyQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdXNlLWxpZmVjeWNsZS1pbnRlcmZhY2UgKi9cblxuaW1wb3J0IHsgRVhURU5TSU9OU19JREVOVElGSUVSIH0gZnJvbSAnQGFicC9uZy5jb21wb25lbnRzL2V4dGVuc2libGUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IERhdGVQaXBlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4vLyBpbXBvcnQgeyBFbnRyeUFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3h5L2FkbWluL2VudHJpZXMnO1xuaW1wb3J0IHsgRUNtc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExvY2F0aW9uQmFja1NlcnZpY2UsIFVwZGF0ZUxpc3RTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgQ3JlYXRlT3JVcGRhdGVFbnRyeUlucHV0QmFzZSB9IGZyb20gJy4vY3JlYXRlLW9yLXVwZGF0ZS1lbnRyeS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IFZhbGlkYXRvcnNTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudHJ5QWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vZW50cmllcyc7XG5pbXBvcnQgeyBDbGFzc2ljRWRpdG9yLCBFc3NlbnRpYWxzLCBQYXJhZ3JhcGgsIEJvbGQsIEl0YWxpYyB9IGZyb20gJ2NrZWRpdG9yNSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Ntcy1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVYVEVOU0lPTlNfSURFTlRJRklFUixcbiAgICAgIHVzZVZhbHVlOiBFQ21zQ29tcG9uZW50LkVudHJpZXNfRWRpdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgX3VwZGF0ZUxpc3RTZXJ2aWNlID0gaW5qZWN0KFVwZGF0ZUxpc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdGVyID0gaW5qZWN0KFRvYXN0ZXJTZXJ2aWNlKTtcbiAgcHVibGljIF9sb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9FbnRyeUFkbWluU2VydmljZSA9IGluamVjdChFbnRyeUFkbWluU2VydmljZSk7XG4gIHByaXZhdGUgX0xvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgX1ZhbGlkYXRvcnNTZXJ2aWNlID0gaW5qZWN0KFZhbGlkYXRvcnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG5cbiAgLyoq6I635Y+W5o+Q5Lqk5oyJ6ZKu5pu/6Lqr77yM55So5LqO55yf5a6e6Kem5Y+R6KGo5Y2V5o+Q5LqkICovXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XG5cbiAgLyoq6KGo5Y2V6aqM6K+B54q25oCBXG4gICAqIHtcbiAgICogIHRpdGxlOnRydWUsXG4gICAqIH1cbiAgICovXG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcbiAgLyoq6KGo5Y2V5a6e5L2TICovXG4gIGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbiAgLyoq6K+t6KiAICovXG4gIGN1bHR1cmVOYW1lOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6LaWQgKi9cbiAgZW50cnlUeXBlSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirniYjlnZdpZCAqL1xuICBzZWN0aW9uSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67niYjmnKxpZCAqL1xuICBlbnRyeVZlcnNpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebrmlkICovXG4gIGVudHJpZUlkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu5L+h5oGvICovXG4gIGVudHJ5SW5mbzogYW55ID0gJyc7XG5cbiAgLyoq5piv5ZCm6I2J56i/5o6n5Lu2Ki9cbiAgZ2V0IGRyYWZ0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUVudGl0eT8uZ2V0KCdkcmFmdCcpIGFzIEZvcm1Db250cm9sO1xuICB9XG4gIC8qKuivreiogOaOp+S7tiAqL1xuICBnZXQgY3VsdHVyZUlucHV0KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRW50aXR5Py5nZXQoJ2N1bHR1cmUnKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgIHRoaXMuZW50cmllSWQgPSBwYXJhbXMuZW50cmllSWQ7XG4gICAgdGhpcy5mb3JtRW50aXR5ID0gdGhpcy5mYi5ncm91cChuZXcgQ3JlYXRlT3JVcGRhdGVFbnRyeUlucHV0QmFzZSgpKTtcbiAgICBhd2FpdCB0aGlzLmdldEVudHJ5SW5mbygpO1xuICAgIHRoaXMuY3VsdHVyZUlucHV0LnBhdGNoVmFsdWUodGhpcy5jdWx0dXJlTmFtZSk7XG4gIH1cbiAgLyoq6I635Y+W5p2h55uu5L+h5oGvICovXG4gIGdldEVudHJ5SW5mbygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0VudHJ5QWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJpZUlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5jdWx0dXJlTmFtZSA9IHJlcy5jdWx0dXJlO1xuICAgICAgICB0aGlzLmVudHJ5VHlwZUlkID0gcmVzLmVudHJ5VHlwZUlkO1xuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHJlcy5zZWN0aW9uSWQ7XG4gICAgICAgIHRoaXMuZW50cnlJbmZvID0gcmVzO1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuaYvuekuuadoeebruexu+Wei+S/oeaBryAqL1xuICBzaG93RW50cnlUeXBlSW5mbzogYW55ID0gJyc7XG4gIC8qKuWPjemmiOWtkOe6p+mhtemdouS/oeaBryAqL1xuICBfZmVlZGJhY2tDaGlsZEluZm8oZXZlbnQpIHtcbiAgICB0aGlzLnNob3dFbnRyeVR5cGVJbmZvID0gZXZlbnQ/LnNob3dFbnRyeVR5cGUgfHwgJyc7XG4gIH1cbiAgLy8gLyoq5b2T6L+U5Zue57uT5p6c5Li6dHJ1ZeaXtuihqOekuuacqumAmui/h+mqjOivgSAqL1xuICBpc0NoZWNrRm9ybUNtcyhpbnB1dCwgbW9kdWxlKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgIGlmIChpbnB1dFtrZXldID09PSBmYWxzZSkge1xuICAgICAgICBsZXQgaW5mbyA9IGBgO1xuICAgICAgICAvL+ajgOafpWtleeS4reaYr+WQpuWQq+aciUV4dHJhUHJvcGVydGllcy5cbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnZXh0cmFQcm9wZXJ0aWVzLicpKSB7XG4gICAgICAgICAgY29uc3QgYXJyID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgY29uc3Qga2V5TmFtZSA9IGFyclsxXTtcbiAgICAgICAgICAvLyBpZiAoa2V5TmFtZS5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgLy8gICAvL+S9v+eUqOato+WImeaPkOWPlmtleU5hbWXkuK1bXeS4reeahOaVsOWtl+S4i+aghyzlubbkuJTovazljJbkuLrmlbDlrZfnsbvlnovvvIzlubbkuJTljrvmjolrZXlOYW1l5Lit55qEWypdXG4gICAgICAgICAgLy8gICBjb25zdCBrZXlOYW1lQXJyID0ga2V5TmFtZS5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnJOdW0gPSBrZXlOYW1lQXJyLm1hcChpdGVtID0+IE51bWJlcihpdGVtKSk7XG4gICAgICAgICAgLy8gICBjb25zdCBrZXlOYW1lQXJyTnVtU3RyID0ga2V5TmFtZUFyck51bS5qb2luKCcuJyk7XG5cbiAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgLy/lsIZrZXlOYW1l55qE6aaW5a2X5q+N6L2s5Li65bCP5YaZXG4gICAgICAgICAgICBjb25zdCBrZXlOYW1lTG93ZXIgPSBrZXlOYW1lO1xuICAgICAgICAgICAgLy8gY29uc3Qga2V5TmFtZUxvd2VyID0ga2V5TmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtleU5hbWUuc2xpY2UoMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RW50cnlUeXBlSW5mbyAmJiB0aGlzLnNob3dFbnRyeVR5cGVJbmZvLmZpZWxkVGFicy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNob3dFbnRyeVR5cGVJbmZvLmZpZWxkVGFicykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgaXRlbS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbC5maWVsZC5uYW1lID09IGtleU5hbWVMb3dlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmZvID0gYFwiJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYCR7bW9kdWxlfTo6JHtpdGVtLm5hbWV95LiL55qEJHtlbC5maWVsZC5kaXNwbGF5TmFtZX3lrZfmrrVgKX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSBgJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bW9kdWxlfTo6VGhlezF9RmllbGRVbmRlclRoZXswfVRBQmAsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGVsLmZpZWxkLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICApfWA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAgICAgICAgIGluZm8gPSBgXCIke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgJHttb2R1bGV9Ojoke2Rpc3BsYXlOYW1lfWApfVwiIGA7XG4gICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbmZvJywgaW5mbyxpbnB1dFtrZXldKTtcbiAgICAgICAgaW5mbyA9IGluZm8gKyB0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFZhbGlkYXRpb246OlRoaXNGaWVsZElzTm90VmFsaWQuYCk7XG4gICAgICAgIC8v5L2/55SoYWJw5aSa6K+t6KiA5o+Q56S6XG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuKGluZm8pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gLyoq6I635Y+W6KGo5Y2V5omA5pyJ5a2X5q615piv5ZCm6YCa6L+H6aqM6K+BICovXG4gIC8vIGdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAvLyAgIGNvbnN0IHZhbGlkYXRpb25TdGF0dXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyAgIC8vIOmAkuW9kumBjeWOhuihqOWNlee7hOWSjOihqOWNleaOp+S7tumbhuWQiFxuICAvLyAgIGNvbnN0IHRyYXZlcnNlRm9ybSA9IChmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksIHByZWZpeCA9ICcnKSA9PiB7XG4gIC8vICAgICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uY29udHJvbHNba2V5XTtcbiAgLy8gICAgICAgICAvLyBjb25zdCBkaXNwbGF5TmFtZSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcbiAgLy8gICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGtleTtcbiAgLy8gICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS4ke2Rpc3BsYXlOYW1lfWAgOiBkaXNwbGF5TmFtZTtcbiAgLy8gICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gIC8vICAgICAgICAgICB2YWxpZGF0aW9uU3RhdHVzW2Z1bGxLZXldID0gY29udHJvbC52YWxpZDtcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgLy8gICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgLy8gICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgfSBlbHNlIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gIC8vICAgICAgIGZvcm0uY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaW5kZXgpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fVske2luZGV4fV1gIDogYFske2luZGV4fV1gO1xuICAvLyAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgLy8gICAgICAgICAgIHZhbGlkYXRpb25TdGF0dXNbZnVsbEtleV0gPSBjb250cm9sLnZhbGlkO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9XG4gIC8vICAgfTtcblxuICAvLyAgIHRyYXZlcnNlRm9ybShmb3JtRW50aXR5KTtcblxuICAvLyAgIHJldHVybiB2YWxpZGF0aW9uU3RhdHVzO1xuICAvLyB9XG5cbiAgLyoq6I635Y+W6KGo5Y2V6aqM6K+B54q25oCBICovXG4gIC8vIGdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAvLyAgIGNvbnN0IHZhbGlkYXRpb25TdGF0dXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyAgIGNvbnN0IHRyYXZlcnNlRm9ybSA9IChmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksIHByZWZpeCA9ICcnKSA9PiB7XG4gIC8vICAgICAvL+ajgOafpWZvcm3mmK/lkKbkuLpGb3JtR3JvdXDov5jmmK9mb3JtQXJyYXks5aaC5p6c5pivRm9ybUdyb3Vw5YiZ57un57ut6YGN5Y6GLOWmguaenOaYr0Zvcm1BcnJheeWImemBjeWOhkZvcm1BcnJheVxuICAvLyAgICAgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgXG4gIC8vICAgICB9IGVsc2UgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgXG4gIC8vICAgICB9IFxuXG4gIC8vICAgfVxuICAvLyAgIHRyYXZlcnNlRm9ybShmb3JtRW50aXR5KTtcbiAgLy8gICByZXR1cm4gdmFsaWRhdGlvblN0YXR1c1xuICAvLyB9XG5wcml2YXRlIF9Mb2NhdGlvbkJhY2tTZXJ2aWNlPWluamVjdChMb2NhdGlvbkJhY2tTZXJ2aWNlKTtcbiAgLyoq5o+Q5LqkICovXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy5kcmFmdElucHV0LnBhdGNoVmFsdWUodGhpcy5kcmFmdFZhbHVlIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZm9ybUVudGl0eT8udmFsdWU7XG4gICAgaW5wdXQuY3VsdHVyZSA9IHRoaXMuY3VsdHVyZU5hbWU7XG4gICAgaW5wdXQucHVibGlzaFRpbWUgPSBuZXcgRGF0ZShcbiAgICAgIG5ldyBEYXRlKGlucHV0LnB1Ymxpc2hUaW1lKS5nZXRUaW1lKCkgKyA4ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgKS50b0lTT1N0cmluZygpO1xuICAgIGlucHV0LmNvbmN1cnJlbmN5U3RhbXAgPSB0aGlzLmVudHJ5SW5mby5jb25jdXJyZW5jeVN0YW1wO1xuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIC8vIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnQ21zJykpe1xuICAgIC8vICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgIC8vICAgcmV0dXJuIHRoaXMuY3VsdHVyZUlucHV0LmRpc2FibGUoKTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIGlmICh0aGlzLmlzQ2hlY2tGb3JtQ21zKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSkge1xuICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuY3VsdHVyZUlucHV0LmRpc2FibGUoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRoaXMuZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXModGhpcy5mb3JtRW50aXR5KTtcbiAgICAvLyByZXR1cm4gdGhpcy5pc1N1Ym1pdD1mYWxzZTtcbiAgICBpZiAoIXRoaXMuZm9ybUVudGl0eS52YWxpZCkgcmV0dXJuO1xuICAgIHRoaXMuX0VudHJ5QWRtaW5TZXJ2aWNlXG4gICAgICAudXBkYXRlKHRoaXMuZW50cnlJbmZvLmlkLCBpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBBYnBVaTo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgIHRoaXMuX0xvY2F0aW9uQmFja1NlcnZpY2UuYmFja1RvKHtcbiAgICAgICAgICB1cmw6IGAvY21zL2FkbWluL2VudHJpZXNgLFxuICAgICAgICAgIHJlcGxlbmlzaDogJy9jcmVhdGUnIFxuICAgICAgICB9KVxuICAgICAgICB0aGlzLl91cGRhdGVMaXN0U2VydmljZS51cGRhdGVMaXN0KCk7XG4gICAgICB9KTtcbiAgfVxuICBpc1N1Ym1pdDogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICBkcmFmdFZhbHVlOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq54K55Ye75o+Q5LqkICovXG4gIGNsaWNrU3VibWl0KHR5cGUpIHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xuICAgIHRoaXMuZHJhZnRWYWx1ZSA9IHR5cGU7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy5zdWJtaXRjbGljaz8ubmF0aXZlRWxlbWVudD8uY2xpY2soKTtcbiAgfVxuXG4gIC8qKui/lOWbnuS4iuS4gOmhtSAqL1xuICBiYWNrVG8oKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG59XG4iLCI8YWJwLXBhZ2UgW3RpdGxlXT1cIidDbXM6OkVkaXQnfCBhYnBMb2NhbGl6YXRpb25cIiBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgPGZvcm0gY2xhc3M9XCJyb3cgZy0zIG5lZWRzLXZhbGlkYXRpb25cIlxuICAgICAgICBbY2xhc3NdPVwieyd3YXMtdmFsaWRhdGVkJzpmb3JtVmFsaWRhdGlvbn1cIiAgW2Zvcm1Hcm91cF09XCJmb3JtRW50aXR5XCIgIChzdWJtaXQpPVwic2F2ZSgpXCIgPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUVudGl0eSYmZW50cnlJbmZvXCI+XG4gICAgICAgICAgICAgICAgPGNtcy1jcmVhdGUtb3ItZWRpdC1lbnRyaWVzICBbc2VjdGlvbklkXT1cInNlY3Rpb25JZFwiIFtlbnRyeVR5cGVJZF09XCJlbnRyeVR5cGVJZFwiIFtpc0VkaXRdPVwidHJ1ZVwiIFtzZWxlY3RdPVwiZW50cnlJbmZvXCIgIChmZWVkYmFja0NoaWxkSW5mbyk9XCJfZmVlZGJhY2tDaGlsZEluZm8oJGV2ZW50KVwiICBbZW50aXR5XT1cImZvcm1FbnRpdHlcIj48L2Ntcy1jcmVhdGUtb3ItZWRpdC1lbnRyaWVzPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgPC9mb3JtPlxuPC9hYnAtcGFnZT5cbiJdfQ==