ng-easycommerce-v18 0.1.4 → 0.1.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.
@@ -17,6 +17,7 @@ export class CartItemEcComponent {
17
17
  quantity = 0;
18
18
  variantsToShow = ['TALLE', 'COLOR'];
19
19
  updateStock = false;
20
+ isQuantityUpdating = false;
20
21
  ngOnInit() {
21
22
  this.quantity = this.item.quantity;
22
23
  console.log(this.item, this.mediaUrl);
@@ -31,12 +32,20 @@ export class CartItemEcComponent {
31
32
  }
32
33
  }
33
34
  less(stock, value = 1) {
35
+ if (this.isQuantityUpdating)
36
+ return;
37
+ this.isQuantityUpdating = true;
34
38
  let quantity = this.item.quantity - value;
35
39
  quantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');
40
+ setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
36
41
  }
37
42
  plus(stock, value = 1) {
43
+ if (this.isQuantityUpdating)
44
+ return;
45
+ this.isQuantityUpdating = true;
38
46
  let quantity = this.item.quantity + value;
39
47
  quantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');
48
+ setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
40
49
  }
41
50
  deleteCartItem() {
42
51
  this._cartService.deleteCartItem(this.item);
@@ -118,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
118
127
  }], inSidebar: [{
119
128
  type: Input
120
129
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1pdGVtLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2NhcnQtZWMvY2FydC1pdGVtLWVjL2NhcnQtaXRlbS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jYXJ0LWVjL2NhcnQtaXRlbS1lYy9jYXJ0LWl0ZW0tZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVM3QyxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLElBQUksQ0FBTTtJQUVKLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFNUIsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsVUFBVSxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVqRSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUs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S0FBSyxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLCtDQUErQztJQUMvRCxDQUFDO3dHQW5ITSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw4SENmaEMsNjFGQWdFQyxxRERyRFUsYUFBYSw2Q0FBRSxvQkFBb0IseURBQUUsVUFBVSxtT0FBRSxXQUFXOzs0RkFJMUQsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNDLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQzs4QkFPcEUsSUFBSTtzQkFGTixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUVRLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gJy4uLy4uLy4uL2VjLXBpcGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1jYXJ0LWl0ZW0tZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW1RpdGxlQ2FzZVBpcGUsIEVjQ3VycmVuY3lTeW1ib2xQaXBlLCBSb3V0ZXJMaW5rLCBGb3Jtc01vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NhcnQtaXRlbS1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2NhcnQtaXRlbS1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRJdGVtRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCh7XHJcblx0XHRyZXF1aXJlZDogdHJ1ZVxyXG5cdH0pIGl0ZW06IGFueTtcclxuXHJcblx0QElucHV0KCkgaW5TaWRlYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHJcblx0cHVibGljIG1lZGlhVXJsID0gdGhpcy5fY29uc3RhbnRzLm1lZGlhVXJsKCk7XHJcblx0cHVibGljIHF1YW50aXR5ID0gMDtcclxuXHRwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xyXG5cdHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5xdWFudGl0eSA9IHRoaXMuaXRlbS5xdWFudGl0eVxyXG5cdFx0Y29uc29sZS5sb2codGhpcy5pdGVtLCB0aGlzLm1lZGlhVXJsKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVF1YW50aXR5KHN0b2NrOiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLnF1YW50aXR5ID4gMCAmJiB0aGlzLnF1YW50aXR5IDw9IHN0b2NrKSB7XHJcblx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eSh0aGlzLml0ZW0sIHRoaXMucXVhbnRpdHkpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnF1YW50aXR5ID0gdGhpcy5pdGVtLnF1YW50aXR5XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGxlc3Moc3RvY2s6IG51bWJlciwgdmFsdWU6IG51bWJlciA9IDEpIHtcclxuXHRcdGxldCBxdWFudGl0eSA9IHRoaXMuaXRlbS5xdWFudGl0eSAtIHZhbHVlO1xyXG5cdFx0cXVhbnRpdHkgPiAwICYmIHF1YW50aXR5IDw9IHN0b2NrID8gdGhpcy5fY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KHRoaXMuaXRlbSwgcXVhbnRpdHkpIDogdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG5cclxuXHR9XHJcblxyXG5cdHBsdXMoc3RvY2s6IG51bWJlciwgdmFsdWU6IG51bWJlciA9IDEpIHtcclxuXHRcdGxldCBxdWFudGl0eSA9IHRoaXMuaXRlbS5xdWFudGl0eSArIHZhbHVlO1xyXG5cdFx0cXVhbnRpdHkgPiAwICYmIHF1YW50aXR5IDw9IHN0b2NrID8gdGhpcy5fY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KHRoaXMuaXRlbSwgcXVhbnRpdHkpIDogdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlQ2FydEl0ZW0oKXtcclxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKHRoaXMuaXRlbSlcclxuXHR9XHJcblxyXG5cdGdldFZhcmlhbnRzKHByb2R1Y3Q6IGFueSk6YW55IHtcclxuXHRcdGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnZhcmlhbnRzICYmIGl0ZW0udmFyaWFudHMubGVuZ3RoICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucyAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uOmFueSkgPT4gdGhpcy52YXJpYW50c1RvU2hvdy5maW5kKChuYW1lOmFueSkgPT4gb3B0aW9uLmhhc093blByb3BlcnR5KG5hbWUpKSlcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNNYXA6YW55ID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbjphbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2goKG9wdGlvbjI6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaCgoY29sb3I6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2goKG9wdGlvbjI6YW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cdH1cclxuXHJcblx0Y3JlYXRlRGlzY291bnRNZXNzYWdlKHNhbGVwcmljZTogbnVtYmVyLCBwcmljZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRcdGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG5cdFx0XHQgcmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cdFxyXG5cdFx0bGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xyXG5cdFxyXG5cdFx0bGV0IGRpc2NvdW50TWVzc2FnZSA9IGAke2Rpc2NvdW50UGVyY2VudGFnZX0lIE9GRmA7XHJcblx0XHRyZXR1cm4gZGlzY291bnRNZXNzYWdlO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tTdG9jayhwcm9kdWN0OmFueSk6YW55IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgcHJvZHVjdC5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICBpZiAocHJvZHVjdC52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgaWYodmFyaWFudC5zdG9jayA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZiAocHJvZHVjdC5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2s9dHJ1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgICB9XHJcbn1cclxuIiwiQGlmKCFpblNpZGViYXIpe1xyXG48cD5jYXJ0LWl0ZW0tZWMgd29ya3MhPC9wPlxyXG59QGVsc2V7XHJcblxyXG48ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICBAbGV0IHByb2R1Y3Q9IGl0ZW0ucHJvZHVjdDtcclxuICAgICAgICBAaWYoaXRlbS52YXJpYW50X2lkICYmIHByb2R1Y3QudmFyaWFudHMubGVuZ3RoPjApe1xyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArICBwcm9kdWN0LnZhcmlhbnRzWzBdLmltYWdlc1swXVwiIGFsdD1cIlwiIGNsYXNzPVwiaW1nLWZsdWlkXCI+XHJcbiAgICAgICAgfUBlbHNle1xyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArICBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXVwiIGFsdD1cIlwiIGNsYXNzPVwiaW1nLWZsdWlkXCI+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mbyBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJ0aXRsZSB0ZXh0LWRhcmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgbS0wIHAtMCBoNiBtYi0wXCJcclxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3Byb2R1Y3QnLCBpdGVtLnZhcmlhbnRfaWRdXCI+e3tcclxuICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdC5uYW1lIHwgdGl0bGVjYXNlXHJcbiAgICAgICAgICAgICAgICB9fTwvYT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF0eTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ucHJvZHVjdC5pZH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlIGg2IGZ3LWJvbGQgbWItMCBwYi0wXCI+e3sgaXRlbS5wcm9kdWN0LnByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgfX08L2Rpdj5cclxuICAgICAgICAgICAgQGlmKGdldFZhcmlhbnRzKGl0ZW0pOyBhcyBvcHRpb25zKXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yKG9wdGlvbiBvZiBvcHRpb25zOyB0cmFjayAkaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCI+IHt7b3B0aW9uLm5hbWUgfCB0aXRsZWNhc2V9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBAaWYob3B0aW9uLm5hbWUgPT0gJ0NPTE9SJyl7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIHJvdW5kZWRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCInIycgKyBvcHRpb24udmFsdWVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgIDxiPnt7b3B0aW9uLnZhbHVlfX08L2I+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW1wb0NhbnRpZGFkIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJudW1lcm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsZXNzKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc3RvY2spXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiYnV0dG9uLWFkZG9uMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLW1pbnVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtY2VudGVyXCIgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRXhhbXBsZSB0ZXh0IHdpdGggYnV0dG9uIGFkZG9uXCIgYXJpYS1kZXNjcmliZWRieT1cImJ1dHRvbi1hZGRvbjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5xdWFudGl0eVwiIG1pbj1cIjFcIiBzdGVwPVwiMVwiIFsobmdNb2RlbCldPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVF1YW50aXR5KGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc3RvY2spXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGx1cyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImJ1dHRvbi1hZGRvbjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgPGEgKGNsaWNrKT1cImRlbGV0ZUNhcnRJdGVtKClcIiBjbGFzcz1cImJ0biBib3RCb3JyYXJcIj48aSBjbGFzcz1cImZhIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG59Il19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1pdGVtLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2NhcnQtZWMvY2FydC1pdGVtLWVjL2NhcnQtaXRlbS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jYXJ0LWVjL2NhcnQtaXRlbS1lYy9jYXJ0LWl0ZW0tZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVM3QyxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLElBQUksQ0FBTTtJQUVKLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFNUIsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsVUFBVSxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVqRSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsY0FBYyxHQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBRWxDLFFBQVE7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9ELENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtZQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDRixDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQWEsRUFBRSxRQUFnQixDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLE9BQU87UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUMsUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakosVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFDLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pKLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxjQUFjO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBWTtRQUN2QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBRXBCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtZQUN0QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzdHLElBQUksVUFBVSxHQUFPLEVBQUUsQ0FBQTtZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVSxFQUFFLEVBQUU7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2xDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFFLDZDQUE2QztvQkFFdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFXLEVBQUUsRUFBRTt3QkFDakMsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDOzRCQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVMsRUFBRSxFQUFFO2dDQUNqQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0NBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29DQUMzRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMseUJBQXlCO2dDQUNqRCxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsNkRBQTZEO29CQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFXLEVBQUUsRUFBRTs0QkFFakMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dDQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDO29DQUNaLElBQUksRUFBRSxLQUFLO29DQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO2lDQUV2QixDQUFDLENBQUM7Z0NBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQzs0QkFDdkIsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sVUFBVSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxVQUFVLENBQUM7UUFFdEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7SUFDUixDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxLQUFhO1FBQ3JELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFHLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQztRQUNuRCxPQUFPLGVBQWUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQVc7UUFDZixLQUFLLE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsSUFBRyxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBQyxDQUFDO29CQUNwQixJQUFJLENBQUMsV0FBVyxHQUFDLElBQUksQ0FBQztvQkFDdEIsT0FBTyxHQUFHLENBQUM7Z0JBQ2YsQ0FBQztxQkFBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFDLElBQUksQ0FBQztvQkFDeEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLCtDQUErQztJQUMvRCxDQUFDO3dHQXpITSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw4SENmaEMsNjFGQWdFQyxxRERyRFUsYUFBYSw2Q0FBRSxvQkFBb0IseURBQUUsVUFBVSxtT0FBRSxXQUFXOzs0RkFJMUQsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNDLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQzs4QkFPcEUsSUFBSTtzQkFGTixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUVRLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gJy4uLy4uLy4uL2VjLXBpcGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1jYXJ0LWl0ZW0tZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW1RpdGxlQ2FzZVBpcGUsIEVjQ3VycmVuY3lTeW1ib2xQaXBlLCBSb3V0ZXJMaW5rLCBGb3Jtc01vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NhcnQtaXRlbS1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2NhcnQtaXRlbS1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRJdGVtRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCh7XHJcblx0XHRyZXF1aXJlZDogdHJ1ZVxyXG5cdH0pIGl0ZW06IGFueTtcclxuXHJcblx0QElucHV0KCkgaW5TaWRlYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHJcblx0cHVibGljIG1lZGlhVXJsID0gdGhpcy5fY29uc3RhbnRzLm1lZGlhVXJsKCk7XHJcblx0cHVibGljIHF1YW50aXR5ID0gMDtcclxuXHRwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xyXG5cdHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBpc1F1YW50aXR5VXBkYXRpbmcgPSBmYWxzZTtcclxuXHRcclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMucXVhbnRpdHkgPSB0aGlzLml0ZW0ucXVhbnRpdHlcclxuXHRcdGNvbnNvbGUubG9nKHRoaXMuaXRlbSwgdGhpcy5tZWRpYVVybCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVRdWFudGl0eShzdG9jazogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5xdWFudGl0eSA+IDAgJiYgdGhpcy5xdWFudGl0eSA8PSBzdG9jaykge1xyXG5cdFx0XHR0aGlzLl9jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkodGhpcy5pdGVtLCB0aGlzLnF1YW50aXR5KVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5xdWFudGl0eSA9IHRoaXMuaXRlbS5xdWFudGl0eVxyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRsZXNzKHN0b2NrOiBudW1iZXIsIHZhbHVlOiBudW1iZXIgPSAxKSB7XHJcblx0XHRpZiAodGhpcy5pc1F1YW50aXR5VXBkYXRpbmcpIHJldHVybjtcclxuXHRcdHRoaXMuaXNRdWFudGl0eVVwZGF0aW5nID0gdHJ1ZTtcclxuXHRcdGxldCBxdWFudGl0eSA9IHRoaXMuaXRlbS5xdWFudGl0eSAtIHZhbHVlO1xyXG5cdFx0cXVhbnRpdHkgPiAwICYmIHF1YW50aXR5IDw9IHN0b2NrID8gdGhpcy5fY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KHRoaXMuaXRlbSwgcXVhbnRpdHkpIDogdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7IHRoaXMuaXNRdWFudGl0eVVwZGF0aW5nID0gZmFsc2U7IH0sIDEwMDApO1xyXG5cdH1cclxuXHJcblx0cGx1cyhzdG9jazogbnVtYmVyLCB2YWx1ZTogbnVtYmVyID0gMSkge1xyXG5cdFx0aWYgKHRoaXMuaXNRdWFudGl0eVVwZGF0aW5nKSByZXR1cm47XHJcblx0XHR0aGlzLmlzUXVhbnRpdHlVcGRhdGluZyA9IHRydWU7XHJcblx0XHRsZXQgcXVhbnRpdHkgPSB0aGlzLml0ZW0ucXVhbnRpdHkgKyB2YWx1ZTtcclxuXHRcdHF1YW50aXR5ID4gMCAmJiBxdWFudGl0eSA8PSBzdG9jayA/IHRoaXMuX2NhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eSh0aGlzLml0ZW0sIHF1YW50aXR5KSA6IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmlzUXVhbnRpdHlVcGRhdGluZyA9IGZhbHNlOyB9LCAxMDAwKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUNhcnRJdGVtKCl7XHJcblx0XHR0aGlzLl9jYXJ0U2VydmljZS5kZWxldGVDYXJ0SXRlbSh0aGlzLml0ZW0pXHJcblx0fVxyXG5cclxuXHRnZXRWYXJpYW50cyhwcm9kdWN0OiBhbnkpOmFueSB7XHJcblx0XHRsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbjphbnkpID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZCgobmFtZTphbnkpID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwOmFueSA9IFtdXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFwKChvcHRpb246YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKChvcHRpb24yOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjIudmFsdWVzLmZvckVhY2goKGNvbG9yOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTsgLy8gTWFyY2FyIG9wY2nDs24gYWdyZWdhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKChvcHRpb24yOmFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuXHR9XHJcblxyXG5cdGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XHJcblx0XHRpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcclxuXHRcdFx0IHJldHVybiAnJztcclxuXHRcdH1cclxuXHRcclxuXHRcdGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcclxuXHRcclxuXHRcdGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG5cdFx0cmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdGNoZWNrU3RvY2socHJvZHVjdDphbnkpOmFueSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHByb2R1Y3QucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgaWYgKHByb2R1Y3QudmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlKSB7XHJcbiAgICAgICAgICAgIGlmKHZhcmlhbnQuc3RvY2sgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jaz10cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgfWVsc2UgaWYgKHByb2R1Y3QucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPXRydWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuc3RvY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTb2xvIHNlIGVqZWN1dGEgc2kgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs25cclxuICAgICAgfVxyXG59XHJcbiIsIkBpZighaW5TaWRlYmFyKXtcclxuPHA+Y2FydC1pdGVtLWVjIHdvcmtzITwvcD5cclxufUBlbHNle1xyXG5cclxuPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgQGxldCBwcm9kdWN0PSBpdGVtLnByb2R1Y3Q7XHJcbiAgICAgICAgQGlmKGl0ZW0udmFyaWFudF9pZCAmJiBwcm9kdWN0LnZhcmlhbnRzLmxlbmd0aD4wKXtcclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVkaWFVcmwgKyAgcHJvZHVjdC52YXJpYW50c1swXS5pbWFnZXNbMF1cIiBhbHQ9XCJcIiBjbGFzcz1cImltZy1mbHVpZFwiPlxyXG4gICAgICAgIH1AZWxzZXtcclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVkaWFVcmwgKyAgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF1cIiBhbHQ9XCJcIiBjbGFzcz1cImltZy1mbHVpZFwiPlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC03XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwidGl0bGUgdGV4dC1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lIG0tMCBwLTAgaDYgbWItMFwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9wcm9kdWN0JywgaXRlbS52YXJpYW50X2lkXVwiPnt7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnByb2R1Y3QubmFtZSB8IHRpdGxlY2FzZVxyXG4gICAgICAgICAgICAgICAgfX08L2E+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdHkxXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnByb2R1Y3QuaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZSBoNiBmdy1ib2xkIG1iLTAgcGItMFwiPnt7IGl0ZW0ucHJvZHVjdC5wcmljZSB8IGVjQ3VycmVuY3lTeW1ib2xcclxuICAgICAgICAgICAgICAgIH19PC9kaXY+XHJcbiAgICAgICAgICAgIEBpZihnZXRWYXJpYW50cyhpdGVtKTsgYXMgb3B0aW9ucyl7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgQGZvcihvcHRpb24gb2Ygb3B0aW9uczsgdHJhY2sgJGluZGV4KXtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiPiB7e29wdGlvbi5uYW1lIHwgdGl0bGVjYXNlfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQGlmKG9wdGlvbi5uYW1lID09ICdDT0xPUicpe1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiByb3VuZGVkXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiJyMnICsgb3B0aW9uLnZhbHVlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9QGVsc2V7XHJcbiAgICAgICAgICAgICAgICA8Yj57e29wdGlvbi52YWx1ZX19PC9iPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FtcG9DYW50aWRhZCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnVtZXJvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibGVzcyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImJ1dHRvbi1hZGRvbjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1taW51c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlclwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkV4YW1wbGUgdGV4dCB3aXRoIGJ1dHRvbiBhZGRvblwiIGFyaWEtZGVzY3JpYmVkYnk9XCJidXR0b24tYWRkb24xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0ucXVhbnRpdHlcIiBtaW49XCIxXCIgc3RlcD1cIjFcIiBbKG5nTW9kZWwpXT1cInF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVRdWFudGl0eShpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInBsdXMoaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zdG9jaylcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidXR0b24tYWRkb24xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgIDxhIChjbGljayk9XCJkZWxldGVDYXJ0SXRlbSgpXCIgY2xhc3M9XCJidG4gYm90Qm9ycmFyXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxufSJdfQ==
@@ -8,7 +8,8 @@ export class ContactEcComponent {
8
8
  router;
9
9
  titlesMap = {
10
10
  'contact': "Contacto",
11
- 'arrepentimiento': "Botón de arrepentimiento"
11
+ 'arrepentimiento': "Botón de arrepentimiento",
12
+ 'servicio-tecnico': "Servicio Técnico",
12
13
  };
13
14
  constructor(consts, router) {
14
15
  this.consts = consts;
@@ -26,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26
27
  type: Component,
27
28
  args: [{ selector: 'app-contact-ec', standalone: true, imports: [BlocksEcComponent], template: "<!-- <app-blocks-ec [section]=\"lastPathSegment()\"></app-blocks-ec> -->" }]
28
29
  }], ctorParameters: () => [{ type: i1.CoreConstantsService }, { type: i2.Router }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jb250YWN0LWVjL2NvbnRhY3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY29udGFjdC1lYy9jb250YWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBU2pELE1BQU0sT0FBTyxrQkFBa0I7SUFNTjtJQUFzQztJQUpsRCxTQUFTLEdBQWtEO1FBQzlELFNBQVMsRUFBRSxVQUFVO1FBQ3JCLGlCQUFpQixFQUFFLDBCQUEwQjtLQUNoRCxDQUFBO0lBQ0QsWUFBbUIsTUFBNEIsRUFBVSxNQUFjO1FBQXBELFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFJLENBQUM7SUFFNUUsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUV4RCxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFtQyxJQUFJLFNBQVMsQ0FBQyxDQUFBO0lBRXJHLFFBQVE7UUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO3dHQWRNLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDBFQ1ovQiwwRUFBc0U7OzRGRFl6RCxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0ksZ0JBQWdCLGNBRWQsSUFBSSxXQUNQLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmxvY2tzRWNDb21wb25lbnQgfSBmcm9tICcuLi9ibG9ja3MtZWMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jb250YWN0LWVjJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY29udGFjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0Jsb2Nrc0VjQ29tcG9uZW50XSxcclxuICAgIHN0eWxlVXJsczogWydjb250YWN0LWVjLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250YWN0RWNDb21wb25lbnQge1xyXG5cclxuICAgICBwcml2YXRlIHRpdGxlc01hcDogUmVjb3JkPCdjb250YWN0JyB8ICdhcnJlcGVudGltaWVudG8nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgICAgJ2NvbnRhY3QnOiBcIkNvbnRhY3RvXCIsXHJcbiAgICAgICAgICAnYXJyZXBlbnRpbWllbnRvJzogXCJCb3TDs24gZGUgYXJyZXBlbnRpbWllbnRvXCJcclxuICAgICAgfVxyXG4gICAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgICBsYXN0UGF0aFNlZ21lbnQgPSAoKSA9PiB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5wb3AoKVxyXG5cclxuICAgICAgZ2V0VGl0bGUgPSAoKSA9PiB0aGlzLnRpdGxlc01hcFt0aGlzLmxhc3RQYXRoU2VnbWVudCgpIGFzICdjb250YWN0JyB8ICdhcnJlcGVudGltaWVudG8nIHx8ICdjb250YWN0J11cclxuXHJcbiAgICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgICAgd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgICAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxhcHAtYmxvY2tzLWVjIFtzZWN0aW9uXT1cImxhc3RQYXRoU2VnbWVudCgpXCI+PC9hcHAtYmxvY2tzLWVjPiAtLT4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jb250YWN0LWVjL2NvbnRhY3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY29udGFjdC1lYy9jb250YWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBU2pELE1BQU0sT0FBTyxrQkFBa0I7SUFPTjtJQUFzQztJQUxsRCxTQUFTLEdBQXVFO1FBQ25GLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLGlCQUFpQixFQUFFLDBCQUEwQjtRQUM3QyxrQkFBa0IsRUFBRSxrQkFBa0I7S0FDekMsQ0FBQTtJQUNELFlBQW1CLE1BQTRCLEVBQVUsTUFBYztRQUFwRCxXQUFNLEdBQU4sTUFBTSxDQUFzQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBSSxDQUFDO0lBRTVFLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFeEQsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBbUMsSUFBSSxTQUFTLENBQUMsQ0FBQTtJQUVyRyxRQUFRO1FBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQzt3R0FmTSxrQkFBa0I7NEZBQWxCLGtCQUFrQiwwRUNaL0IsMEVBQXNFOzs0RkRZekQsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNJLGdCQUFnQixjQUVkLElBQUksV0FDUCxDQUFDLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJsb2Nrc0VjQ29tcG9uZW50IH0gZnJvbSAnLi4vYmxvY2tzLWVjJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY29udGFjdC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ2NvbnRhY3QtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtCbG9ja3NFY0NvbXBvbmVudF0sXHJcbiAgICBzdHlsZVVybHM6IFsnY29udGFjdC1lYy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGFjdEVjQ29tcG9uZW50IHtcclxuXHJcbiAgICAgcHJpdmF0ZSB0aXRsZXNNYXA6IFJlY29yZDwnY29udGFjdCcgfCAnYXJyZXBlbnRpbWllbnRvJyB8ICdzZXJ2aWNpby10ZWNuaWNvJywgc3RyaW5nPiA9IHtcclxuICAgICAgICAgICdjb250YWN0JzogXCJDb250YWN0b1wiLFxyXG4gICAgICAgICAgJ2FycmVwZW50aW1pZW50byc6IFwiQm90w7NuIGRlIGFycmVwZW50aW1pZW50b1wiLFxyXG4gICAgICAgICAgJ3NlcnZpY2lvLXRlY25pY28nOiBcIlNlcnZpY2lvIFTDqWNuaWNvXCIsXHJcbiAgICAgIH1cclxuICAgICAgY29uc3RydWN0b3IocHVibGljIGNvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHsgfVxyXG5cclxuICAgICAgbGFzdFBhdGhTZWdtZW50ID0gKCkgPT4gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykucG9wKClcclxuXHJcbiAgICAgIGdldFRpdGxlID0gKCkgPT4gdGhpcy50aXRsZXNNYXBbdGhpcy5sYXN0UGF0aFNlZ21lbnQoKSBhcyAnY29udGFjdCcgfCAnYXJyZXBlbnRpbWllbnRvJyB8fCAnY29udGFjdCddXHJcblxyXG4gICAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICAgIH1cclxuXHJcbn1cclxuIiwiPCEtLSA8YXBwLWJsb2Nrcy1lYyBbc2VjdGlvbl09XCJsYXN0UGF0aFNlZ21lbnQoKVwiPjwvYXBwLWJsb2Nrcy1lYz4gLS0+Il19
@@ -48,11 +48,11 @@ export class ProductEcComponent {
48
48
  return this.product.saleprice && this.product.saleprice !== this.product.price;
49
49
  }
50
50
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ProductEcComponent, isStandalone: true, selector: "app-product-ec", inputs: { product: "product", isProductBox: "isProductBox", isCollection: "isCollection" }, outputs: { loaded: "loaded" }, ngImport: i0, template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n \r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n \r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }@else {\r\n <p class=\"noPrice\"></p>\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }\r\n <!-- Cuando tiene marca especial y el tipo no es 'standard' -->\r\n @if(product.special_mark?.[0]?.type !== 'standard'){\r\n @for (item of product.special_mark; track $index) {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (item.type === 'out_of_stock' || item.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }} </span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (item.type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(item.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }}</span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (item.type === 'more_info') {\r\n <button *ngIf=\"\" class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }}</span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n\r\n }\r\n }\r\n\r\n <!-- </ng-container>\r\n <ng-template #noStock>\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span>{{(\"out-of-stock-short\" | translate) | uppercase}}</span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"out-of-stock-short\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n </ng-template> -->\r\n </div>\r\n</a>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "component", type: PriceEcComponent, selector: "app-price-ec", inputs: ["price", "saleprice"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ProductEcComponent, isStandalone: true, selector: "app-product-ec", inputs: { product: "product", isProductBox: "isProductBox", isCollection: "isCollection" }, outputs: { loaded: "loaded" }, ngImport: i0, template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n\r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n\r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn standard\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }@else {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (product.special_mark[0]?.type === 'out_of_stock' || product.special_mark[0]?.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0].name | uppercase }} </span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (product.special_mark[0].type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(product.special_mark[0]?.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (product.special_mark[0]?.type === 'more_info') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n</a>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "component", type: PriceEcComponent, selector: "app-price-ec", inputs: ["price", "saleprice"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
52
52
  }
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductEcComponent, decorators: [{
54
54
  type: Component,
55
- args: [{ selector: 'app-product-ec', standalone: true, imports: [CommonModule, PriceEcComponent, RouterLink, TranslateModule], template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n \r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n \r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }@else {\r\n <p class=\"noPrice\"></p>\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }\r\n <!-- Cuando tiene marca especial y el tipo no es 'standard' -->\r\n @if(product.special_mark?.[0]?.type !== 'standard'){\r\n @for (item of product.special_mark; track $index) {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (item.type === 'out_of_stock' || item.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }} </span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (item.type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(item.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }}</span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (item.type === 'more_info') {\r\n <button *ngIf=\"\" class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ item.name | uppercase }}</span>\r\n }@else {\r\n {{ item.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n\r\n }\r\n }\r\n\r\n <!-- </ng-container>\r\n <ng-template #noStock>\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span>{{(\"out-of-stock-short\" | translate) | uppercase}}</span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"out-of-stock-short\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n </ng-template> -->\r\n </div>\r\n</a>" }]
55
+ args: [{ selector: 'app-product-ec', standalone: true, imports: [CommonModule, PriceEcComponent, RouterLink, TranslateModule], template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n\r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n\r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn standard\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }@else {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (product.special_mark[0]?.type === 'out_of_stock' || product.special_mark[0]?.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0].name | uppercase }} </span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (product.special_mark[0].type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(product.special_mark[0]?.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (product.special_mark[0]?.type === 'more_info') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n</a>" }]
56
56
  }], propDecorators: { product: [{
57
57
  type: Input,
58
58
  args: [{
@@ -65,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
65
65
  }], isCollection: [{
66
66
  type: Input
67
67
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUN0RDs7O0dBR0c7QUFRSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzlCOztPQUVHO0lBSUgsT0FBTyxDQUFXO0lBQ2xCOztPQUVHO0lBQ00sWUFBWSxHQUFXLElBQUksQ0FBQztJQUNyQzs7T0FFRztJQUNPLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRXJDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNPLE1BQU0sR0FBd0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDMUQsZ0JBQWdCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEM7O09BRUc7SUFDSSxRQUFRLEdBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvQyxZQUFZLENBQUMsR0FBVztRQUNqQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDNUgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkYsQ0FBQzt3R0F6Q1Esa0JBQWtCOzRGQUFsQixrQkFBa0IscU1DbkIvQiwya0pBdUdJLHlERHhGTyxZQUFZLDJWQUFFLGdCQUFnQix5RkFBRSxVQUFVLG1PQUFHLGVBQWU7OzRGQUkxRCxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0MsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRyxlQUFlLENBQUM7OEJBV3ZFLE9BQU87c0JBSE4sS0FBSzt1QkFBQzt3QkFDTixRQUFRLEVBQUUsSUFBSTtxQkFDZDtnQkFLUSxZQUFZO3NCQUFwQixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBQcmljZUVjQ29tcG9uZW50IH0gZnJvbSBcIi4uL3dpZGdldHMtZWMvcHJpY2UtZWMvcHJpY2UtZWMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG4vKipcclxuICogQ29tcG9uZW50ZSBxdWUgc2UgZW5jYXJnYSBkZSBtYW5lamFyIHVuIHByb2R1Y3RvLlxyXG4gKiBAY2xhc3MgUHJvZHVjdEVjQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1wcm9kdWN0LWVjJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFByaWNlRWNDb21wb25lbnQsIFJvdXRlckxpbmsgLCBUcmFuc2xhdGVNb2R1bGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vcHJvZHVjdC1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0LyoqXHJcblx0ICogRGF0b3MgZGVsIHByb2R1Y3RvLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCh7XHJcblx0XHRyZXF1aXJlZDogdHJ1ZVxyXG5cdH0pXHJcblx0cHJvZHVjdCE6IFByb2R1Y3Q7XHJcblx0LyoqXHJcblx0ICogU2UgdXNhIHBhcmEgc2FiZXIgc2kgZWwgcHJvZHVjdG8gZXMgZGUgdGlwbyBCb3ggbyBubyB5IGRlZmluaXIgbGEgdmlzdGEgYWRlY3VhZGEuXHJcblx0ICovXHJcblx0QElucHV0KCkgaXNQcm9kdWN0Qm94OmJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKlxyXG5cdCAqIENvbnN0YW50ZXMgZGVsIGNvcmVcclxuXHQgKi9cclxuXHRAT3V0cHV0KCkgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG5cdEBJbnB1dCgpIGlzQ29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHQgIHRoaXMubG9hZGVkLmVtaXQodGhpcy5wcm9kdWN0LmlkKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjb25zdHM6Q29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpXHJcblx0cHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXHJcblx0cHJpdmF0ZSByb3V0ZXI6Um91dGVyID0gaW5qZWN0KFJvdXRlcilcclxuXHQvKipcclxuXHQgKiBVUkwgcGFyYSBsYXMgaW1hZ2VuZXMgZGVsIHByb2R1Y3RvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZWRpYVVybDpzdHJpbmcgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpXHJcblx0b3BlbldoYXRzQXBwKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNob3VsZFNob3dQcmljZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucHJvZHVjdD8uc3BlY2lhbF9tYXJrIHx8IHRoaXMucHJvZHVjdC5zcGVjaWFsX21hcmsubGVuZ3RoID09PSAwIHx8IHRoaXMucHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnNob3dQcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaGFzRGlzY291bnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdC5zYWxlcHJpY2UgJiYgdGhpcy5wcm9kdWN0LnNhbGVwcmljZSAhPT0gdGhpcy5wcm9kdWN0LnByaWNlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxhIFtyb3V0ZXJMaW5rXT1cIlsnL3Byb2R1Y3QnLCBwcm9kdWN0LmlkXVwiIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgcHJvZHVjdG9cIj5cclxuICAgIDwhLS0gTWFyY2EgZXNwZWNpYWwgeSBkZXNjdWVudG8gLS0+XHJcbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJwcm9kdWN0LnNhbGVwcmljZSB8fCAocHJvZHVjdC5zcGVjaWFsX21hcmsgJiYgcHJvZHVjdC5zcGVjaWFsX21hcmsgIT09IG51bGwgJiYgcHJvZHVjdC5zcGVjaWFsX21hcmsgIT09IHVuZGVmaW5lZCAmJiBwcm9kdWN0LnNwZWNpYWxfbWFyay5sZW5ndGggPjApXCJcclxuICAgICAgICBjbGFzcz1cIm1hcmNhc1wiPlxyXG4gICAgICAgIDxkaXYgKmVjUHJvZHVjdFN0b2NrPVwicHJvZHVjdFwiIFtlY1Byb2R1Y3RNaW5pXT1cInByb2R1Y3Quc3BlY2lhbF9tYXJrXCI+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dQcmljZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICplY1Byb2R1Y3RTdG9jaz1cInByb2R1Y3RcIiBbbmdDbGFzc109XCJ7J3RhZy1kc2MgZmxvYXQtcmlnaHQnOiBwcm9kdWN0LnNhbGVwcmljZX1cIlxyXG4gICAgICAgICAgICAgICAgW2VjUHJvZHVjdE9mZl09XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICAgIDwhLS0gSW1hZ2VuIGRlbCBwcm9kdWN0byAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3RvXCI+XHJcbiAgICAgICAgQGlmKHByb2R1Y3QucGljdHVyZXNkZWZhdWx0KXtcclxuICAgICAgICBAaWYgKHByb2R1Y3QucGljdHVyZXNkZWZhdWx0ICYmIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0Lmxlbmd0aCA+IDEgKSB7XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhVXJsICsgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF1cIiBhbHQ9XCJJbWFnZW4gcHJpbmNpcGFsXCIgY2xhc3M9XCJ3LTEwMCBwaWMwMVwiIC8+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhVXJsICsgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMV1cIiBhbHQ9XCJJbWFnZW4gc2VjdW5kYXJpYVwiIGNsYXNzPVwidy0xMDAgcGljMDJcIiAvPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0WzBdXCIgYWx0PVwiSW1hZ2VuIHByaW5jaXBhbFwiIGNsYXNzPVwidy0xMDAgcGljMDFcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUHJlY2lvIC0tPlxyXG4gICAgXHJcblxyXG4gICAgPCEtLSBOb21icmUgZGVsIHByb2R1Y3RvIC0tPlxyXG4gICAgPGg2IGNsYXNzPVwidGl0bGVcIj57eyBwcm9kdWN0Lm5hbWUgfCB0aXRsZWNhc2UgfX08L2g2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJza3VcIiBbaW5uZXJIVE1MXT1cInByb2R1Y3Quc2hvcnRkZXRhaWxzXCI+PC9kaXY+XHJcbiAgICBcclxuICAgIEBpZiAoc2hvdWxkU2hvd1ByaWNlKSB7XHJcbiAgICA8YXBwLXByaWNlLWVjIFtwcmljZV09XCJwcm9kdWN0LnByaWNlXCIgW3NhbGVwcmljZV09XCJwcm9kdWN0LnNhbGVwcmljZVwiIGNsYXNzPVwiXCIgLz5cclxuICAgIH1AZWxzZSB7XHJcbiAgICA8cCBjbGFzcz1cIm5vUHJpY2VcIj48L3A+XHJcbiAgICB9XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpeEJvdHRvbVwiPlxyXG5cclxuICAgICAgICA8IS0tIEJvdMOzbiBkZSBhY2Npb25lcyAtLT5cclxuICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICplY1Byb2R1Y3RTdG9jaz1cInByb2R1Y3Q7IGVsc2Ugbm9TdG9ja1wiPiAtLT5cclxuICAgICAgICA8IS0tIEN1YW5kbyBubyB0aWVuZSBtYXJjYSBlc3BlY2lhbCBvIGVzIGRlIHRpcG8gJ3N0YW5kYXJkJyAtLT5cclxuICAgICAgICBAaWYgKCFwcm9kdWN0LnNwZWNpYWxfbWFyayB8fCBwcm9kdWN0LnNwZWNpYWxfbWFyay5sZW5ndGggPT09IDAgfHwgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnR5cGUgPT09XHJcbiAgICAgICAgJ3N0YW5kYXJkJykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbGxlY3Rpb247IGVsc2Ugbm9ybWFsVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7KFwiYnV5XCIgfCB0cmFuc2xhdGUpIHwgdXBwZXJjYXNlfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxyXG4gICAgICAgICAgICAgICAge3soXCJidXlcIiB8IHRyYW5zbGF0ZSkgfCB1cHBlcmNhc2V9fVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIEN1YW5kbyB0aWVuZSBtYXJjYSBlc3BlY2lhbCB5IGVsIHRpcG8gbm8gZXMgJ3N0YW5kYXJkJyAtLT5cclxuICAgICAgICBAaWYocHJvZHVjdC5zcGVjaWFsX21hcms/LlswXT8udHlwZSAhPT0gJ3N0YW5kYXJkJyl7XHJcbiAgICAgICAgQGZvciAoaXRlbSBvZiBwcm9kdWN0LnNwZWNpYWxfbWFyazsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPCEtLSBDYXNvIDE6IEFnb3RhZG8gbyBEaXNwb25pYmxlIG11eSBwcm9udG8gLS0+XHJcbiAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09ICdvdXRfb2Zfc3RvY2snIHx8IGl0ZW0udHlwZSA9PT0gJ2NvbWluZ19zb29uJykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCI+XHJcbiAgICAgICAgICAgIEBpZihpc0NvbGxlY3Rpb24pe1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBpdGVtLm5hbWUgfCB1cHBlcmNhc2UgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvYnV0dG9uPn1cclxuICAgICAgICA8IS0tIENhc28gMjogQ29udGFjdG8gcG9yIFdoYXRzQXBwIC0tPlxyXG4gICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnd2hhdHNhcHBfY29udGFjdCcpIHtcclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuV2hhdHNBcHAoaXRlbS53aGF0c2FwcENvbnRhY3QpXCI+XHJcbiAgICAgICAgICAgIEBpZihpc0NvbGxlY3Rpb24pe1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBpdGVtLm5hbWUgfCB1cHBlcmNhc2UgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIENhc28gMzogU29saWNpdGFyIG3DoXMgaW5mb3JtYWNpw7NuIC0tPlxyXG4gICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnbW9yZV9pbmZvJykge1xyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJcIiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cImlzQ29sbGVjdGlvbiA/ICdweC0yIHctMTAwIGQtc20tYmxvY2snIDogJ3B5LTIgcHgtNCdcIj5cclxuICAgICAgICAgICAgQGlmKGlzQ29sbGVjdGlvbil7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubmFtZSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAge3sgaXRlbS5uYW1lIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1N0b2NrPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29sbGVjdGlvbjsgZWxzZSBub3JtYWxUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3soXCJvdXQtb2Ytc3RvY2stc2hvcnRcIiB8IHRyYW5zbGF0ZSkgfCB1cHBlcmNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7KFwib3V0LW9mLXN0b2NrLXNob3J0XCIgfCB0cmFuc2xhdGUpIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPC9kaXY+XHJcbjwvYT4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUN0RDs7O0dBR0c7QUFRSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzlCOztPQUVHO0lBSUgsT0FBTyxDQUFXO0lBQ2xCOztPQUVHO0lBQ00sWUFBWSxHQUFXLElBQUksQ0FBQztJQUNyQzs7T0FFRztJQUNPLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRXJDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNPLE1BQU0sR0FBd0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDMUQsZ0JBQWdCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEM7O09BRUc7SUFDSSxRQUFRLEdBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvQyxZQUFZLENBQUMsR0FBVztRQUNqQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDNUgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkYsQ0FBQzt3R0F6Q1Esa0JBQWtCOzRGQUFsQixrQkFBa0IscU1DbkIvQiwwOEhBb0ZJLHlERHJFTyxZQUFZLDJWQUFFLGdCQUFnQix5RkFBRSxVQUFVLG1PQUFHLGVBQWU7OzRGQUkxRCxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0MsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRyxlQUFlLENBQUM7OEJBV3ZFLE9BQU87c0JBSE4sS0FBSzt1QkFBQzt3QkFDTixRQUFRLEVBQUUsSUFBSTtxQkFDZDtnQkFLUSxZQUFZO3NCQUFwQixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBQcmljZUVjQ29tcG9uZW50IH0gZnJvbSBcIi4uL3dpZGdldHMtZWMvcHJpY2UtZWMvcHJpY2UtZWMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG4vKipcclxuICogQ29tcG9uZW50ZSBxdWUgc2UgZW5jYXJnYSBkZSBtYW5lamFyIHVuIHByb2R1Y3RvLlxyXG4gKiBAY2xhc3MgUHJvZHVjdEVjQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1wcm9kdWN0LWVjJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFByaWNlRWNDb21wb25lbnQsIFJvdXRlckxpbmsgLCBUcmFuc2xhdGVNb2R1bGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vcHJvZHVjdC1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0LyoqXHJcblx0ICogRGF0b3MgZGVsIHByb2R1Y3RvLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCh7XHJcblx0XHRyZXF1aXJlZDogdHJ1ZVxyXG5cdH0pXHJcblx0cHJvZHVjdCE6IFByb2R1Y3Q7XHJcblx0LyoqXHJcblx0ICogU2UgdXNhIHBhcmEgc2FiZXIgc2kgZWwgcHJvZHVjdG8gZXMgZGUgdGlwbyBCb3ggbyBubyB5IGRlZmluaXIgbGEgdmlzdGEgYWRlY3VhZGEuXHJcblx0ICovXHJcblx0QElucHV0KCkgaXNQcm9kdWN0Qm94OmJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKlxyXG5cdCAqIENvbnN0YW50ZXMgZGVsIGNvcmVcclxuXHQgKi9cclxuXHRAT3V0cHV0KCkgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG5cdEBJbnB1dCgpIGlzQ29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHQgIHRoaXMubG9hZGVkLmVtaXQodGhpcy5wcm9kdWN0LmlkKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjb25zdHM6Q29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpXHJcblx0cHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXHJcblx0cHJpdmF0ZSByb3V0ZXI6Um91dGVyID0gaW5qZWN0KFJvdXRlcilcclxuXHQvKipcclxuXHQgKiBVUkwgcGFyYSBsYXMgaW1hZ2VuZXMgZGVsIHByb2R1Y3RvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZWRpYVVybDpzdHJpbmcgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpXHJcblx0b3BlbldoYXRzQXBwKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNob3VsZFNob3dQcmljZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucHJvZHVjdD8uc3BlY2lhbF9tYXJrIHx8IHRoaXMucHJvZHVjdC5zcGVjaWFsX21hcmsubGVuZ3RoID09PSAwIHx8IHRoaXMucHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnNob3dQcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaGFzRGlzY291bnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdC5zYWxlcHJpY2UgJiYgdGhpcy5wcm9kdWN0LnNhbGVwcmljZSAhPT0gdGhpcy5wcm9kdWN0LnByaWNlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxhIFtyb3V0ZXJMaW5rXT1cIlsnL3Byb2R1Y3QnLCBwcm9kdWN0LmlkXVwiIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgcHJvZHVjdG9cIj5cclxuICAgIDwhLS0gTWFyY2EgZXNwZWNpYWwgeSBkZXNjdWVudG8gLS0+XHJcbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJwcm9kdWN0LnNhbGVwcmljZSB8fCAocHJvZHVjdC5zcGVjaWFsX21hcmsgJiYgcHJvZHVjdC5zcGVjaWFsX21hcmsgIT09IG51bGwgJiYgcHJvZHVjdC5zcGVjaWFsX21hcmsgIT09IHVuZGVmaW5lZCAmJiBwcm9kdWN0LnNwZWNpYWxfbWFyay5sZW5ndGggPjApXCJcclxuICAgICAgICBjbGFzcz1cIm1hcmNhc1wiPlxyXG4gICAgICAgIDxkaXYgKmVjUHJvZHVjdFN0b2NrPVwicHJvZHVjdFwiIFtlY1Byb2R1Y3RNaW5pXT1cInByb2R1Y3Quc3BlY2lhbF9tYXJrXCI+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dQcmljZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICplY1Byb2R1Y3RTdG9jaz1cInByb2R1Y3RcIiBbbmdDbGFzc109XCJ7J3RhZy1kc2MgZmxvYXQtcmlnaHQnOiBwcm9kdWN0LnNhbGVwcmljZX1cIlxyXG4gICAgICAgICAgICAgICAgW2VjUHJvZHVjdE9mZl09XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICAgIDwhLS0gSW1hZ2VuIGRlbCBwcm9kdWN0byAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3RvXCI+XHJcbiAgICAgICAgQGlmKHByb2R1Y3QucGljdHVyZXNkZWZhdWx0KXtcclxuICAgICAgICBAaWYgKHByb2R1Y3QucGljdHVyZXNkZWZhdWx0ICYmIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0Lmxlbmd0aCA+IDEgKSB7XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhVXJsICsgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF1cIiBhbHQ9XCJJbWFnZW4gcHJpbmNpcGFsXCIgY2xhc3M9XCJ3LTEwMCBwaWMwMVwiIC8+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhVXJsICsgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMV1cIiBhbHQ9XCJJbWFnZW4gc2VjdW5kYXJpYVwiIGNsYXNzPVwidy0xMDAgcGljMDJcIiAvPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0WzBdXCIgYWx0PVwiSW1hZ2VuIHByaW5jaXBhbFwiIGNsYXNzPVwidy0xMDAgcGljMDFcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUHJlY2lvIC0tPlxyXG5cclxuXHJcbiAgICA8IS0tIE5vbWJyZSBkZWwgcHJvZHVjdG8gLS0+XHJcbiAgICA8aDYgY2xhc3M9XCJ0aXRsZVwiPnt7IHByb2R1Y3QubmFtZSB8IHRpdGxlY2FzZSB9fTwvaDY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNrdVwiIFtpbm5lckhUTUxdPVwicHJvZHVjdC5zaG9ydGRldGFpbHNcIj48L2Rpdj5cclxuXHJcbiAgICBAaWYgKHNob3VsZFNob3dQcmljZSkge1xyXG4gICAgPGFwcC1wcmljZS1lYyBbcHJpY2VdPVwicHJvZHVjdC5wcmljZVwiIFtzYWxlcHJpY2VdPVwicHJvZHVjdC5zYWxlcHJpY2VcIiBjbGFzcz1cIlwiIC8+XHJcbiAgICB9XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpeEJvdHRvbVwiPlxyXG5cclxuICAgICAgICA8IS0tIEJvdMOzbiBkZSBhY2Npb25lcyAtLT5cclxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKmVjUHJvZHVjdFN0b2NrPVwicHJvZHVjdDsgZWxzZSBub1N0b2NrXCI+IC0tPlxyXG4gICAgICAgIDwhLS0gQ3VhbmRvIG5vIHRpZW5lIG1hcmNhIGVzcGVjaWFsIG8gZXMgZGUgdGlwbyAnc3RhbmRhcmQnIC0tPlxyXG4gICAgICAgIEBpZiAoIXByb2R1Y3Quc3BlY2lhbF9tYXJrIHx8IHByb2R1Y3Quc3BlY2lhbF9tYXJrLmxlbmd0aCA9PT0gMCB8fCBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8udHlwZSA9PT1cclxuICAgICAgICAnc3RhbmRhcmQnKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBzdGFuZGFyZFwiIFtuZ0NsYXNzXT1cImlzQ29sbGVjdGlvbiA/ICdweC0yIHctMTAwIGQtc20tYmxvY2snIDogJ3B5LTIgcHgtNCdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29sbGVjdGlvbjsgZWxzZSBub3JtYWxUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3soXCJidXlcIiB8IHRyYW5zbGF0ZSkgfCB1cHBlcmNhc2V9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbFRleHQ+XHJcbiAgICAgICAgICAgICAgICB7eyhcImJ1eVwiIHwgdHJhbnNsYXRlKSB8IHVwcGVyY2FzZX19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICA8IS0tIENhc28gMTogQWdvdGFkbyBvIERpc3BvbmlibGUgbXV5IHByb250byAtLT5cclxuICAgICAgICBAaWYgKHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy50eXBlID09PSAnb3V0X29mX3N0b2NrJyB8fCBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8udHlwZSA9PT0gJ2NvbWluZ19zb29uJykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCI+XHJcbiAgICAgICAgICAgIEBpZihpc0NvbGxlY3Rpb24pe1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXS5uYW1lIHwgdXBwZXJjYXNlIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAge3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/Lm5hbWUgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvYnV0dG9uPn1cclxuICAgICAgICA8IS0tIENhc28gMjogQ29udGFjdG8gcG9yIFdoYXRzQXBwIC0tPlxyXG4gICAgICAgIEBpZiAocHJvZHVjdC5zcGVjaWFsX21hcmtbMF0udHlwZSA9PT0gJ3doYXRzYXBwX2NvbnRhY3QnKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cImlzQ29sbGVjdGlvbiA/ICdweC0yIHctMTAwIGQtc20tYmxvY2snIDogJ3B5LTIgcHgtNCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbldoYXRzQXBwKHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy53aGF0c2FwcENvbnRhY3QpXCI+XHJcbiAgICAgICAgICAgIEBpZihpc0NvbGxlY3Rpb24pe1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ubmFtZSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAge3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/Lm5hbWUgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLSBDYXNvIDM6IFNvbGljaXRhciBtw6FzIGluZm9ybWFjacOzbiAtLT5cclxuICAgICAgICBAaWYgKHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy50eXBlID09PSAnbW9yZV9pbmZvJykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCI+XHJcbiAgICAgICAgICAgIEBpZihpc0NvbGxlY3Rpb24pe1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ubmFtZSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAge3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/Lm5hbWUgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG48L2E+Il19
@@ -296,7 +296,8 @@ export class AuthService {
296
296
  */
297
297
  loadUserFromStorage(key = this.USER) {
298
298
  if (this._localStorage.getItem(key)) {
299
- this._user = JSON.parse(this._localStorage.getItem(key));
299
+ const userObj = JSON.parse(this._localStorage.getItem(key));
300
+ this._user = Object.assign(new User(), userObj); // <-- Así recuperas los métodos de User
300
301
  return true;
301
302
  }
302
303
  return false;
@@ -448,4 +449,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
448
449
  providedIn: 'root'
449
450
  }]
450
451
  }], ctorParameters: () => [] });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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Qzt3R0F0YlEsV0FBVzs0R0FBWCxXQUFXLGNBRlgsTUFBTTs7NEZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2F1dGguc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuLyoqXHJcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGlmaWNhY2nDs24gZGVsIHVzdWFyaW8gZW4gbGEgcGxhdGFmb3JtYS5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSlcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hcGlDb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXV0aFN0b3JhZ2U6IEF1dGhTdG9yYWdlU2VydmljZSA9IGluamVjdChBdXRoU3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuXHQvLyBDb250YW50ZXMgcGFyYSBlbCBzdG9yYWdlLlxyXG5cdHByaXZhdGUgcmVhZG9ubHkgSldUX1RPS0VOID0gJ0pXVF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IEVYUElSQVRFU19JTiA9ICdFWFBJUkFURVNfSU4nXHJcblx0cHJpdmF0ZSByZWFkb25seSBVU0VSID0gJ1VTRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBNQUlMID0gJ21haWwnXHJcblx0cHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTCA9ICdDSEFOTkVMJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NRVIgPSAnQ1VTVE9NRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBDSEFOTkVMU0VMTEVSID0gJ0NIQU5ORUxTRUxMRVInXHJcblxyXG5cdHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxyXG5cdHB1YmxpYyBjaGFubmVscyQgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHRwcml2YXRlIF9jaGFubmVsJCA9IHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmdldENoYW5uZWwoKVxyXG5cdHByaXZhdGUgX3VzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPihudWxsKVxyXG5cdHByaXZhdGUgX2xvZ2dlZEluU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblx0cHVibGljIGxvZ2dlZEluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dlZEluU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIF9sb2dnaW5nSW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRwdWJsaWMgbG9nZ2luZ0luJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dpbmdJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgaW5kaWNhciBzaSB1biBjYW5hbCBjYW1iaW8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfYWN0aXZlQ2hhbm5lbENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBfY3VzdG9tZXIgPSBudWxsO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIGNhbmFsXHJcblx0ICovXHJcblx0cHVibGljIGNoYW5uZWw6IGFueSA9IFtdXHJcblx0cHVibGljIGNoYW5uZWxzOiBhbnlbXSA9IFtdXHJcblx0LyoqXHJcblx0ICogVXRpbGl6YWRvIHBhcmEgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgdGllbmUgcXVlIHJlZGlyZWNjaW9uYXJcclxuXHQgKiBsYSBwYWdpbmEgdHJhcyB1biBldmVudG8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfaG9tZVJlc29sdmVyOiBhbnk7XHJcblx0LyoqXHJcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB0b2tlbiBkZSB1c3VhcmlvIHVuYSB2ZXogbG9ndWVhZG9cclxuXHQgKi9cclxuXHRwcml2YXRlIF90b2tlblNpZ25hbCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuXHQvKipcclxuXHQgKiBTaWduYWwgcGFyYSBndWFyZGFyIGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyU2lnbmFsID0gc2lnbmFsPFVzZXIgfCBudWxsPihudWxsKTtcclxuXHQvL0FQSXNcclxuXHRwcml2YXRlIHNob3BBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkxcclxuXHRwcml2YXRlIGNoYW5uZWxBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMXHJcblx0cHJpdmF0ZSB0b2tlbkFwaSgpIHsgcmV0dXJuIHRoaXMuc2hvcEFwaSArICdsb2dpbl9jaGVjaycgfVxyXG5cdHByaXZhdGUgcmVjb3ZlclBhc3N3b3JkQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5zaG9wQXBpfSR7dGhpcy5jaGFubmVsQXBpfS9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0YCB9XHJcblx0cHJpdmF0ZSBjb25maXJtQWNjb3VudEFwaSh0b2tlbjogc3RyaW5nKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3ZlcmlmeS1hY2NvdW50P3Rva2VuPSR7dG9rZW59YCB9XHJcblx0cHJpdmF0ZSByZWdpc3RlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXJgIH1cclxuXHRwcml2YXRlIHJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXItd2hvbGVzYWxlcmB9XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblx0XHJcblx0cHVibGljIHdpbmRvdz86V2luZG93O1xyXG5cdHB1YmxpYyBsb2NhbFN0b3JhZ2U/OlN0b3JhZ2U7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLndpbmRvdyA9IHdpbmRvd1xyXG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZFRva2VuRnJvbVN0b3JhZ2UoKTtcclxuXHRcdHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIExvZ3VlYSBhbCB1c3VhcmlvIGVuIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXHJcblx0ICogQHBhcmFtIHdpdGhSb2xlcyByb2xlcyBkZWwgdXN1YXJpb1xyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9LCB3aXRoUm9sZXM6IFVzZXJSb2xlVHlwZVtdID0gW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0dGhpcy5fY2hhbm5lbCQuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbCA9IGNoKTtcclxuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dXNlciA9IHsuLi51c2VyLCAuLi50aGlzLmxvZ2luRXh0cmFEYXRhKCkgfVxyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIHVzZXIpLnBpcGUoXHJcblx0XHRcdG1hcCgocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuZG9Mb2dpblVzZXIoeyAuLi51c2VyLCAuLi5yZXMgfSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gJ29rJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICdlcnJvcic7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7IC8vIDwtLSBQcm9wYWdhIGVsIGVycm9yIHJlYWxcclxuXHRcdFx0fSlcclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHVzdWFyaW8gbG9ndWVhZG8gdGVuZ2EgcGVybWlzb3MgXHJcblx0ICogcGFyYSBlbCBjYW5hbCBhY3R1YWwgZGUgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIHJlcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHJlczogYW55KSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKCdjaGFubmVsQWNjZXNzJywgcmVzKTtcclxuXHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKTtcclxuXHJcblx0XHQvKiBObyBhdXRob3JpemVkIGNoYW5uZWxzICovXHJcblx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdC8qIFNvbWUgYXV0aG9yaXplZCBjaGFubmVsKHMpIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmIChyZXMuY2hhbm5lbHMuZmluZCgodXNlcmNoYW5uZWw6IGFueSkgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XHJcblx0XHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPiAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpXHJcblx0XHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cdFx0LyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0aWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDEgJiYgdGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xyXG5cdFx0XHRkZWxldGUgcmVzLnBhc3N3b3JkXHJcblx0XHRcdHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmICh0aGlzLl9hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XHJcblx0XHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb250cm9sYSBlbCBhY2Nlc28gYWwgY2FuYWwsIGRlIHNlciBvdHJvIG51ZXZvIGNhbWJpYSBsb3MgdmFsb3Jlcy5cclxuXHQgKiBAcGFyYW0gY2hhbm5lbCBcclxuXHQgKiBAcGFyYW0gdXNlciBcclxuXHQgKi9cclxuXHRjaGFubmVsQWNjZXNzKGNoYW5uZWw6IGFueSwgdXNlciA9IG51bGwpIHtcclxuXHRcdGlmICh0aGlzLndpbmRvdz8ubG9jYXRpb24uaG9zdG5hbWUgIT0gY2hhbm5lbC5ob3N0bmFtZSkge1xyXG5cdFx0XHRsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMuX3VzZXIpKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVwbGFjZShgJHt0aGlzLndpbmRvdz8ubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLl9jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyhjaGFubmVsKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVsb2FkKClcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHJvbCBkZWwgdXN1YXJpbyBzZWEgdW4gcm9sIHBlcm1pdGlkbyBwb3IgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIGFsbG93ZWRSb2xlcyByb2xlcyBxdWUgcGVybWl0ZSBsYSBhcGxpY2FjacOzbi5cclxuXHQgKiBAcGFyYW0gcm9sZSByb2wgZGVsIHVzdWFyaW9zXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc0FsbG93ZWRSb2xlKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGFsbG93ZWRSb2xlcy5sZW5ndGhcclxuXHRcdFx0PyBhbGxvd2VkUm9sZXMuaW5jbHVkZXMocm9sZSBhcyBVc2VyUm9sZVR5cGUpXHJcblx0XHRcdDogdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBUcmFzIHVuIGxvZ3VlbyBleGl0b3NvLCBndWFyZGEgbG9zIGRhdG9zIG5lY2VzYXJpb3MgZW4gZWwgc3RvcmFnZSB5IGRlbcOhc1xyXG5cdCAqIGNvbmZpZ3VyYWNpb25lcyBuZWNlc2FyaWFzLlxyXG5cdCAqIEBwYXJhbSB0b2tlbnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBkb0xvZ2luVXNlcih0b2tlbnM6IGFueSkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKClcclxuXHRcdHRoaXMuX3VzZXIuaW5pdGlsaXplZCh0b2tlbnMpXHJcblx0XHRcclxuXHRcdHRoaXMuZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnMpXHJcblx0XHQvL0NoYW5uZWxcclxuXHRcdGNvbnN0IHVzZXJKc29uaWZ5ID0gdGhpcy5fdXNlci5qc29uaWZ5KClcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUiwgSlNPTi5zdHJpbmdpZnkodXNlckpzb25pZnkpKVxyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkpXVF9UT0tFTiwgdG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXHJcblx0XHR0aGlzLl90b2tlblNpZ25hbC5zZXQodG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcclxuXHRcdC8vT2JzZXJ2YWJsZXNcclxuXHRcdHRoaXMuX3VzZXJJblN1YmplY3QubmV4dCh0aGlzLl91c2VyKTtcclxuXHRcdHRoaXMuX2xvZ2dlZEluU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcclxuXHQgKiB0cmFzIHVuYSBhY2Npw7NuXHJcblx0ICogQHBhcmFtIHJlc29sdmVyRnVuY3Rpb24gXHJcblx0ICovXHJcblx0cHVibGljIHNldEhvbWVSZXNvbHZlcihyZXNvbHZlckZ1bmN0aW9uOiBhbnkpIHsgdGhpcy5faG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvbiB9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdG9rZW4gZGVsIHN0b3JhZ2UgeSBsbyBndWFyZGEgZW4gbGEgc2lnbmFsLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcclxuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG5cdFx0aWYgKHRva2VuKSB7XHJcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERlc2xvZ3VlYSBhbCB1c3VhcmlvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dvdXQoKSB7XHJcblx0XHR0aGlzLmRvTG9nb3V0VXNlcigpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHNpIGhheSB1biB1c3VhcmlvIGxvZ3VlYWRvIG8gbm8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJpc0F1dGhlbnRpY2F0ZWRcIix0aGlzLmlzVG9rZW5FeHBpcmVkKCksIHRoaXMuX3Rva2VuU2lnbmFsKCkgKTtcclxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcclxuXHRcdFx0dGhpcy5kb0xvZ291dFVzZXIoKVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpXHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHQvL2NvbnNvbGUubG9nKHRoaXMuZ2V0VG9rZW4oKSwgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAsIHRoaXMuX3VzZXIgIT0gbnVsbCk7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRUb2tlbigpICYmICF0aGlzLmlzVG9rZW5FeHBpcmVkKCkgJiYgdGhpcy5fdXNlciAhPSBudWxsO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIHRva2VuIGRlIHVzdWFyaW9cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLl90b2tlblNpZ25hbCgpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBMaW1waWEgZWwgc3RvcmFnZSB5IGxhcyBjb25maWd1cmFjaW9uZXMgaW50ZXJuYXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZG9Mb2dvdXRVc2VyKCkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG51bGxcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XHJcblx0XHR0aGlzLl9hdXRoU3RvcmFnZS5zZXRBdXRoVG9rZW4obnVsbCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUwpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VTVE9NRVIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XHJcblx0XHR0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuXHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldChudWxsKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBgdHJ1ZWBzaSBlbCB0b2tlbiBleHBpcm8sIGBmYWxzZWAgY2FzbyBjb250cmFyaW8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc1Rva2VuRXhwaXJlZCgpIHtcclxuXHRcdGNvbnN0IGZlY2hhX2V4cGlyYWNpb24gPSB0aGlzLmdldEV4cGlyYXRlc0F0KCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGZlY2hhIGRlIGV4cGlyYWNpw7NuIGRlbCB0b2tlbi5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldEV4cGlyYXRlc0F0KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBhbCB1c3VhcmlvIGFjdHVhbCB5IGxvIGNvbnZpZXJ0ZSBlbiB1bmEgaW5zdGFuY2lhIGRlIGBVc2VyYFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB8IG51bGwge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcblx0XHRpZiAoIXRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpKSB7XHJcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsXHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0aGlzLl91c2VyPy5jaGFubmVscy5maW5kKCh1c2VyY2hhbm5lbDogYW55KSA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sb2dvdXQoKVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX3VzZXI7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdXN1YXJpbyBkZWwgc3RvcmFnZS5cclxuXHQgKiBAcGFyYW0ga2V5IFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbG9hZFVzZXJGcm9tU3RvcmFnZShrZXkgPSB0aGlzLlVTRVIpIHtcclxuXHRcdGlmICh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSB7XHJcblx0XHRcdHRoaXMuX3VzZXIgPSBKU09OLnBhcnNlKHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVudmlhIGxhIHNvbGljaXR1ZCBwYXJhIGNhbWJpYXIgbGEgY29udHJhc2XDsWEuXHJcblx0ICogQHBhcmFtIGVtYWlsIGVtYWlsIGRlbCBzb2xpY2l0YW50ZS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRyZWNvdmVyUGFzc3dvcmQoZW1haWw6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMucmVjb3ZlclBhc3N3b3JkQXBpKCksIHsgZW1haWwgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgY29uZmlybWFyIGVsIHJlZ2lzdHJvIGRlIHVzdWFyaW8uXHJcblx0ICogQHBhcmFtIHRva2VuIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGNvbmZpcm1BY2NvdW50KHRva2VuOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLmdldCh0aGlzLmNvbmZpcm1BY2NvdW50QXBpKHRva2VuKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBjb23Dum5cclxuXHQgKiBAcGFyYW0gZGF0YSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzaW5nVXAoZGF0YTogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJBcGkoKSwgZGF0YSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBtYXlvcmlzdGEuXHJcblx0ICogQHBhcmFtIGRhdGEgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0c2lnblVwV2hvbGVzYWxlcihkYXRhOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3Rlcldob2xlc2FsZXJBcGkoKSxkYXRhKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2hlcXVlYSBzaSB1biB1c3VhcmlvIGVzdGEgaGFiaWxpdGFkbyBhIGNvbXByYXIgbyBuby5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHQvLyBpc0FibGVUb0J1eSgpOmJvb2xlYW4ge1xyXG5cdC8vIFx0Y29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldFVzZXJQcm9maWxlQXNVc2VyKCkgYXMgVXNlcjtcclxuXHQvLyBcdGNvbnN0IGlzU2VsbGVyID0gY3VycmVudFVzZXIudHlwZVVzZXIgJiYgY3VycmVudFVzZXIudHlwZVVzZXIgPT0gJ3NlbGxlcicgfHwgZmFsc2VcclxuXHQvLyBcdHJldHVybiAhaXNTZWxsZXIgfHwgIXRoaXMuZ2V0Q3VzdG9tZXIoKTtcclxuXHQvLyB9XHJcblx0cHVibGljIGlzQWJsZVRvQnV5ID0gKCk6IGJvb2xlYW4gPT4gIXRoaXMuZ2V0VXNlclByb2ZpbGVBc1VzZXIoKT8uaXNTZWxsZXIoKSB8fCAhIXRoaXMuZ2V0Q3VzdG9tZXIoKVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIHVzdWFyaW8gZGUgdGlwbyBjbGllbnRlLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldEN1c3RvbWVyKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2N1c3RvbWVyIHx8IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERldnVlbHZlIGVsIHVzdWFyaW8gYWN0dWFsIGxvZ3VlYWRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFVzZXJQcm9maWxlQXNVc2VyKCk6IFVzZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyISBhcyBVc2VyIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTtcclxuICAgIH1cclxuXHQvKipcclxuXHQgKiBBZ3JlZ2EgZGF0YSBleHRyYSBhbCBvYmplY3RvIGRlIFVzdWFyaW8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0bG9naW5FeHRyYURhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiAnc2VjcmV0X2RlbW9fY2xpZW50JyxcclxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3Bhc3N3b3JkJ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHQvKiBQbGVhc2UgcmVtb3ZlIHRoaXMgQVNBUCAtIE5lZWRzICpjaGFubmVscyogYXJyYXkgaW4gdXNlciBvYmplY3QgQUxXQVlTICovXHJcbiAgICBwcml2YXRlIGZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIodG9rZW5zOmFueSl7XHJcbiAgICAgICAgaWYgKFVzZXJSb2xlVHlwZS5TRUxMRVIgPT0gdG9rZW5zLnR5cGUgYXMgVXNlclJvbGVUeXBlKVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdGhpcy5fdXNlciEuc2V0Q2hhbm5lbHMoLi4udGhpcy5jaGFubmVscylcclxuICAgICAgICAgICAgICAgIDogdGhpcy5fdXNlciEuc2V0Q2hhbm5lbHModGhpcy5jaGFubmVsKVxyXG4gICAgfVxyXG5cclxuXHQgLyoqXHJcbiAgICAgKiBDYXJnYSBlbCBjbGllbnRlIGNvbiBlbCBxdWUgc2UgcmVhbGl6YXJhbiBwZWRpZG9zLiBTaSByZWNpYmUgZWwgdmFsb3IgbnVsbFxyXG4gICAgICogc2UgdnVlbHZlIGEgY2FyZ2FyIGVsIHZlbmRlZG9yIHBhcmEgc3UgdXNvLiAgXHJcbiAgICAgKiBAcGFyYW0gY3VzdG9tZXIgXHJcbiAgICAgKi9cclxuXHQgcHVibGljIHNldEN1c3RvbWVyKGN1c3RvbWVyOmFueSl7XHJcbiAgICAgICAgbGV0IHJlZnJlc2hQYWdlID0gZmFsc2VcclxuICAgICAgICB0aGlzLl9jdXN0b21lciA9IGN1c3RvbWVyXHJcbiAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVNUT01FUiwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXIpKVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBzYW1lQ2hhbm5lbCA9IGN1c3RvbWVyID8gdGhpcy5zYW1lQ2hhbm5lbChjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLCBjdXN0b21lci5jaGFubmVsc1swXS5sb2NhbGVzLmNvZGUpIDogbnVsbFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjdXN0b21lcikge1xyXG4gICAgICAgICAgICBpZighc2FtZUNoYW5uZWwpe1xyXG4gICAgICAgICAgICAgICAgIXRoaXMubG9jYWxTdG9yYWdlPy5nZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUikgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlPy5zZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUiwgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiB0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9hcGlDb25zdHMuTE9DQUxFXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2hhbm5lbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogY3VzdG9tZXIuY2hhbm5lbHNbMF0uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSlcclxuICAgICAgICAgICAgaWYocmVzKXtcclxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLnNhbWVDaGFubmVsKHJlcy5jaGFubmVsLCByZXMubG9jYWxlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHJlcylcclxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSA9IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlPy5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLl9jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q3VzdG9tZXJDYXJ0KClcclxuICAgICAgICByZWZyZXNoUGFnZSA/IGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmIDogbnVsbFxyXG4gICAgfVxyXG5cclxuXHQvKipcclxuICAgICAqIENvbXBydWViYSBzaSBsb3MgdmFsb3JlcyBkZWwgY2FuYWwgYWN0dWFsIHNvbiBpZ3VhbGVzIGEgbG9zIGluZ3Jlc2FkbyBwb3IgcGFyYW1ldHJvcy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIE5vbWJyZSBkZWwgY2FuYWxcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgIExvY2FsZSBkZWwgY2FuYWxcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHNpIGVzIGVsIG1pc21vIGNhbmFsLCBGYWxzZSBjYXNvIGNvbnRyYXJpby5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzYW1lQ2hhbm5lbCA9IChjaGFubmVsOnN0cmluZywgbG9jYWxlOnN0cmluZyk6Ym9vbGVhbiA9PiAoY2hhbm5lbCA9PSB0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTCkgJiYgKGxvY2FsZSA9PSB0aGlzLl9hcGlDb25zdHMuTE9DQUxFKVxyXG5cclxuXHQvKipcclxuICAgICAqIENhbWJpYSBkZSBjYW5hbFxyXG4gICAgICogQHBhcmFtIGNoYW5uZWxDb25maWcgZGViZSBzZXIgdW4gb2JqZXRvIHF1ZSBjb250ZW5nYSBhbCBtZW5vcyBsYXMga2V5cyBjaGFubmVsIHkgbG9jYWxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNoYW5nZUNoYW5uZWwgPSAoY2hhbm5lbENvbmZpZzphbnkpID0+IHtcclxuICAgICAgICB0aGlzLl9jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyh7XHJcbiAgICAgICAgICAgIGNoYW5uZWw6IGNoYW5uZWxDb25maWcuY2hhbm5lbCxcclxuICAgICAgICAgICAgbG9jYWxlOiBjaGFubmVsQ29uZmlnLmxvY2FsZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblx0Z2V0VXNlclByb2ZpbGUoKTogT2JzZXJ2YWJsZTxVc2VyIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fdXNlciAmJiBvZih0aGlzLl91c2VyKSkgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgfVxyXG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogT2JzZXJ2YWJsZTxVc2VyIHwgbnVsbD4ge1xyXG4gICAgICAgIHRoaXMuX3VzZXIgPSBuZXcgVXNlcigpO1xyXG4gICAgICAgIGlmICghdGhpcy5sb2FkVXNlckZyb21TdG9yYWdlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlciA9IG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX3VzZXIpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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Q0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt3R0F2YlEsV0FBVzs0R0FBWCxXQUFXLGNBRlgsTUFBTTs7NEZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2F1dGguc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuLyoqXHJcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGlmaWNhY2nDs24gZGVsIHVzdWFyaW8gZW4gbGEgcGxhdGFmb3JtYS5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSlcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hcGlDb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXV0aFN0b3JhZ2U6IEF1dGhTdG9yYWdlU2VydmljZSA9IGluamVjdChBdXRoU3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuXHQvLyBDb250YW50ZXMgcGFyYSBlbCBzdG9yYWdlLlxyXG5cdHByaXZhdGUgcmVhZG9ubHkgSldUX1RPS0VOID0gJ0pXVF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IEVYUElSQVRFU19JTiA9ICdFWFBJUkFURVNfSU4nXHJcblx0cHJpdmF0ZSByZWFkb25seSBVU0VSID0gJ1VTRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBNQUlMID0gJ21haWwnXHJcblx0cHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTCA9ICdDSEFOTkVMJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NRVIgPSAnQ1VTVE9NRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBDSEFOTkVMU0VMTEVSID0gJ0NIQU5ORUxTRUxMRVInXHJcblxyXG5cdHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxyXG5cdHB1YmxpYyBjaGFubmVscyQgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHRwcml2YXRlIF9jaGFubmVsJCA9IHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmdldENoYW5uZWwoKVxyXG5cdHByaXZhdGUgX3VzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPihudWxsKVxyXG5cdHByaXZhdGUgX2xvZ2dlZEluU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblx0cHVibGljIGxvZ2dlZEluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dlZEluU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIF9sb2dnaW5nSW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRwdWJsaWMgbG9nZ2luZ0luJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dpbmdJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgaW5kaWNhciBzaSB1biBjYW5hbCBjYW1iaW8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfYWN0aXZlQ2hhbm5lbENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBfY3VzdG9tZXIgPSBudWxsO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIGNhbmFsXHJcblx0ICovXHJcblx0cHVibGljIGNoYW5uZWw6IGFueSA9IFtdXHJcblx0cHVibGljIGNoYW5uZWxzOiBhbnlbXSA9IFtdXHJcblx0LyoqXHJcblx0ICogVXRpbGl6YWRvIHBhcmEgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgdGllbmUgcXVlIHJlZGlyZWNjaW9uYXJcclxuXHQgKiBsYSBwYWdpbmEgdHJhcyB1biBldmVudG8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfaG9tZVJlc29sdmVyOiBhbnk7XHJcblx0LyoqXHJcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB0b2tlbiBkZSB1c3VhcmlvIHVuYSB2ZXogbG9ndWVhZG9cclxuXHQgKi9cclxuXHRwcml2YXRlIF90b2tlblNpZ25hbCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuXHQvKipcclxuXHQgKiBTaWduYWwgcGFyYSBndWFyZGFyIGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyU2lnbmFsID0gc2lnbmFsPFVzZXIgfCBudWxsPihudWxsKTtcclxuXHQvL0FQSXNcclxuXHRwcml2YXRlIHNob3BBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkxcclxuXHRwcml2YXRlIGNoYW5uZWxBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMXHJcblx0cHJpdmF0ZSB0b2tlbkFwaSgpIHsgcmV0dXJuIHRoaXMuc2hvcEFwaSArICdsb2dpbl9jaGVjaycgfVxyXG5cdHByaXZhdGUgcmVjb3ZlclBhc3N3b3JkQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5zaG9wQXBpfSR7dGhpcy5jaGFubmVsQXBpfS9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0YCB9XHJcblx0cHJpdmF0ZSBjb25maXJtQWNjb3VudEFwaSh0b2tlbjogc3RyaW5nKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3ZlcmlmeS1hY2NvdW50P3Rva2VuPSR7dG9rZW59YCB9XHJcblx0cHJpdmF0ZSByZWdpc3RlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXJgIH1cclxuXHRwcml2YXRlIHJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXItd2hvbGVzYWxlcmB9XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblx0XHJcblx0cHVibGljIHdpbmRvdz86V2luZG93O1xyXG5cdHB1YmxpYyBsb2NhbFN0b3JhZ2U/OlN0b3JhZ2U7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLndpbmRvdyA9IHdpbmRvd1xyXG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZFRva2VuRnJvbVN0b3JhZ2UoKTtcclxuXHRcdHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIExvZ3VlYSBhbCB1c3VhcmlvIGVuIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXHJcblx0ICogQHBhcmFtIHdpdGhSb2xlcyByb2xlcyBkZWwgdXN1YXJpb1xyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9LCB3aXRoUm9sZXM6IFVzZXJSb2xlVHlwZVtdID0gW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0dGhpcy5fY2hhbm5lbCQuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbCA9IGNoKTtcclxuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dXNlciA9IHsuLi51c2VyLCAuLi50aGlzLmxvZ2luRXh0cmFEYXRhKCkgfVxyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIHVzZXIpLnBpcGUoXHJcblx0XHRcdG1hcCgocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuZG9Mb2dpblVzZXIoeyAuLi51c2VyLCAuLi5yZXMgfSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gJ29rJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICdlcnJvcic7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7IC8vIDwtLSBQcm9wYWdhIGVsIGVycm9yIHJlYWxcclxuXHRcdFx0fSlcclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHVzdWFyaW8gbG9ndWVhZG8gdGVuZ2EgcGVybWlzb3MgXHJcblx0ICogcGFyYSBlbCBjYW5hbCBhY3R1YWwgZGUgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIHJlcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHJlczogYW55KSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKCdjaGFubmVsQWNjZXNzJywgcmVzKTtcclxuXHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKTtcclxuXHJcblx0XHQvKiBObyBhdXRob3JpemVkIGNoYW5uZWxzICovXHJcblx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdC8qIFNvbWUgYXV0aG9yaXplZCBjaGFubmVsKHMpIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmIChyZXMuY2hhbm5lbHMuZmluZCgodXNlcmNoYW5uZWw6IGFueSkgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XHJcblx0XHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPiAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpXHJcblx0XHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cdFx0LyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0aWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDEgJiYgdGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xyXG5cdFx0XHRkZWxldGUgcmVzLnBhc3N3b3JkXHJcblx0XHRcdHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmICh0aGlzLl9hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XHJcblx0XHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb250cm9sYSBlbCBhY2Nlc28gYWwgY2FuYWwsIGRlIHNlciBvdHJvIG51ZXZvIGNhbWJpYSBsb3MgdmFsb3Jlcy5cclxuXHQgKiBAcGFyYW0gY2hhbm5lbCBcclxuXHQgKiBAcGFyYW0gdXNlciBcclxuXHQgKi9cclxuXHRjaGFubmVsQWNjZXNzKGNoYW5uZWw6IGFueSwgdXNlciA9IG51bGwpIHtcclxuXHRcdGlmICh0aGlzLndpbmRvdz8ubG9jYXRpb24uaG9zdG5hbWUgIT0gY2hhbm5lbC5ob3N0bmFtZSkge1xyXG5cdFx0XHRsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMuX3VzZXIpKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVwbGFjZShgJHt0aGlzLndpbmRvdz8ubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLl9jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyhjaGFubmVsKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVsb2FkKClcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHJvbCBkZWwgdXN1YXJpbyBzZWEgdW4gcm9sIHBlcm1pdGlkbyBwb3IgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIGFsbG93ZWRSb2xlcyByb2xlcyBxdWUgcGVybWl0ZSBsYSBhcGxpY2FjacOzbi5cclxuXHQgKiBAcGFyYW0gcm9sZSByb2wgZGVsIHVzdWFyaW9zXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc0FsbG93ZWRSb2xlKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGFsbG93ZWRSb2xlcy5sZW5ndGhcclxuXHRcdFx0PyBhbGxvd2VkUm9sZXMuaW5jbHVkZXMocm9sZSBhcyBVc2VyUm9sZVR5cGUpXHJcblx0XHRcdDogdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBUcmFzIHVuIGxvZ3VlbyBleGl0b3NvLCBndWFyZGEgbG9zIGRhdG9zIG5lY2VzYXJpb3MgZW4gZWwgc3RvcmFnZSB5IGRlbcOhc1xyXG5cdCAqIGNvbmZpZ3VyYWNpb25lcyBuZWNlc2FyaWFzLlxyXG5cdCAqIEBwYXJhbSB0b2tlbnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBkb0xvZ2luVXNlcih0b2tlbnM6IGFueSkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKClcclxuXHRcdHRoaXMuX3VzZXIuaW5pdGlsaXplZCh0b2tlbnMpXHJcblx0XHRcclxuXHRcdHRoaXMuZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnMpXHJcblx0XHQvL0NoYW5uZWxcclxuXHRcdGNvbnN0IHVzZXJKc29uaWZ5ID0gdGhpcy5fdXNlci5qc29uaWZ5KClcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUiwgSlNPTi5zdHJpbmdpZnkodXNlckpzb25pZnkpKVxyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkpXVF9UT0tFTiwgdG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXHJcblx0XHR0aGlzLl90b2tlblNpZ25hbC5zZXQodG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcclxuXHRcdC8vT2JzZXJ2YWJsZXNcclxuXHRcdHRoaXMuX3VzZXJJblN1YmplY3QubmV4dCh0aGlzLl91c2VyKTtcclxuXHRcdHRoaXMuX2xvZ2dlZEluU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcclxuXHQgKiB0cmFzIHVuYSBhY2Npw7NuXHJcblx0ICogQHBhcmFtIHJlc29sdmVyRnVuY3Rpb24gXHJcblx0ICovXHJcblx0cHVibGljIHNldEhvbWVSZXNvbHZlcihyZXNvbHZlckZ1bmN0aW9uOiBhbnkpIHsgdGhpcy5faG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvbiB9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdG9rZW4gZGVsIHN0b3JhZ2UgeSBsbyBndWFyZGEgZW4gbGEgc2lnbmFsLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcclxuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG5cdFx0aWYgKHRva2VuKSB7XHJcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERlc2xvZ3VlYSBhbCB1c3VhcmlvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dvdXQoKSB7XHJcblx0XHR0aGlzLmRvTG9nb3V0VXNlcigpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHNpIGhheSB1biB1c3VhcmlvIGxvZ3VlYWRvIG8gbm8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJpc0F1dGhlbnRpY2F0ZWRcIix0aGlzLmlzVG9rZW5FeHBpcmVkKCksIHRoaXMuX3Rva2VuU2lnbmFsKCkgKTtcclxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcclxuXHRcdFx0dGhpcy5kb0xvZ291dFVzZXIoKVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpXHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHQvL2NvbnNvbGUubG9nKHRoaXMuZ2V0VG9rZW4oKSwgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAsIHRoaXMuX3VzZXIgIT0gbnVsbCk7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRUb2tlbigpICYmICF0aGlzLmlzVG9rZW5FeHBpcmVkKCkgJiYgdGhpcy5fdXNlciAhPSBudWxsO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIHRva2VuIGRlIHVzdWFyaW9cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLl90b2tlblNpZ25hbCgpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBMaW1waWEgZWwgc3RvcmFnZSB5IGxhcyBjb25maWd1cmFjaW9uZXMgaW50ZXJuYXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZG9Mb2dvdXRVc2VyKCkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG51bGxcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XHJcblx0XHR0aGlzLl9hdXRoU3RvcmFnZS5zZXRBdXRoVG9rZW4obnVsbCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUwpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VTVE9NRVIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XHJcblx0XHR0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuXHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldChudWxsKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBgdHJ1ZWBzaSBlbCB0b2tlbiBleHBpcm8sIGBmYWxzZWAgY2FzbyBjb250cmFyaW8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc1Rva2VuRXhwaXJlZCgpIHtcclxuXHRcdGNvbnN0IGZlY2hhX2V4cGlyYWNpb24gPSB0aGlzLmdldEV4cGlyYXRlc0F0KCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGZlY2hhIGRlIGV4cGlyYWNpw7NuIGRlbCB0b2tlbi5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldEV4cGlyYXRlc0F0KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBhbCB1c3VhcmlvIGFjdHVhbCB5IGxvIGNvbnZpZXJ0ZSBlbiB1bmEgaW5zdGFuY2lhIGRlIGBVc2VyYFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB8IG51bGwge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcblx0XHRpZiAoIXRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpKSB7XHJcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsXHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0aGlzLl91c2VyPy5jaGFubmVscy5maW5kKCh1c2VyY2hhbm5lbDogYW55KSA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sb2dvdXQoKVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX3VzZXI7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdXN1YXJpbyBkZWwgc3RvcmFnZS5cclxuXHQgKiBAcGFyYW0ga2V5IFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbG9hZFVzZXJGcm9tU3RvcmFnZShrZXkgPSB0aGlzLlVTRVIpIHtcclxuICAgIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdXNlck9iaiA9IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IE9iamVjdC5hc3NpZ24obmV3IFVzZXIoKSwgdXNlck9iaik7IC8vIDwtLSBBc8OtIHJlY3VwZXJhcyBsb3MgbcOpdG9kb3MgZGUgVXNlclxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblx0LyoqXHJcblx0ICogRW52aWEgbGEgc29saWNpdHVkIHBhcmEgY2FtYmlhciBsYSBjb250cmFzZcOxYS5cclxuXHQgKiBAcGFyYW0gZW1haWwgZW1haWwgZGVsIHNvbGljaXRhbnRlLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHJlY292ZXJQYXNzd29yZChlbWFpbDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5yZWNvdmVyUGFzc3dvcmRBcGkoKSwgeyBlbWFpbCB9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSBjb25maXJtYXIgZWwgcmVnaXN0cm8gZGUgdXN1YXJpby5cclxuXHQgKiBAcGFyYW0gdG9rZW4gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y29uZmlybUFjY291bnQodG9rZW46IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uZ2V0KHRoaXMuY29uZmlybUFjY291bnRBcGkodG9rZW4pKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSByZWdpc3RyYXIgYSB1biB1c3VhcmlvIGNvbcO6blxyXG5cdCAqIEBwYXJhbSBkYXRhIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHNpbmdVcChkYXRhOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3RlckFwaSgpLCBkYXRhKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSByZWdpc3RyYXIgYSB1biB1c3VhcmlvIG1heW9yaXN0YS5cclxuXHQgKiBAcGFyYW0gZGF0YSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzaWduVXBXaG9sZXNhbGVyKGRhdGE6IGFueSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpLGRhdGEpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDaGVxdWVhIHNpIHVuIHVzdWFyaW8gZXN0YSBoYWJpbGl0YWRvIGEgY29tcHJhciBvIG5vLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdC8vIGlzQWJsZVRvQnV5KCk6Ym9vbGVhbiB7XHJcblx0Ly8gXHRjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0VXNlclByb2ZpbGVBc1VzZXIoKSBhcyBVc2VyO1xyXG5cdC8vIFx0Y29uc3QgaXNTZWxsZXIgPSBjdXJyZW50VXNlci50eXBlVXNlciAmJiBjdXJyZW50VXNlci50eXBlVXNlciA9PSAnc2VsbGVyJyB8fCBmYWxzZVxyXG5cdC8vIFx0cmV0dXJuICFpc1NlbGxlciB8fCAhdGhpcy5nZXRDdXN0b21lcigpO1xyXG5cdC8vIH1cclxuXHRwdWJsaWMgaXNBYmxlVG9CdXkgPSAoKTogYm9vbGVhbiA9PiAhdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpPy5pc1NlbGxlcigpIHx8ICEhdGhpcy5nZXRDdXN0b21lcigpXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gdXN1YXJpbyBkZSB0aXBvIGNsaWVudGUuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q3VzdG9tZXIoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY3VzdG9tZXIgfHwgSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRGV2dWVsdmUgZWwgdXN1YXJpbyBhY3R1YWwgbG9ndWVhZG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0VXNlclByb2ZpbGVBc1VzZXIoKTogVXNlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXIhIGFzIFVzZXIgfHwgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpO1xyXG4gICAgfVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSBkYXRhIGV4dHJhIGFsIG9iamVjdG8gZGUgVXN1YXJpby5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRsb2dpbkV4dHJhRGF0YSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6ICdkZW1vX2NsaWVudCcsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6ICdzZWNyZXRfZGVtb19jbGllbnQnLFxyXG4gICAgICAgICAgICBncmFudF90eXBlOiAncGFzc3dvcmQnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cdC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cclxuICAgIHByaXZhdGUgZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnM6YW55KXtcclxuICAgICAgICBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLl91c2VyIS5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLl91c2VyIS5zZXRDaGFubmVscyh0aGlzLmNoYW5uZWwpXHJcbiAgICB9XHJcblxyXG5cdCAvKipcclxuICAgICAqIENhcmdhIGVsIGNsaWVudGUgY29uIGVsIHF1ZSBzZSByZWFsaXphcmFuIHBlZGlkb3MuIFNpIHJlY2liZSBlbCB2YWxvciBudWxsXHJcbiAgICAgKiBzZSB2dWVsdmUgYSBjYXJnYXIgZWwgdmVuZGVkb3IgcGFyYSBzdSB1c28uICBcclxuICAgICAqIEBwYXJhbSBjdXN0b21lciBcclxuICAgICAqL1xyXG5cdCBwdWJsaWMgc2V0Q3VzdG9tZXIoY3VzdG9tZXI6YW55KXtcclxuICAgICAgICBsZXQgcmVmcmVzaFBhZ2UgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuX2N1c3RvbWVyID0gY3VzdG9tZXJcclxuICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNVU1RPTUVSLCBKU09OLnN0cmluZ2lmeShjdXN0b21lcikpXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHNhbWVDaGFubmVsID0gY3VzdG9tZXIgPyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyLmNoYW5uZWxzWzBdLmNvZGUsIGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZSkgOiBudWxsXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1c3RvbWVyKSB7XHJcbiAgICAgICAgICAgIGlmKCFzYW1lQ2hhbm5lbCl7XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEVcclxuICAgICAgICAgICAgICAgICAgICB9KSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHtcclxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogY3VzdG9tZXIuY2hhbm5lbHNbMF0ubG9jYWxlcy5jb2RlXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpKVxyXG4gICAgICAgICAgICBpZihyZXMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuc2FtZUNoYW5uZWwocmVzLmNoYW5uZWwsIHJlcy5sb2NhbGUpKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwocmVzKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2U/LnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKVxyXG4gICAgICAgIHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXHJcbiAgICB9XHJcblxyXG5cdC8qKlxyXG4gICAgICogQ29tcHJ1ZWJhIHNpIGxvcyB2YWxvcmVzIGRlbCBjYW5hbCBhY3R1YWwgc29uIGlndWFsZXMgYSBsb3MgaW5ncmVzYWRvIHBvciBwYXJhbWV0cm9zLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgc2kgZXMgZWwgbWlzbW8gY2FuYWwsIEZhbHNlIGNhc28gY29udHJhcmlvLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6c3RyaW5nLCBsb2NhbGU6c3RyaW5nKTpib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMKSAmJiAobG9jYWxlID09IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUpXHJcblxyXG5cdC8qKlxyXG4gICAgICogQ2FtYmlhIGRlIGNhbmFsXHJcbiAgICAgKiBAcGFyYW0gY2hhbm5lbENvbmZpZyBkZWJlIHNlciB1biBvYmpldG8gcXVlIGNvbnRlbmdhIGFsIG1lbm9zIGxhcyBrZXlzIGNoYW5uZWwgeSBsb2NhbGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2hhbmdlQ2hhbm5lbCA9IChjaGFubmVsQ29uZmlnOmFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKHtcclxuICAgICAgICAgICAgY2hhbm5lbDogY2hhbm5lbENvbmZpZy5jaGFubmVsLFxyXG4gICAgICAgICAgICBsb2NhbGU6IGNoYW5uZWxDb25maWcubG9jYWxlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHRnZXRVc2VyUHJvZmlsZSgpOiBPYnNlcnZhYmxlPFVzZXIgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl91c2VyICYmIG9mKHRoaXMuX3VzZXIpKSB8fCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICB9XHJcblx0cHJpdmF0ZSBnZXRDdXJyZW50VXNlcigpOiBPYnNlcnZhYmxlPFVzZXIgfCBudWxsPiB7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRVc2VyRnJvbVN0b3JhZ2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fdXNlcik7XHJcbiAgICB9XHJcbn1cclxuIl19