@wertzui/ngx-restworld-client 4.2.2 → 4.2.5

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.
@@ -184,25 +184,20 @@ export class RESTworldEditViewComponent {
184
184
  }
185
185
  this.isLoading = false;
186
186
  }
187
- async setInitialSelectedOptionsElementsForTemplates(templates) {
188
- return Promise.all(Object.values(templates)
189
- .map(template => this.setInitialSelectedOptionsElementsForTemplate(template)));
190
- }
191
- imageChanged(formControl, event) {
192
- const file = event.files[0];
193
- console.log(file);
194
- const reader = new FileReader();
195
- reader.onload = () => {
196
- const uri = reader.result;
197
- console.log(uri);
198
- formControl.setValue(uri);
199
- };
200
- reader.readAsDataURL(file);
187
+ async setInitialSelectedOptionsElementsForTemplates(templates, skipDefaultTemplate) {
188
+ await Promise.all(Object.entries(templates)
189
+ .filter(([name,]) => !skipDefaultTemplate || name !== 'default')
190
+ .map(([, template]) => this.setInitialSelectedOptionsElementsForTemplate(template)));
201
191
  }
202
192
  async setInitialSelectedOptionsElementsForTemplate(template) {
203
- return Promise.all(template.properties
193
+ const propertyPromises = template.properties
204
194
  .filter(property => property?.options?.link?.href)
205
- .map(property => this.setInitialSelectedOptionsElementForProperty(property)));
195
+ .map(property => this.setInitialSelectedOptionsElementForProperty(property));
196
+ const nestedTemplatePromised = template.properties
197
+ .filter(property => property?._templates)
198
+ .map(property => this.setInitialSelectedOptionsElementsForTemplates(property._templates, true));
199
+ const allPromises = propertyPromises.concat(nestedTemplatePromised);
200
+ await Promise.all(allPromises);
206
201
  }
207
202
  async setInitialSelectedOptionsElementForProperty(property) {
208
203
  const options = property?.options;
@@ -229,9 +224,20 @@ export class RESTworldEditViewComponent {
229
224
  return Promise.resolve({});
230
225
  }
231
226
  const formTemplates = Object.assign({}, ...formResponses.map(response => response.body._templates));
232
- await this.setInitialSelectedOptionsElementsForTemplates(formTemplates);
227
+ await this.setInitialSelectedOptionsElementsForTemplates(formTemplates, false);
233
228
  return formTemplates;
234
229
  }
230
+ imageChanged(formControl, event) {
231
+ const file = event.files[0];
232
+ console.log(file);
233
+ const reader = new FileReader();
234
+ reader.onload = () => {
235
+ const uri = reader.result;
236
+ console.log(uri);
237
+ formControl.setValue(uri);
238
+ };
239
+ reader.readAsDataURL(file);
240
+ }
235
241
  }
236
242
  RESTworldEditViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldEditViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.Location }, { token: i4.Router }, { token: i5.FormService }, { token: i6.ValdemortConfig }], target: i0.ɵɵFactoryTarget.Component });
