ng-easycommerce-v18 0.2.29 → 0.3.0

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.
package/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ # Version 0.3.0
2
+ - HideTaxes en carrito (ocultar impuestos)
3
+ - se fuerza a numero en las funciones pluss y less (+/-) para evitar que se concatene el 1 al darle al mas
4
+ - en cart.service y order-utility.service se cambia para que el subtotal se guarde correctamente
5
+ - se cambia la funcion updateAsociatedData del checkout.service para mostrar impuestos en el checkout
1
6
  # Version 0.2.29
2
7
  - Cambios en dataform para que no se autoseleccione la provincia ya que daba error.
3
8
  # Version 0.2.28
@@ -1,4 +1,4 @@
1
- import { Component, inject } from '@angular/core';
1
+ import { Component, inject, Injector } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { CartService, ToastService, AuthService, ChannelService } from '../../ec-services';
4
4
  import * as i0 from "@angular/core";
@@ -17,13 +17,19 @@ export class CartEcComponent {
17
17
  isAuthenticated$ = this._authService.isAuthenticated();
18
18
  getTotalAmount = this._cartService.getTotalAmount();
19
19
  couponCode$ = this._cartService.getCouponCode();
20
+ hideTaxes = false;
21
+ injector;
20
22
  constructor() {
21
23
  //console.log("constructo.....");
24
+ this.injector = inject(Injector);
22
25
  this._channelService.channel$.subscribe((res) => {
23
26
  //console.log("construct")
24
27
  this.channel = res;
25
28
  //this.initializeSteps();
26
29
  });
30
+ this.injector.get(ChannelService).channel$.subscribe(channel => {
31
+ this.hideTaxes = !!channel.hideTaxes;
32
+ });
27
33
  }
28
34
  removeCoupon() {
29
35
  // console.log(this.couponCode$)
@@ -67,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
67
73
  type: Component,
68
74
  args: [{ selector: 'lib-cart-ec', standalone: true, imports: [], template: "<p>cart-ec works!</p>\r\n" }]
69
75
  }], ctorParameters: () => [] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jYXJ0LWVjL2NhcnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2FydC1lYy9jYXJ0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBVTNGLE1BQU0sT0FBTyxlQUFlO0lBQ25CLGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sQ0FBTTtJQUVaLGNBQWMsR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXBELFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFaEMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO0lBQzFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDeEQscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3BFLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2xELFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRWpELFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWhELGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkQsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7SUFFcEQsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkQ7UUFDQyxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUN0QyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ1osMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ25CLHlCQUF5QjtRQUMxQixDQUFDLENBQ0QsQ0FBQTtJQUNGLENBQUM7SUFDRCxZQUFZO1FBQ1gsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNmLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNuRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDO0lBRUQsd0JBQXdCLEdBQUcsR0FBRyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFBO0lBRTlILENBQUMsQ0FBQTtJQUNELG9CQUFvQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDLENBQUE7SUFDRCwwQkFBMEIsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO1FBQ3ZELElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNGLENBQUMsQ0FBQTt3R0FqRVcsZUFBZTs0RkFBZixlQUFlLHVFQ1o1QiwyQkFDQTs7NEZEV2EsZUFBZTtrQkFQM0IsU0FBUzsrQkFDQyxhQUFhLGNBQ1gsSUFBSSxXQUNQLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSwgVG9hc3RTZXJ2aWNlLCBBdXRoU2VydmljZSwgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLWNhcnQtZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW10sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydEVjQ29tcG9uZW50IHtcclxuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xyXG5cdHB1YmxpYyBjaGFubmVsOiBhbnk7XHJcblxyXG5cdHByaXZhdGUgX3RvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xyXG5cclxuXHRwcml2YXRlIF9jYXJ0U2VydmljZTogQ2FydFNlcnZpY2UgPSBpbmplY3QoQ2FydFNlcnZpY2UpO1xyXG5cdHB1YmxpYyByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cclxuXHRwdWJsaWMgY2FydEl0ZW1zJCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmNhcnRJdGVtcyQ7XHJcblx0cHVibGljIHN1YlRvdGFsQW1vdW50JCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFN1YlRvdGFsQW1vdW50KCk7XHJcblx0cHVibGljIHRvdGFsUHJvbW90aW9uQW1vdW50JCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRvdGFsUHJvbW90aW9uQW1vdW50KCk7XHJcblx0cHVibGljIHRheGVzQW1vdW50JCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRheGVzQW1vdW50KCk7XHJcblx0cHVibGljIHRvdGFsQW1vdW50JCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCk7XHJcblxyXG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSlcclxuXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuXHRwdWJsaWMgZ2V0VG90YWxBbW91bnQgPSB0aGlzLl9jYXJ0U2VydmljZS5nZXRUb3RhbEFtb3VudCgpO1xyXG5cclxuXHRwdWJsaWMgY291cG9uQ29kZSQgPSB0aGlzLl9jYXJ0U2VydmljZS5nZXRDb3Vwb25Db2RlKCk7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKFwiY29uc3RydWN0by4uLi4uXCIpO1xyXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCQuc3Vic2NyaWJlKFxyXG5cdFx0XHQocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKFwiY29uc3RydWN0XCIpXHJcblx0XHRcdFx0dGhpcy5jaGFubmVsID0gcmVzO1xyXG5cdFx0XHRcdC8vdGhpcy5pbml0aWFsaXplU3RlcHMoKTtcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHRyZW1vdmVDb3Vwb24oKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLmNvdXBvbkNvZGUkKVxyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UucmVtb3ZlQ291cG9uKClcclxuXHR9XHJcblxyXG5cdHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5fY2FydFNlcnZpY2UuaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwoKSkge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2hlY2tvdXRgKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxyXG5cclxuXHR9XHJcblx0ZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG5cdFx0aWYgKHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkpIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2hlY2tvdXQnXSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm5Cb29sZWFuTWluaW11bUFtb3VudCA9ICh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAodmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcbiIsIjxwPmNhcnQtZWMgd29ya3MhPC9wPlxyXG4iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jYXJ0LWVjL2NhcnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2FydC1lYy9jYXJ0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQVUzRixNQUFNLE9BQU8sZUFBZTtJQUNuQixlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQU07SUFFWixjQUFjLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVwRCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUMxQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3hELHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNwRSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNsRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUVqRCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVoRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3ZELGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRXBELFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRWhELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFM0IsUUFBUSxDQUFXO0lBRTFCO1FBQ0MsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDdEMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNaLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNuQix5QkFBeUI7UUFDMUIsQ0FBQyxDQUNELENBQUE7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNYLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDbkYsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQztJQUVELHdCQUF3QixHQUFHLEdBQUcsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQTtJQUU5SCxDQUFDLENBQUE7SUFDRCxvQkFBb0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ3hDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0YsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQyxDQUFBO0lBQ0QsMEJBQTBCLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRTtRQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDLENBQUE7d0dBM0VXLGVBQWU7NEZBQWYsZUFBZSx1RUNaNUIsMkJBQ0E7OzRGRFdhLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0MsYUFBYSxjQUNYLElBQUksV0FDUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItY2FydC1lYycsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQge1xyXG5cdHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XHJcblx0cHVibGljIGNoYW5uZWw6IGFueTtcclxuXHJcblx0cHJpdmF0ZSBfdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblxyXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XHJcblx0cHVibGljIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG5cdHB1YmxpYyBjYXJ0SXRlbXMkID0gdGhpcy5fY2FydFNlcnZpY2UuY2FydEl0ZW1zJDtcclxuXHRwdWJsaWMgc3ViVG90YWxBbW91bnQkID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0U3ViVG90YWxBbW91bnQoKTtcclxuXHRwdWJsaWMgdG90YWxQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0VG90YWxQcm9tb3Rpb25BbW91bnQoKTtcclxuXHRwdWJsaWMgdGF4ZXNBbW91bnQkID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0VGF4ZXNBbW91bnQoKTtcclxuXHRwdWJsaWMgdG90YWxBbW91bnQkID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKTtcclxuXHJcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKVxyXG5cclxuXHRwdWJsaWMgaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMuX2F1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG5cdHB1YmxpYyBnZXRUb3RhbEFtb3VudCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCk7XHJcblxyXG5cdHB1YmxpYyBjb3Vwb25Db2RlJCA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldENvdXBvbkNvZGUoKTtcclxuXHJcblx0cHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJjb25zdHJ1Y3RvLi4uLi5cIik7XHJcblx0XHR0aGlzLmluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuXHRcdHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkLnN1YnNjcmliZShcclxuXHRcdFx0KHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhcImNvbnN0cnVjdFwiKVxyXG5cdFx0XHRcdHRoaXMuY2hhbm5lbCA9IHJlcztcclxuXHRcdFx0XHQvL3RoaXMuaW5pdGlhbGl6ZVN0ZXBzKCk7XHJcblx0XHRcdH1cclxuXHRcdClcclxuXHRcdHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxTZXJ2aWNlKS5jaGFubmVsJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcblx0XHRcdHRoaXMuaGlkZVRheGVzID0gISFjaGFubmVsLmhpZGVUYXhlcztcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQgXHJcblx0cmVtb3ZlQ291cG9uKCkge1xyXG5cdFx0Ly8gY29uc29sZS5sb2codGhpcy5jb3Vwb25Db2RlJClcclxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLnJlbW92ZUNvdXBvbigpXHJcblx0fVxyXG5cclxuXHRyZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuX2NhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKFwiTm8gc2UgcHVlZGUgcmVkaXJpZ2lyIGFsIGNoZWNrb3V0IGRlYmlkbyBhIHVuYSB2YWxpZGFjacOzbiBmYWxsaWRhLlwiKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcblx0fVxyXG5cdGV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcclxuXHRcdGlmICh2YWx1ZSA+PSB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpKSB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NoZWNrb3V0J10pO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkJywgeyBhbW91bnQ6IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgfSk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuQm9vbGVhbk1pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG4iLCI8cD5jYXJ0LWVjIHdvcmtzITwvcD5cclxuIl19
@@ -118,25 +118,31 @@ export class ProductDetailEcComponent {
118
118
  }, 2000);
119
119
  }
120
120
  plus(stock, multipleQuantity) {
121
+ const current = Number(this.quantity()); // <-- fuerza a número
121
122
  if (multipleQuantity && multipleQuantity > 0) {
122
- stock ? (this.quantity() < stock
123
- ? this.quantity.update(value => value + multipleQuantity)
124
- : this._toastService.show('out-of-stock-actually'))
125
- : this.quantity.update(value => value + multipleQuantity);
123
+ stock
124
+ ? (current < stock
125
+ ? this.quantity.set(current + multipleQuantity)
126
+ : this._toastService.show('out-of-stock-actually'))
127
+ : this.quantity.set(current + multipleQuantity);
126
128
  }
127
129
  else {
128
- stock ? (this.quantity() < stock
129
- ? this.quantity.update(value => value + 1)
130
- : this._toastService.show('out-of-stock-actually'))
131
- : this.quantity.update(value => value + 1);
130
+ stock
131
+ ? (current < stock
132
+ ? this.quantity.set(current + 1)
133
+ : this._toastService.show('out-of-stock-actually'))
134
+ : this.quantity.set(current + 1);
132
135
  }
133
136
  }
