ngx-wapp-components 1.0.94 → 1.0.96

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.
@@ -6,7 +6,12 @@ import * as i1 from "@angular/common";
6
6
  import * as i2 from "primeng/button";
7
7
  import * as i3 from "powerbi-client-angular";
8
8
  export class WPowerbiReportComponent {
9
- constructor() {
9
+ // @HostListener('window:resize', ['$event'])
10
+ // onResize(event: any) {
11
+ // this.getReportDivWidth();
12
+ // }
13
+ constructor(elementRef) {
14
+ this.elementRef = elementRef;
10
15
  this.hasReportFilters = false;
11
16
  this.showReportFilters = false;
12
17
  this.filterPanelPosition = "bottom";
@@ -15,6 +20,7 @@ export class WPowerbiReportComponent {
15
20
  this.showFullScreenButton = false;
16
21
  this.showVisualHeaders = true;
17
22
  this.showRefreshButton = false;
23
+ this.height = '810px';
18
24
  // @Input('zoomRatio') zoomRatio: number = 0.00175;
19
25
  this.refreshNotAllowed = new EventEmitter();
20
26
  this.reportClass = 'report-container';
@@ -56,12 +62,9 @@ export class WPowerbiReportComponent {
56
62
  get zoom() {
57
63
  return this._zoom;
58
64
  }
59
- // @HostListener('window:resize', ['$event'])
60
- // onResize(event: any) {
61
- // this.getReportDivWidth();
62
- // }
63
65
  ngOnInit() {
64
66
  this.embedReport();
67
+ this.elementRef.nativeElement.style.setProperty("--height", this.height);
65
68
  }
66
69
  // getReportDivWidth() {
67
70
  // this.powerbiReportWidth = this.elementRef.nativeElement.querySelector('#powerbiContainer').offsetWidth;
@@ -150,12 +153,12 @@ export class WPowerbiReportComponent {
150
153
  this.refreshNotAllowed.emit(true);
151
154
  }
152
155
  }
153
- WPowerbiReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WPowerbiReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
- WPowerbiReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WPowerbiReportComponent, selector: "w-powerbi-report", inputs: { embedConfig: "embedConfig", reportTitle: "reportTitle", hasReportFilters: "hasReportFilters", parameterReportFilters: "parameterReportFilters", showReportFilters: "showReportFilters", filterPanelPosition: "filterPanelPosition", showPageNavigation: "showPageNavigation", showPrintButton: "showPrintButton", showFullScreenButton: "showFullScreenButton", showVisualHeaders: "showVisualHeaders", showRefreshButton: "showRefreshButton", zoom: "zoom" }, outputs: { refreshNotAllowed: "refreshNotAllowed" }, viewQueries: [{ propertyName: "reportObj", first: true, predicate: PowerBIReportEmbedComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"reportTitle || showPrintButton || showFullScreenButton\" class=\"flex justify-content-between flex-wrap\">\r\n <div class=\"flex align-items-center justify-content-center\">\r\n </div>\r\n <div class=\"flex align-items-center justify-content-center\">\r\n <div class=\"text-right\">\r\n <p-button *ngIf=\"showRefreshButton\" icon=\"pi pi-refresh\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"refresh()\">\r\n </p-button>\r\n <p-button *ngIf=\"showPrintButton\" icon=\"pi pi-print\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"print()\">\r\n </p-button>\r\n <p-button *ngIf=\"showFullScreenButton\" icon=\"pi pi-arrows-alt\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"enterFullScreen()\">\r\n </p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'right'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-right\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'left'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-left\"></ng-content>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-bottom\"></ng-content>\r\n</div>\r\n\r\n<ng-template #powerbiReport>\r\n <div id=\"powerbiContainer\">\r\n <powerbi-report [embedConfig]=\"reportConfig\" \r\n [cssClassName]=\"reportClass\" \r\n [eventHandlers]=\"eventHandlersMap\">\r\n </powerbi-report>\r\n </div>\r\n</ng-template>", styles: [".powerbi-report-container{display:flex;flex-direction:column;height:810px;width:auto}::ng-deep iframe{border:none}::ng-deep .hidden{height:0!important;width:0!important}::ng-deep .report-container{height:810px;width:auto;margin:0 auto}::ng-deep .powerbi-report-container .card{padding:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.PowerBIReportEmbedComponent, selector: "powerbi-report[embedConfig]", inputs: ["embedConfig", "phasedEmbedding", "eventHandlers"] }] });
156
+ WPowerbiReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WPowerbiReportComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
157
+ WPowerbiReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WPowerbiReportComponent, selector: "w-powerbi-report", inputs: { embedConfig: "embedConfig", reportTitle: "reportTitle", hasReportFilters: "hasReportFilters", parameterReportFilters: "parameterReportFilters", showReportFilters: "showReportFilters", filterPanelPosition: "filterPanelPosition", showPageNavigation: "showPageNavigation", showPrintButton: "showPrintButton", showFullScreenButton: "showFullScreenButton", showVisualHeaders: "showVisualHeaders", showRefreshButton: "showRefreshButton", height: "height", zoom: "zoom" }, outputs: { refreshNotAllowed: "refreshNotAllowed" }, viewQueries: [{ propertyName: "reportObj", first: true, predicate: PowerBIReportEmbedComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"reportTitle || showPrintButton || showFullScreenButton\" class=\"flex justify-content-between flex-wrap\">\r\n <div class=\"flex align-items-center justify-content-center\">\r\n </div>\r\n <div class=\"flex align-items-center justify-content-center\">\r\n <div class=\"text-right\">\r\n <p-button *ngIf=\"showRefreshButton\" icon=\"pi pi-refresh\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"refresh()\">\r\n </p-button>\r\n <p-button *ngIf=\"showPrintButton\" icon=\"pi pi-print\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"print()\">\r\n </p-button>\r\n <p-button *ngIf=\"showFullScreenButton\" icon=\"pi pi-arrows-alt\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"enterFullScreen()\">\r\n </p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'right'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-right\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'left'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-left\"></ng-content>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-bottom\"></ng-content>\r\n</div>\r\n\r\n<ng-template #powerbiReport>\r\n <div id=\"powerbiContainer\">\r\n <powerbi-report [embedConfig]=\"reportConfig\" \r\n [cssClassName]=\"reportClass\" \r\n [eventHandlers]=\"eventHandlersMap\">\r\n </powerbi-report>\r\n </div>\r\n</ng-template>", styles: ["::ng-deep iframe{border:none}::ng-deep .hidden{height:0!important;width:0!important}::ng-deep .report-container{height:var(--height);width:auto;margin:0 auto}::ng-deep .powerbi-report-container .card{padding:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.PowerBIReportEmbedComponent, selector: "powerbi-report[embedConfig]", inputs: ["embedConfig", "phasedEmbedding", "eventHandlers"] }] });
155
158
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WPowerbiReportComponent, decorators: [{
156
159
  type: Component,
157
- args: [{ selector: 'w-powerbi-report', template: "<div *ngIf=\"reportTitle || showPrintButton || showFullScreenButton\" class=\"flex justify-content-between flex-wrap\">\r\n <div class=\"flex align-items-center justify-content-center\">\r\n </div>\r\n <div class=\"flex align-items-center justify-content-center\">\r\n <div class=\"text-right\">\r\n <p-button *ngIf=\"showRefreshButton\" icon=\"pi pi-refresh\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"refresh()\">\r\n </p-button>\r\n <p-button *ngIf=\"showPrintButton\" icon=\"pi pi-print\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"print()\">\r\n </p-button>\r\n <p-button *ngIf=\"showFullScreenButton\" icon=\"pi pi-arrows-alt\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"enterFullScreen()\">\r\n </p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'right'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-right\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'left'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-left\"></ng-content>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-bottom\"></ng-content>\r\n</div>\r\n\r\n<ng-template #powerbiReport>\r\n <div id=\"powerbiContainer\">\r\n <powerbi-report [embedConfig]=\"reportConfig\" \r\n [cssClassName]=\"reportClass\" \r\n [eventHandlers]=\"eventHandlersMap\">\r\n </powerbi-report>\r\n </div>\r\n</ng-template>", styles: [".powerbi-report-container{display:flex;flex-direction:column;height:810px;width:auto}::ng-deep iframe{border:none}::ng-deep .hidden{height:0!important;width:0!important}::ng-deep .report-container{height:810px;width:auto;margin:0 auto}::ng-deep .powerbi-report-container .card{padding:5px}\n"] }]
158
- }], propDecorators: { embedConfig: [{
160
+ args: [{ selector: 'w-powerbi-report', template: "<div *ngIf=\"reportTitle || showPrintButton || showFullScreenButton\" class=\"flex justify-content-between flex-wrap\">\r\n <div class=\"flex align-items-center justify-content-center\">\r\n </div>\r\n <div class=\"flex align-items-center justify-content-center\">\r\n <div class=\"text-right\">\r\n <p-button *ngIf=\"showRefreshButton\" icon=\"pi pi-refresh\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"refresh()\">\r\n </p-button>\r\n <p-button *ngIf=\"showPrintButton\" icon=\"pi pi-print\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"print()\">\r\n </p-button>\r\n <p-button *ngIf=\"showFullScreenButton\" icon=\"pi pi-arrows-alt\" \r\n styleClass=\"p-button-rounded p-button-secondary p-button-text\"\r\n (onClick)=\"enterFullScreen()\">\r\n </p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'right'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-right\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'left'\" class=\"grid\">\r\n <div class=\"col-12 md:col-12 lg:col-8\">\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-left\"></ng-content>\r\n </div>\r\n <div class=\"col-12 md:col-12 lg:col-4\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"filterPanelPosition == 'bottom'\">\r\n <ng-container *ngTemplateOutlet=\"powerbiReport\"></ng-container>\r\n <ng-content *ngIf=\"hasReportFilters\" select=\".report-filters-bottom\"></ng-content>\r\n</div>\r\n\r\n<ng-template #powerbiReport>\r\n <div id=\"powerbiContainer\">\r\n <powerbi-report [embedConfig]=\"reportConfig\" \r\n [cssClassName]=\"reportClass\" \r\n [eventHandlers]=\"eventHandlersMap\">\r\n </powerbi-report>\r\n </div>\r\n</ng-template>", styles: ["::ng-deep iframe{border:none}::ng-deep .hidden{height:0!important;width:0!important}::ng-deep .report-container{height:var(--height);width:auto;margin:0 auto}::ng-deep .powerbi-report-container .card{padding:5px}\n"] }]
161
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { embedConfig: [{
159
162
  type: Input,
160
163
  args: ['embedConfig']
161
164
  }], reportTitle: [{
@@ -188,6 +191,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
188
191
  }], showRefreshButton: [{
189
192
  type: Input,
190
193
  args: ['showRefreshButton']
194
+ }], height: [{
195
+ type: Input,
196
+ args: ['height']
191
197
  }], refreshNotAllowed: [{
192
198
  type: Output,
193
199
  args: ['refreshNotAllowed']
@@ -197,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
197
203
  type: ViewChild,
198
204
  args: [PowerBIReportEmbedComponent]
199
205
  }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1wb3dlcmJpLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9yZXBvcnQvdy1wb3dlcmJpLXJlcG9ydC93LXBvd2VyYmktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3JlcG9ydC93LXBvd2VyYmktcmVwb3J0L3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBILE9BQU8sRUFBNEMsTUFBTSxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBT3JFLE1BQU0sT0FBTyx1QkFBdUI7SUFMcEM7UUFTNkIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWpDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNqQyx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDeEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQzVCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN6QyxzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQy9ELG1EQUFtRDtRQUV0QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBYTdFLGdCQUFXLEdBQUcsa0JBQWtCLENBQUM7UUFFakMsaUJBQVksR0FBOEI7WUFDeEMsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsU0FBUztZQUNuQixTQUFTLEVBQUUs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S0FBSzt1QkFBQyxtQkFBbUI7Z0JBR0csaUJBQWlCO3NCQUE3QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFLZCxJQUFJO3NCQUFoQixLQUFLO2dCQTBDa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFbWJlZENvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZW1iZWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRW1iZWQsIElSZXBvcnRFbWJlZENvbmZpZ3VyYXRpb24sIFJlcG9ydCwgbW9kZWxzLCBzZXJ2aWNlIH0gZnJvbSAncG93ZXJiaS1jbGllbnQnO1xyXG5pbXBvcnQgeyBQb3dlckJJUmVwb3J0RW1iZWRDb21wb25lbnQgfSBmcm9tICdwb3dlcmJpLWNsaWVudC1hbmd1bGFyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy1wb3dlcmJpLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXUG93ZXJiaVJlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgnZW1iZWRDb25maWcnKSBlbWJlZENvbmZpZyE6IEVtYmVkQ29uZmlnO1xyXG4gIEBJbnB1dCgncmVwb3J0VGl0bGUnKSByZXBvcnRUaXRsZSE6IHN0cmluZztcclxuICBASW5wdXQoJ2hhc1JlcG9ydEZpbHRlcnMnKSBoYXNSZXBvcnRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdwYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzJykgcGFyYW1ldGVyUmVwb3J0RmlsdGVycyE6IHN0cmluZztcclxuICBASW5wdXQoJ3Nob3dSZXBvcnRGaWx0ZXJzJykgc2hvd1JlcG9ydEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ2ZpbHRlclBhbmVsUG9zaXRpb24nKSBmaWx0ZXJQYW5lbFBvc2l0aW9uOiBzdHJpbmcgPSBcImJvdHRvbVwiO1xyXG4gIEBJbnB1dCgnc2hvd1BhZ2VOYXZpZ2F0aW9uJykgc2hvd1BhZ2VOYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdzaG93UHJpbnRCdXR0b24nKSBzaG93UHJpbnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ3Nob3dGdWxsU2NyZWVuQnV0dG9uJykgc2hvd0Z1bGxTY3JlZW5CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ3Nob3dWaXN1YWxIZWFkZXJzJykgc2hvd1Zpc3VhbEhlYWRlcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgnc2hvd1JlZnJlc2hCdXR0b24nKSBzaG93UmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIEBJbnB1dCgnem9vbVJhdGlvJykgem9vbVJhdGlvOiBudW1iZXIgPSAwLjAwMTc1O1xyXG5cclxuICBAT3V0cHV0KCdyZWZyZXNoTm90QWxsb3dlZCcpIHJlZnJlc2hOb3RBbGxvd2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwb3dlcmJpUmVwb3J0V2lkdGghOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfem9vbSE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2V0IHpvb20odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fem9vbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXRSZXBvcnRab29tKHRoaXMuX3pvb20pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHpvb20oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl96b29tO1xyXG4gIH1cclxuICByZXBvcnRDbGFzcyA9ICdyZXBvcnQtY29udGFpbmVyJztcclxuXHJcbiAgcmVwb3J0Q29uZmlnOiBJUmVwb3J0RW1iZWRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgdHlwZTogJ3JlcG9ydCcsXHJcbiAgICBlbWJlZFVybDogdW5kZWZpbmVkLFxyXG4gICAgdG9rZW5UeXBlOiBtb2RlbHMuVG9rZW5UeXBlLkFhZCxcclxuICAgIGFjY2Vzc1Rva2VuOiB1bmRlZmluZWQsXHJcbiAgICBmaWx0ZXJzOiB1bmRlZmluZWQsXHJcbiAgICBzZXR0aW5nczoge1xyXG4gICAgICBsYXlvdXRUeXBlOiBtb2RlbHMuTGF5b3V0VHlwZS5DdXN0b20sXHJcbiAgICAgIGN1c3RvbUxheW91dDoge1xyXG4gICAgICAgIGRpc3BsYXlPcHRpb246IG1vZGVscy5EaXNwbGF5T3B0aW9uLkZpdFRvV2lkdGhcclxuICAgICAgfSxcclxuICAgICAgYmFja2dyb3VuZDogbW9kZWxzLkJhY2tncm91bmRUeXBlLlRyYW5zcGFyZW50XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZXZlbnRIYW5kbGVyc01hcCA9IG5ldyBNYXAoW1xyXG4gICAgWydsb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICByZXBvcnQuc2V0Q29tcG9uZW50VGl0bGUoJ0VtYmVkZGVkIHJlcG9ydCcpO1xyXG4gICAgfSxcclxuICAgIF0sXHJcbiAgICBbJ3JlbmRlcmVkJywgKCkgPT4geyB9XSxcclxuICAgIFsnZXJyb3InLCAoZXZlbnQ/OiBzZXJ2aWNlLklDdXN0b21FdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXZlbnQuZGV0YWlsKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIF0sXHJcbiAgICBbJ3Zpc3VhbENsaWNrZWQnLCAoKSA9PiB7IH1dLFxyXG4gICAgWydwYWdlQ2hhbmdlZCcsIChldmVudCkgPT4geyB9XSxcclxuICBdKSBhcyBNYXA8c3RyaW5nLCAoZXZlbnQ/OiBzZXJ2aWNlLklDdXN0b21FdmVudDxhbnk+LCBlbWJlZGRlZEVudGl0eT86IEVtYmVkKSA9PiB2b2lkIHwgbnVsbD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoUG93ZXJCSVJlcG9ydEVtYmVkQ29tcG9uZW50KSByZXBvcnRPYmohOiBQb3dlckJJUmVwb3J0RW1iZWRDb21wb25lbnQ7XHJcblxyXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIC8vIG9uUmVzaXplKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIHRoaXMuZ2V0UmVwb3J0RGl2V2lkdGgoKTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWJlZFJlcG9ydCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0UmVwb3J0RGl2V2lkdGgoKSB7XHJcbiAgLy8gICB0aGlzLnBvd2VyYmlSZXBvcnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3dlcmJpQ29udGFpbmVyJykub2Zmc2V0V2lkdGg7XHJcbiAgLy8gICB0aGlzLnNldFJlcG9ydFpvb20odGhpcy5wb3dlcmJpUmVwb3J0V2lkdGggKiB0aGlzLnpvb21SYXRpbyk7XHJcbiAgLy8gfVxyXG5cclxuICBhc3luYyBlbWJlZFJlcG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVwb3J0Q29uZmlnID0ge1xyXG4gICAgICAgIC4uLnRoaXMucmVwb3J0Q29uZmlnLFxyXG4gICAgICAgIGlkOiB0aGlzLmVtYmVkQ29uZmlnIS5pZCxcclxuICAgICAgICBlbWJlZFVybDogdGhpcy5lbWJlZENvbmZpZyEuZW1iZWRVcmwsXHJcbiAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuZW1iZWRDb25maWchLmVtYmVkVG9rZW4udG9rZW4sXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5wYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzID8gW0pTT04ucGFyc2UodGhpcy5wYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzKV0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIHBhbmVzOiB7XHJcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnNob3dSZXBvcnRGaWx0ZXJzXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VOYXZpZ2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93UGFnZU5hdmlnYXRpb25cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB2aXN1YWxTZXR0aW5nczoge1xyXG4gICAgICAgICAgICB2aXN1YWxIZWFkZXJzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93VmlzdWFsSGVhZGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGN1c3RvbUxheW91dDoge1xyXG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uOiBtb2RlbHMuRGlzcGxheU9wdGlvbi5GaXRUb1dpZHRoXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYmFja2dyb3VuZDogbW9kZWxzLkJhY2tncm91bmRUeXBlLlRyYW5zcGFyZW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGZldGNoIGNvbmZpZyBmb3IgcmVwb3J0LiBTdGF0dXM6ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgcmVwb3J0LnJlZnJlc2goKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yczphbnkpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3JzKTtcclxuICAgICAgaWYoZXJyb3JzLm1lc3NhZ2UgPSBcInJlZnJlc2hOb3RBbGxvd2VkXCIpIHRoaXMub25SZWZyZXNoTm90QWxsb3dlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRmlsdGVycyhmaWx0ZXI6IG1vZGVscy5JRmlsdGVyKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICBhd2FpdCByZXBvcnQucmVtb3ZlRmlsdGVycygpOyAgICAgICAgXHJcbiAgICAgIGF3YWl0IHJlcG9ydC51cGRhdGVGaWx0ZXJzKG1vZGVscy5GaWx0ZXJzT3BlcmF0aW9ucy5BZGQsIFtmaWx0ZXJdKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOmFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgaWYoZXJyb3IubWVzc2FnZSA9IFwicmVmcmVzaE5vdEFsbG93ZWRcIikgdGhpcy5vblJlZnJlc2hOb3RBbGxvd2VkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNldFJlcG9ydFpvb20oem9vbTogbnVtYmVyKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICBhd2FpdCByZXBvcnQuc2V0Wm9vbSh6b29tKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3Igc2V0dGluZyByZXBvcnQgem9vbTogXCIgKyBlcnJvcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaW50KCkge1xyXG4gICAgY29uc3QgcmVwb3J0OiBSZXBvcnQgPSB0aGlzLnJlcG9ydE9iai5nZXRSZXBvcnQoKTtcclxuICAgIHJlcG9ydC5wcmludCgpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJGdWxsU2NyZWVuKCkge1xyXG4gICAgY29uc3QgcmVwb3J0OiBSZXBvcnQgPSB0aGlzLnJlcG9ydE9iai5nZXRSZXBvcnQoKTtcclxuICAgIHJlcG9ydC5mdWxsc2NyZWVuKCk7XHJcbiAgfVxyXG5cclxuICBvblJlZnJlc2hOb3RBbGxvd2VkKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoTm90QWxsb3dlZC5lbWl0KHRydWUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwicmVwb3J0VGl0bGUgfHwgc2hvd1ByaW50QnV0dG9uIHx8IHNob3dGdWxsU2NyZWVuQnV0dG9uXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93UmVmcmVzaEJ1dHRvblwiIGljb249XCJwaSBwaS1yZWZyZXNoXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJyZWZyZXNoKClcIj5cclxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1ByaW50QnV0dG9uXCIgaWNvbj1cInBpIHBpLXByaW50XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJwcmludCgpXCI+XHJcbiAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dGdWxsU2NyZWVuQnV0dG9uXCIgaWNvbj1cInBpIHBpLWFycm93cy1hbHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVudGVyRnVsbFNjcmVlbigpXCI+XHJcbiAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxQb3NpdGlvbiA9PSAncmlnaHQnXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtOFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3dlcmJpUmVwb3J0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC00XCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJoYXNSZXBvcnRGaWx0ZXJzXCIgc2VsZWN0PVwiLnJlcG9ydC1maWx0ZXJzLXJpZ2h0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsUG9zaXRpb24gPT0gJ2xlZnQnXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtOFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaGFzUmVwb3J0RmlsdGVyc1wiIHNlbGVjdD1cIi5yZXBvcnQtZmlsdGVycy1sZWZ0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtNFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3dlcmJpUmVwb3J0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxQb3NpdGlvbiA9PSAnYm90dG9tJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvd2VyYmlSZXBvcnRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaGFzUmVwb3J0RmlsdGVyc1wiIHNlbGVjdD1cIi5yZXBvcnQtZmlsdGVycy1ib3R0b21cIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3dlcmJpUmVwb3J0PlxyXG4gICAgPGRpdiBpZD1cInBvd2VyYmlDb250YWluZXJcIj5cclxuICAgICAgICA8cG93ZXJiaS1yZXBvcnQgW2VtYmVkQ29uZmlnXT1cInJlcG9ydENvbmZpZ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3NzQ2xhc3NOYW1lXT1cInJlcG9ydENsYXNzXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudEhhbmRsZXJzXT1cImV2ZW50SGFuZGxlcnNNYXBcIj5cclxuICAgICAgICA8L3Bvd2VyYmktcmVwb3J0PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1wb3dlcmJpLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9yZXBvcnQvdy1wb3dlcmJpLXJlcG9ydC93LXBvd2VyYmktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3JlcG9ydC93LXBvd2VyYmktcmVwb3J0L3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBILE9BQU8sRUFBNEMsTUFBTSxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBT3JFLE1BQU0sT0FBTyx1QkFBdUI7SUFpRWxDLDZDQUE2QztJQUM3Qyx5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLElBQUk7SUFFSixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbEVmLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDakMsd0JBQW1CLEdBQVcsUUFBUSxDQUFDO1FBQ3hDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUN2QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUM1Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDekMsc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ2xDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUM5QyxXQUFNLEdBQVcsT0FBTyxDQUFDO1FBQzFDLG1EQUFtRDtRQUV0QixzQkFBaUIsR0FBRyxJQUFJLFlBQVks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QWtCO3NCQUE5QyxLQUFLO3VCQUFDLG9CQUFvQjtnQkFDRCxlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDTyxvQkFBb0I7c0JBQWxELEtBQUs7dUJBQUMsc0JBQXNCO2dCQUNELGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ0UsaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFDVCxNQUFNO3NCQUF0QixLQUFLO3VCQUFDLFFBQVE7Z0JBR2MsaUJBQWlCO3NCQUE3QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFLZCxJQUFJO3NCQUFoQixLQUFLO2dCQTBDa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFbWJlZENvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZW1iZWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRW1iZWQsIElSZXBvcnRFbWJlZENvbmZpZ3VyYXRpb24sIFJlcG9ydCwgbW9kZWxzLCBzZXJ2aWNlIH0gZnJvbSAncG93ZXJiaS1jbGllbnQnO1xyXG5pbXBvcnQgeyBQb3dlckJJUmVwb3J0RW1iZWRDb21wb25lbnQgfSBmcm9tICdwb3dlcmJpLWNsaWVudC1hbmd1bGFyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy1wb3dlcmJpLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ctcG93ZXJiaS1yZXBvcnQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXUG93ZXJiaVJlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgnZW1iZWRDb25maWcnKSBlbWJlZENvbmZpZyE6IEVtYmVkQ29uZmlnO1xyXG4gIEBJbnB1dCgncmVwb3J0VGl0bGUnKSByZXBvcnRUaXRsZSE6IHN0cmluZztcclxuICBASW5wdXQoJ2hhc1JlcG9ydEZpbHRlcnMnKSBoYXNSZXBvcnRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdwYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzJykgcGFyYW1ldGVyUmVwb3J0RmlsdGVycyE6IHN0cmluZztcclxuICBASW5wdXQoJ3Nob3dSZXBvcnRGaWx0ZXJzJykgc2hvd1JlcG9ydEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ2ZpbHRlclBhbmVsUG9zaXRpb24nKSBmaWx0ZXJQYW5lbFBvc2l0aW9uOiBzdHJpbmcgPSBcImJvdHRvbVwiO1xyXG4gIEBJbnB1dCgnc2hvd1BhZ2VOYXZpZ2F0aW9uJykgc2hvd1BhZ2VOYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdzaG93UHJpbnRCdXR0b24nKSBzaG93UHJpbnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ3Nob3dGdWxsU2NyZWVuQnV0dG9uJykgc2hvd0Z1bGxTY3JlZW5CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ3Nob3dWaXN1YWxIZWFkZXJzJykgc2hvd1Zpc3VhbEhlYWRlcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgnc2hvd1JlZnJlc2hCdXR0b24nKSBzaG93UmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnaGVpZ2h0JykgaGVpZ2h0OiBzdHJpbmcgPSAnODEwcHgnO1xyXG4gIC8vIEBJbnB1dCgnem9vbVJhdGlvJykgem9vbVJhdGlvOiBudW1iZXIgPSAwLjAwMTc1O1xyXG5cclxuICBAT3V0cHV0KCdyZWZyZXNoTm90QWxsb3dlZCcpIHJlZnJlc2hOb3RBbGxvd2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwb3dlcmJpUmVwb3J0V2lkdGghOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfem9vbSE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2V0IHpvb20odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fem9vbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXRSZXBvcnRab29tKHRoaXMuX3pvb20pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHpvb20oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl96b29tO1xyXG4gIH1cclxuICByZXBvcnRDbGFzcyA9ICdyZXBvcnQtY29udGFpbmVyJztcclxuXHJcbiAgcmVwb3J0Q29uZmlnOiBJUmVwb3J0RW1iZWRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgdHlwZTogJ3JlcG9ydCcsXHJcbiAgICBlbWJlZFVybDogdW5kZWZpbmVkLFxyXG4gICAgdG9rZW5UeXBlOiBtb2RlbHMuVG9rZW5UeXBlLkFhZCxcclxuICAgIGFjY2Vzc1Rva2VuOiB1bmRlZmluZWQsXHJcbiAgICBmaWx0ZXJzOiB1bmRlZmluZWQsXHJcbiAgICBzZXR0aW5nczoge1xyXG4gICAgICBsYXlvdXRUeXBlOiBtb2RlbHMuTGF5b3V0VHlwZS5DdXN0b20sXHJcbiAgICAgIGN1c3RvbUxheW91dDoge1xyXG4gICAgICAgIGRpc3BsYXlPcHRpb246IG1vZGVscy5EaXNwbGF5T3B0aW9uLkZpdFRvV2lkdGhcclxuICAgICAgfSxcclxuICAgICAgYmFja2dyb3VuZDogbW9kZWxzLkJhY2tncm91bmRUeXBlLlRyYW5zcGFyZW50XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZXZlbnRIYW5kbGVyc01hcCA9IG5ldyBNYXAoW1xyXG4gICAgWydsb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICByZXBvcnQuc2V0Q29tcG9uZW50VGl0bGUoJ0VtYmVkZGVkIHJlcG9ydCcpO1xyXG4gICAgfSxcclxuICAgIF0sXHJcbiAgICBbJ3JlbmRlcmVkJywgKCkgPT4geyB9XSxcclxuICAgIFsnZXJyb3InLCAoZXZlbnQ/OiBzZXJ2aWNlLklDdXN0b21FdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXZlbnQuZGV0YWlsKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIF0sXHJcbiAgICBbJ3Zpc3VhbENsaWNrZWQnLCAoKSA9PiB7IH1dLFxyXG4gICAgWydwYWdlQ2hhbmdlZCcsIChldmVudCkgPT4geyB9XSxcclxuICBdKSBhcyBNYXA8c3RyaW5nLCAoZXZlbnQ/OiBzZXJ2aWNlLklDdXN0b21FdmVudDxhbnk+LCBlbWJlZGRlZEVudGl0eT86IEVtYmVkKSA9PiB2b2lkIHwgbnVsbD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoUG93ZXJCSVJlcG9ydEVtYmVkQ29tcG9uZW50KSByZXBvcnRPYmohOiBQb3dlckJJUmVwb3J0RW1iZWRDb21wb25lbnQ7XHJcblxyXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIC8vIG9uUmVzaXplKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIHRoaXMuZ2V0UmVwb3J0RGl2V2lkdGgoKTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVtYmVkUmVwb3J0KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0taGVpZ2h0XCIsIHRoaXMuaGVpZ2h0KVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0UmVwb3J0RGl2V2lkdGgoKSB7XHJcbiAgLy8gICB0aGlzLnBvd2VyYmlSZXBvcnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3dlcmJpQ29udGFpbmVyJykub2Zmc2V0V2lkdGg7XHJcbiAgLy8gICB0aGlzLnNldFJlcG9ydFpvb20odGhpcy5wb3dlcmJpUmVwb3J0V2lkdGggKiB0aGlzLnpvb21SYXRpbyk7XHJcbiAgLy8gfVxyXG5cclxuICBhc3luYyBlbWJlZFJlcG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVwb3J0Q29uZmlnID0ge1xyXG4gICAgICAgIC4uLnRoaXMucmVwb3J0Q29uZmlnLFxyXG4gICAgICAgIGlkOiB0aGlzLmVtYmVkQ29uZmlnIS5pZCxcclxuICAgICAgICBlbWJlZFVybDogdGhpcy5lbWJlZENvbmZpZyEuZW1iZWRVcmwsXHJcbiAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuZW1iZWRDb25maWchLmVtYmVkVG9rZW4udG9rZW4sXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5wYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzID8gW0pTT04ucGFyc2UodGhpcy5wYXJhbWV0ZXJSZXBvcnRGaWx0ZXJzKV0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIHBhbmVzOiB7XHJcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnNob3dSZXBvcnRGaWx0ZXJzXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VOYXZpZ2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93UGFnZU5hdmlnYXRpb25cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB2aXN1YWxTZXR0aW5nczoge1xyXG4gICAgICAgICAgICB2aXN1YWxIZWFkZXJzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93VmlzdWFsSGVhZGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGN1c3RvbUxheW91dDoge1xyXG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uOiBtb2RlbHMuRGlzcGxheU9wdGlvbi5GaXRUb1dpZHRoXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYmFja2dyb3VuZDogbW9kZWxzLkJhY2tncm91bmRUeXBlLlRyYW5zcGFyZW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGZldGNoIGNvbmZpZyBmb3IgcmVwb3J0LiBTdGF0dXM6ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgcmVwb3J0LnJlZnJlc2goKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yczphbnkpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3JzKTtcclxuICAgICAgaWYoZXJyb3JzLm1lc3NhZ2UgPSBcInJlZnJlc2hOb3RBbGxvd2VkXCIpIHRoaXMub25SZWZyZXNoTm90QWxsb3dlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRmlsdGVycyhmaWx0ZXI6IG1vZGVscy5JRmlsdGVyKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICBhd2FpdCByZXBvcnQucmVtb3ZlRmlsdGVycygpOyAgICAgICAgXHJcbiAgICAgIGF3YWl0IHJlcG9ydC51cGRhdGVGaWx0ZXJzKG1vZGVscy5GaWx0ZXJzT3BlcmF0aW9ucy5BZGQsIFtmaWx0ZXJdKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOmFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgaWYoZXJyb3IubWVzc2FnZSA9IFwicmVmcmVzaE5vdEFsbG93ZWRcIikgdGhpcy5vblJlZnJlc2hOb3RBbGxvd2VkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNldFJlcG9ydFpvb20oem9vbTogbnVtYmVyKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXBvcnQ6IFJlcG9ydCA9IHRoaXMucmVwb3J0T2JqLmdldFJlcG9ydCgpO1xyXG4gICAgICBhd2FpdCByZXBvcnQuc2V0Wm9vbSh6b29tKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3Igc2V0dGluZyByZXBvcnQgem9vbTogXCIgKyBlcnJvcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaW50KCkge1xyXG4gICAgY29uc3QgcmVwb3J0OiBSZXBvcnQgPSB0aGlzLnJlcG9ydE9iai5nZXRSZXBvcnQoKTtcclxuICAgIHJlcG9ydC5wcmludCgpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJGdWxsU2NyZWVuKCkge1xyXG4gICAgY29uc3QgcmVwb3J0OiBSZXBvcnQgPSB0aGlzLnJlcG9ydE9iai5nZXRSZXBvcnQoKTtcclxuICAgIHJlcG9ydC5mdWxsc2NyZWVuKCk7XHJcbiAgfVxyXG5cclxuICBvblJlZnJlc2hOb3RBbGxvd2VkKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoTm90QWxsb3dlZC5lbWl0KHRydWUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwicmVwb3J0VGl0bGUgfHwgc2hvd1ByaW50QnV0dG9uIHx8IHNob3dGdWxsU2NyZWVuQnV0dG9uXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93UmVmcmVzaEJ1dHRvblwiIGljb249XCJwaSBwaS1yZWZyZXNoXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJyZWZyZXNoKClcIj5cclxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1ByaW50QnV0dG9uXCIgaWNvbj1cInBpIHBpLXByaW50XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJwcmludCgpXCI+XHJcbiAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dGdWxsU2NyZWVuQnV0dG9uXCIgaWNvbj1cInBpIHBpLWFycm93cy1hbHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVudGVyRnVsbFNjcmVlbigpXCI+XHJcbiAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxQb3NpdGlvbiA9PSAncmlnaHQnXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtOFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3dlcmJpUmVwb3J0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC00XCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJoYXNSZXBvcnRGaWx0ZXJzXCIgc2VsZWN0PVwiLnJlcG9ydC1maWx0ZXJzLXJpZ2h0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsUG9zaXRpb24gPT0gJ2xlZnQnXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtOFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaGFzUmVwb3J0RmlsdGVyc1wiIHNlbGVjdD1cIi5yZXBvcnQtZmlsdGVycy1sZWZ0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtNFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3dlcmJpUmVwb3J0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxQb3NpdGlvbiA9PSAnYm90dG9tJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvd2VyYmlSZXBvcnRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaGFzUmVwb3J0RmlsdGVyc1wiIHNlbGVjdD1cIi5yZXBvcnQtZmlsdGVycy1ib3R0b21cIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3dlcmJpUmVwb3J0PlxyXG4gICAgPGRpdiBpZD1cInBvd2VyYmlDb250YWluZXJcIj5cclxuICAgICAgICA8cG93ZXJiaS1yZXBvcnQgW2VtYmVkQ29uZmlnXT1cInJlcG9ydENvbmZpZ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3NzQ2xhc3NOYW1lXT1cInJlcG9ydENsYXNzXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudEhhbmRsZXJzXT1cImV2ZW50SGFuZGxlcnNNYXBcIj5cclxuICAgICAgICA8L3Bvd2VyYmktcmVwb3J0PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19