237
243
  RESTworldEditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldEditViewComponent, selector: "rw-edit", inputs: { apiName: "apiName", uri: "uri" }, queries: [{ propertyName: "extraTabsRef", first: true, predicate: ["extraTabs"], descendants: true }, { propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true }, { propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true }, { propertyName: "inputOptionsRef", first: true, predicate: ["inputOptions"], descendants: true }, { propertyName: "inputHiddenRef", first: true, predicate: ["inputHidden"], descendants: true }, { propertyName: "inputTextRef", first: true, predicate: ["inputText"], descendants: true }, { propertyName: "inputTextareaRef", first: true, predicate: ["inputTextarea"], descendants: true }, { propertyName: "inputSearchRef", first: true, predicate: ["inputSearch"], descendants: true }, { propertyName: "inputTelRef", first: true, predicate: ["inputTel"], descendants: true }, { propertyName: "inputUrlRef", first: true, predicate: ["inputUrl"], descendants: true }, { propertyName: "inputEmailRef", first: true, predicate: ["inputEmail"], descendants: true }, { propertyName: "inputPasswordRef", first: true, predicate: ["inputPassword"], descendants: true }, { propertyName: "inputDateRef", first: true, predicate: ["inputDate"], descendants: true }, { propertyName: "inputMonthRef", first: true, predicate: ["inputMonth"], descendants: true }, { propertyName: "inputWeekRef", first: true, predicate: ["inputWeek"], descendants: true }, { propertyName: "inputTimeRef", first: true, predicate: ["inputTime"], descendants: true }, { propertyName: "inputDatetimeLocalRef", first: true, predicate: ["inputDatetimeLocal"], descendants: true }, { propertyName: "inputNumberRef", first: true, predicate: ["inputNumber"], descendants: true }, { propertyName: "inputRangeRef", first: true, predicate: ["inputRange"], descendants: true }, { propertyName: "inputColorRef", first: true, predicate: ["inputColor"], descendants: true }, { propertyName: "inputBoolRef", first: true, predicate: ["inputBool"], descendants: true }, { propertyName: "inputDatetimeOffsetRef", first: true, predicate: ["inputDatetimeOffset"], descendants: true }, { propertyName: "inputDurationRef", first: true, predicate: ["inputDuration"], descendants: true }, { propertyName: "inputImageRef", first: true, predicate: ["inputImage"], descendants: true }, { propertyName: "inputFileRef", first: true, predicate: ["inputFile"], descendants: true }, { propertyName: "inputDefaultRef", first: true, predicate: ["inputDefault"], descendants: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n</div>\r\n\r\n<p-tabView>\r\n\r\n <p-tabPanel *ngIf=\"isLoadingForTheFirstTime\" header=\"Loading\">\r\n <div *ngFor=\"let i of [1, 2, 3, 4, 5]\" class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel *ngFor=\"let item of templates | keyvalue\" [header]=\"item.value.title || item.key\" [disabled]=\"isLoading\">\r\n <form [formGroup]=\"formTabs[item.key]\" (ngSubmit)=\"submit(item.key, item.value, formTabs[item.key].value)\">\r\n <div class=\"blockable-container\">\r\n <div class=\"blockable-element\">\r\n <rw-form [formGroup]=\"formTabs[item.key]\" [template]=\"item.value\" [apiName]=\"apiName\"></rw-form>\r\n </div>\r\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\r\n <p-progressSpinner></p-progressSpinner>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <ng-template #defaultButtons>\r\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\" [disabled]=\"isLoading || !canSubmit(item.key)\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\" (click)=\"load()\" [disabled]=\"isLoading\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!resource || isLoading || !canDelete\"></button>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </p-tabPanel>\r\n\r\n <ng-template #defaultExtraTabs>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef || defaultExtraTabs\"></ng-container>\r\n\r\n</p-tabView>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:-moz-fit-content!important;max-width:fit-content!important}.blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"], components: [{ type: i7.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { type: i9.RestworldEditFormComponent, selector: "rw-form", inputs: ["formGroup", "template", "apiName"] }, { type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["style", "styleClass", "strokeWidth", "fill", "animationDuration"] }, { type: i11.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i12.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i14.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i15.Ripple, selector: "[pRipple]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "keyvalue": i3.KeyValuePipe } });
@@ -324,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
324
330
  type: ContentChild,
325
331
  args: ['inputDefault', { static: false }]
326
332
  }] } });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LXZpZXcvcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LXZpZXcvcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUEwRCxNQUFNLHlCQUF5QixDQUFDO0FBRy9HLE9BQU8sRUFBbUIsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVU3QyxNQUFNLE9BQU8sMEJBQTBCO0lBZ0pyQyxZQUNVLFFBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxlQUErQixFQUMvQixTQUFtQixFQUNuQixPQUFlLEVBQ2YsWUFBeUIsRUFDakMsZUFBZ0M7UUFOeEIsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsaUJBQVksR0FBWixZQUFZLENBQWE7UUEvSTNCLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFTM0Is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QUUsS0FBSyxFQUFFO2dCQUlyRCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJOUMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTdDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk3QyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJNUMsc0JBQXNCO3NCQURyQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdEQsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJaEQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTdDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvcGVydHlUeXBlLCBSZXNvdXJjZSwgVGVtcGxhdGUsIFRlbXBsYXRlcywgRm9ybXNSZXNvdXJjZSwgUHJvcGVydHkgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2JsZW0tZGV0YWlscyc7XHJcbmltcG9ydCB7IENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxkZW1vcnRDb25maWcgfSBmcm9tICduZ3gtdmFsZGVtb3J0JztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1lZGl0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZEVkaXRWaWV3Q29tcG9uZW50IHtcclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpIHtcclxuICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlcztcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGVtcGxhdGVzOiBUZW1wbGF0ZXMgPSB7fTtcclxuXHJcbiAgcHVibGljIGdldCBpc0xvYWRpbmdGb3JUaGVGaXJzdFRpbWUoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy50ZW1wbGF0ZXMpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmlzTG9hZGluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZm9ybVRhYnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybVRhYnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvcm1UYWJzOiB7IFtuYW1lOiBzdHJpbmddOiBGb3JtR3JvdXAgfSA9IHt9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBhcGlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBpTmFtZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXBpTmFtZT86IHN0cmluZztcclxuICAvL0BJbnB1dCgpXHJcbiAgLy9wdWJsaWMgc2V0IHJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgLy8gIHRoaXMuX3JlbCA9IHZhbHVlO1xyXG4gIC8vfVxyXG4gIC8vcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAvLyAgcmV0dXJuIHRoaXMuX3JlbDtcclxuICAvL31cclxuICAvL3ByaXZhdGUgX3JlbD86IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdXJpKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3VyaSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdXJpKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXJpO1xyXG4gIH1cclxuICBwcml2YXRlIF91cmk/OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jlc291cmNlPzogUmVzb3VyY2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZXQgY2FuU2F2ZSgpIHtcclxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucmVzb3VyY2U/Ll9saW5rc1tcInNhdmVcIl0/Lmxlbmd0aDtcclxuICAgIHJldHVybiBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPiAwO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNhbkRlbGV0ZSgpIHtcclxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucmVzb3VyY2U/Ll9saW5rc1tcImRlbGV0ZVwiXT8ubGVuZ3RoO1xyXG4gICAgcmV0dXJuIGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIGxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBjYW5TdWJtaXQodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1UYWJzW3RlbXBsYXRlTmFtZV07XHJcbiAgICByZXR1cm4gZm9ybSAmJiBmb3JtLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnZXh0cmFUYWJzJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgZXh0cmFUYWJzUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2J1dHRvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBidXR0b25zUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9uc1NpbmdsZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T3B0aW9uc1NpbmdsZVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnNNdWx0aXBsZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T3B0aW9uc011bHRpcGxlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T3B0aW9uc1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dEhpZGRlbicsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0SGlkZGVuUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0VGV4dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0VGV4dFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFRleHRhcmVhJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRUZXh0YXJlYVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFNlYXJjaCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0U2VhcmNoUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0VGVsJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRUZWxSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRVcmwnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dFVybFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dEVtYWlsJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRFbWFpbFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFBhc3N3b3JkJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRQYXNzd29yZFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dERhdGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dERhdGVSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRNb250aCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0TW9udGhSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRXZWVrJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRXZWVrUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0VGltZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0VGltZVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dERhdGV0aW1lTG9jYWwnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dERhdGV0aW1lTG9jYWxSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXROdW1iZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE51bWJlclJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFJhbmdlJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRSYW5nZVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dENvbG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRDb2xvclJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dEJvb2wnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dEJvb2xSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXREYXRldGltZU9mZnNldCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0RGF0ZXRpbWVPZmZzZXRSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXREdXJhdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0RHVyYXRpb25SZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRJbWFnZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0SW1hZ2VSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRGaWxlJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRGaWxlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0RGVmYXVsdCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0RGVmYXVsdFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NsaWVudHM6IFJFU1R3b3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXHJcbiAgICB2YWxkZW1vcnRDb25maWc6IFZhbGRlbW9ydENvbmZpZykge1xyXG4gICAgdmFsZGVtb3J0Q29uZmlnLmVycm9yQ2xhc3NlcyA9ICdwLWVycm9yIHRleHQtc20nO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRvb2x0aXAocmVzb3VyY2U6IFJlc291cmNlLCBrZXlzVG9FeGNsdWRlPzogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdG9vbHRpcCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlKVxyXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4gIShrZXkuc3RhcnRzV2l0aCgnXycpIHx8IFsnY3JlYXRlZEF0JywgJ2NyZWF0ZWRCeScsICdsYXN0Q2hhbmdlZEF0JywgJ2xhc3RDaGFuZ2VkQnknLCAndGltZXN0YW1wJ10uaW5jbHVkZXMoa2V5KSB8fCBrZXlzVG9FeGNsdWRlPy5pbmNsdWRlcyhrZXkpKSlcclxuICAgICAgLnJlZHVjZSgocHJldiwgW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gYCR7cHJldn0ke2luZGV4ID09PSAwID8gJycgOiAnXFxuJ30ke2tleX06ICR7UkVTVHdvcmxkRWRpdFZpZXdDb21wb25lbnQuanNvblN0cmluZ2lmeVdpdGhFbGlwc2lzKHZhbHVlKX1gLCAnJyk7XHJcblxyXG4gICAgcmV0dXJuIHRvb2x0aXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBqc29uU3RyaW5naWZ5V2l0aEVsaXBzaXModmFsdWU6IHVua25vd24pIHtcclxuICAgIGNvbnN0IG1heExlbmd0aCA9IDIwMDtcclxuICAgIGNvbnN0IGVuZCA9IDEwO1xyXG4gICAgY29uc3Qgc3RhcnQgPSBtYXhMZW5ndGggLSBlbmQgLSAyO1xyXG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgIGNvbnN0IHNob3J0ZW5lZCA9IGpzb24ubGVuZ3RoID4gbWF4TGVuZ3RoID8ganNvbi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgJ+KApicgKyBqc29uLnN1YnN0cmluZyhqc29uLmxlbmd0aCAtIGVuZCkgOiBqc29uO1xyXG5cclxuICAgIHJldHVybiBzaG9ydGVuZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSRVNUd29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN1Ym1pdCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgdGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtVmFsdWU6IHt9KSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGFyZ2V0QmVmb3JlU2F2ZSA9IHRlbXBsYXRlLnRhcmdldDtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLnN1Ym1pdCh0ZW1wbGF0ZSwgZm9ybVZhbHVlKTtcclxuXHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICBsZXQgc3VtbWFyeSA9ICdFcnJvcic7XHJcbiAgICAgICAgbGV0IGRldGFpbCA9ICdFcnJvciB3aGlsZSBzYXZpbmcgdGhlIHJlc291cmNlLic7XHJcbiAgICAgICAgaWYgKFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkpIHtcclxuICAgICAgICAgIGNvbnN0IHByb2JsZW1EZXRhaWxzID0gcmVzcG9uc2UuYm9keSBhcyBQcm9ibGVtRGV0YWlscztcclxuICAgICAgICAgIHN1bW1hcnkgPSBwcm9ibGVtRGV0YWlscy50aXRsZSB8fCBzdW1tYXJ5O1xyXG4gICAgICAgICAgZGV0YWlsID0gcHJvYmxlbURldGFpbHMuZGV0YWlsIHx8IGRldGFpbDtcclxuICAgICAgICAgIC8vIGRpc3BsYXkgdmFsaWRhdGlvbiBlcnJvcnNcclxuICAgICAgICAgIGlmIChwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybVRhYnNbdGVtcGxhdGVOYW1lXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBlcnJvcnNGb3JLZXldIG9mIE9iamVjdC5lbnRyaWVzKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KC9cXC58XFxbLykubWFwKGUgPT4gZS5yZXBsYWNlKFwiXVwiLCBcIlwiKSk7XHJcbiAgICAgICAgICAgICAgLy8gVGhlIHBhdGggbWlnaHQgc3RhcnQgd2l0aCBhICQsIGluZGljYXRpbmcgdGhlIHJvb3QuXHJcbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoWzBdID09PSAnJCcpXHJcbiAgICAgICAgICAgICAgICBwYXRoLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXRoLnJlZHVjZTxBYnN0cmFjdENvbnRyb2w+KFJFU1R3b3JsZEVkaXRWaWV3Q29tcG9uZW50LmdldFN1YkNvbnRyb2wsIGZvcm0pO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7IC4uLmZvcm1Db250cm9sLmVycm9ycywgLi4ueyByZW1vdGU6IGVycm9yc0ZvcktleSB9IH0pO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IHN1bW1hcnksIGRldGFpbDogZGV0YWlsLCBkYXRhOiByZXNwb25zZSwgbGlmZTogMTAwMDAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXNvdXJjZSA9IChyZXNwb25zZS5ib2R5IGFzIEZvcm1zUmVzb3VyY2UpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEFmdGVyU2F2ZSA9IHJlc3BvbnNlUmVzb3VyY2UuX3RlbXBsYXRlc1t0ZW1wbGF0ZU5hbWVdLnRhcmdldDtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NhdmVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIHNhdmVkLicgfSksXHJcbiAgICAgICAgICAxMDApO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0QmVmb3JlU2F2ZSAhPT0gdGFyZ2V0QWZ0ZXJTYXZlKSB7XHJcbiAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvZWRpdCcsIHRoaXMuYXBpTmFtZSwgcmVzcG9uc2VSZXNvdXJjZS5fbGlua3Muc2VsZlswXS5ocmVmXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgbGlmZTogMTAwMDAgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRTdWJDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aEVsZW1lbnQ6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcclxuICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHNbcGF0aEVsZW1lbnRdO1xyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIucGFyc2VJbnQocGF0aEVsZW1lbnQpO1xyXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbmRleCkpXHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnVyaSB8fCAhdGhpcy5yZXNvdXJjZSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5yZXNvdXJjZSwgdGhpcy5mb3JtVGFicy52YWx1ZSk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUodGhpcy5yZXNvdXJjZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KSxcclxuICAgICAgMTAwKTtcclxuXHJcbiAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnVyaSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0U2luZ2xlKHRoaXMudXJpKTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy5fdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRBbGxUZW1wbGF0ZXModGhpcy5fcmVzb3VyY2UpO1xyXG4gICAgICB0aGlzLl9mb3JtVGFicyA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cHNGcm9tVGVtcGxhdGVzKHRoaXMuX3RlbXBsYXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRzRm9yVGVtcGxhdGVzKHRlbXBsYXRlczogVGVtcGxhdGVzKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0ZW1wbGF0ZXMpXHJcbiAgICAgIC5tYXAodGVtcGxhdGUgPT4gdGhpcy5zZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zRWxlbWVudHNGb3JUZW1wbGF0ZSh0ZW1wbGF0ZSkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbWFnZUNoYW5nZWQoZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCBldmVudDogeyBmaWxlczogRmlsZVtdIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC5maWxlc1swXTtcclxuICAgIGNvbnNvbGUubG9nKGZpbGUpO1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVyaSA9IHJlYWRlci5yZXN1bHQ7XHJcbiAgICAgIGNvbnNvbGUubG9nKHVyaSk7XHJcbiAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHVyaSk7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50c0ZvclRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRlbXBsYXRlLnByb3BlcnRpZXNcclxuICAgICAgLmZpbHRlcihwcm9wZXJ0eSA9PiBwcm9wZXJ0eT8ub3B0aW9ucz8ubGluaz8uaHJlZilcclxuICAgICAgLm1hcChwcm9wZXJ0eSA9PiB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkocHJvcGVydHkpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkocHJvcGVydHk6IFByb3BlcnR5KSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gcHJvcGVydHk/Lm9wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zPy5saW5rPy5ocmVmKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGVtcGxhdGVkVXJpID0gb3B0aW9ucy5saW5rLmhyZWY7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGVxICR7cHJvcGVydHkudmFsdWV9YDtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0QnlVcmkodGVtcGxhdGVkVXJpLCB7ICRmaWx0ZXI6IGZpbHRlciwgJHRvcDogMTAgfSk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9IGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHRoZSBmaWx0ZXJlZCBpdGVtcy5gO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBtZXNzYWdlLCBkYXRhOiByZXNwb25zZSB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zID0gcmVzcG9uc2UuYm9keS5fZW1iZWRkZWQuaXRlbXM7XHJcbiAgICBvcHRpb25zLmlubGluZSA9IGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxUZW1wbGF0ZXMocmVzb3VyY2U6IFJlc291cmNlKTogUHJvbWlzZTxUZW1wbGF0ZXM+IHtcclxuICAgIGNvbnN0IGZvcm1SZXNwb25zZXMgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldEFsbEZvcm1zKHJlc291cmNlKTtcclxuXHJcbiAgICBjb25zdCBmYWlsZWRSZXNwb25zZXMgPSBmb3JtUmVzcG9uc2VzLmZpbHRlcihyZXNwb25zZSA9PiAhcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSk7XHJcbiAgICBpZiAoZmFpbGVkUmVzcG9uc2VzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIGZhaWxlZFJlc3BvbnNlcykge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZSBmcm9tIHRoZSBBUEkuJywgZGF0YTogcmVzcG9uc2UgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm9ybVRlbXBsYXRlcyA9IE9iamVjdC5hc3NpZ24oe30sIC4uLmZvcm1SZXNwb25zZXMubWFwKHJlc3BvbnNlID0+IChyZXNwb25zZS5ib2R5IGFzIEZvcm1zUmVzb3VyY2UpLl90ZW1wbGF0ZXMpKSBhcyBUZW1wbGF0ZXM7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zRWxlbWVudHNGb3JUZW1wbGF0ZXMoZm9ybVRlbXBsYXRlcyk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1UZW1wbGF0ZXM7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGgxPkVkaXQgcmVzb3VyY2U8L2gxPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxwLXRhYlZpZXc+XHJcblxyXG4gIDxwLXRhYlBhbmVsICpuZ0lmPVwiaXNMb2FkaW5nRm9yVGhlRmlyc3RUaW1lXCIgaGVhZGVyPVwiTG9hZGluZ1wiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBbMSwgMiwgMywgNCwgNV1cIiBjbGFzcz1cImdyaWQgZmllbGRcIj5cclxuICAgICAgPHAtc2tlbGV0b24gY2xhc3M9XCJjb2wtMTIgbWItMiBtZDpjb2wtMiBtZDptYi0wXCIgaGVpZ2h0PVwiMzlweFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTBcIj5cclxuICAgICAgICA8cC1za2VsZXRvbiBjbGFzcz1cInctZnVsbFwiIGhlaWdodD1cIjM5cHhcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cclxuICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMTIwcHhcIiBoZWlnaHQ9XCIzOXB4XCIgY2xhc3M9XCJteC0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgPHAtc2tlbGV0b24gd2lkdGg9XCIxMjBweFwiIGhlaWdodD1cIjM5cHhcIiBjbGFzcz1cIm14LTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEyMHB4XCIgaGVpZ2h0PVwiMzlweFwiIGNsYXNzPVwibXgtMlwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3AtdGFiUGFuZWw+XHJcblxyXG4gIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRlbXBsYXRlcyB8IGtleXZhbHVlXCIgW2hlYWRlcl09XCJpdGVtLnZhbHVlLnRpdGxlIHx8IGl0ZW0ua2V5XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtVGFic1tpdGVtLmtleV1cIiAobmdTdWJtaXQpPVwic3VibWl0KGl0ZW0ua2V5LCBpdGVtLnZhbHVlLCBmb3JtVGFic1tpdGVtLmtleV0udmFsdWUpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1lbGVtZW50XCI+XHJcbiAgICAgICAgICA8cnctZm9ybSBbZm9ybUdyb3VwXT1cImZvcm1UYWJzW2l0ZW0ua2V5XVwiIFt0ZW1wbGF0ZV09XCJpdGVtLnZhbHVlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLW92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyPjwvcC1wcm9ncmVzc1NwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJzdWJtaXRcIiBsYWJlbD1cIlNhdmVcIiBpY29uPVwiZmFyIGZhLXNhdmVcIiBjbGFzcz1cIm14LTIgcC1idXR0b24tc3VjY2Vzc1wiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgIWNhblN1Ym1pdChpdGVtLmtleSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJSZWxvYWRcIiBpY29uPVwiZmFzIGZhLXJlZG9cIiBjbGFzcz1cIm14LTIgcC1idXR0b24taW5mb1wiIChjbGljayk9XCJsb2FkKClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiRGVsZXRlXCIgaWNvbj1cImZhciBmYS10cmFzaC1hbHRcIiBjbGFzcz1cIm1sLTIgcC1idXR0b24tZGFuZ2VyXCIgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKClcIiBbZGlzYWJsZWRdPVwiIXJlc291cmNlIHx8IGlzTG9hZGluZyB8fCAhY2FuRGVsZXRlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVmIHx8IGRlZmF1bHRCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9wLXRhYlBhbmVsPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFeHRyYVRhYnM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXh0cmFUYWJzUmVmIHx8IGRlZmF1bHRFeHRyYVRhYnNcIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvcC10YWJWaWV3PlxyXG5cclxuPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG48cC1jb25maXJtRGlhbG9nPjwvcC1jb25maXJtRGlhbG9nPlxyXG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LXZpZXcvcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LXZpZXcvcmVzdHdvcmxkLWVkaXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUEwRCxNQUFNLHlCQUF5QixDQUFDO0FBRy9HLE9BQU8sRUFBbUIsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVU3QyxNQUFNLE9BQU8sMEJBQTBCO0lBZ0pyQyxZQUNVLFFBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxlQUErQixFQUMvQixTQUFtQixFQUNuQixPQUFlLEVBQ2YsWUFBeUIsRUFDakMsZUFBZ0M7UUFOeEIsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsaUJBQVksR0FBWixZQUFZLENBQWE7UUEvSTNCLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFTM0Is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LFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJNUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb3BlcnR5VHlwZSwgUmVzb3VyY2UsIFRlbXBsYXRlLCBUZW1wbGF0ZXMsIEZvcm1zUmVzb3VyY2UsIFByb3BlcnR5IH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUkVTVHdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBQcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVscy9wcm9ibGVtLWRldGFpbHMnO1xyXG5pbXBvcnQgeyBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsZGVtb3J0Q29uZmlnIH0gZnJvbSAnbmd4LXZhbGRlbW9ydCc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctZWRpdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1lZGl0LXZpZXcuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSRVNUd29ybGRFZGl0Vmlld0NvbXBvbmVudCB7XHJcbiAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RlbXBsYXRlczogVGVtcGxhdGVzID0ge307XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMb2FkaW5nRm9yVGhlRmlyc3RUaW1lKCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudGVtcGxhdGVzKS5sZW5ndGggPT09IDAgJiYgdGhpcy5pc0xvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZvcm1UYWJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1UYWJzO1xyXG4gIH1cclxuICBwcml2YXRlIF9mb3JtVGFiczogeyBbbmFtZTogc3RyaW5nXTogRm9ybUdyb3VwIH0gPSB7fTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGFwaU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXBpTmFtZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FwaU5hbWU/OiBzdHJpbmc7XHJcbiAgLy9ASW5wdXQoKVxyXG4gIC8vcHVibGljIHNldCByZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gIC8vICB0aGlzLl9yZWwgPSB2YWx1ZTtcclxuICAvL31cclxuICAvL3B1YmxpYyBnZXQgcmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgLy8gIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgLy99XHJcbiAgLy9wcml2YXRlIF9yZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHVyaSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl91cmkgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHVyaSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VyaTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdXJpPzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZXNvdXJjZT86IFJlc291cmNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IGNhblNhdmUoKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLnJlc291cmNlPy5fbGlua3NbXCJzYXZlXCJdPy5sZW5ndGg7XHJcbiAgICByZXR1cm4gbGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgbGVuZ3RoID4gMDtcclxuICB9XHJcbiAgcHVibGljIGdldCBjYW5EZWxldGUoKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLnJlc291cmNlPy5fbGlua3NbXCJkZWxldGVcIl0/Lmxlbmd0aDtcclxuICAgIHJldHVybiBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPiAwO1xyXG4gIH1cclxuICBwdWJsaWMgY2FuU3VibWl0KHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtVGFic1t0ZW1wbGF0ZU5hbWVdO1xyXG4gICAgcmV0dXJuIGZvcm0gJiYgZm9ybS52YWxpZDtcclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2V4dHJhVGFicycsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGV4dHJhVGFic1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdidXR0b25zJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYnV0dG9uc1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnNTaW5nbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNTaW5nbGVSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRPcHRpb25zTXVsdGlwbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNNdWx0aXBsZVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRIaWRkZW4nLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dEhpZGRlblJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFRleHQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dFRleHRSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRUZXh0YXJlYScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0VGV4dGFyZWFSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRTZWFyY2gnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dFNlYXJjaFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFRlbCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0VGVsUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0VXJsJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRVcmxSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRFbWFpbCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0RW1haWxSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRQYXNzd29yZCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0UGFzc3dvcmRSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXREYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXREYXRlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0TW9udGgnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE1vbnRoUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0V2VlaycsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0V2Vla1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dFRpbWUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dFRpbWVSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXREYXRldGltZUxvY2FsJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXREYXRldGltZUxvY2FsUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0TnVtYmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXROdW1iZXJSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRSYW5nZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0UmFuZ2VSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRDb2xvcicsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0Q29sb3JSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRCb29sJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRCb29sUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0RGF0ZXRpbWVPZmZzZXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dERhdGV0aW1lT2Zmc2V0UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0RHVyYXRpb24nLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dER1cmF0aW9uUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0SW1hZ2UnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dEltYWdlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0RmlsZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0RmlsZVJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dERlZmF1bHQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dERlZmF1bHRSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxyXG4gICAgdmFsZGVtb3J0Q29uZmlnOiBWYWxkZW1vcnRDb25maWcpIHtcclxuICAgIHZhbGRlbW9ydENvbmZpZy5lcnJvckNsYXNzZXMgPSAncC1lcnJvciB0ZXh0LXNtJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb29sdGlwKHJlc291cmNlOiBSZXNvdXJjZSwga2V5c1RvRXhjbHVkZT86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRvb2x0aXAgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZSlcclxuICAgICAgLmZpbHRlcigoW2tleV0pID0+ICEoa2V5LnN0YXJ0c1dpdGgoJ18nKSB8fCBbJ2NyZWF0ZWRBdCcsICdjcmVhdGVkQnknLCAnbGFzdENoYW5nZWRBdCcsICdsYXN0Q2hhbmdlZEJ5JywgJ3RpbWVzdGFtcCddLmluY2x1ZGVzKGtleSkgfHwga2V5c1RvRXhjbHVkZT8uaW5jbHVkZXMoa2V5KSkpXHJcbiAgICAgIC5yZWR1Y2UoKHByZXYsIFtrZXksIHZhbHVlXSwgaW5kZXgpID0+IGAke3ByZXZ9JHtpbmRleCA9PT0gMCA/ICcnIDogJ1xcbid9JHtrZXl9OiAke1JFU1R3b3JsZEVkaXRWaWV3Q29tcG9uZW50Lmpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZSl9YCwgJycpO1xyXG5cclxuICAgIHJldHVybiB0b29sdGlwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMganNvblN0cmluZ2lmeVdpdGhFbGlwc2lzKHZhbHVlOiB1bmtub3duKSB7XHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSAyMDA7XHJcbiAgICBjb25zdCBlbmQgPSAxMDtcclxuICAgIGNvbnN0IHN0YXJ0ID0gbWF4TGVuZ3RoIC0gZW5kIC0gMjtcclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICBjb25zdCBzaG9ydGVuZWQgPSBqc29uLmxlbmd0aCA+IG1heExlbmd0aCA/IGpzb24uc3Vic3RyaW5nKDAsIHN0YXJ0KSArICfigKYnICsganNvbi5zdWJzdHJpbmcoanNvbi5sZW5ndGggLSBlbmQpIDoganNvbjtcclxuXHJcbiAgICByZXR1cm4gc2hvcnRlbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUkVTVHdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQodGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZSwgZm9ybVZhbHVlOiB7fSkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldEJlZm9yZVNhdmUgPSB0ZW1wbGF0ZS50YXJnZXQ7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5zdWJtaXQodGVtcGxhdGUsIGZvcm1WYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgbGV0IHN1bW1hcnkgPSAnRXJyb3InO1xyXG4gICAgICAgIGxldCBkZXRhaWwgPSAnRXJyb3Igd2hpbGUgc2F2aW5nIHRoZSByZXNvdXJjZS4nO1xyXG4gICAgICAgIGlmIChQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpKSB7XHJcbiAgICAgICAgICBjb25zdCBwcm9ibGVtRGV0YWlscyA9IHJlc3BvbnNlLmJvZHkgYXMgUHJvYmxlbURldGFpbHM7XHJcbiAgICAgICAgICBzdW1tYXJ5ID0gcHJvYmxlbURldGFpbHMudGl0bGUgfHwgc3VtbWFyeTtcclxuICAgICAgICAgIGRldGFpbCA9IHByb2JsZW1EZXRhaWxzLmRldGFpbCB8fCBkZXRhaWw7XHJcbiAgICAgICAgICAvLyBkaXNwbGF5IHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICAgICAgICBpZiAocHJvYmxlbURldGFpbHNbJ2Vycm9ycyddIGFzIHt9KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1UYWJzW3RlbXBsYXRlTmFtZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZXJyb3JzRm9yS2V5XSBvZiBPYmplY3QuZW50cmllcyhwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgvXFwufFxcWy8pLm1hcChlID0+IGUucmVwbGFjZShcIl1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICAgIC8vIFRoZSBwYXRoIG1pZ2h0IHN0YXJ0IHdpdGggYSAkLCBpbmRpY2F0aW5nIHRoZSByb290LlxyXG4gICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aFswXSA9PT0gJyQnKVxyXG4gICAgICAgICAgICAgICAgcGF0aC5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gcGF0aC5yZWR1Y2U8QWJzdHJhY3RDb250cm9sPihSRVNUd29ybGRFZGl0Vmlld0NvbXBvbmVudC5nZXRTdWJDb250cm9sLCBmb3JtKTtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyAuLi5mb3JtQ29udHJvbC5lcnJvcnMsIC4uLnsgcmVtb3RlOiBlcnJvcnNGb3JLZXkgfSB9KTtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBzdW1tYXJ5LCBkZXRhaWw6IGRldGFpbCwgZGF0YTogcmVzcG9uc2UsIGxpZmU6IDEwMDAwIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzb3VyY2UgPSAocmVzcG9uc2UuYm9keSBhcyBGb3Jtc1Jlc291cmNlKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRBZnRlclNhdmUgPSByZXNwb25zZVJlc291cmNlLl90ZW1wbGF0ZXNbdGVtcGxhdGVOYW1lXS50YXJnZXQ7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdTYXZlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBzYXZlZC4nIH0pLFxyXG4gICAgICAgICAgMTAwKTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldEJlZm9yZVNhdmUgIT09IHRhcmdldEFmdGVyU2F2ZSkge1xyXG4gICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL2VkaXQnLCB0aGlzLmFwaU5hbWUsIHJlc3BvbnNlUmVzb3VyY2UuX2xpbmtzLnNlbGZbMF0uaHJlZl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiAke0pTT04uc3RyaW5naWZ5KGUpfWAsIGxpZmU6IDEwMDAwIH0pO1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3ViQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGhFbGVtZW50OiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApXHJcbiAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW3BhdGhFbGVtZW50XTtcclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyLnBhcnNlSW50KHBhdGhFbGVtZW50KTtcclxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5kZXgpKVxyXG4gICAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKCkge1xyXG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgbWVzc2FnZTogJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyByZXNvdXJjZT8nLFxyXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXHJcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB0aGlzLmRlbGV0ZSgpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy51cmkgfHwgIXRoaXMucmVzb3VyY2UpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucmVzb3VyY2UsIHRoaXMuZm9ybVRhYnMudmFsdWUpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZGVsZXRlKHRoaXMucmVzb3VyY2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PlxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnRGVsZXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBkZWxldGVkLicgfSksXHJcbiAgICAgIDEwMCk7XHJcblxyXG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy51cmkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldFNpbmdsZSh0aGlzLnVyaSk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgIHRoaXMuX3RlbXBsYXRlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsVGVtcGxhdGVzKHRoaXMuX3Jlc291cmNlKTtcclxuICAgICAgdGhpcy5fZm9ybVRhYnMgPSB0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBzRnJvbVRlbXBsYXRlcyh0aGlzLl90ZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50c0ZvclRlbXBsYXRlcyh0ZW1wbGF0ZXM6IFRlbXBsYXRlcywgc2tpcERlZmF1bHRUZW1wbGF0ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGVtcGxhdGVzKVxyXG4gICAgICAuZmlsdGVyKChbbmFtZSxdKSA9PiAhc2tpcERlZmF1bHRUZW1wbGF0ZSB8fCBuYW1lICE9PSAnZGVmYXVsdCcpXHJcbiAgICAgIC5tYXAoKFssIHRlbXBsYXRlXSkgPT4gdGhpcy5zZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zRWxlbWVudHNGb3JUZW1wbGF0ZSh0ZW1wbGF0ZSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRzRm9yVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcm9wZXJ0eVByb21pc2VzID0gdGVtcGxhdGUucHJvcGVydGllc1xyXG4gICAgICAuZmlsdGVyKHByb3BlcnR5ID0+IHByb3BlcnR5Py5vcHRpb25zPy5saW5rPy5ocmVmKVxyXG4gICAgICAubWFwKHByb3BlcnR5ID0+IHRoaXMuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eShwcm9wZXJ0eSkpO1xyXG4gICAgY29uc3QgbmVzdGVkVGVtcGxhdGVQcm9taXNlZCA9IHRlbXBsYXRlLnByb3BlcnRpZXNcclxuICAgICAgLmZpbHRlcihwcm9wZXJ0eSA9PiBwcm9wZXJ0eT8uX3RlbXBsYXRlcylcclxuICAgICAgLm1hcChwcm9wZXJ0eSA9PiB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50c0ZvclRlbXBsYXRlcyhwcm9wZXJ0eS5fdGVtcGxhdGVzLCB0cnVlKSk7XHJcbiAgICBjb25zdCBhbGxQcm9taXNlcyA9IHByb3BlcnR5UHJvbWlzZXMuY29uY2F0KG5lc3RlZFRlbXBsYXRlUHJvbWlzZWQpO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKGFsbFByb21pc2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBwcm9wZXJ0eT8ub3B0aW9ucztcclxuXHJcbiAgICBpZiAoIW9wdGlvbnM/Lmxpbms/LmhyZWYpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0ZW1wbGF0ZWRVcmkgPSBvcHRpb25zLmxpbmsuaHJlZjtcclxuICAgIGNvbnN0IGZpbHRlciA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0gZXEgJHtwcm9wZXJ0eS52YWx1ZX1gO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldExpc3RCeVVyaSh0ZW1wbGF0ZWRVcmksIHsgJGZpbHRlcjogZmlsdGVyLCAkdG9wOiAxMCB9KTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdGhlIGZpbHRlcmVkIGl0ZW1zLmA7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IG1lc3NhZ2UsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSByZXNwb25zZS5ib2R5Ll9lbWJlZGRlZC5pdGVtcztcclxuICAgIG9wdGlvbnMuaW5saW5lID0gaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFsbFRlbXBsYXRlcyhyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPFRlbXBsYXRlcz4ge1xyXG4gICAgY29uc3QgZm9ybVJlc3BvbnNlcyA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0QWxsRm9ybXMocmVzb3VyY2UpO1xyXG5cclxuICAgIGNvbnN0IGZhaWxlZFJlc3BvbnNlcyA9IGZvcm1SZXNwb25zZXMuZmlsdGVyKHJlc3BvbnNlID0+ICFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KTtcclxuICAgIGlmIChmYWlsZWRSZXNwb25zZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgZmFpbGVkUmVzcG9uc2VzKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmb3JtVGVtcGxhdGVzID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uZm9ybVJlc3BvbnNlcy5tYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlLmJvZHkgYXMgRm9ybXNSZXNvdXJjZSkuX3RlbXBsYXRlcykpIGFzIFRlbXBsYXRlcztcclxuXHJcbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50c0ZvclRlbXBsYXRlcyhmb3JtVGVtcGxhdGVzLCBmYWxzZSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1UZW1wbGF0ZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW1hZ2VDaGFuZ2VkKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCwgZXZlbnQ6IHsgZmlsZXM6IEZpbGVbXSB9KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQuZmlsZXNbMF07XHJcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCB1cmkgPSByZWFkZXIucmVzdWx0O1xyXG4gICAgICBjb25zb2xlLmxvZyh1cmkpO1xyXG4gICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh1cmkpO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxoMT5FZGl0IHJlc291cmNlPC9oMT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48cC10YWJWaWV3PlxyXG5cclxuICA8cC10YWJQYW5lbCAqbmdJZj1cImlzTG9hZGluZ0ZvclRoZUZpcnN0VGltZVwiIGhlYWRlcj1cIkxvYWRpbmdcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgWzEsIDIsIDMsIDQsIDVdXCIgY2xhc3M9XCJncmlkIGZpZWxkXCI+XHJcbiAgICAgIDxwLXNrZWxldG9uIGNsYXNzPVwiY29sLTEyIG1iLTIgbWQ6Y29sLTIgbWQ6bWItMFwiIGhlaWdodD1cIjM5cHhcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTEwXCI+XHJcbiAgICAgICAgPHAtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGxcIiBoZWlnaHQ9XCIzOXB4XCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XHJcbiAgICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEyMHB4XCIgaGVpZ2h0PVwiMzlweFwiIGNsYXNzPVwibXgtMlwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMTIwcHhcIiBoZWlnaHQ9XCIzOXB4XCIgY2xhc3M9XCJteC0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgPHAtc2tlbGV0b24gd2lkdGg9XCIxMjBweFwiIGhlaWdodD1cIjM5cHhcIiBjbGFzcz1cIm14LTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9wLXRhYlBhbmVsPlxyXG5cclxuICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0ZW1wbGF0ZXMgfCBrZXl2YWx1ZVwiIFtoZWFkZXJdPVwiaXRlbS52YWx1ZS50aXRsZSB8fCBpdGVtLmtleVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVRhYnNbaXRlbS5rZXldXCIgKG5nU3VibWl0KT1cInN1Ym1pdChpdGVtLmtleSwgaXRlbS52YWx1ZSwgZm9ybVRhYnNbaXRlbS5rZXldLnZhbHVlKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtZWxlbWVudFwiPlxyXG4gICAgICAgICAgPHJ3LWZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtVGFic1tpdGVtLmtleV1cIiBbdGVtcGxhdGVdPVwiaXRlbS52YWx1ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWZvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1vdmVybGF5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lcj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QnV0dG9ucz5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwic3VibWl0XCIgbGFiZWw9XCJTYXZlXCIgaWNvbj1cImZhciBmYS1zYXZlXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLXN1Y2Nlc3NcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nIHx8ICFjYW5TdWJtaXQoaXRlbS5rZXkpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiUmVsb2FkXCIgaWNvbj1cImZhcyBmYS1yZWRvXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWluZm9cIiAoY2xpY2spPVwibG9hZCgpXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkRlbGV0ZVwiIGljb249XCJmYXIgZmEtdHJhc2gtYWx0XCIgY2xhc3M9XCJtbC0yIHAtYnV0dG9uLWRhbmdlclwiIChjbGljayk9XCJzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbCgpXCIgW2Rpc2FibGVkXT1cIiFyZXNvdXJjZSB8fCBpc0xvYWRpbmcgfHwgIWNhbkRlbGV0ZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1JlZiB8fCBkZWZhdWx0QnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvcC10YWJQYW5lbD5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RXh0cmFUYWJzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV4dHJhVGFic1JlZiB8fCBkZWZhdWx0RXh0cmFUYWJzXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG48L3AtdGFiVmlldz5cclxuXHJcbjxwLXRvYXN0PjwvcC10b2FzdD5cclxuPHAtY29uZmlybURpYWxvZz48L3AtY29uZmlybURpYWxvZz5cclxuIl19
