@wizishop/img-manager 15.2.48 → 15.2.50

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.
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class IconService {
4
+ loadIconLib() {
5
+ const link = document.createElement('link');
6
+ link.href = 'https://pro.fontawesome.com/releases/v5.12.1/css/all.css';
7
+ link.rel = 'stylesheet';
8
+ link.crossOrigin = "anonymous";
9
+ document.getElementsByTagName('head')[0].appendChild(link);
10
+ }
11
+ }
12
+ IconService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
+ IconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, providedIn: 'root' });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, decorators: [{
15
+ type: Injectable,
16
+ args: [{ providedIn: 'root' }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9pY29uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFdBQVc7SUFFcEIsV0FBVztRQUNMLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRywwREFBMEQsQ0FBQztRQUN2RSxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7O3dHQVJNLFdBQVc7NEdBQVgsV0FBVyxjQURDLE1BQU07MkZBQ2xCLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJY29uU2VydmljZSB7XG5cbiAgICBsb2FkSWNvbkxpYigpIHtcbiAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgIGxpbmsuaHJlZiA9ICdodHRwczovL3Byby5mb250YXdlc29tZS5jb20vcmVsZWFzZXMvdjUuMTIuMS9jc3MvYWxsLmNzcyc7XG4gICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgbGluay5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIH1cblxufSJdfQ==
@@ -6,6 +6,7 @@ import { ImgEventService } from './services/img-event.service';
6
6
  import { DomService } from './services/dom.service';
7
7
  import { HostListener } from '@angular/core';
8
8
  import { UploadService } from './services/upload.service';
9
+ import { IconService } from './services/icon.service';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "./services/img-selection.service";
11
12
  import * as i2 from "./services/user-settings.service";
@@ -13,17 +14,19 @@ import * as i3 from "./services/canva.service";
13
14
  import * as i4 from "./services/img-event.service";
14
15
  import * as i5 from "./services/dom.service";
15
16
  import * as i6 from "./services/upload.service";
16
- import * as i7 from "@angular/common";
17
- import * as i8 from "./components/img-tabs/img-tabs.component";
18
- import * as i9 from "./components/img-selection/img-selection.component";
17
+ import * as i7 from "./services/icon.service";
18
+ import * as i8 from "@angular/common";
19
+ import * as i9 from "./components/img-tabs/img-tabs.component";
20
+ import * as i10 from "./components/img-selection/img-selection.component";
19
21
  export class WzImgManagerComponent {
20
- constructor(imgSelectionService, userSettingsService, canvaService, imgEventService, domService, uploadService) {
22
+ constructor(imgSelectionService, userSettingsService, canvaService, imgEventService, domService, uploadService, iconService) {
21
23
  this.imgSelectionService = imgSelectionService;
22
24
  this.userSettingsService = userSettingsService;
23
25
  this.canvaService = canvaService;
24
26
  this.imgEventService = imgEventService;
25
27
  this.domService = domService;
26
28
  this.uploadService = uploadService;
29
+ this.iconService = iconService;
27
30
  this.showSelection = false;
28
31
  this.imgManagerClosed = new EventEmitter();
29
32
  this._multipleImgMode = false;
@@ -33,6 +36,7 @@ export class WzImgManagerComponent {
33
36
  this.close = false;
34
37
  this.listDisplayed = false;
35
38
  this.hideTab = false;
39
+ this.iconService.loadIconLib();
36
40
  }
37
41
  // If forceToOpenCanva is true : Canva will open with the canvaService.expectedImgSizesChange
38
42
  // If forceToOpenCanva is a WiziBlockMediaDto, Canva open immediatly
@@ -160,12 +164,12 @@ export class WzImgManagerComponent {
160
164
  this.listDisplayedEvent.unsubscribe();
161
165
  }
162
166
  }
163
- WzImgManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, deps: [{ token: i1.ImgSelectionService }, { token: i2.UserSettingsService }, { token: i3.CanvaService }, { token: i4.ImgEventService }, { token: i5.DomService }, { token: i6.UploadService }], target: i0.ɵɵFactoryTarget.Component });
164
- WzImgManagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: WzImgManagerComponent, selector: "wz-img-manager", inputs: { stateDisplayed: "stateDisplayed", showSelection: "showSelection", forceToOpenCanva: "forceToOpenCanva", multipleImgMode: "multipleImgMode", showImgManagerModule: "showImgManagerModule" }, outputs: { imgManagerClosed: "imgManagerClosed", imgSelectionChange: "imgSelectionChange", imageUploaded: "imageUploaded" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, ngImport: i0, template: "<div class=\"wz-img-manager\">\n <!-- Img selection handler -->\n <div class=\"wz-img-manager__selectionHandler\" *ngIf=\"showSelection\">\n <img-selection></img-selection>\n </div>\n\n <!-- Img manager module -->\n <div\n *ngIf=\"_showImgManagerModule\"\n class=\"wz-img-manager__module\"\n [ngClass]=\"{\n 'wz-img-manager__module--small': stateDisplayed === 'small',\n 'wz-img-manager__module--full': stateDisplayed === 'full',\n 'wz-img-manager__module--window': stateDisplayed === 'window',\n 'wz-img-manager__module--edit': hideTab}\"\n >\n\n <div class=\"wz-img-manager__module__header\" *ngIf=\"stateDisplayed !== 'window'\">\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'full'\" type=\"button\"><span>Expand</span><i class=\"fal fa-compress-alt\"></i></button>\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'closed'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"openFull()\" *ngIf=\"stateDisplayed === 'small'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"onClose()\" *ngIf=\"stateDisplayed !== 'closed'\" type=\"button\"><span>Close</span><i class=\"fal fa-times\"></i></button>\n </div>\n\n <div\n class=\"wz-img-manager__module__content wz-block\"\n [ngClass]=\"{'wz-block--window': stateDisplayed === 'window'}\">\n <img-tabs\n [stateDisplayed]=\"stateDisplayed\"\n [multipleImgMode]=\"multipleImgMode\"\n [listDisplayed]=\"listDisplayed\"\n (imgManagerClosed)=\"onImgManagerClosed()\"\n (switchDisplayWindow)=\"changeDisplayTab()\"\n (currentTab)=\"setCurrentTab($event)\">\n </img-tabs>\n </div>\n </div>\n\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.ImgTabsComponent, selector: "img-tabs", inputs: ["multipleImgMode", "stateDisplayed", "listDisplayed"], outputs: ["imgManagerClosed", "currentTab", "switchDisplayWindow"] }, { kind: "component", type: i9.ImgSelectionComponent, selector: "img-selection", inputs: ["tabDisplayed"], outputs: ["imgManagerClosed"] }] });
167
+ WzImgManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, deps: [{ token: i1.ImgSelectionService }, { token: i2.UserSettingsService }, { token: i3.CanvaService }, { token: i4.ImgEventService }, { token: i5.DomService }, { token: i6.UploadService }, { token: i7.IconService }], target: i0.ɵɵFactoryTarget.Component });
168
+ WzImgManagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: WzImgManagerComponent, selector: "wz-img-manager", inputs: { stateDisplayed: "stateDisplayed", showSelection: "showSelection", forceToOpenCanva: "forceToOpenCanva", multipleImgMode: "multipleImgMode", showImgManagerModule: "showImgManagerModule" }, outputs: { imgManagerClosed: "imgManagerClosed", imgSelectionChange: "imgSelectionChange", imageUploaded: "imageUploaded" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, ngImport: i0, template: "<div class=\"wz-img-manager\">\n <!-- Img selection handler -->\n <div class=\"wz-img-manager__selectionHandler\" *ngIf=\"showSelection\">\n <img-selection></img-selection>\n </div>\n\n <!-- Img manager module -->\n <div\n *ngIf=\"_showImgManagerModule\"\n class=\"wz-img-manager__module\"\n [ngClass]=\"{\n 'wz-img-manager__module--small': stateDisplayed === 'small',\n 'wz-img-manager__module--full': stateDisplayed === 'full',\n 'wz-img-manager__module--window': stateDisplayed === 'window',\n 'wz-img-manager__module--edit': hideTab}\"\n >\n\n <div class=\"wz-img-manager__module__header\" *ngIf=\"stateDisplayed !== 'window'\">\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'full'\" type=\"button\"><span>Expand</span><i class=\"fal fa-compress-alt\"></i></button>\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'closed'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"openFull()\" *ngIf=\"stateDisplayed === 'small'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"onClose()\" *ngIf=\"stateDisplayed !== 'closed'\" type=\"button\"><span>Close</span><i class=\"fal fa-times\"></i></button>\n </div>\n\n <div\n class=\"wz-img-manager__module__content wz-block\"\n [ngClass]=\"{'wz-block--window': stateDisplayed === 'window'}\">\n <img-tabs\n [stateDisplayed]=\"stateDisplayed\"\n [multipleImgMode]=\"multipleImgMode\"\n [listDisplayed]=\"listDisplayed\"\n (imgManagerClosed)=\"onImgManagerClosed()\"\n (switchDisplayWindow)=\"changeDisplayTab()\"\n (currentTab)=\"setCurrentTab($event)\">\n </img-tabs>\n </div>\n </div>\n\n</div>\n", dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.ImgTabsComponent, selector: "img-tabs", inputs: ["multipleImgMode", "stateDisplayed", "listDisplayed"], outputs: ["imgManagerClosed", "currentTab", "switchDisplayWindow"] }, { kind: "component", type: i10.ImgSelectionComponent, selector: "img-selection", inputs: ["tabDisplayed"], outputs: ["imgManagerClosed"] }] });
165
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, decorators: [{
166
170
  type: Component,
167
171
  args: [{ selector: 'wz-img-manager', template: "<div class=\"wz-img-manager\">\n <!-- Img selection handler -->\n <div class=\"wz-img-manager__selectionHandler\" *ngIf=\"showSelection\">\n <img-selection></img-selection>\n </div>\n\n <!-- Img manager module -->\n <div\n *ngIf=\"_showImgManagerModule\"\n class=\"wz-img-manager__module\"\n [ngClass]=\"{\n 'wz-img-manager__module--small': stateDisplayed === 'small',\n 'wz-img-manager__module--full': stateDisplayed === 'full',\n 'wz-img-manager__module--window': stateDisplayed === 'window',\n 'wz-img-manager__module--edit': hideTab}\"\n >\n\n <div class=\"wz-img-manager__module__header\" *ngIf=\"stateDisplayed !== 'window'\">\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'full'\" type=\"button\"><span>Expand</span><i class=\"fal fa-compress-alt\"></i></button>\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'closed'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"openFull()\" *ngIf=\"stateDisplayed === 'small'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"onClose()\" *ngIf=\"stateDisplayed !== 'closed'\" type=\"button\"><span>Close</span><i class=\"fal fa-times\"></i></button>\n </div>\n\n <div\n class=\"wz-img-manager__module__content wz-block\"\n [ngClass]=\"{'wz-block--window': stateDisplayed === 'window'}\">\n <img-tabs\n [stateDisplayed]=\"stateDisplayed\"\n [multipleImgMode]=\"multipleImgMode\"\n [listDisplayed]=\"listDisplayed\"\n (imgManagerClosed)=\"onImgManagerClosed()\"\n (switchDisplayWindow)=\"changeDisplayTab()\"\n (currentTab)=\"setCurrentTab($event)\">\n </img-tabs>\n </div>\n </div>\n\n</div>\n" }]
168
- }], ctorParameters: function () { return [{ type: i1.ImgSelectionService }, { type: i2.UserSettingsService }, { type: i3.CanvaService }, { type: i4.ImgEventService }, { type: i5.DomService }, { type: i6.UploadService }]; }, propDecorators: { stateDisplayed: [{
172
+ }], ctorParameters: function () { return [{ type: i1.ImgSelectionService }, { type: i2.UserSettingsService }, { type: i3.CanvaService }, { type: i4.ImgEventService }, { type: i5.DomService }, { type: i6.UploadService }, { type: i7.IconService }]; }, propDecorators: { stateDisplayed: [{
169
173
  type: Input
170
174
  }], showSelection: [{
171
175
  type: Input
@@ -185,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
185
189
  }], imageUploaded: [{
186
190
  type: Output
187
191
  }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3otaW1nLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi93ei1pbWctbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ei1pbWctbWFuYWdlci9zcmMvbGliL3d6LWltZy1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7O0FBSzFELE1BQU0sT0FBTyxxQkFBcUI7SUEyRGhDLFlBQ1UsbUJBQXdDLEVBQ3hDLG1CQUF3QyxFQUN4QyxZQUEwQixFQUMxQixlQUFnQyxFQUNoQyxVQUFzQixFQUN0QixhQUE0QjtRQUw1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsa0JBQWEs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RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW1nU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW1nLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclNldHRpbmdzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IENhbnZhU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2FudmEuc2VydmljZSc7XG5pbXBvcnQgeyBJbWdFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ltZy1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2l6aUJsb2NrTWVkaWFEdG8gfSBmcm9tICcuL2R0by93aXppLWJsb2NrLW1lZGlhLmR0byc7XG5pbXBvcnQgeyBzdGF0ZURpc3BsYXllZCB9IGZyb20gJy4vZHRvL3N0YXRlRGlzcGxheWVkLmR0byc7XG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91cGxvYWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3ei1pbWctbWFuYWdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93ei1pbWctbWFuYWdlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV3pJbWdNYW5hZ2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3RhdGVEaXNwbGF5ZWQ6IHN0YXRlRGlzcGxheWVkO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gSWYgZm9yY2VUb09wZW5DYW52YSBpcyB0cnVlIDogQ2FudmEgd2lsbCBvcGVuIHdpdGggdGhlIGNhbnZhU2VydmljZS5leHBlY3RlZEltZ1NpemVzQ2hhbmdlXG4gIC8vIElmIGZvcmNlVG9PcGVuQ2FudmEgaXMgYSBXaXppQmxvY2tNZWRpYUR0bywgQ2FudmEgb3BlbiBpbW1lZGlhdGx5XG4gIEBJbnB1dCgpIHNldCBmb3JjZVRvT3BlbkNhbnZhKGZvcmNlVG9PcGVuQ2FudmE6IGJvb2xlYW58V2l6aUJsb2NrTWVkaWFEdG8pIHtcbiAgICB0aGlzLmNhbnZhU2VydmljZS5mb3JjZVRvT3BlbkNhbnZhID0gISFmb3JjZVRvT3BlbkNhbnZhO1xuXG4gICAgaWYgKHR5cGVvZiBmb3JjZVRvT3BlbkNhbnZhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhU2VydmljZS5leHBlY3RlZEltZ1NpemVzQ2hhbmdlKGZvcmNlVG9PcGVuQ2FudmEpO1xuICB9XG5cbiAgQE91dHB1dCgpIGltZ01hbmFnZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByaXZhdGUgX211bHRpcGxlSW1nTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBtdWx0aXBsZUltZ01vZGUoYWN0aXZhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZUltZ01vZGUgPSBhY3RpdmF0ZTtcbiAgICB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2Uuc2V0TXVsdGlwbGVJbWdNb2RlKHRoaXMuX211bHRpcGxlSW1nTW9kZSk7XG4gIH1cblxuICBnZXQgbXVsdGlwbGVJbWdNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZUltZ01vZGU7XG4gIH1cblxuICBfc2hvd0ltZ01hbmFnZXJNb2R1bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IHNob3dJbWdNYW5hZ2VyTW9kdWxlKGFjdGl2YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0ltZ01hbmFnZXJNb2R1bGUgPSBhY3RpdmF0ZTtcbiAgICBpZiAoYWN0aXZhdGUpIHtcbiAgICAgIHRoaXMuZGlzcGxheVNtYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dJbWdNYW5hZ2VyTW9kdWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZUltZ01vZGU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZURpc3BsYXllZCAmJiB0aGlzLnN0YXRlRGlzcGxheWVkICE9PSAnd2luZG93Jykge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGltZ1NlbGVjdGlvbkNoYW5nZSA9IHRoaXMuaW1nU2VsZWN0aW9uU2VydmljZS5pbWdTZWxlY3Rpb24kO1xuXG4gIEBPdXRwdXQoKSBpbWFnZVVwbG9hZGVkID0gdGhpcy51cGxvYWRTZXJ2aWNlLmltYWdlVXBsb2FkZWQkO1xuXG4gIGNsb3NlOiBib29sZWFuID0gZmFsc2VcbiAgc2VsZWN0SW1nRXZlbnQ6IFN1YnNjcmlwdGlvbjtcbiAgbGlzdERpc3BsYXllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBsaXN0RGlzcGxheWVkRXZlbnQ6IFN1YnNjcmlwdGlvbjtcbiAgaGlkZVRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBTYXZlIHRoZSBkZWZhdWx0IG92ZXJmbG93IGFwcGx5IHRvIGh0bWwgdGFnLCB3aGVuIHRoZSBtb2R1bGUgaXMgZnVsbCBvcGVuXG4gIHByaXZhdGUgb3ZlcmZsb3dIVE1MOiBzdHJpbmc7XG4gIHByaXZhdGUgYm9keVBhZGRpbmc6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGltZ1NlbGVjdGlvblNlcnZpY2U6IEltZ1NlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2V0dGluZ3NTZXJ2aWNlOiBVc2VyU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FudmFTZXJ2aWNlOiBDYW52YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbWdFdmVudFNlcnZpY2U6IEltZ0V2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLnNldE11bHRpcGxlSW1nTW9kZSh0aGlzLl9tdWx0aXBsZUltZ01vZGUpO1xuICAgIHRoaXMuaW1nU2VsZWN0aW9uU2VydmljZS5pbml0SW1nU2VsZWN0ZWRMaXN0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0SW1nRXZlbnQgPSB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2UuaW1nU2VsZWN0aW9uJC5zdWJzY3JpYmUoaW1nU2VsZWN0aW9uID0+e1xuXG4gICAgICBpZiAoaW1nU2VsZWN0aW9uICYmIGltZ1NlbGVjdGlvbi5sZW5ndGggJiYgdGhpcy5jaGVja0Nsb3NlSW1nTWFuYWdlcigpKSB7XG4gICAgICAgIC8vIENsb3NlIHRoZSBpbWcgbWFuYWdlclxuICAgICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNoZWNrVXNlckRpc3BsYXlQcmVmZXJlbmNlKCk7XG4gICAgLy8gVXNlIHdoZW4gdGhlIGltZyBtYW5hZ2VyIGlzIGZ1bGwgb3BlbiBvciBvcGVuIGluIHBhZ2UuIFRoaXMgZGlzcGxheSB0aGUgdXNlciBwcmVmZXJlbmNlIGRpc3BsYXksIG1vc2FpYyBvciBsaXN0LlxuICAgIHRoaXMubGlzdERpc3BsYXllZEV2ZW50ID0gdGhpcy5pbWdFdmVudFNlcnZpY2UuZ2V0bGlzdERpc3BsYXllZENoYW5nZSgpLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmxpc3REaXNwbGF5ZWQgPSB2YWx1ZSk7XG4gICAgLy8gUmVnaXN0ZXIgZG9tIHNlcnZpY2UgdG8gbGlzdGVuIG9uIGFsbCBldmVudCBvbiB0aGUgYm9keSB0byBhdm9pZCBoYXZpbmcgbXVsdGlwbGUgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdGhpbmcgZXZlcnkgd2hlcmVcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0RG9jdW1lbnRFdmVudExpc3RlbmVyKCk7XG4gIH1cblxuICBjaGVja1VzZXJEaXNwbGF5UHJlZmVyZW5jZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZURpc3BsYXllZCA9PT0gJ3dpbmRvdycgfHwgdGhpcy5zdGF0ZURpc3BsYXllZCA9PT0gJ2Z1bGwnKSB7XG4gICAgICB0aGlzLmxpc3REaXNwbGF5ZWQgPSB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UuZ2V0VXNlckRpc3BsYXlQcmVmZXJlbmNlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3VycmVudFRhYihldmVudCkge1xuICAgIGlmIChldmVudCA9PT0gJ2ltZy1lZGl0aW9uJykge1xuICAgICAgdGhpcy5oaWRlVGFiID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oaWRlVGFiID0gZmFsc2U7XG4gIH1cblxuICBkaXNwbGF5U21hbGwoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVEaXNwbGF5ZWQgIT09ICd3aW5kb3cnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZURpc3BsYXllZCA9ICdzbWFsbCc7XG4gICAgICAgIHRoaXMuYWRkQm9keUJvdHRvbVBhZGRpbmdGb3JNb2R1bGUoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBvcGVuU21hbGwoKSB7XG4gICAgdGhpcy5zdGF0ZURpc3BsYXllZCA9ICdzbWFsbCc7XG4gICAgdGhpcy5zZXRCb2R5TWFpblNjcm9sbCgpO1xuICAgIHRoaXMubGlzdERpc3BsYXllZCA9IGZhbHNlO1xuICB9XG5cbiAgb3BlbkZ1bGwoKSB7XG4gICAgdGhpcy5zdGF0ZURpc3BsYXllZCA9ICdmdWxsJztcbiAgICB0aGlzLmNoZWNrVXNlckRpc3BsYXlQcmVmZXJlbmNlKCk7XG4gICAgdGhpcy5oaWRlQm9keU1haW5TY3JvbGwoKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5zdGF0ZURpc3BsYXllZCA9ICdjbG9zZWQnO1xuICAgIHRoaXMuaGlkZVRhYiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0Qm9keU1haW5TY3JvbGwoKTtcbiAgICB0aGlzLnJlbW92ZUJvZHlCb3R0b21QYWRkaW5nRm9yTW9kdWxlKCk7XG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIHRoZSBjbG9zaW5nIGFubmltYXRpb25cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW1nTWFuYWdlckNsb3NlZC5lbWl0KCk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIG9uSW1nTWFuYWdlckNsb3NlZCgpIHtcbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgaW1nIG1hbmFnZXIgYWZ0ZXIgb25lIGltZyBpcyBzZWxlY3RlZCwgaWYgbm90IGluIG11bHRpcGxlIGltZyB0byBzZWxlY3RcbiAgICovXG4gIGNoZWNrQ2xvc2VJbWdNYW5hZ2VyKCkge1xuICAgIHJldHVybiAhdGhpcy5tdWx0aXBsZUltZ01vZGUgJiYgdGhpcy5zdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdycgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBoaWRlQm9keU1haW5TY3JvbGwoKSB7XG4gICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF07XG5cbiAgICBpZiAoIXRoaXMub3ZlcmZsb3dIVE1MKSB7XG4gICAgICB0aGlzLm92ZXJmbG93SFRNTCA9IGh0bWwuc3R5bGUub3ZlcmZsb3dZO1xuICAgIH1cblxuICAgIGh0bWwuc3R5bGUub3ZlcmZsb3dZID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIHNldEJvZHlNYWluU2Nyb2xsKCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdO1xuICAgIGh0bWwuc3R5bGUub3ZlcmZsb3dZID0gdGhpcy5vdmVyZmxvd0hUTUwgPyB0aGlzLm92ZXJmbG93SFRNTCA6IFwic2Nyb2xsXCI7XG4gIH1cblxuICBhZGRCb2R5Qm90dG9tUGFkZGluZ0Zvck1vZHVsZSgpIHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTtcbiAgICB0aGlzLmJvZHlQYWRkaW5nID0gdGhpcy5ib2R5UGFkZGluZyA/IHBhcnNlSW50KGJvZHkuc3R5bGUucGFkZGluZ0JvdHRvbSkgOiAwO1xuICAgIGJvZHkuc3R5bGUucGFkZGluZ0JvdHRvbSA9IHRoaXMuYm9keVBhZGRpbmcgKyAzMDAgKyAncHgnO1xuICB9XG5cbiAgcmVtb3ZlQm9keUJvdHRvbVBhZGRpbmdGb3JNb2R1bGUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmJvZHlQYWRkaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF07XG4gICAgICBib2R5LnN0eWxlLnBhZGRpbmdCb3R0b20gPSB0aGlzLmJvZHlQYWRkaW5nICsgJ3B4JztcbiAgICAgIHRoaXMuYm9keVBhZGRpbmcgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZURpc3BsYXlUYWIoKSB7XG4gICAgdGhpcy5zdGF0ZURpc3BsYXllZCA9ICdmdWxsJztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0SW1nRXZlbnQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhbnZhU2VydmljZS5leHBlY3RlZEltZ1NpemVzQ2hhbmdlKG51bGwpO1xuICAgIHRoaXMubGlzdERpc3BsYXllZEV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3ei1pbWctbWFuYWdlclwiPlxuICA8IS0tIEltZyBzZWxlY3Rpb24gaGFuZGxlciAtLT5cbiAgPGRpdiBjbGFzcz1cInd6LWltZy1tYW5hZ2VyX19zZWxlY3Rpb25IYW5kbGVyXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uXCI+XG4gICAgPGltZy1zZWxlY3Rpb24+PC9pbWctc2VsZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8IS0tIEltZyBtYW5hZ2VyIG1vZHVsZSAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwiX3Nob3dJbWdNYW5hZ2VyTW9kdWxlXCJcbiAgICBjbGFzcz1cInd6LWltZy1tYW5hZ2VyX19tb2R1bGVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd3ei1pbWctbWFuYWdlcl9fbW9kdWxlLS1zbWFsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnLFxuICAgICAgJ3d6LWltZy1tYW5hZ2VyX19tb2R1bGUtLWZ1bGwnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ2Z1bGwnLFxuICAgICAgJ3d6LWltZy1tYW5hZ2VyX19tb2R1bGUtLXdpbmRvdyc6IHN0YXRlRGlzcGxheWVkID09PSAnd2luZG93JyxcbiAgICAgICd3ei1pbWctbWFuYWdlcl9fbW9kdWxlLS1lZGl0JzogaGlkZVRhYn1cIlxuICA+XG5cbiAgICA8ZGl2IGNsYXNzPVwid3otaW1nLW1hbmFnZXJfX21vZHVsZV9faGVhZGVyXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdydcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5TbWFsbCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ2Z1bGwnXCIgdHlwZT1cImJ1dHRvblwiPjxzcGFuPkV4cGFuZDwvc3Bhbj48aSBjbGFzcz1cImZhbCBmYS1jb21wcmVzcy1hbHRcIj48L2k+PC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuU21hbGwoKVwiICpuZ0lmPVwic3RhdGVEaXNwbGF5ZWQgPT09ICdjbG9zZWQnXCIgdHlwZT1cImJ1dHRvblwiPjxzcGFuPkV4cGFuZDwvc3Bhbj48aSBjbGFzcz1cImZhbCBmYS1leHBhbmQtYWx0XCI+PC9pPjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlbkZ1bGwoKVwiICpuZ0lmPVwic3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIiB0eXBlPVwiYnV0dG9uXCI+PHNwYW4+RXhwYW5kPC9zcGFuPjxpIGNsYXNzPVwiZmFsIGZhLWV4cGFuZC1hbHRcIj48L2k+PC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvbkNsb3NlKClcIiAqbmdJZj1cInN0YXRlRGlzcGxheWVkICE9PSAnY2xvc2VkJ1wiIHR5cGU9XCJidXR0b25cIj48c3Bhbj5DbG9zZTwvc3Bhbj48aSBjbGFzcz1cImZhbCBmYS10aW1lc1wiPjwvaT48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwid3otaW1nLW1hbmFnZXJfX21vZHVsZV9fY29udGVudCB3ei1ibG9ja1wiXG4gICAgICBbbmdDbGFzc109XCJ7J3d6LWJsb2NrLS13aW5kb3cnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3dpbmRvdyd9XCI+XG4gICAgICA8aW1nLXRhYnNcbiAgICAgICAgW3N0YXRlRGlzcGxheWVkXT1cInN0YXRlRGlzcGxheWVkXCJcbiAgICAgICAgW211bHRpcGxlSW1nTW9kZV09XCJtdWx0aXBsZUltZ01vZGVcIlxuICAgICAgICBbbGlzdERpc3BsYXllZF09XCJsaXN0RGlzcGxheWVkXCJcbiAgICAgICAgKGltZ01hbmFnZXJDbG9zZWQpPVwib25JbWdNYW5hZ2VyQ2xvc2VkKClcIlxuICAgICAgICAoc3dpdGNoRGlzcGxheVdpbmRvdyk9XCJjaGFuZ2VEaXNwbGF5VGFiKClcIlxuICAgICAgICAoY3VycmVudFRhYik9XCJzZXRDdXJyZW50VGFiKCRldmVudClcIj5cbiAgICAgIDwvaW1nLXRhYnM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3otaW1nLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi93ei1pbWctbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ei1pbWctbWFuYWdlci9zcmMvbGliL3d6LWltZy1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7QUFLdEQsTUFBTSxPQUFPLHFCQUFxQjtJQTJEaEMsWUFDVSxtQkFBd0MsRUFDeEMsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLFdBQXdCO1FBTnhCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFB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QVEsQ0FBQztnQkFNekMsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWdTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9pbWctc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FudmFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jYW52YS5zZXJ2aWNlJztcbmltcG9ydCB7IEltZ0V2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW1nLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZG9tLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaXppQmxvY2tNZWRpYUR0byB9IGZyb20gJy4vZHRvL3dpemktYmxvY2stbWVkaWEuZHRvJztcbmltcG9ydCB7IHN0YXRlRGlzcGxheWVkIH0gZnJvbSAnLi9kdG8vc3RhdGVEaXNwbGF5ZWQuZHRvJztcbmltcG9ydCB7IFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9pY29uLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3otaW1nLW1hbmFnZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vd3otaW1nLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFd6SW1nTWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0YXRlRGlzcGxheWVkOiBzdGF0ZURpc3BsYXllZDtcbiAgQElucHV0KCkgc2hvd1NlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIElmIGZvcmNlVG9PcGVuQ2FudmEgaXMgdHJ1ZSA6IENhbnZhIHdpbGwgb3BlbiB3aXRoIHRoZSBjYW52YVNlcnZpY2UuZXhwZWN0ZWRJbWdTaXplc0NoYW5nZVxuICAvLyBJZiBmb3JjZVRvT3BlbkNhbnZhIGlzIGEgV2l6aUJsb2NrTWVkaWFEdG8sIENhbnZhIG9wZW4gaW1tZWRpYXRseVxuICBASW5wdXQoKSBzZXQgZm9yY2VUb09wZW5DYW52YShmb3JjZVRvT3BlbkNhbnZhOiBib29sZWFufFdpemlCbG9ja01lZGlhRHRvKSB7XG4gICAgdGhpcy5jYW52YVNlcnZpY2UuZm9yY2VUb09wZW5DYW52YSA9ICEhZm9yY2VUb09wZW5DYW52YTtcblxuICAgIGlmICh0eXBlb2YgZm9yY2VUb09wZW5DYW52YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YVNlcnZpY2UuZXhwZWN0ZWRJbWdTaXplc0NoYW5nZShmb3JjZVRvT3BlbkNhbnZhKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpbWdNYW5hZ2VyQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIF9tdWx0aXBsZUltZ01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgbXVsdGlwbGVJbWdNb2RlKGFjdGl2YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGVJbWdNb2RlID0gYWN0aXZhdGU7XG4gICAgdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLnNldE11bHRpcGxlSW1nTW9kZSh0aGlzLl9tdWx0aXBsZUltZ01vZGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpcGxlSW1nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGVJbWdNb2RlO1xuICB9XG5cbiAgX3Nob3dJbWdNYW5hZ2VyTW9kdWxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBzaG93SW1nTWFuYWdlck1vZHVsZShhY3RpdmF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dJbWdNYW5hZ2VyTW9kdWxlID0gYWN0aXZhdGU7XG4gICAgaWYgKGFjdGl2YXRlKSB7XG4gICAgICB0aGlzLmRpc3BsYXlTbWFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93SW1nTWFuYWdlck1vZHVsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGVJbWdNb2RlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKSBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc3RhdGVEaXNwbGF5ZWQgJiYgdGhpcy5zdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdycpIHtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBpbWdTZWxlY3Rpb25DaGFuZ2UgPSB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2UuaW1nU2VsZWN0aW9uJDtcblxuICBAT3V0cHV0KCkgaW1hZ2VVcGxvYWRlZCA9IHRoaXMudXBsb2FkU2VydmljZS5pbWFnZVVwbG9hZGVkJDtcblxuICBjbG9zZTogYm9vbGVhbiA9IGZhbHNlXG4gIHNlbGVjdEltZ0V2ZW50OiBTdWJzY3JpcHRpb247XG4gIGxpc3REaXNwbGF5ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGlzdERpc3BsYXllZEV2ZW50OiBTdWJzY3JpcHRpb247XG4gIGhpZGVUYWI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gU2F2ZSB0aGUgZGVmYXVsdCBvdmVyZmxvdyBhcHBseSB0byBodG1sIHRhZywgd2hlbiB0aGUgbW9kdWxlIGlzIGZ1bGwgb3BlblxuICBwcml2YXRlIG92ZXJmbG93SFRNTDogc3RyaW5nO1xuICBwcml2YXRlIGJvZHlQYWRkaW5nOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbWdTZWxlY3Rpb25TZXJ2aWNlOiBJbWdTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNldHRpbmdzU2VydmljZTogVXNlclNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhbnZhU2VydmljZTogQ2FudmFTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW1nRXZlbnRTZXJ2aWNlOiBJbWdFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlLFxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGljb25TZXJ2aWNlOiBJY29uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLmxvYWRJY29uTGliKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2Uuc2V0TXVsdGlwbGVJbWdNb2RlKHRoaXMuX211bHRpcGxlSW1nTW9kZSk7XG4gICAgdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLmluaXRJbWdTZWxlY3RlZExpc3QobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RJbWdFdmVudCA9IHRoaXMuaW1nU2VsZWN0aW9uU2VydmljZS5pbWdTZWxlY3Rpb24kLnN1YnNjcmliZShpbWdTZWxlY3Rpb24gPT57XG5cbiAgICAgIGlmIChpbWdTZWxlY3Rpb24gJiYgaW1nU2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLmNoZWNrQ2xvc2VJbWdNYW5hZ2VyKCkpIHtcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGltZyBtYW5hZ2VyXG4gICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tVc2VyRGlzcGxheVByZWZlcmVuY2UoKTtcbiAgICAvLyBVc2Ugd2hlbiB0aGUgaW1nIG1hbmFnZXIgaXMgZnVsbCBvcGVuIG9yIG9wZW4gaW4gcGFnZS4gVGhpcyBkaXNwbGF5IHRoZSB1c2VyIHByZWZlcmVuY2UgZGlzcGxheSwgbW9zYWljIG9yIGxpc3QuXG4gICAgdGhpcy5saXN0RGlzcGxheWVkRXZlbnQgPSB0aGlzLmltZ0V2ZW50U2VydmljZS5nZXRsaXN0RGlzcGxheWVkQ2hhbmdlKCkuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMubGlzdERpc3BsYXllZCA9IHZhbHVlKTtcbiAgICAvLyBSZWdpc3RlciBkb20gc2VydmljZSB0byBsaXN0ZW4gb24gYWxsIGV2ZW50IG9uIHRoZSBib2R5IHRvIGF2b2lkIGhhdmluZyBtdWx0aXBsZSBpbnN0YW5jZSBvZiB0aGUgc2FtZSB0aGluZyBldmVyeSB3aGVyZVxuICAgIHRoaXMuZG9tU2VydmljZS5zZXREb2N1bWVudEV2ZW50TGlzdGVuZXIoKTtcbiAgfVxuXG4gIGNoZWNrVXNlckRpc3BsYXlQcmVmZXJlbmNlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlRGlzcGxheWVkID09PSAnd2luZG93JyB8fCB0aGlzLnN0YXRlRGlzcGxheWVkID09PSAnZnVsbCcpIHtcbiAgICAgIHRoaXMubGlzdERpc3BsYXllZCA9IHRoaXMudXNlclNldHRpbmdzU2VydmljZS5nZXRVc2VyRGlzcGxheVByZWZlcmVuY2UoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDdXJyZW50VGFiKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ID09PSAnaW1nLWVkaXRpb24nKSB7XG4gICAgICB0aGlzLmhpZGVUYWIgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhpZGVUYWIgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc3BsYXlTbWFsbCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdycpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlRGlzcGxheWVkID0gJ3NtYWxsJztcbiAgICAgICAgdGhpcy5hZGRCb2R5Qm90dG9tUGFkZGluZ0Zvck1vZHVsZSgpO1xuICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5TbWFsbCgpIHtcbiAgICB0aGlzLnN0YXRlRGlzcGxheWVkID0gJ3NtYWxsJztcbiAgICB0aGlzLnNldEJvZHlNYWluU2Nyb2xsKCk7XG4gICAgdGhpcy5saXN0RGlzcGxheWVkID0gZmFsc2U7XG4gIH1cblxuICBvcGVuRnVsbCgpIHtcbiAgICB0aGlzLnN0YXRlRGlzcGxheWVkID0gJ2Z1bGwnO1xuICAgIHRoaXMuY2hlY2tVc2VyRGlzcGxheVByZWZlcmVuY2UoKTtcbiAgICB0aGlzLmhpZGVCb2R5TWFpblNjcm9sbCgpO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLnN0YXRlRGlzcGxheWVkID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5oaWRlVGFiID0gZmFsc2U7XG4gICAgdGhpcy5zZXRCb2R5TWFpblNjcm9sbCgpO1xuICAgIHRoaXMucmVtb3ZlQm9keUJvdHRvbVBhZGRpbmdGb3JNb2R1bGUoKTtcbiAgICAvLyBXYWl0IHRoZSBlbmQgb2YgdGhlIGNsb3NpbmcgYW5uaW1hdGlvblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbWdNYW5hZ2VyQ2xvc2VkLmVtaXQoKTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgb25JbWdNYW5hZ2VyQ2xvc2VkKCkge1xuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBpbWcgbWFuYWdlciBhZnRlciBvbmUgaW1nIGlzIHNlbGVjdGVkLCBpZiBub3QgaW4gbXVsdGlwbGUgaW1nIHRvIHNlbGVjdFxuICAgKi9cbiAgY2hlY2tDbG9zZUltZ01hbmFnZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLm11bHRpcGxlSW1nTW9kZSAmJiB0aGlzLnN0YXRlRGlzcGxheWVkICE9PSAnd2luZG93JyA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGhpZGVCb2R5TWFpblNjcm9sbCgpIHtcbiAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcblxuICAgIGlmICghdGhpcy5vdmVyZmxvd0hUTUwpIHtcbiAgICAgIHRoaXMub3ZlcmZsb3dIVE1MID0gaHRtbC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgfVxuXG4gICAgaHRtbC5zdHlsZS5vdmVyZmxvd1kgPSBcImhpZGRlblwiO1xuICB9XG5cbiAgc2V0Qm9keU1haW5TY3JvbGwoKSB7XG4gICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF07XG4gICAgaHRtbC5zdHlsZS5vdmVyZmxvd1kgPSB0aGlzLm92ZXJmbG93SFRNTCA/IHRoaXMub3ZlcmZsb3dIVE1MIDogXCJzY3JvbGxcIjtcbiAgfVxuXG4gIGFkZEJvZHlCb3R0b21QYWRkaW5nRm9yTW9kdWxlKCkge1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdO1xuICAgIHRoaXMuYm9keVBhZGRpbmcgPSB0aGlzLmJvZHlQYWRkaW5nID8gcGFyc2VJbnQoYm9keS5zdHlsZS5wYWRkaW5nQm90dG9tKSA6IDA7XG4gICAgYm9keS5zdHlsZS5wYWRkaW5nQm90dG9tID0gdGhpcy5ib2R5UGFkZGluZyArIDMwMCArICdweCc7XG4gIH1cblxuICByZW1vdmVCb2R5Qm90dG9tUGFkZGluZ0Zvck1vZHVsZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYm9keVBhZGRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTtcbiAgICAgIGJvZHkuc3R5bGUucGFkZGluZ0JvdHRvbSA9IHRoaXMuYm9keVBhZGRpbmcgKyAncHgnO1xuICAgICAgdGhpcy5ib2R5UGFkZGluZyA9IDA7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlRGlzcGxheVRhYigpIHtcbiAgICB0aGlzLnN0YXRlRGlzcGxheWVkID0gJ2Z1bGwnO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWxlY3RJbWdFdmVudC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FudmFTZXJ2aWNlLmV4cGVjdGVkSW1nU2l6ZXNDaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5saXN0RGlzcGxheWVkRXZlbnQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInd6LWltZy1tYW5hZ2VyXCI+XG4gIDwhLS0gSW1nIHNlbGVjdGlvbiBoYW5kbGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwid3otaW1nLW1hbmFnZXJfX3NlbGVjdGlvbkhhbmRsZXJcIiAqbmdJZj1cInNob3dTZWxlY3Rpb25cIj5cbiAgICA8aW1nLXNlbGVjdGlvbj48L2ltZy1zZWxlY3Rpb24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSW1nIG1hbmFnZXIgbW9kdWxlIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJfc2hvd0ltZ01hbmFnZXJNb2R1bGVcIlxuICAgIGNsYXNzPVwid3otaW1nLW1hbmFnZXJfX21vZHVsZVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3d6LWltZy1tYW5hZ2VyX19tb2R1bGUtLXNtYWxsJzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcsXG4gICAgICAnd3otaW1nLW1hbmFnZXJfX21vZHVsZS0tZnVsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnZnVsbCcsXG4gICAgICAnd3otaW1nLW1hbmFnZXJfX21vZHVsZS0td2luZG93Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICd3aW5kb3cnLFxuICAgICAgJ3d6LWltZy1tYW5hZ2VyX19tb2R1bGUtLWVkaXQnOiBoaWRlVGFifVwiXG4gID5cblxuICAgIDxkaXYgY2xhc3M9XCJ3ei1pbWctbWFuYWdlcl9fbW9kdWxlX19oZWFkZXJcIiAqbmdJZj1cInN0YXRlRGlzcGxheWVkICE9PSAnd2luZG93J1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlblNtYWxsKClcIiAqbmdJZj1cInN0YXRlRGlzcGxheWVkID09PSAnZnVsbCdcIiB0eXBlPVwiYnV0dG9uXCI+PHNwYW4+RXhwYW5kPC9zcGFuPjxpIGNsYXNzPVwiZmFsIGZhLWNvbXByZXNzLWFsdFwiPjwvaT48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5TbWFsbCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ2Nsb3NlZCdcIiB0eXBlPVwiYnV0dG9uXCI+PHNwYW4+RXhwYW5kPC9zcGFuPjxpIGNsYXNzPVwiZmFsIGZhLWV4cGFuZC1hbHRcIj48L2k+PC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuRnVsbCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJ1wiIHR5cGU9XCJidXR0b25cIj48c3Bhbj5FeHBhbmQ8L3NwYW4+PGkgY2xhc3M9XCJmYWwgZmEtZXhwYW5kLWFsdFwiPjwvaT48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQ2xvc2UoKVwiICpuZ0lmPVwic3RhdGVEaXNwbGF5ZWQgIT09ICdjbG9zZWQnXCIgdHlwZT1cImJ1dHRvblwiPjxzcGFuPkNsb3NlPC9zcGFuPjxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCI+PC9pPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ3ei1pbWctbWFuYWdlcl9fbW9kdWxlX19jb250ZW50IHd6LWJsb2NrXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnd3otYmxvY2stLXdpbmRvdyc6IHN0YXRlRGlzcGxheWVkID09PSAnd2luZG93J31cIj5cbiAgICAgIDxpbWctdGFic1xuICAgICAgICBbc3RhdGVEaXNwbGF5ZWRdPVwic3RhdGVEaXNwbGF5ZWRcIlxuICAgICAgICBbbXVsdGlwbGVJbWdNb2RlXT1cIm11bHRpcGxlSW1nTW9kZVwiXG4gICAgICAgIFtsaXN0RGlzcGxheWVkXT1cImxpc3REaXNwbGF5ZWRcIlxuICAgICAgICAoaW1nTWFuYWdlckNsb3NlZCk9XCJvbkltZ01hbmFnZXJDbG9zZWQoKVwiXG4gICAgICAgIChzd2l0Y2hEaXNwbGF5V2luZG93KT1cImNoYW5nZURpc3BsYXlUYWIoKVwiXG4gICAgICAgIChjdXJyZW50VGFiKT1cInNldEN1cnJlbnRUYWIoJGV2ZW50KVwiPlxuICAgICAgPC9pbWctdGFicz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
@@ -398,6 +398,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
398
398
  type: Injectable
399
399
  }] });