134
137
  less(multipleQuantity) {
138
+ const current = Number(this.quantity()); // <-- fuerza a número
135
139
  if (multipleQuantity && multipleQuantity > 0) {
136
- this.quantity() > multipleQuantity ? this.quantity.update(value => value - multipleQuantity) : null;
140
+ current > multipleQuantity
141
+ ? this.quantity.set(current - multipleQuantity)
142
+ : null;
137
143
  }
138
144
  else {
139
- this.quantity() > 1 ? this.quantity.update(value => value - 1) : null;
145
+ current > 1 ? this.quantity.set(current - 1) : null;
140
146
  }
141
147
  }
142
148
  checkStock(stock) {
@@ -206,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
206
212
  type: Component,
207
213
  args: [{ selector: 'app-product-detail-ec', standalone: true, imports: [VariantsEcComponent], template: "" }]
208
214
  }], ctorParameters: () => [] });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWtCLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNu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QUM7SUFFSDs7UUFFSTtJQUNKLGdCQUFnQixDQUFDLEtBQWEsRUFBRSxTQUFjO1FBQzVDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QiwrREFBK0Q7UUFDL0QsSUFBSSxPQUFRLElBQVksQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakQsSUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBWSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7d0dBMU5VLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLGlGQ3pCckMsRUFBQTs7NEZEeUJhLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0b3IsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlLCBDaGFubmVsU2VydmljZSwgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCwgUExBVEZPUk1fSUQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UsIFByb2R1Y3RzU2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgaGUgZnJvbSAnaGUnO1xyXG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgVmFyaWFudHNFY0NvbXBvbmVudCB9IGZyb20gJy4uL3ZhcmlhbnRzLWVjL3ZhcmlhbnRzLWVjLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZGV0YWlsLWVjJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtWYXJpYW50c0VjQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtZGV0YWlsLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9jYXJ0U2VydmljZTogQ2FydFNlcnZpY2UgPSBpbmplY3QoQ2FydFNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE9wdGlvbnNTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9wcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UgPSBpbmplY3QoUHJvZHVjdERldGFpbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3Byb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UgPSBpbmplY3QoUHJvZHVjdHNTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9hY3RpdmVkUm91dGU6IEFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICBwcml2YXRlIF9kb21TYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gIHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwYXJhbWV0ZXJzU2VydmljZSA9IGluamVjdChQYXJhbWV0ZXJzU2VydmljZSk7XHJcbiAgcHVibGljIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcbiAgcHJpdmF0ZSBfbWV0YTogTWV0YSA9IGluamVjdChNZXRhKTtcclxuICBwcml2YXRlIF90aXRsZTogVGl0bGUgPSBpbmplY3QoVGl0bGUpO1xyXG4gIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcbiAgcHVibGljIHByb2R1Y3QkOiBPYnNlcnZhYmxlPFByb2R1Y3QgfCBudWxsPiA9IHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLnByb2R1Y3QkO1xyXG4gIHB1YmxpYyBvcHRpb25zJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2Uub3B0aW9ucyQ7XHJcbiAgcHVibGljIGRhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5hc3NvY2lhdGVkRGF0YSQ7XHJcbiAgcHJpdmF0ZSByb3V0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICBwcml2YXRlIGN1cnJlbnRQcm9kdWN0SWQ/OiBzdHJpbmc7XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWVkaWFVcmwgPSB0aGlzLl9jb25zdHMubWVkaWFVcmwoKTtcclxuICBwdWJsaWMgY29kZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIHNob3dGb3JtQ29udGFjdCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmV2aWV3czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBxdWFudGl0eTogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbCgxKTtcclxuICBwdWJsaWMgaXNBZGRpbmdUb0NhcnQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgcGFyYW1ldGVycyQ6IE9ic2VydmFibGU8UGFyYW1ldGVyW10gfCBudWxsPiA9IHRoaXMucGFyYW1ldGVyc1NlcnZpY2UuZ2V0UGFyYW1ldGVycygpO1xyXG4gIHB1YmxpYyBoYXNQYXJhbXMgPSB0aGlzLnBhcmFtZXRlcnNTZXJ2aWNlLmhhc1BhcmFtc1xyXG4gIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gIC8vIEFncmVnYXIgZXN0YSBwcm9waWVkYWQgYWwgaW5pY2lvIGRlIGxhIGNsYXNlXHJcbiAgcHJpdmF0ZSBwcm9kdWN0U2lnbmFsID0gc2lnbmFsPFByb2R1Y3QgfCBudWxsPihudWxsKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fYWN0aXZlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocXVlcnlQYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLmNvZGUgPSBxdWVyeVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5sb2FkUHJvZHVjdCh0aGlzLmNvZGUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9hY3RpdmVkUm91dGUucGFyYW1zLnN1YnNjcmliZShxdWVyeVBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuY29kZSA9IHF1ZXJ5UGFyYW1zW1wiaWRcIl07XHJcbiAgICAgIHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLmxvYWRQcm9kdWN0KHRoaXMuY29kZSk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbFNlcnZpY2UpLmNoYW5uZWwkLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgdGhpcy5zaG93UmV2aWV3cyA9IGNoYW5uZWwuc2hvd1Jldmlld3M7XHJcbiAgICAgIHRoaXMuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzID0gISFjaGFubmVsLnNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VycztcclxuICAgICAgdGhpcy5oaWRlUHJpY2VzID0gISFjaGFubmVsLmhpZGVQcmljZXM7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX29wdGlvbnNTZXJ2aWNlLmdldENhdGVnb3JpZXMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5jYXRlZ29yaWVzID0gcmVzO1xyXG4gICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2NhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcclxuICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHJvZHVjdCQuc3Vic2NyaWJlKHByb2R1Y3QgPT4ge1xyXG4gICAgICB0aGlzLnByb2R1Y3RTaWduYWwuc2V0KHByb2R1Y3QpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnByb2R1Y3QkLnN1YnNjcmliZShwcm9kdWN0ID0+IHtcclxuICAgICAgaWYgKHByb2R1Y3QpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1ldGFUYWdzKHByb2R1Y3QpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFN1c2NyaWJpcnNlIGEgbG9zIGNhbWJpb3MgZGUgcGFyw6FtZXRyb3MgZGUgbGEgcnV0YVxyXG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCBuZXdQcm9kdWN0SWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICAgIGlmIChuZXdQcm9kdWN0SWQgJiYgbmV3UHJvZHVjdElkICE9PSB0aGlzLmN1cnJlbnRQcm9kdWN0SWQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0SWQgPSBuZXdQcm9kdWN0SWQ7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0ZWFyIGVsIGVzdGFkbyBkZWwgbW9kYWwgZGUgcmVzZcOxYXMgY3VhbmRvIGNhbWJpZSBlbCBwcm9kdWN0b1xyXG4gICAgICAgIHRoaXMucmVzZXRSZXZpZXdNb2RhbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVNZXRhVGFncyhwcm9kdWN0OiBQcm9kdWN0KSB7XHJcbiAgICBjb25zdCBkZXNjcmlwY2lvbkxpbXBpYSA9IGhlLmRlY29kZShwcm9kdWN0LmRlc2NyaXB0aW9uIHx8ICcnKS5yZXBsYWNlKC88W14+XSo+L2csICcgJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcclxuICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLl9jb25zdHMudXJsKCkgKyB0aGlzLl9sb2NhdGlvbi5wYXRoKHRydWUpOyAgLy8gYHRydWVgIGluY2x1eWUgZWwgcXVlcnkgc3RyaW5nXHJcblxyXG5cclxuXHJcbiAgICB0aGlzLl9tZXRhLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dGl0bGUnLCBjb250ZW50OiBwcm9kdWN0Lm5hbWUgfHwgJycgfSk7XHJcbiAgICB0aGlzLl9tZXRhLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6ZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjcmlwY2lvbkxpbXBpYSB8fCAnJyB9KTtcclxuICAgIHRoaXMuX21ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzppbWFnZScsIGNvbnRlbnQ6IHRoaXMuX2NvbnN0cy5tZWRpYUltYWdlVXJsKEFycmF5LmlzQXJyYXkocHJvZHVjdC5waWN0dXJlc2RlZmF1bHQpID8gcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF0gOiBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCkgfHwgJycgfSk7XHJcbiAgICB0aGlzLl9tZXRhLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dXJsJywgY29udGVudDogY3VycmVudFVybCB9KTtcclxuICAgIHRoaXMuX21ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0eXBlJywgY29udGVudDogJ3Byb2R1Y3QnIH0pO1xyXG4gIH1cclxuICBkZWNvZGVIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0eHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgdHh0LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICByZXR1cm4gdHh0LnZhbHVlO1xyXG5cclxuICB9XHJcbiAgc2FuaXRpemVkSHRtbChodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCBkZWNvZGVkSHRtbCA9IHRoaXMuZGVjb2RlSHRtbChodG1sKTtcclxuICAgIHJldHVybiB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZGVjb2RlZEh0bWwpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9DYXJ0KCkge1xyXG4gICAgaWYgKHRoaXMuaXNBZGRpbmdUb0NhcnQoKSB8fCB0aGlzLnF1YW50aXR5KCkgPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNBZGRpbmdUb0NhcnQuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMucXVhbnRpdHkoKSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBZGRpbmdUb0NhcnQuc2V0KGZhbHNlKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgcGx1cyhzdG9jaz86IG51bWJlciwgbXVsdGlwbGVRdWFudGl0eT86IG51bWJlcikge1xyXG4gICAgaWYgKG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDApIHtcclxuICAgICAgc3RvY2sgPyAodGhpcy5xdWFudGl0eSgpIDwgc3RvY2tcclxuICAgICAgICA/IHRoaXMucXVhbnRpdHkudXBkYXRlKHZhbHVlID0+IHZhbHVlICsgbXVsdGlwbGVRdWFudGl0eSlcclxuICAgICAgICA6IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKSlcclxuICAgICAgICA6IHRoaXMucXVhbnRpdHkudXBkYXRlKHZhbHVlID0+IHZhbHVlICsgbXVsdGlwbGVRdWFudGl0eSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0b2NrID8gKHRoaXMucXVhbnRpdHkoKSA8IHN0b2NrXHJcbiAgICAgICAgPyB0aGlzLnF1YW50aXR5LnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSArIDEpXHJcbiAgICAgICAgOiB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5JykpXHJcbiAgICAgICAgOiB0aGlzLnF1YW50aXR5LnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSArIDEpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXNzKG11bHRpcGxlUXVhbnRpdHk/OiBhbnkpIHtcclxuICAgIGlmIChtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgIHRoaXMucXVhbnRpdHkoKSA+IG11bHRpcGxlUXVhbnRpdHkgPyB0aGlzLnF1YW50aXR5LnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSAtIG11bHRpcGxlUXVhbnRpdHkpIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVhbnRpdHkoKSA+IDEgPyB0aGlzLnF1YW50aXR5LnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSAtIDEpIDogbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrU3RvY2soc3RvY2s6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMucXVhbnRpdHkoKSA+PSBzdG9jaylcclxuICAgICAgdGhpcy5xdWFudGl0eS5zZXQoc3RvY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9TZWN0aW9uKHNlY3Rpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Rm9ybUNvbnRhY3QgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uKTtcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtID0gKCkgPT4ge1xyXG4gICAgdGhpcy5yZXNldCA9ICF0aGlzLnJlc2V0XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvLyBDb21wdXRlZCBzaWduYWxzIG3DoXMgZWZpY2llbnRlc1xyXG4gIHB1YmxpYyBoYXNEaXNjb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RTaWduYWwoKTtcclxuICAgIGlmICghcHJvZHVjdD8uc2FsZXByaWNlIHx8ICFwcm9kdWN0Py5wcmljZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWxQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5wcmljZS50b1N0cmluZygpKTtcclxuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2UudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgcmV0dXJuIHNhbGVQcmljZSA+IDAgJiYgb3JpZ2luYWxQcmljZSA+IHNhbGVQcmljZTtcclxuICB9KTtcclxuXHJcbiAgcHVibGljIGRpc2NvdW50UGVyY2VudGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghdGhpcy5oYXNEaXNjb3VudCgpKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0U2lnbmFsKCk7XHJcbiAgICBpZiAoIXByb2R1Y3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3QucHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuXHJcbiAgICBpZiAob3JpZ2luYWxQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA+PSBvcmlnaW5hbFByaWNlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpc2NvdW50ID0gKChvcmlnaW5hbFByaWNlIC0gc2FsZVByaWNlKSAvIG9yaWdpbmFsUHJpY2UpICogMTAwO1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoZGlzY291bnQpO1xyXG4gIH0pO1xyXG5cclxuICAvKipcclxuICAgICogTcOpdG9kbyBwYXJhIHRyYWNrZWFyIGNhbWJpb3MgZW4gZWwgcHJvZHVjdElkIHkgZm9yemFyIGxhIHJlY3JlYWNpw7NuIGRlbCBjb21wb25lbnRlIHJlbGFjaW9uYWRvc1xyXG4gICAgKi9cclxuICB0cmFja0J5UHJvZHVjdElkKGluZGV4OiBudW1iZXIsIHByb2R1Y3RJZDogYW55KTogYW55IHtcclxuICAgIHJldHVybiBwcm9kdWN0SWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldGVhIGVsIGVzdGFkbyBkZWwgbW9kYWwgZGUgcmVzZcOxYXNcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0UmV2aWV3TW9kYWwoKTogdm9pZCB7XHJcbiAgICAvLyBTaSBleGlzdGUgdW4gbcOpdG9kbyByZXNldEZvcm0gZGVsIGNvbXBvbmVudGUgcGFkcmUsIGxsYW1hcmxvXHJcbiAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkucmVzZXRGb3JtID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICh0aGlzIGFzIGFueSkucmVzZXRGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgZXhpc3RlIHVuYSBwcm9waWVkYWQgc3VjY2VzcywgcmVzZXRlYXJsYVxyXG4gICAgaWYgKCdzdWNjZXNzJyBpbiB0aGlzKSB7XHJcbiAgICAgICh0aGlzIGFzIGFueSkuc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiIl19
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWtCLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNu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S0FBYSxFQUFFLFNBQWM7UUFDNUMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLCtEQUErRDtRQUMvRCxJQUFJLE9BQVEsSUFBWSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqRCxJQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixJQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQzt3R0FoT1Usd0JBQXdCOzRGQUF4Qix3QkFBd0IsaUZDekJyQyxFQUFBOzs0RkR5QmEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RvciwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyc1NlcnZpY2UsIENoYW5uZWxTZXJ2aWNlLCBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBXcml0YWJsZVNpZ25hbCwgc2lnbmFsLCBQTEFURk9STV9JRCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgKiBhcyBoZSBmcm9tICdoZSc7XHJcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBWYXJpYW50c0VjQ29tcG9uZW50IH0gZnJvbSAnLi4vdmFyaWFudHMtZWMvdmFyaWFudHMtZWMuY29tcG9uZW50JztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1kZXRhaWwtZWMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1ZhcmlhbnRzRWNDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERldGFpbEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSlcclxuICBwcml2YXRlIF9vcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoT3B0aW9uc1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3Byb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSA9IGluamVjdChQcm9kdWN0RGV0YWlsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX2FjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XHJcbiAgcHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIHBhcmFtZXRlcnNTZXJ2aWNlID0gaW5qZWN0KFBhcmFtZXRlcnNTZXJ2aWNlKTtcclxuICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuICBwcml2YXRlIF9tZXRhOiBNZXRhID0gaW5qZWN0KE1ldGEpO1xyXG4gIHByaXZhdGUgX3RpdGxlOiBUaXRsZSA9IGluamVjdChUaXRsZSk7XHJcbiAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICBwdWJsaWMgcHJvZHVjdCQ6IE9ic2VydmFibGU8UHJvZHVjdCB8IG51bGw+ID0gdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2UucHJvZHVjdCQ7XHJcbiAgcHVibGljIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5vcHRpb25zJDtcclxuICBwdWJsaWMgZGF0YSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLmFzc29jaWF0ZWREYXRhJDtcclxuICBwcml2YXRlIHJvdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgY3VycmVudFByb2R1Y3RJZD86IHN0cmluZztcclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtZWRpYVVybCA9IHRoaXMuX2NvbnN0cy5tZWRpYVVybCgpO1xyXG4gIHB1YmxpYyBjb2RlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgc2hvd0Zvcm1Db250YWN0ID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dSZXZpZXdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHJlc2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHF1YW50aXR5OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsKDEpO1xyXG4gIHB1YmxpYyBpc0FkZGluZ1RvQ2FydDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHB1YmxpYyBwYXJhbWV0ZXJzJDogT2JzZXJ2YWJsZTxQYXJhbWV0ZXJbXSB8IG51bGw+ID0gdGhpcy5wYXJhbWV0ZXJzU2VydmljZS5nZXRQYXJhbWV0ZXJzKCk7XHJcbiAgcHVibGljIGhhc1BhcmFtcyA9IHRoaXMucGFyYW1ldGVyc1NlcnZpY2UuaGFzUGFyYW1zXHJcbiAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gQWdyZWdhciBlc3RhIHByb3BpZWRhZCBhbCBpbmljaW8gZGUgbGEgY2xhc2VcclxuICBwcml2YXRlIHByb2R1Y3RTaWduYWwgPSBzaWduYWw8UHJvZHVjdCB8IG51bGw+KG51bGwpO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9hY3RpdmVkUm91dGUucGFyYW1zLnN1YnNjcmliZShxdWVyeVBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuY29kZSA9IHF1ZXJ5UGFyYW1zW1wiaWRcIl07XHJcbiAgICAgIHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLmxvYWRQcm9kdWN0KHRoaXMuY29kZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2FjdGl2ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHF1ZXJ5UGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5jb2RlID0gcXVlcnlQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2UubG9hZFByb2R1Y3QodGhpcy5jb2RlKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsU2VydmljZSkuY2hhbm5lbCQuc3Vic2NyaWJlKGNoYW5uZWwgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSZXZpZXdzID0gY2hhbm5lbC5zaG93UmV2aWV3cztcclxuICAgICAgdGhpcy5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgPSAhIWNoYW5uZWwuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzO1xyXG4gICAgICB0aGlzLmhpZGVQcmljZXMgPSAhIWNoYW5uZWwuaGlkZVByaWNlcztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fb3B0aW9uc1NlcnZpY2UuZ2V0Q2F0ZWdvcmllcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXMgPSByZXM7XHJcbiAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5fY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5wcm9kdWN0JC5zdWJzY3JpYmUocHJvZHVjdCA9PiB7XHJcbiAgICAgIHRoaXMucHJvZHVjdFNpZ25hbC5zZXQocHJvZHVjdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucHJvZHVjdCQuc3Vic2NyaWJlKHByb2R1Y3QgPT4ge1xyXG4gICAgICBpZiAocHJvZHVjdCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWV0YVRhZ3MocHJvZHVjdCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gU3VzY3JpYmlyc2UgYSBsb3MgY2FtYmlvcyBkZSBwYXLDoW1ldHJvcyBkZSBsYSBydXRhXHJcbiAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1Byb2R1Y3RJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgaWYgKG5ld1Byb2R1Y3RJZCAmJiBuZXdQcm9kdWN0SWQgIT09IHRoaXMuY3VycmVudFByb2R1Y3RJZCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2R1Y3RJZCA9IG5ld1Byb2R1Y3RJZDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXRlYXIgZWwgZXN0YWRvIGRlbCBtb2RhbCBkZSByZXNlw7FhcyBjdWFuZG8gY2FtYmllIGVsIHByb2R1Y3RvXHJcbiAgICAgICAgdGhpcy5yZXNldFJldmlld01vZGFsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldGFUYWdzKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIGNvbnN0IGRlc2NyaXBjaW9uTGltcGlhID0gaGUuZGVjb2RlKHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgJycpLnJlcGxhY2UoLzxbXj5dKj4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xyXG4gICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuX2NvbnN0cy51cmwoKSArIHRoaXMuX2xvY2F0aW9uLnBhdGgodHJ1ZSk7ICAvLyBgdHJ1ZWAgaW5jbHV5ZSBlbCBxdWVyeSBzdHJpbmdcclxuXHJcblxyXG5cclxuICAgIHRoaXMuX21ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IHByb2R1Y3QubmFtZSB8fCAnJyB9KTtcclxuICAgIHRoaXMuX21ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGRlc2NyaXBjaW9uTGltcGlhIHx8ICcnIH0pO1xyXG4gICAgdGhpcy5fbWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmltYWdlJywgY29udGVudDogdGhpcy5fY29uc3RzLm1lZGlhSW1hZ2VVcmwoQXJyYXkuaXNBcnJheShwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCkgPyBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXSA6IHByb2R1Y3QucGljdHVyZXNkZWZhdWx0KSB8fCAnJyB9KTtcclxuICAgIHRoaXMuX21ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBjdXJyZW50VXJsIH0pO1xyXG4gICAgdGhpcy5fbWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnR5cGUnLCBjb250ZW50OiAncHJvZHVjdCcgfSk7XHJcbiAgfVxyXG4gIGRlY29kZUh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHR4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICB0eHQuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgIHJldHVybiB0eHQudmFsdWU7XHJcblxyXG4gIH1cclxuICBzYW5pdGl6ZWRIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGNvbnN0IGRlY29kZWRIdG1sID0gdGhpcy5kZWNvZGVIdG1sKGh0bWwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChkZWNvZGVkSHRtbCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NhcnQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0FkZGluZ1RvQ2FydCgpIHx8IHRoaXMucXVhbnRpdHkoKSA8PSAwKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0FkZGluZ1RvQ2FydC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5hZGRUb0NhcnQodGhpcy5xdWFudGl0eSgpKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0FkZGluZ1RvQ2FydC5zZXQoZmFsc2UpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBwbHVzKHN0b2NrPzogbnVtYmVyLCBtdWx0aXBsZVF1YW50aXR5PzogbnVtYmVyKSB7XHJcbiAgY29uc3QgY3VycmVudCA9IE51bWJlcih0aGlzLnF1YW50aXR5KCkpOyAvLyA8LS0gZnVlcnphIGEgbsO6bWVyb1xyXG4gIGlmIChtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwKSB7XHJcbiAgICBzdG9ja1xyXG4gICAgICA/IChjdXJyZW50IDwgc3RvY2tcclxuICAgICAgICAgID8gdGhpcy5xdWFudGl0eS5zZXQoY3VycmVudCArIG11bHRpcGxlUXVhbnRpdHkpXHJcbiAgICAgICAgICA6IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKSlcclxuICAgICAgOiB0aGlzLnF1YW50aXR5LnNldChjdXJyZW50ICsgbXVsdGlwbGVRdWFudGl0eSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN0b2NrXHJcbiAgICAgID8gKGN1cnJlbnQgPCBzdG9ja1xyXG4gICAgICAgICAgPyB0aGlzLnF1YW50aXR5LnNldChjdXJyZW50ICsgMSlcclxuICAgICAgICAgIDogdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpKVxyXG4gICAgICA6IHRoaXMucXVhbnRpdHkuc2V0KGN1cnJlbnQgKyAxKTtcclxuICB9XHJcbn1cclxuXHJcbmxlc3MobXVsdGlwbGVRdWFudGl0eT86IG51bWJlcikge1xyXG4gIGNvbnN0IGN1cnJlbnQgPSBOdW1iZXIodGhpcy5xdWFudGl0eSgpKTsgLy8gPC0tIGZ1ZXJ6YSBhIG7Dum1lcm9cclxuICBpZiAobXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCkge1xyXG4gICAgY3VycmVudCA+IG11bHRpcGxlUXVhbnRpdHlcclxuICAgICAgPyB0aGlzLnF1YW50aXR5LnNldChjdXJyZW50IC0gbXVsdGlwbGVRdWFudGl0eSlcclxuICAgICAgOiBudWxsO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjdXJyZW50ID4gMSA/IHRoaXMucXVhbnRpdHkuc2V0KGN1cnJlbnQgLSAxKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG4gIGNoZWNrU3RvY2soc3RvY2s6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMucXVhbnRpdHkoKSA+PSBzdG9jaylcclxuICAgICAgdGhpcy5xdWFudGl0eS5zZXQoc3RvY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9TZWN0aW9uKHNlY3Rpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Rm9ybUNvbnRhY3QgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uKTtcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtID0gKCkgPT4ge1xyXG4gICAgdGhpcy5yZXNldCA9ICF0aGlzLnJlc2V0XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvLyBDb21wdXRlZCBzaWduYWxzIG3DoXMgZWZpY2llbnRlc1xyXG4gIHB1YmxpYyBoYXNEaXNjb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RTaWduYWwoKTtcclxuICAgIGlmICghcHJvZHVjdD8uc2FsZXByaWNlIHx8ICFwcm9kdWN0Py5wcmljZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWxQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5wcmljZS50b1N0cmluZygpKTtcclxuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2UudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgcmV0dXJuIHNhbGVQcmljZSA+IDAgJiYgb3JpZ2luYWxQcmljZSA+IHNhbGVQcmljZTtcclxuICB9KTtcclxuXHJcbiAgcHVibGljIGRpc2NvdW50UGVyY2VudGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghdGhpcy5oYXNEaXNjb3VudCgpKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0U2lnbmFsKCk7XHJcbiAgICBpZiAoIXByb2R1Y3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3QucHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuXHJcbiAgICBpZiAob3JpZ2luYWxQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA+PSBvcmlnaW5hbFByaWNlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpc2NvdW50ID0gKChvcmlnaW5hbFByaWNlIC0gc2FsZVByaWNlKSAvIG9yaWdpbmFsUHJpY2UpICogMTAwO1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoZGlzY291bnQpO1xyXG4gIH0pO1xyXG5cclxuICAvKipcclxuICAgICogTcOpdG9kbyBwYXJhIHRyYWNrZWFyIGNhbWJpb3MgZW4gZWwgcHJvZHVjdElkIHkgZm9yemFyIGxhIHJlY3JlYWNpw7NuIGRlbCBjb21wb25lbnRlIHJlbGFjaW9uYWRvc1xyXG4gICAgKi9cclxuICB0cmFja0J5UHJvZHVjdElkKGluZGV4OiBudW1iZXIsIHByb2R1Y3RJZDogYW55KTogYW55IHtcclxuICAgIHJldHVybiBwcm9kdWN0SWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldGVhIGVsIGVzdGFkbyBkZWwgbW9kYWwgZGUgcmVzZcOxYXNcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0UmV2aWV3TW9kYWwoKTogdm9pZCB7XHJcbiAgICAvLyBTaSBleGlzdGUgdW4gbcOpdG9kbyByZXNldEZvcm0gZGVsIGNvbXBvbmVudGUgcGFkcmUsIGxsYW1hcmxvXHJcbiAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkucmVzZXRGb3JtID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICh0aGlzIGFzIGFueSkucmVzZXRGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgZXhpc3RlIHVuYSBwcm9waWVkYWQgc3VjY2VzcywgcmVzZXRlYXJsYVxyXG4gICAgaWYgKCdzdWNjZXNzJyBpbiB0aGlzKSB7XHJcbiAgICAgICh0aGlzIGFzIGFueSkuc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiIl19
@@ -425,7 +425,7 @@ export class CartService {
425
425
  * @returns
426
426
  */
427
427
  getSubTotalAmount() {
428
- return this.cart$.pipe(map((cart) => cart?.totals?.items));
428
+ return this.cart$.pipe(map((cart) => cart?.totals?.subtotal));
429
429
  }
430
430
  /**
431
431
  * Retorna un observable con el total del monto de las promociones aplicadas.
@@ -607,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
607
607
  providedIn: 'root'
608
608
  }]
609
609
  }], ctorParameters: () => [] });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEdBQXFCLE1B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ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYWxhbmNlQ3VzdG9tZXIsIENhcnRJdGVtLCBJQ291cG9uLCBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2FwaUNvbnN0czogQXBpQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3N0b3JhZ2U6IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTmd4TG9jYWxTdG9yYWdlU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHJcblx0cHJpdmF0ZSBfY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHRwcml2YXRlIF9wcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHRwcml2YXRlIF9jb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblx0cHJpdmF0ZSBfY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPihbXSlcclxuXHRwcml2YXRlIF9yZXF1ZXN0SW5Qcm9jZXNzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHRwcml2YXRlIF9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhbGFuY2VDdXN0b21lciB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfS0VZOiBzdHJpbmcgPSAnY2FydCc7XHJcblx0cHJpdmF0ZSByZWFkb25seSBDQVJUX1RPS0VOX0tFWTogc3RyaW5nID0gJ2NhcnRfdG9rZW4nO1xyXG5cclxuXHRwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuXHRwcml2YXRlIF9jb3VudDogbnVtYmVyID0gMDtcclxuXHRwdWJsaWMgY2FydFRva2VuOiBzdHJpbmcgfCBudWxsID0gJyc7XHJcblx0cHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG5cdHByaXZhdGUgX2xvY2FsZSA9IFwiXCI7XHJcblx0cHJpdmF0ZSBfY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IEZsYWcgcGFyYSBldml0YXIgaW5pY2lhbGl6YWNpb25lcyBkdXBsaWNhZGFzXHJcblx0cHVibGljIGNhcnRJdGVtcyQgPSB0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcblx0cHVibGljIGNvdXBvbiQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NvdXBvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGNhcnQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgX2hhdmVUb1VwZGF0ZSA9IHRydWU7XHJcblx0cHVibGljIGJhbGFuY2VDdXN0b21lciQgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblx0cHVibGljIHByb21vdGlvbnMkID0gdGhpcy5fcHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0Ly9BUEkgVVJMXHJcblx0cHJpdmF0ZSBfY2FydEJhc2VVcmw6IHN0cmluZyA9IGAke3RoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkx9JHt0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTH0vY2FydHNgO1xyXG5cclxuXHRwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpKGl0ZW1faWQ6IGFueSkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxyXG5cdHB1YmxpYyBhZGRJdGVtQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxyXG5cdHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL211bHRpcGxlLWl0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFO1xyXG5cdHB1YmxpYyBjYXJ0SXRlbXNBcGkoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxyXG5cdHB1YmxpYyBkZWxldGVJdGVtQXBpKGl0ZW1faWQ6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxyXG5cdHB1YmxpYyBjb3Vwb25BcGkoKSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9jb3Vwb24nIH07XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0XHJcblx0XHQvLyDinIUgQ2FyZ2FyIGNhcnJpdG8gbG9jYWwgeSB0b2tlbiBwcmV2aW9cclxuXHRcdHRoaXMuX2l0ZW1zID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfS0VZKSB8fCAnW10nKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSkgfHwgbnVsbDtcclxuXHRcdFxyXG5cdFx0Ly8g8J+UkSBDTEFWRTogU3VzY3JpcGNpw7NuIGEgY2FtYmlvcyBkZSBlc3RhZG8gZGUgbG9naW5cclxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLmxvZ2dlZEluJC5zdWJzY3JpYmUoaXNMb2dnZWRJbiA9PiB7XHJcblx0XHRcdGlmIChpc0xvZ2dlZEluICYmICF0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0XHR0aGlzLnN5bmNDYXJ0T25Mb2dpbigpO1xyXG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHRcdH0gZWxzZSBpZiAoIWlzTG9nZ2VkSW4gJiYgdGhpcy5fY2FydEluaXRpYWxpemVkKSB7XHJcblx0XHRcdFx0Ly8gVXN1YXJpbyBjZXJyw7Mgc2VzacOzbiwgbGltcGlhciB5IHJlc2V0ZWFyIGNhcnJpdG9cclxuXHRcdFx0XHR0aGlzLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKTtcclxuXHRcdFx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8gUmVzZXQgZmxhZyBwYXJhIHBlcm1pdGlyIG51ZXZhIGluaWNpYWxpemFjacOzblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xyXG5cdFx0XHJcblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXHJcblx0XHQvLyBFbCBjYXJyaXRvIGRlIHVzdWFyaW9zIGF1dGVudGljYWRvcyBzZSBpbmljaWFsaXphIGVuIGxhIHN1c2NyaXBjacOzbiBsb2dnZWRJbiRcclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgIXRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xyXG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cclxuXHRcdFx0aWYgKHRoaXMuY2FydFRva2VuKSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0KCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFNpbmNyb25pemEgZWwgY2Fycml0byBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGxvZ2luXHJcblx0ICogSW1wbGVtZW50YSBsYSBsw7NnaWNhIGRlIEFuZ3VsYXIgOSBwYXJhIHByZXNlcnZhciBlbCBjYXJyaXRvIGRlbCBpbnZpdGFkb1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3luY0NhcnRPbkxvZ2luKCkge1xyXG5cdFx0Ly8g4pqg77iPIEZJWDogU2kgaGF5IHRva2VuIChjYXJyaXRvIGV4aXN0ZW50ZSksIHNpZW1wcmUgaW50ZW50YXIgcmVjdXBlcmFybG9cclxuXHRcdC8vIE5vIGRlcGVuZGVtb3Mgc29sbyBkZSBsb3MgaXRlbXMgbG9jYWxlcyBxdWUgcHVlZGVuIGVzdGFyIHZhY8Otb3MgYWwgcmVjYXJnYXJcclxuXHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xyXG5cdFx0XHQvLyBFbnbDrWEgZWwgdG9rZW4gcGFyYSByZWN1cGVyYXIvZnVzaW9uYXIgY2Fycml0b3NcclxuXHRcdFx0dGhpcy5nZXRDYXJ0KCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTaW4gdG9rZW4gZGUgY2Fycml0bywgb2J0ZW5lciBjYXJyaXRvIGRlbCB1c3VhcmlvIGF1dGVudGljYWRvXHJcblx0XHRcdHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgY29uIGzDs2dpY2EgZGUgc2luY3Jvbml6YWNpw7NuXHJcblx0ICogRW52w61hIGVsIHRva2VuIHNpIGhheSBjYXJyaXRvIGxvY2FsIHBhcmEgZnVzaW9uYXIgY2Fycml0b3NcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldENhcnQoKSB7XHJcblx0XHQvLyDimqDvuI8gRklYOiBFbnZpYXIgdG9rZW4gc2kgZXhpc3RlLCBzaW4gaW1wb3J0YXIgc2kgaGF5IGl0ZW1zIGxvY2FsZXNcclxuXHRcdC8vIEVzdG8gcGVybWl0ZSByZWN1cGVyYXIgZWwgY2Fycml0byBleGlzdGVudGUgYWwgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuY2FydFRva2VuID8geyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCBwYXlsb2FkKVxyXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKCdnZXRDYXJ0IHJlc3BvbnNlOicsIHJlcyk7XHJcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKTtcclxuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBjYXJ0OicsIGVycm9yKTtcclxuXHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxyXG5cdCAqIEBwYXJhbSByZXNwb25zZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRpbml0aWFsaXplQ2FydChyZXNwb25zZTogYW55KTogYW55IHtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuXHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzcG9uc2UuaXRlbXMpKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xyXG5cdFx0dGhpcy5faXRlbXMgPSBpdGVtcztcclxuXHRcdHRoaXMuX2NvdW50ID0gaXRlbXMubGVuZ3RoO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBZ3JlZ2EgdW4gcHJvZHVjdG8gYWwgY2Fycml0byBjb24gbGEgY2FudGlkYWQgZGVzZWFkYS4gXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IENhbnRpZGFkIFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSWQgZGUgbGEgdmFyaWFudGVcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRhZGRUb0NhcnQocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudElkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGJhbGFuY2U6QmFsYW5jZUN1c3RvbWVyIHwgbnVsbCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblx0XHRjb25zdCBhcHBseU1heE9yZGVyczpib29sZWFuID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4T3JkZXJzOm51bWJlciA9IGJhbGFuY2U/Lm1heE9yZGVycyA/PyBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG5cdFx0XHRyZXR1cm5cclxuXHRcdCB9XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHRsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudElkLCBxdWFudGl0eSk7XHJcblxyXG5cdFx0aWYgKCFhZGRlZCkge1xyXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRJZCB9KSlcclxuXHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIE1hbmVqYXIgbGEgcmVzcHVlc3RhIEhUVFAgZXhpdG9zYSAoY8OzZGlnbyAyMDApXHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyk7XHJcblx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuXHRcdFx0XHRcdFx0aWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEPDs2RpZ28gZGUgZXJyb3IgNTAwICh0aW1lb3V0KVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnY2FydC1lcnJvcicpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZXJyb3Itc2VydmVyJyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0byBhZ3JlZ2FuZG8gbG9zIG51ZXZvcyBpdGVtcy5cclxuXHQgKiBAcGFyYW0gY2FydCBcclxuXHQgKi9cclxuXHRhcHBlbmRUb0NhcnQoY2FydDogYW55KSB7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcblx0XHR0aGlzLl9pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcblx0XHR0aGlzLl9jb3VudCA9IHRoaXMuX2l0ZW1zLmxlbmd0aDtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFwZWEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvIHBhcmEgZGFybGUgdW4gbWVqb3IgZm9ybWF0byBzaW1pbGFyIGEgbGEgaW50ZXJmYXogYENhcnRJdGVtYC5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dHJhbnNmb3JtSXRlbXMoaXRlbXM6IGFueSk6IGFueVtdIHtcclxuXHRcdHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuXHRcdFx0XHR2YXJpYW50X2lkOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZSxcclxuXHRcdFx0XHRsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxyXG5cdFx0XHRcdHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG5cdFx0XHRcdGl0ZW1faWQ6IGl0ZW0uaWQsXHJcblx0XHRcdFx0dG90YWw6IGl0ZW0udG90YWxcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENoZXF1ZWEgc2kgZWwgcHJvZHVjdG8geWEgZXhpc3RlIGVuIGVsIGNhcnJpdG8gZGUgY29tcHJhcy5cclxuXHQgKiBAcGFyYW0gcHJvZHVjdCBcclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIFxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eUFkZCBDYW50aWRhZCBhIGFncmVnYXIuIFBvciBkZWZlY3RvIGVzIDEuXHJcblx0ICovXHJcblx0YWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0OiBQcm9kdWN0LCB2YXJpYW50SWQ6IHN0cmluZywgcXVhbnRpdHlBZGQ6IG51bWJlciA9IDEpIHtcclxuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnksIGluZGV4KSA9PiB7XHJcblx0XHRcdGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKSB7XHJcblx0XHRcdFx0dGhpcy51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgdGhpcy5maW5kSXRlbShwcm9kdWN0LmlkKS5xdWFudGl0eSArIHF1YW50aXR5QWRkKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGNhbnRpZGFkIGRlIHVuIHByb2R1Y3RvIGRlbCBpdGVtIGRlbCBjYXJyaXRvIFxyXG5cdCAqIEBwYXJhbSBjb2RlVmFyaWFudCBjb2RpZ28gZGUgbGEgdmFyaWFudGUuXHJcblx0ICogQHJldHVybnMgbGEgY2FudGlkYWQgbyBgMGAgZW4gc3UgZGVmZWN0by5cclxuXHQgKi9cclxuXHRnZXRDb3VudEZyb21JdGVtSW5DYXJ0KGNvZGVWYXJpYW50OiBhbnkpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIHVuIG9ic2VydmFibGUgY29uIGxhIGNhbnRpZGFkIGRlIGl0ZW1zIGVuIGVsIGNhcnJpdG8uXHJcblx0ICovXHJcblx0Z2V0Q291bnRDYXJ0SXRlbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnRJdGVtcyQucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFwZWEgbG9zIHByb2R1Y3RvcyBlbiBlbCBjYXJyaXRvIHBhcmEgY2FtYmlhciBlbCBwcmVjaW8gb2J0ZW5pZW5kbyBkZSBsYSB2YXJpYW50ZSB5IHNlbGVjY2lvbmFuZG8gc2kgZXNcclxuXHQgKiBwcmVjaW8gZGUgb2ZlcnRhIG8gZWwgcHJlY2lvIG5vcm1hbC5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcblx0XHRyZXR1cm4gaXRlbXMubWFwKFxyXG5cdFx0XHRpdGVtID0+IHtcclxuXHRcdFx0XHRpZiAoaXRlbS5wcm9kdWN0KSB7XHJcblx0XHRcdFx0XHRpdGVtLnByb2R1Y3QucHJpY2UgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1cclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZXhpc3RlbnRlIGVuIGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGl0ZW0gZWwgaXRlbSBhIGFjdHVhbGl6YXIuXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IGxhIGNhbnRpZGFkIG51ZXZhLlxyXG5cdCAqL1xyXG5cdHVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMudmFsaWRhdGVRdWFudGl0eShpdGVtLCBxdWFudGl0eSkgJiYgKHRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMoaXRlbSwgcXVhbnRpdHkpKSkge1xyXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KSkudGhlbihcclxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcclxuXHRcdFx0XHRcdGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuXHRcdFx0XHQpXHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hbmVqYSBlbCBlcnJvciBlbiBjYXNvIGRlIHF1ZSBubyBzZSBwdWVkYSBhZ3JlZ2FyIGFsIGNhcnJpdG8gZWwgcHJvZHVjdG8uXHJcblx0ICogQHBhcmFtIGVyciBcclxuXHQgKi9cclxuXHRoYW5kbGVFcnJvcihlcnI6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxhIGNhbnRpZGFkIGRlbCBpdGVtIGRlbCBwcm9kdWN0byBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIElEIGRlIGxhIHZhcmlhbnRlIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0SXRlbVF1YW50aXR5KHZhcmlhbnRJZDogYW55LCBxdWFudGl0eTogbnVtYmVyKTogdm9pZCB7XHJcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxyXG5cdFx0bGV0IG5ld1F1YW50aXR5ID0gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50SWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsb3MgZGF0b3MgZGVsIGNhcnJpdG8gZW4gZWwgbG9jYWxTdG9yYWdlLiBcclxuXHQgKi9cclxuXHR1cGRhdGVMb2NhbENhcnQoKSB7XHJcblx0XHR0aGlzLl9zdG9yYWdlLnNldEl0ZW0odGhpcy5DQVJUX0tFWSwgdGhpcy5faXRlbXMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBlbCBjYXJyaXRvLiBFbWl0ZSBldmVudG8gZGUgYW5hbGl0aWNzLiBcclxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXHJcblx0ICogQHBhcmFtIGNhcnQgUmVzcHVlc3RhIHByb2R1Y2lkYSBwb3IgZWwgZW5wb2ludCBjb24gaW5mb3JtYWNpw7NuIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBlbWl0RXZlbnQgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydE9iaihjYXJ0OiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiBib29sZWFuIHtcclxuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XHJcblx0XHR0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnQ/LmJhbGFuY2VDdXN0b21lciwgY2FydD8udG90YWxzPy50b3RhbCk7XHJcblx0XHRlbWl0RXZlbnQgJiYgdGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuXHRcdGNhcnQuY291cG9uQ29kZVxyXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXHJcblx0XHRcdDogdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFwbGljYXIgdW4gbWVqb3IgZm9ybWF0byBhIGxvcyBkYXRvcyBkZSBsb3MgY3Vwb25lcyBhcGxpY2Fkb3MuXHJcblx0ICogQHBhcmFtIGNhcnQgXHJcblx0ICovXHJcblx0Zm9ybWF0Q291cG9uKGNhcnQ6IGFueSkge1xyXG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcclxuXHRcdGxldCBjb3Vwb246IElDb3Vwb24gPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuXHRcdFx0Y291cG9uID0ge1xyXG5cdFx0XHRcdC4uLmNvdXBvbixcclxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXHJcblx0XHRcdFx0bmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuXHRcdFx0fTtcclxuXHRcdH0gY2F0Y2ggKGUpIHsgfVxyXG5cdFx0KGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KGNvdXBvbik7XHJcblx0XHQvL2NvbnNvbGUubG9nKGNvdXBvbik7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgSUQgZGVsIGl0ZW0gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkhLml0ZW1faWRcclxuXHR9XHJcblx0LyoqXHJcblx0ICogVmFsaWRhIGxhIGNhbnRpZGFkIHBhcmEgc2FiZXIgc2kgc2UgcHVlZGUgYWN0dWFsaXphciBvIG5vLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGl0ZW0gZGVsIGNhcnJpdG9cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcclxuXHRcdGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fVxyXG5cdFx0aWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0X2lkIFxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0ZmluZEl0ZW0ocHJvZHVjdF9pZDogYW55KTogYW55IHsgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpIH1cclxuXHQvKipcclxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cclxuXHQgKiBAcGFyYW0gaXRlbSBpdGVtIGEgZWxpbWluYXJcclxuXHQgKiBAcGFyYW0gdG9hc3QgaW5kaWNhIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgIG8gbm8uIFBvciBkZWZlY3RvIGVuIGB0cnVlYC5cclxuXHQgKi9cclxuXHRkZWxldGVDYXJ0SXRlbShpdGVtOiBhbnksIHRvYXN0OiBib29sZWFuID0gdHJ1ZSkge1xyXG5cdFx0bGV0IGlkSXRlbVNlYXJjaGVkID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRJdGVtU2VhcmNoZWQpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBpdGVtIGVuIGNhcnJpdG8gZGUgZm9ybWEgbG9jYWwuIFxyXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgcHJvZHVjdG8gYSBlbGltaW5hclxyXG5cdCAqIEBwYXJhbSB0b2FzdCB7Ym9vbGVhbn0gcGFyYSBpbmRpY2FyIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgbyBuby4gXHJcblx0ICovXHJcblx0cmVtb3ZlQ2FydEl0ZW0oY2FydDogYW55LCBwcm9kdWN0OiBhbnksIHRvYXN0OiBib29sZWFuKSB7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0b2FzdCAmJiB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5fY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIHVuIGN1cG9uIGFsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxyXG5cdCAqL1xyXG5cdGFkZENvdXBvbih2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXMpXHJcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnQ3Vwb24gYXBsaWNhZG8nKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5lcnJvcihlcnIpIFxyXG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdpbnZhbGlkLWNvdXBvbicpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBjdXDDs24gZGVsIGNhcnJpdG8uIFxyXG5cdCAqL1xyXG5cdHJlbW92ZUNvdXBvbigpIHtcclxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuY291cG9uQXBpKCkpKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblxyXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8uY291cG9uQ29kZSkpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5pdGVtcykpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHRvdGFsIGRlbCBtb250byBkZSBsYXMgcHJvbW9jaW9uZXMgYXBsaWNhZGFzLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFRvdGFsUHJvbW90aW9uQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5wcm9tb3Rpb24pKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBsb3MgaW1wdWVzdG9zIGFwbGljYWRvcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUYXhlc0Ftb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byB0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbEFtb3VudCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q2FydFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydFRva2VuO1xyXG5cdH1cclxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XHJcblx0Y2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRyZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcblx0XHQpXHJcblx0cHJpdmF0ZSByZXNldENhcnQgPSAoZm4/OiBhbnkpID0+IHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gW107XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcblx0XHR0aGlzLl9jb3VudCA9IDA7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCBcIltdXCIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XHJcblx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogUmVzZXQgZGVsIGZsYWcgZGUgaW5pY2lhbGl6YWNpw7NuXHJcblx0XHRmbiAmJiBmbigpO1xyXG5cdH1cclxuXHRjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKTsgLy8g4pqg77iPIEZJWDogQ3JlYXIgbnVldm8gY2Fycml0byBkZXNwdcOpcyBkZSBjb21wbGV0YXIgY29tcHJhXHJcbiAgICB9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlOiBhbnksIHRvdGFsOiBudW1iZXIgfCBudWxsID0gbnVsbCkge1xyXG5cclxuXHRcdGlmICghYmFsYW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG5cdFx0Y29uc3QgdG90YWxBbW91bnQgPSB0b3RhbCA/PyAwO1xyXG5cclxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcclxuICAgICAgICAgICAgc2hvd01heDogYmFsYW5jZS5zaG93TWF4LFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxyXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOiBcclxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgIFx0PyBiYWxhbmNlLmNyZWRpdEFtb3VudCAtIHRvdGFsQW1vdW50XHJcbiAgICAgICAgICAgICAgICBcdDogMCxcclxuXHRcdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcclxuXHRcdFx0XHRtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcclxuICAgIH1cclxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpe1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZCA9ICcnO1xyXG4gICAgICAgICFhZGRlZCAmJiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQsIGlkOiBpZCB8fCAnJywgb3JkZXJfaXRlbV9pZDogb3JkZXJfaXRlbV9pZCB8fCAnJywgbG90X3F1YW50aXR5OiBsb3RfcXVhbnRpdHkgfHwgJycsIHVuaXRfcHJpY2U6IHVuaXRfcHJpY2UgfHwgJycsIHVuaXRfdG90YWw6IHVuaXRfdG90YWwgfHwgJycsIGFqdXN0ZW1lbnRfdG90YWw6IGFqdXN0ZW1lbnRfdG90YWwgfHwgJycsIHRvdGFsX2xvdDogdG90YWxfbG90IHx8ICcnLCBsb3Rfc3RhdHVzOiBsb3Rfc3RhdHVzIHx8ICcnLCBkYXRlX3JlcXVlc3Q6IGRhdGVfcmVxdWVzdCB8fCAnJywgbm90ZXM6IG5vdGVzIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiBzaGlwcGluZ19hZGRyZXNzX2lkIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX25hbWU6IHNoaXBwaW5nX2FkZHJlc3NfbmFtZSB8fCAnJywgYWN0aW9uOiBhY3Rpb24gfHwgJ25ld2xvdCcgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuXHRcdFx0XHRlcnJvcjogKGVycikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcblx0XHRcdH0pO1xyXG4gICAgfVxyXG5cclxuXHRcclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5jcmVkaXRBbW91bnQgPz8gbnVsbClcclxuICAgICAgICApO1xyXG5cclxuXHJcbiAgICBnZXRSZW1haW5pbmdDcmVkaXRzID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiA9PlxyXG4gICAgICAgIHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG5cdFxyXG5cdHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcclxuXHRcdGNvbnN0IGJhbGFuY2UgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuXHRcdGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCh0aGlzLl9jYXJ0U3ViamVjdC52YWx1ZT8udG90YWxzPy50b3RhbCA/PyAwKSA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdW5pdFByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFF1YW50aXR5ID0gcXVhbnRpdHkgLSBpdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ29zdCA9IHVuaXRQcmljZSAqIGFkZGl0aW9uYWxRdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuXHRhZGRSZXBlYXRPcmRlclRvQ2FydChpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpdGVtczogaXRlbXNUb0FkZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuXHRcdFx0XHRcdGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuXHRcdFx0XHRcdGl0ZW0uZXJyb3JzLnNvbWUoKGVycm9yOiBhbnkpID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG5cdFx0XHRcdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPT09IDAgJiYgb3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydEl0ZW1zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEdBQXFCLE1B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ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYWxhbmNlQ3VzdG9tZXIsIENhcnRJdGVtLCBJQ291cG9uLCBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2FwaUNvbnN0czogQXBpQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3N0b3JhZ2U6IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTmd4TG9jYWxTdG9yYWdlU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHJcblx0cHJpdmF0ZSBfY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHRwcml2YXRlIF9wcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHRwcml2YXRlIF9jb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblx0cHJpdmF0ZSBfY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPihbXSlcclxuXHRwcml2YXRlIF9yZXF1ZXN0SW5Qcm9jZXNzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHRwcml2YXRlIF9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhbGFuY2VDdXN0b21lciB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfS0VZOiBzdHJpbmcgPSAnY2FydCc7XHJcblx0cHJpdmF0ZSByZWFkb25seSBDQVJUX1RPS0VOX0tFWTogc3RyaW5nID0gJ2NhcnRfdG9rZW4nO1xyXG5cclxuXHRwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuXHRwcml2YXRlIF9jb3VudDogbnVtYmVyID0gMDtcclxuXHRwdWJsaWMgY2FydFRva2VuOiBzdHJpbmcgfCBudWxsID0gJyc7XHJcblx0cHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG5cdHByaXZhdGUgX2xvY2FsZSA9IFwiXCI7XHJcblx0cHJpdmF0ZSBfY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IEZsYWcgcGFyYSBldml0YXIgaW5pY2lhbGl6YWNpb25lcyBkdXBsaWNhZGFzXHJcblx0cHVibGljIGNhcnRJdGVtcyQgPSB0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcblx0cHVibGljIGNvdXBvbiQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NvdXBvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGNhcnQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgX2hhdmVUb1VwZGF0ZSA9IHRydWU7XHJcblx0cHVibGljIGJhbGFuY2VDdXN0b21lciQgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblx0cHVibGljIHByb21vdGlvbnMkID0gdGhpcy5fcHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0Ly9BUEkgVVJMXHJcblx0cHJpdmF0ZSBfY2FydEJhc2VVcmw6IHN0cmluZyA9IGAke3RoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkx9JHt0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTH0vY2FydHNgO1xyXG5cclxuXHRwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpKGl0ZW1faWQ6IGFueSkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxyXG5cdHB1YmxpYyBhZGRJdGVtQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxyXG5cdHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL211bHRpcGxlLWl0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFO1xyXG5cdHB1YmxpYyBjYXJ0SXRlbXNBcGkoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxyXG5cdHB1YmxpYyBkZWxldGVJdGVtQXBpKGl0ZW1faWQ6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxyXG5cdHB1YmxpYyBjb3Vwb25BcGkoKSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9jb3Vwb24nIH07XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0XHJcblx0XHQvLyDinIUgQ2FyZ2FyIGNhcnJpdG8gbG9jYWwgeSB0b2tlbiBwcmV2aW9cclxuXHRcdHRoaXMuX2l0ZW1zID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfS0VZKSB8fCAnW10nKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSkgfHwgbnVsbDtcclxuXHRcdFxyXG5cdFx0Ly8g8J+UkSBDTEFWRTogU3VzY3JpcGNpw7NuIGEgY2FtYmlvcyBkZSBlc3RhZG8gZGUgbG9naW5cclxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLmxvZ2dlZEluJC5zdWJzY3JpYmUoaXNMb2dnZWRJbiA9PiB7XHJcblx0XHRcdGlmIChpc0xvZ2dlZEluICYmICF0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0XHR0aGlzLnN5bmNDYXJ0T25Mb2dpbigpO1xyXG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHRcdH0gZWxzZSBpZiAoIWlzTG9nZ2VkSW4gJiYgdGhpcy5fY2FydEluaXRpYWxpemVkKSB7XHJcblx0XHRcdFx0Ly8gVXN1YXJpbyBjZXJyw7Mgc2VzacOzbiwgbGltcGlhciB5IHJlc2V0ZWFyIGNhcnJpdG9cclxuXHRcdFx0XHR0aGlzLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKTtcclxuXHRcdFx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8gUmVzZXQgZmxhZyBwYXJhIHBlcm1pdGlyIG51ZXZhIGluaWNpYWxpemFjacOzblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xyXG5cdFx0XHJcblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXHJcblx0XHQvLyBFbCBjYXJyaXRvIGRlIHVzdWFyaW9zIGF1dGVudGljYWRvcyBzZSBpbmljaWFsaXphIGVuIGxhIHN1c2NyaXBjacOzbiBsb2dnZWRJbiRcclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgIXRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xyXG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cclxuXHRcdFx0aWYgKHRoaXMuY2FydFRva2VuKSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0KCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFNpbmNyb25pemEgZWwgY2Fycml0byBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGxvZ2luXHJcblx0ICogSW1wbGVtZW50YSBsYSBsw7NnaWNhIGRlIEFuZ3VsYXIgOSBwYXJhIHByZXNlcnZhciBlbCBjYXJyaXRvIGRlbCBpbnZpdGFkb1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3luY0NhcnRPbkxvZ2luKCkge1xyXG5cdFx0Ly8g4pqg77iPIEZJWDogU2kgaGF5IHRva2VuIChjYXJyaXRvIGV4aXN0ZW50ZSksIHNpZW1wcmUgaW50ZW50YXIgcmVjdXBlcmFybG9cclxuXHRcdC8vIE5vIGRlcGVuZGVtb3Mgc29sbyBkZSBsb3MgaXRlbXMgbG9jYWxlcyBxdWUgcHVlZGVuIGVzdGFyIHZhY8Otb3MgYWwgcmVjYXJnYXJcclxuXHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xyXG5cdFx0XHQvLyBFbnbDrWEgZWwgdG9rZW4gcGFyYSByZWN1cGVyYXIvZnVzaW9uYXIgY2Fycml0b3NcclxuXHRcdFx0dGhpcy5nZXRDYXJ0KCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTaW4gdG9rZW4gZGUgY2Fycml0bywgb2J0ZW5lciBjYXJyaXRvIGRlbCB1c3VhcmlvIGF1dGVudGljYWRvXHJcblx0XHRcdHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgY29uIGzDs2dpY2EgZGUgc2luY3Jvbml6YWNpw7NuXHJcblx0ICogRW52w61hIGVsIHRva2VuIHNpIGhheSBjYXJyaXRvIGxvY2FsIHBhcmEgZnVzaW9uYXIgY2Fycml0b3NcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldENhcnQoKSB7XHJcblx0XHQvLyDimqDvuI8gRklYOiBFbnZpYXIgdG9rZW4gc2kgZXhpc3RlLCBzaW4gaW1wb3J0YXIgc2kgaGF5IGl0ZW1zIGxvY2FsZXNcclxuXHRcdC8vIEVzdG8gcGVybWl0ZSByZWN1cGVyYXIgZWwgY2Fycml0byBleGlzdGVudGUgYWwgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuY2FydFRva2VuID8geyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCBwYXlsb2FkKVxyXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKCdnZXRDYXJ0IHJlc3BvbnNlOicsIHJlcyk7XHJcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKTtcclxuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBjYXJ0OicsIGVycm9yKTtcclxuXHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxyXG5cdCAqIEBwYXJhbSByZXNwb25zZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRpbml0aWFsaXplQ2FydChyZXNwb25zZTogYW55KTogYW55IHtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuXHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzcG9uc2UuaXRlbXMpKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xyXG5cdFx0dGhpcy5faXRlbXMgPSBpdGVtcztcclxuXHRcdHRoaXMuX2NvdW50ID0gaXRlbXMubGVuZ3RoO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBZ3JlZ2EgdW4gcHJvZHVjdG8gYWwgY2Fycml0byBjb24gbGEgY2FudGlkYWQgZGVzZWFkYS4gXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IENhbnRpZGFkIFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSWQgZGUgbGEgdmFyaWFudGVcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRhZGRUb0NhcnQocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudElkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGJhbGFuY2U6QmFsYW5jZUN1c3RvbWVyIHwgbnVsbCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblx0XHRjb25zdCBhcHBseU1heE9yZGVyczpib29sZWFuID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4T3JkZXJzOm51bWJlciA9IGJhbGFuY2U/Lm1heE9yZGVycyA/PyBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG5cdFx0XHRyZXR1cm5cclxuXHRcdCB9XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHRsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudElkLCBxdWFudGl0eSk7XHJcblxyXG5cdFx0aWYgKCFhZGRlZCkge1xyXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRJZCB9KSlcclxuXHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIE1hbmVqYXIgbGEgcmVzcHVlc3RhIEhUVFAgZXhpdG9zYSAoY8OzZGlnbyAyMDApXHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyk7XHJcblx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuXHRcdFx0XHRcdFx0aWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEPDs2RpZ28gZGUgZXJyb3IgNTAwICh0aW1lb3V0KVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnY2FydC1lcnJvcicpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZXJyb3Itc2VydmVyJyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0byBhZ3JlZ2FuZG8gbG9zIG51ZXZvcyBpdGVtcy5cclxuXHQgKiBAcGFyYW0gY2FydCBcclxuXHQgKi9cclxuXHRhcHBlbmRUb0NhcnQoY2FydDogYW55KSB7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcblx0XHR0aGlzLl9pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcblx0XHR0aGlzLl9jb3VudCA9IHRoaXMuX2l0ZW1zLmxlbmd0aDtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFwZWEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvIHBhcmEgZGFybGUgdW4gbWVqb3IgZm9ybWF0byBzaW1pbGFyIGEgbGEgaW50ZXJmYXogYENhcnRJdGVtYC5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dHJhbnNmb3JtSXRlbXMoaXRlbXM6IGFueSk6IGFueVtdIHtcclxuXHRcdHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuXHRcdFx0XHR2YXJpYW50X2lkOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZSxcclxuXHRcdFx0XHRsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxyXG5cdFx0XHRcdHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG5cdFx0XHRcdGl0ZW1faWQ6IGl0ZW0uaWQsXHJcblx0XHRcdFx0dG90YWw6IGl0ZW0udG90YWxcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENoZXF1ZWEgc2kgZWwgcHJvZHVjdG8geWEgZXhpc3RlIGVuIGVsIGNhcnJpdG8gZGUgY29tcHJhcy5cclxuXHQgKiBAcGFyYW0gcHJvZHVjdCBcclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIFxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eUFkZCBDYW50aWRhZCBhIGFncmVnYXIuIFBvciBkZWZlY3RvIGVzIDEuXHJcblx0ICovXHJcblx0YWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0OiBQcm9kdWN0LCB2YXJpYW50SWQ6IHN0cmluZywgcXVhbnRpdHlBZGQ6IG51bWJlciA9IDEpIHtcclxuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnksIGluZGV4KSA9PiB7XHJcblx0XHRcdGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKSB7XHJcblx0XHRcdFx0dGhpcy51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgdGhpcy5maW5kSXRlbShwcm9kdWN0LmlkKS5xdWFudGl0eSArIHF1YW50aXR5QWRkKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGNhbnRpZGFkIGRlIHVuIHByb2R1Y3RvIGRlbCBpdGVtIGRlbCBjYXJyaXRvIFxyXG5cdCAqIEBwYXJhbSBjb2RlVmFyaWFudCBjb2RpZ28gZGUgbGEgdmFyaWFudGUuXHJcblx0ICogQHJldHVybnMgbGEgY2FudGlkYWQgbyBgMGAgZW4gc3UgZGVmZWN0by5cclxuXHQgKi9cclxuXHRnZXRDb3VudEZyb21JdGVtSW5DYXJ0KGNvZGVWYXJpYW50OiBhbnkpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIHVuIG9ic2VydmFibGUgY29uIGxhIGNhbnRpZGFkIGRlIGl0ZW1zIGVuIGVsIGNhcnJpdG8uXHJcblx0ICovXHJcblx0Z2V0Q291bnRDYXJ0SXRlbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnRJdGVtcyQucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFwZWEgbG9zIHByb2R1Y3RvcyBlbiBlbCBjYXJyaXRvIHBhcmEgY2FtYmlhciBlbCBwcmVjaW8gb2J0ZW5pZW5kbyBkZSBsYSB2YXJpYW50ZSB5IHNlbGVjY2lvbmFuZG8gc2kgZXNcclxuXHQgKiBwcmVjaW8gZGUgb2ZlcnRhIG8gZWwgcHJlY2lvIG5vcm1hbC5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcblx0XHRyZXR1cm4gaXRlbXMubWFwKFxyXG5cdFx0XHRpdGVtID0+IHtcclxuXHRcdFx0XHRpZiAoaXRlbS5wcm9kdWN0KSB7XHJcblx0XHRcdFx0XHRpdGVtLnByb2R1Y3QucHJpY2UgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1cclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZXhpc3RlbnRlIGVuIGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGl0ZW0gZWwgaXRlbSBhIGFjdHVhbGl6YXIuXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IGxhIGNhbnRpZGFkIG51ZXZhLlxyXG5cdCAqL1xyXG5cdHVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMudmFsaWRhdGVRdWFudGl0eShpdGVtLCBxdWFudGl0eSkgJiYgKHRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMoaXRlbSwgcXVhbnRpdHkpKSkge1xyXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KSkudGhlbihcclxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcclxuXHRcdFx0XHRcdGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuXHRcdFx0XHQpXHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hbmVqYSBlbCBlcnJvciBlbiBjYXNvIGRlIHF1ZSBubyBzZSBwdWVkYSBhZ3JlZ2FyIGFsIGNhcnJpdG8gZWwgcHJvZHVjdG8uXHJcblx0ICogQHBhcmFtIGVyciBcclxuXHQgKi9cclxuXHRoYW5kbGVFcnJvcihlcnI6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxhIGNhbnRpZGFkIGRlbCBpdGVtIGRlbCBwcm9kdWN0byBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIElEIGRlIGxhIHZhcmlhbnRlIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0SXRlbVF1YW50aXR5KHZhcmlhbnRJZDogYW55LCBxdWFudGl0eTogbnVtYmVyKTogdm9pZCB7XHJcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxyXG5cdFx0bGV0IG5ld1F1YW50aXR5ID0gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50SWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsb3MgZGF0b3MgZGVsIGNhcnJpdG8gZW4gZWwgbG9jYWxTdG9yYWdlLiBcclxuXHQgKi9cclxuXHR1cGRhdGVMb2NhbENhcnQoKSB7XHJcblx0XHR0aGlzLl9zdG9yYWdlLnNldEl0ZW0odGhpcy5DQVJUX0tFWSwgdGhpcy5faXRlbXMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBlbCBjYXJyaXRvLiBFbWl0ZSBldmVudG8gZGUgYW5hbGl0aWNzLiBcclxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXHJcblx0ICogQHBhcmFtIGNhcnQgUmVzcHVlc3RhIHByb2R1Y2lkYSBwb3IgZWwgZW5wb2ludCBjb24gaW5mb3JtYWNpw7NuIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBlbWl0RXZlbnQgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydE9iaihjYXJ0OiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiBib29sZWFuIHtcclxuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XHJcblx0XHR0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnQ/LmJhbGFuY2VDdXN0b21lciwgY2FydD8udG90YWxzPy50b3RhbCk7XHJcblx0XHRlbWl0RXZlbnQgJiYgdGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuXHRcdGNhcnQuY291cG9uQ29kZVxyXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXHJcblx0XHRcdDogdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFwbGljYXIgdW4gbWVqb3IgZm9ybWF0byBhIGxvcyBkYXRvcyBkZSBsb3MgY3Vwb25lcyBhcGxpY2Fkb3MuXHJcblx0ICogQHBhcmFtIGNhcnQgXHJcblx0ICovXHJcblx0Zm9ybWF0Q291cG9uKGNhcnQ6IGFueSkge1xyXG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcclxuXHRcdGxldCBjb3Vwb246IElDb3Vwb24gPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuXHRcdFx0Y291cG9uID0ge1xyXG5cdFx0XHRcdC4uLmNvdXBvbixcclxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXHJcblx0XHRcdFx0bmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuXHRcdFx0fTtcclxuXHRcdH0gY2F0Y2ggKGUpIHsgfVxyXG5cdFx0KGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KGNvdXBvbik7XHJcblx0XHQvL2NvbnNvbGUubG9nKGNvdXBvbik7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgSUQgZGVsIGl0ZW0gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkhLml0ZW1faWRcclxuXHR9XHJcblx0LyoqXHJcblx0ICogVmFsaWRhIGxhIGNhbnRpZGFkIHBhcmEgc2FiZXIgc2kgc2UgcHVlZGUgYWN0dWFsaXphciBvIG5vLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGl0ZW0gZGVsIGNhcnJpdG9cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcclxuXHRcdGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fVxyXG5cdFx0aWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0X2lkIFxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0ZmluZEl0ZW0ocHJvZHVjdF9pZDogYW55KTogYW55IHsgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpIH1cclxuXHQvKipcclxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cclxuXHQgKiBAcGFyYW0gaXRlbSBpdGVtIGEgZWxpbWluYXJcclxuXHQgKiBAcGFyYW0gdG9hc3QgaW5kaWNhIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgIG8gbm8uIFBvciBkZWZlY3RvIGVuIGB0cnVlYC5cclxuXHQgKi9cclxuXHRkZWxldGVDYXJ0SXRlbShpdGVtOiBhbnksIHRvYXN0OiBib29sZWFuID0gdHJ1ZSkge1xyXG5cdFx0bGV0IGlkSXRlbVNlYXJjaGVkID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRJdGVtU2VhcmNoZWQpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBpdGVtIGVuIGNhcnJpdG8gZGUgZm9ybWEgbG9jYWwuIFxyXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgcHJvZHVjdG8gYSBlbGltaW5hclxyXG5cdCAqIEBwYXJhbSB0b2FzdCB7Ym9vbGVhbn0gcGFyYSBpbmRpY2FyIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgbyBuby4gXHJcblx0ICovXHJcblx0cmVtb3ZlQ2FydEl0ZW0oY2FydDogYW55LCBwcm9kdWN0OiBhbnksIHRvYXN0OiBib29sZWFuKSB7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0b2FzdCAmJiB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5fY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIHVuIGN1cG9uIGFsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxyXG5cdCAqL1xyXG5cdGFkZENvdXBvbih2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXMpXHJcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnQ3Vwb24gYXBsaWNhZG8nKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5lcnJvcihlcnIpIFxyXG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdpbnZhbGlkLWNvdXBvbicpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBjdXDDs24gZGVsIGNhcnJpdG8uIFxyXG5cdCAqL1xyXG5cdHJlbW92ZUNvdXBvbigpIHtcclxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuY291cG9uQXBpKCkpKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblxyXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8uY291cG9uQ29kZSkpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5zdWJ0b3RhbCkpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHRvdGFsIGRlbCBtb250byBkZSBsYXMgcHJvbW9jaW9uZXMgYXBsaWNhZGFzLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFRvdGFsUHJvbW90aW9uQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5wcm9tb3Rpb24pKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBsb3MgaW1wdWVzdG9zIGFwbGljYWRvcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUYXhlc0Ftb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byB0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbEFtb3VudCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q2FydFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydFRva2VuO1xyXG5cdH1cclxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XHJcblx0Y2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRyZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcblx0XHQpXHJcblx0cHJpdmF0ZSByZXNldENhcnQgPSAoZm4/OiBhbnkpID0+IHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gW107XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcblx0XHR0aGlzLl9jb3VudCA9IDA7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCBcIltdXCIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XHJcblx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogUmVzZXQgZGVsIGZsYWcgZGUgaW5pY2lhbGl6YWNpw7NuXHJcblx0XHRmbiAmJiBmbigpO1xyXG5cdH1cclxuXHRjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKTsgLy8g4pqg77iPIEZJWDogQ3JlYXIgbnVldm8gY2Fycml0byBkZXNwdcOpcyBkZSBjb21wbGV0YXIgY29tcHJhXHJcbiAgICB9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlOiBhbnksIHRvdGFsOiBudW1iZXIgfCBudWxsID0gbnVsbCkge1xyXG5cclxuXHRcdGlmICghYmFsYW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG5cdFx0Y29uc3QgdG90YWxBbW91bnQgPSB0b3RhbCA/PyAwO1xyXG5cclxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcclxuICAgICAgICAgICAgc2hvd01heDogYmFsYW5jZS5zaG93TWF4LFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxyXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOiBcclxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgIFx0PyBiYWxhbmNlLmNyZWRpdEFtb3VudCAtIHRvdGFsQW1vdW50XHJcbiAgICAgICAgICAgICAgICBcdDogMCxcclxuXHRcdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcclxuXHRcdFx0XHRtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcclxuICAgIH1cclxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpe1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZCA9ICcnO1xyXG4gICAgICAgICFhZGRlZCAmJiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQsIGlkOiBpZCB8fCAnJywgb3JkZXJfaXRlbV9pZDogb3JkZXJfaXRlbV9pZCB8fCAnJywgbG90X3F1YW50aXR5OiBsb3RfcXVhbnRpdHkgfHwgJycsIHVuaXRfcHJpY2U6IHVuaXRfcHJpY2UgfHwgJycsIHVuaXRfdG90YWw6IHVuaXRfdG90YWwgfHwgJycsIGFqdXN0ZW1lbnRfdG90YWw6IGFqdXN0ZW1lbnRfdG90YWwgfHwgJycsIHRvdGFsX2xvdDogdG90YWxfbG90IHx8ICcnLCBsb3Rfc3RhdHVzOiBsb3Rfc3RhdHVzIHx8ICcnLCBkYXRlX3JlcXVlc3Q6IGRhdGVfcmVxdWVzdCB8fCAnJywgbm90ZXM6IG5vdGVzIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiBzaGlwcGluZ19hZGRyZXNzX2lkIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX25hbWU6IHNoaXBwaW5nX2FkZHJlc3NfbmFtZSB8fCAnJywgYWN0aW9uOiBhY3Rpb24gfHwgJ25ld2xvdCcgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuXHRcdFx0XHRlcnJvcjogKGVycikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcblx0XHRcdH0pO1xyXG4gICAgfVxyXG5cclxuXHRcclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5jcmVkaXRBbW91bnQgPz8gbnVsbClcclxuICAgICAgICApO1xyXG5cclxuXHJcbiAgICBnZXRSZW1haW5pbmdDcmVkaXRzID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiA9PlxyXG4gICAgICAgIHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG5cdFxyXG5cdHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcclxuXHRcdGNvbnN0IGJhbGFuY2UgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuXHRcdGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCh0aGlzLl9jYXJ0U3ViamVjdC52YWx1ZT8udG90YWxzPy50b3RhbCA/PyAwKSA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdW5pdFByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFF1YW50aXR5ID0gcXVhbnRpdHkgLSBpdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ29zdCA9IHVuaXRQcmljZSAqIGFkZGl0aW9uYWxRdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuXHRhZGRSZXBlYXRPcmRlclRvQ2FydChpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpdGVtczogaXRlbXNUb0FkZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuXHRcdFx0XHRcdGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuXHRcdFx0XHRcdGl0ZW0uZXJyb3JzLnNvbWUoKGVycm9yOiBhbnkpID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG5cdFx0XHRcdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPT09IDAgJiYgb3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydEl0ZW1zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19