@@ -1197,28 +1197,23 @@ class RESTworldEditViewComponent {
1197
1197
  this.isLoading = false;
1198
1198
  });
1199
1199
  }
1200
- setInitialSelectedOptionsElementsForTemplates(templates) {
1200
+ setInitialSelectedOptionsElementsForTemplates(templates, skipDefaultTemplate) {
1201
1201
  return __awaiter(this, void 0, void 0, function* () {
1202
- return Promise.all(Object.values(templates)
1203
- .map(template => this.setInitialSelectedOptionsElementsForTemplate(template)));
1202
+ yield Promise.all(Object.entries(templates)
1203
+ .filter(([name,]) => !skipDefaultTemplate || name !== 'default')
1204
+ .map(([, template]) => this.setInitialSelectedOptionsElementsForTemplate(template)));
1204
1205
  });
1205
1206
  }
1206
- imageChanged(formControl, event) {
1207
- const file = event.files[0];
1208
- console.log(file);
1209
- const reader = new FileReader();
1210
- reader.onload = () => {
1211
- const uri = reader.result;
1212
- console.log(uri);
1213
- formControl.setValue(uri);
1214
- };
1215
- reader.readAsDataURL(file);
1216
- }
1217
1207
  setInitialSelectedOptionsElementsForTemplate(template) {
1218
1208
  return __awaiter(this, void 0, void 0, function* () {
1219
- return Promise.all(template.properties
1209
+ const propertyPromises = template.properties
1220
1210
  .filter(property => { var _a, _b; return (_b = (_a = property === null || property === void 0 ? void 0 : property.options) === null || _a === void 0 ? void 0 : _a.link) === null || _b === void 0 ? void 0 : _b.href; })
1221
- .map(property => this.setInitialSelectedOptionsElementForProperty(property)));
1211
+ .map(property => this.setInitialSelectedOptionsElementForProperty(property));
1212
+ const nestedTemplatePromised = template.properties
1213
+ .filter(property => property === null || property === void 0 ? void 0 : property._templates)
1214
+ .map(property => this.setInitialSelectedOptionsElementsForTemplates(property._templates, true));
1215
+ const allPromises = propertyPromises.concat(nestedTemplatePromised);
1216
+ yield Promise.all(allPromises);
1222
1217
  });
1223
1218
  }
1224
1219
  setInitialSelectedOptionsElementForProperty(property) {
@@ -1250,10 +1245,21 @@ class RESTworldEditViewComponent {
1250
1245
  return Promise.resolve({});
1251
1246
  }
1252
1247
  const formTemplates = Object.assign({}, ...formResponses.map(response => response.body._templates));
1253
- yield this.setInitialSelectedOptionsElementsForTemplates(formTemplates);
1248
+ yield this.setInitialSelectedOptionsElementsForTemplates(formTemplates, false);
1254
1249
  return formTemplates;
1255
1250
  });