400
400
 
401
+ class IconService {
402
+ loadIconLib() {
403
+ const link = document.createElement('link');
404
+ link.href = 'https://pro.fontawesome.com/releases/v5.12.1/css/all.css';
405
+ link.rel = 'stylesheet';
406
+ link.crossOrigin = "anonymous";
407
+ document.getElementsByTagName('head')[0].appendChild(link);
408
+ }
409
+ }
410
+ IconService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
411
+ IconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, providedIn: 'root' });
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconService, decorators: [{
413
+ type: Injectable,
414
+ args: [{ providedIn: 'root' }]
415
+ }] });
416
+
401
417
  const easeInOut = // the fade-in/fade-out animation.
402
418
  trigger('easeInOut', [
403
419
  // the "in" style determines the "resting" state of the element when it is visible.
@@ -3605,13 +3621,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3605
3621
  }] } });
3606
3622
 
3607
3623
  class WzImgManagerComponent {
3608
- constructor(imgSelectionService, userSettingsService, canvaService, imgEventService, domService, uploadService) {
3624
+ constructor(imgSelectionService, userSettingsService, canvaService, imgEventService, domService, uploadService, iconService) {
3609
3625
  this.imgSelectionService = imgSelectionService;
3610
3626
  this.userSettingsService = userSettingsService;
3611
3627
  this.canvaService = canvaService;
3612
3628
  this.imgEventService = imgEventService;
3613
3629
  this.domService = domService;
3614
3630
  this.uploadService = uploadService;
3631
+ this.iconService = iconService;
3615
3632
  this.showSelection = false;
3616
3633
  this.imgManagerClosed = new EventEmitter();
3617
3634
  this._multipleImgMode = false;
@@ -3621,6 +3638,7 @@ class WzImgManagerComponent {
3621
3638
  this.close = false;
3622
3639
  this.listDisplayed = false;
3623
3640
  this.hideTab = false;
3641
+ this.iconService.loadIconLib();
3624
3642
  }
3625
3643
  // If forceToOpenCanva is true : Canva will open with the canvaService.expectedImgSizesChange
3626
3644
  // If forceToOpenCanva is a WiziBlockMediaDto, Canva open immediatly
@@ -3748,12 +3766,12 @@ class WzImgManagerComponent {
3748
3766
  this.listDisplayedEvent.unsubscribe();
3749
3767
  }
3750
3768
  }
3751
- WzImgManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, deps: [{ token: ImgSelectionService }, { token: UserSettingsService }, { token: CanvaService }, { token: ImgEventService }, { token: DomService }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Component });
3769
+ WzImgManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, deps: [{ token: ImgSelectionService }, { token: UserSettingsService }, { token: CanvaService }, { token: ImgEventService }, { token: DomService }, { token: UploadService }, { token: IconService }], target: i0.ɵɵFactoryTarget.Component });
3752
3770
  WzImgManagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: WzImgManagerComponent, selector: "wz-img-manager", inputs: { stateDisplayed: "stateDisplayed", showSelection: "showSelection", forceToOpenCanva: "forceToOpenCanva", multipleImgMode: "multipleImgMode", showImgManagerModule: "showImgManagerModule" }, outputs: { imgManagerClosed: "imgManagerClosed", imgSelectionChange: "imgSelectionChange", imageUploaded: "imageUploaded" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, ngImport: i0, template: "<div class=\"wz-img-manager\">\n <!-- Img selection handler -->\n <div class=\"wz-img-manager__selectionHandler\" *ngIf=\"showSelection\">\n <img-selection></img-selection>\n </div>\n\n <!-- Img manager module -->\n <div\n *ngIf=\"_showImgManagerModule\"\n class=\"wz-img-manager__module\"\n [ngClass]=\"{\n 'wz-img-manager__module--small': stateDisplayed === 'small',\n 'wz-img-manager__module--full': stateDisplayed === 'full',\n 'wz-img-manager__module--window': stateDisplayed === 'window',\n 'wz-img-manager__module--edit': hideTab}\"\n >\n\n <div class=\"wz-img-manager__module__header\" *ngIf=\"stateDisplayed !== 'window'\">\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'full'\" type=\"button\"><span>Expand</span><i class=\"fal fa-compress-alt\"></i></button>\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'closed'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"openFull()\" *ngIf=\"stateDisplayed === 'small'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"onClose()\" *ngIf=\"stateDisplayed !== 'closed'\" type=\"button\"><span>Close</span><i class=\"fal fa-times\"></i></button>\n </div>\n\n <div\n class=\"wz-img-manager__module__content wz-block\"\n [ngClass]=\"{'wz-block--window': stateDisplayed === 'window'}\">\n <img-tabs\n [stateDisplayed]=\"stateDisplayed\"\n [multipleImgMode]=\"multipleImgMode\"\n [listDisplayed]=\"listDisplayed\"\n (imgManagerClosed)=\"onImgManagerClosed()\"\n (switchDisplayWindow)=\"changeDisplayTab()\"\n (currentTab)=\"setCurrentTab($event)\">\n </img-tabs>\n </div>\n </div>\n\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ImgTabsComponent, selector: "img-tabs", inputs: ["multipleImgMode", "stateDisplayed", "listDisplayed"], outputs: ["imgManagerClosed", "currentTab", "switchDisplayWindow"] }, { kind: "component", type: ImgSelectionComponent, selector: "img-selection", inputs: ["tabDisplayed"], outputs: ["imgManagerClosed"] }] });
3753
3771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: WzImgManagerComponent, decorators: [{
3754
3772
  type: Component,
3755
3773
  args: [{ selector: 'wz-img-manager', template: "<div class=\"wz-img-manager\">\n <!-- Img selection handler -->\n <div class=\"wz-img-manager__selectionHandler\" *ngIf=\"showSelection\">\n <img-selection></img-selection>\n </div>\n\n <!-- Img manager module -->\n <div\n *ngIf=\"_showImgManagerModule\"\n class=\"wz-img-manager__module\"\n [ngClass]=\"{\n 'wz-img-manager__module--small': stateDisplayed === 'small',\n 'wz-img-manager__module--full': stateDisplayed === 'full',\n 'wz-img-manager__module--window': stateDisplayed === 'window',\n 'wz-img-manager__module--edit': hideTab}\"\n >\n\n <div class=\"wz-img-manager__module__header\" *ngIf=\"stateDisplayed !== 'window'\">\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'full'\" type=\"button\"><span>Expand</span><i class=\"fal fa-compress-alt\"></i></button>\n <button (click)=\"openSmall()\" *ngIf=\"stateDisplayed === 'closed'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"openFull()\" *ngIf=\"stateDisplayed === 'small'\" type=\"button\"><span>Expand</span><i class=\"fal fa-expand-alt\"></i></button>\n <button (click)=\"onClose()\" *ngIf=\"stateDisplayed !== 'closed'\" type=\"button\"><span>Close</span><i class=\"fal fa-times\"></i></button>\n </div>\n\n <div\n class=\"wz-img-manager__module__content wz-block\"\n [ngClass]=\"{'wz-block--window': stateDisplayed === 'window'}\">\n <img-tabs\n [stateDisplayed]=\"stateDisplayed\"\n [multipleImgMode]=\"multipleImgMode\"\n [listDisplayed]=\"listDisplayed\"\n (imgManagerClosed)=\"onImgManagerClosed()\"\n (switchDisplayWindow)=\"changeDisplayTab()\"\n (currentTab)=\"setCurrentTab($event)\">\n </img-tabs>\n </div>\n </div>\n\n</div>\n" }]
3756
- }], ctorParameters: function () { return [{ type: ImgSelectionService }, { type: UserSettingsService }, { type: CanvaService }, { type: ImgEventService }, { type: DomService }, { type: UploadService }]; }, propDecorators: { stateDisplayed: [{
3774
+ }], ctorParameters: function () { return [{ type: ImgSelectionService }, { type: UserSettingsService }, { type: CanvaService }, { type: ImgEventService }, { type: DomService }, { type: UploadService }, { type: IconService }]; }, propDecorators: { stateDisplayed: [{
3757
3775
  type: Input
3758
3776
  }], showSelection: [{
3759
3777
  type: Input