1256
1251
  }
1252
+ imageChanged(formControl, event) {
1253
+ const file = event.files[0];
1254
+ console.log(file);
1255
+ const reader = new FileReader();
1256
+ reader.onload = () => {
1257
+ const uri = reader.result;
1258
+ console.log(uri);
1259
+ formControl.setValue(uri);
1260
+ };
1261
+ reader.readAsDataURL(file);
1262
+ }
1257
1263
  }
1258
1264
  RESTworldEditViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldEditViewComponent, deps: [{ token: RESTworldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: i3$1.Location }, { token: i4$2.Router }, { token: FormService }, { token: i12.ValdemortConfig }], target: i0.ɵɵFactoryTarget.Component });
1259
1265
  RESTworldEditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldEditViewComponent, selector: "rw-edit", inputs: { apiName: "apiName", uri: "uri" }, queries: [{ propertyName: "extraTabsRef", first: true, predicate: ["extraTabs"], descendants: true }, { propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true }, { propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true }, { propertyName: "inputOptionsRef", first: true, predicate: ["inputOptions"], descendants: true }, { propertyName: "inputHiddenRef", first: true, predicate: ["inputHidden"], descendants: true }, { propertyName: "inputTextRef", first: true, predicate: ["inputText"], descendants: true }, { propertyName: "inputTextareaRef", first: true, predicate: ["inputTextarea"], descendants: true }, { propertyName: "inputSearchRef", first: true, predicate: ["inputSearch"], descendants: true }, { propertyName: "inputTelRef", first: true, predicate: ["inputTel"], descendants: true }, { propertyName: "inputUrlRef", first: true, predicate: ["inputUrl"], descendants: true }, { propertyName: "inputEmailRef", first: true, predicate: ["inputEmail"], descendants: true }, { propertyName: "inputPasswordRef", first: true, predicate: ["inputPassword"], descendants: true }, { propertyName: "inputDateRef", first: true, predicate: ["inputDate"], descendants: true }, { propertyName: "inputMonthRef", first: true, predicate: ["inputMonth"], descendants: true }, { propertyName: "inputWeekRef", first: true, predicate: ["inputWeek"], descendants: true }, { propertyName: "inputTimeRef", first: true, predicate: ["inputTime"], descendants: true }, { propertyName: "inputDatetimeLocalRef", first: true, predicate: ["inputDatetimeLocal"], descendants: true }, { propertyName: "inputNumberRef", first: true, predicate: ["inputNumber"], descendants: true }, { propertyName: "inputRangeRef", first: true, predicate: ["inputRange"], descendants: true }, { propertyName: "inputColorRef", first: true, predicate: ["inputColor"], descendants: true }, { propertyName: "inputBoolRef", first: true, predicate: ["inputBool"], descendants: true }, { propertyName: "inputDatetimeOffsetRef", first: true, predicate: ["inputDatetimeOffset"], descendants: true }, { propertyName: "inputDurationRef", first: true, predicate: ["inputDuration"], descendants: true }, { propertyName: "inputImageRef", first: true, predicate: ["inputImage"], descendants: true }, { propertyName: "inputFileRef", first: true, predicate: ["inputFile"], descendants: true }, { propertyName: "inputDefaultRef", first: true, predicate: ["inputDefault"], descendants: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n</div>\r\n\r\n<p-tabView>\r\n\r\n <p-tabPanel *ngIf=\"isLoadingForTheFirstTime\" header=\"Loading\">\r\n <div *ngFor=\"let i of [1, 2, 3, 4, 5]\" class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel *ngFor=\"let item of templates | keyvalue\" [header]=\"item.value.title || item.key\" [disabled]=\"isLoading\">\r\n <form [formGroup]=\"formTabs[item.key]\" (ngSubmit)=\"submit(item.key, item.value, formTabs[item.key].value)\">\r\n <div class=\"blockable-container\">\r\n <div class=\"blockable-element\">\r\n <rw-form [formGroup]=\"formTabs[item.key]\" [template]=\"item.value\" [apiName]=\"apiName\"></rw-form>\r\n </div>\r\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\r\n <p-progressSpinner></p-progressSpinner>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <ng-template #defaultButtons>\r\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\" [disabled]=\"isLoading || !canSubmit(item.key)\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\" (click)=\"load()\" [disabled]=\"isLoading\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!resource || isLoading || !canDelete\"></button>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </p-tabPanel>\r\n\r\n <ng-template #defaultExtraTabs>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef || defaultExtraTabs\"></ng-container>\r\n\r\n</p-tabView>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:-moz-fit-content!important;max-width:fit-content!important}.blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"], components: [{ type: i7$2.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i7$2.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i8$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { type: RestworldEditFormComponent, selector: "rw-form", inputs: ["formGroup", "template", "apiName"] }, { type: i10$1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["style", "styleClass", "strokeWidth", "fill", "animationDuration"] }, { type: i11.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i12$1.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i10.Ripple, selector: "[pRipple]" }, { type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "keyvalue": i3$1.KeyValuePipe } });