ng-easycommerce-v18 0.6.39 → 0.6.40

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,11 @@
1
+ # Version 0.6.40
2
+ - Wishlist: el detalle de producto utiliza la variante seleccionada o la única variante disponible y deja de elegir arbitrariamente `variants[0]` cuando existen múltiples variantes sin selección.
3
+ - Wishlist: el estado de favorito compara `product_code` y `variant_code`, y el modal opera sobre la combinación concreta seleccionada.
4
+ - Wishlist: los enlaces de los ítems conservan `variant_code` en la URL para abrir el detalle en la variante guardada; los precios muestran correctamente `saleprice` junto al precio original cuando corresponde.
5
+ - Wishlist y portal de usuario: se agregan variables CSS semánticas con fallbacks neutros para permitir tematización por frontend sin alterar la lógica compartida.
6
+ - Perfil: se normalizan respuestas con `generalData`, se reutiliza la solicitud de perfil concurrente y se actualiza el estado reactivo después de guardar cambios.
7
+ - Traducciones: se incorpora el mensaje en español utilizado por el flujo de variantes de Wishlist.
8
+
1
9
  # Version 0.6.39
2
10
  - Filtros de atributos y dinámicos: se ordenan grupos y opciones con criterio alfabético y numérico, ignorando mayúsculas y acentos.
3
11
  - Tests: se agrega cobertura para validar el orden alfanumérico de atributos y filtros dinámicos.
@@ -593,6 +593,7 @@
593
593
  "user-portal.menu.addresses": "Mis direcciones",
594
594
  "user-portal.menu.documents": "Mis documentos",
595
595
  "user-portal.menu.profile": "Mis datos",
596
+ "user-portal.menu.security": "Seguridad",
596
597
  "user-portal.logout": "Cerrar sesión",
597
598
 
598
599
  "user-portal.profile.first-name": "Nombre",
@@ -17,6 +17,20 @@ import { WishlistVisibilityService } from '../../ec-services/wishlist-visibility
17
17
  import { TranslateService } from '@ngx-translate/core';
18
18
  import { getWishlistDisplayName } from '../wishlist-modal-ec/wishlist-modal-ec.utils';
19
19
  import * as i0 from "@angular/core";
20
+ export function resolveWishlistVariantCode(product, selectedVariantCode) {
21
+ const variants = Array.isArray(product?.variants) ? product.variants : [];
22
+ if (selectedVariantCode) {
23
+ const selectedVariant = variants.find((variant) => String(variant?.code ?? '') === String(selectedVariantCode) ||
24
+ String(variant?.id ?? '') === String(selectedVariantCode) ||
25
+ String(variant?.variant_id ?? '') === String(selectedVariantCode));
26
+ return selectedVariant?.code ? String(selectedVariant.code) : undefined;
27
+ }
28
+ return variants.length === 1 && variants[0]?.code ? String(variants[0].code) : undefined;
29
+ }
30
+ export function isWishlistItemForVariant(item, productCode, variantCode) {
31
+ return String(item?.product_code ?? '') === String(productCode) &&
32
+ String(item?.variant_code ?? '') === String(variantCode ?? '');
33
+ }
20
34
  export class ProductDetailEcComponent {
21
35
  mainCarousel;
22
36
  thumbsCarousel;
@@ -124,7 +138,7 @@ export class ProductDetailEcComponent {
124
138
  this.productSignal.set(product);
125
139
  this._currentWishlistProduct = product;
126
140
  if (product?.id) {
127
- this.checkIfFavorite(product.id.toString());
141
+ this.refreshWishlistFavoriteState(product);
128
142
  }
129
143
  else {
130
144
  this.isFavorite = false;
@@ -136,6 +150,7 @@ export class ProductDetailEcComponent {
136
150
  this.selectedVariantFromQuery = params.get('variant');
137
151
  this.appliedVariantFromQuery = null;
138
152
  this.applyVariantFromQuery();
153
+ this.refreshWishlistFavoriteState();
139
154
  });
140
155
  // Suscribirse a los cambios de parámetros de la ruta
141
156
  this.routeSubscription = this.route.params.subscribe(params => {
@@ -588,13 +603,13 @@ export class ProductDetailEcComponent {
588
603
  trackByProductId(index, productId) {
589
604
  return productId;
590
605
  }
591
- checkIfFavorite(productId) {
606
+ checkIfFavorite(productId, variantCode) {
592
607
  if (!this.isAuthenticated$) {
593
608
  this.isFavorite = false;
594
609
  return;
595
610
  }
596
611
  this._wishlistService.getWishlistsSilent(undefined, true).then((lists) => {
597
- this.isFavorite = lists.some(list => list.items?.some((item) => item.product_code === productId));
612
+ this.isFavorite = lists.some(list => list.items?.some((item) => isWishlistItemForVariant(item, productId, variantCode)));
598
613
  }).catch(() => {
599
614
  this.isFavorite = false;
600
615
  });
@@ -608,7 +623,11 @@ export class ProductDetailEcComponent {
608
623
  this._toastService.show('wishlist-login-required');
609
624
  return;
610
625
  }
611
- const variantCode = product.variants?.[0]?.code;
626
+ const variantCode = this.resolveWishlistVariantCode(product);
627
+ if (!variantCode) {
628
+ this._toastService.show('no-variants');
629
+ return;
630
+ }
612
631
  this.openWishlistModal(product, variantCode);
613
632
  }
614
633
  openWishlistModal(product, variantCode) {
@@ -616,11 +635,15 @@ export class ProductDetailEcComponent {
616
635
  return;
617
636
  }
618
637
  this._currentWishlistProduct = product;
619
- this._pendingVariantCode = variantCode ?? product.variants?.[0]?.code;
638
+ this._pendingVariantCode = variantCode ?? this.resolveWishlistVariantCode(product);
639
+ if (!this._pendingVariantCode) {
640
+ this._toastService.show('no-variants');
641
+ return;
642
+ }
620
643
  this._wishlistService.getWishlistsSilent().then((lists) => {
621
644
  this.wishlistModalLists = lists ?? [];
622
645
  this.wishlistSelectedTokens = new Set(this.wishlistModalLists
623
- .filter(wishlist => this.isProductInWishlist(wishlist, product.id.toString()))
646
+ .filter(wishlist => this.isProductInWishlist(wishlist, product.id.toString(), this._pendingVariantCode))
624
647
  .map(wishlist => wishlist.token));
625
648
  this.isFavorite = this.wishlistSelectedTokens.size > 0;
626
649
  this.showWishlistModal = true;
@@ -701,8 +724,17 @@ export class ProductDetailEcComponent {
701
724
  const translated = this._translateService.instant('wishlist-default-name');
702
725
  return translated && translated !== 'wishlist-default-name' ? translated : 'Lista de favoritos';
703
726
  }
704
- isProductInWishlist(wishlist, productCode) {
705
- return wishlist?.items?.some((item) => item.product_code === productCode);
727
+ isProductInWishlist(wishlist, productCode, variantCode) {
728
+ return wishlist?.items?.some((item) => isWishlistItemForVariant(item, productCode, variantCode));
729
+ }
730
+ resolveWishlistVariantCode(product) {
731
+ return resolveWishlistVariantCode(product, this.selectedVariantFromQuery);
732
+ }
733
+ refreshWishlistFavoriteState(product = this.currentProduct) {
734
+ if (!product?.id) {
735
+ return;
736
+ }
737
+ this.checkIfFavorite(product.id.toString(), this.resolveWishlistVariantCode(product));
706
738
  }
707
739
  /**
708
740
  * Resetea el estado del modal de reseñas
@@ -730,4 +762,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
730
762
  type: ViewChild,
731
763
  args: ['thumbsCarousel']
732
764
  }] } });
733
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQXFCLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFD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QUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztJQUNsRyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsUUFBYSxFQUFFLFdBQW1CO1FBQzVELE9BQU8sUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLCtEQUErRDtRQUMvRCxJQUFJLE9BQVEsSUFBWSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqRCxJQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixJQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQzt3R0FyMUJVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLGtTQ2pDckMsRUFBQTs7NEZEaUNhLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLENBQUM7d0RBS3BCLFlBQVk7c0JBQWhELFNBQVM7dUJBQUMsY0FBYztnQkFDYyxjQUFjO3NCQUFwRCxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RvciwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlLCBDaGFubmVsU2VydmljZSwgQ2FydFNlcnZpY2UsIFByaWNlVmlzaWJpbGl0eVNlcnZpY2UsIEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtTWFwLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UsIFByb2R1Y3RzU2VydmljZSwgU2VvU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBRdWFudGl0eVJ1bGVzU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBoZSBmcm9tICdoZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhcmlhbnRzRWNDb21wb25lbnQgfSBmcm9tICcuLi92YXJpYW50cy1lYy92YXJpYW50cy1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdENvbW1lbnRFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMnO1xuaW1wb3J0IHR5cGUgeyBFbWJsYUV2ZW50VHlwZSwgRW1ibGFPcHRpb25zVHlwZSB9IGZyb20gJ2VtYmxhLWNhcm91c2VsLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlRW1ibGFFY09wdGlvbnMgYXMgY3JlYXRlRW1ibGFPcHRpb25zLFxuICBERUZBVUxUX0VNQkxBX0VWRU5UUyxcbiAgRW1ibGFDYXJvdXNlbEVjQ29tcG9uZW50LFxufSBmcm9tICcuLi9lbWJsYS1jYXJvdXNlbC1lYyc7XG5pbXBvcnQgeyBXaXNobGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy93aXNobGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFdpc2hsaXN0VmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy93aXNobGlzdC12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZ2V0V2lzaGxpc3REaXNwbGF5TmFtZSB9IGZyb20gJy4uL3dpc2hsaXN0LW1vZGFsLWVjL3dpc2hsaXN0LW1vZGFsLWVjLnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZGV0YWlsLWVjJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1ZhcmlhbnRzRWNDb21wb25lbnQsIFByb2R1Y3RDb21tZW50RWNDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWFpbkNhcm91c2VsJykgcHJvdGVjdGVkIG1haW5DYXJvdXNlbD86IEVtYmxhQ2Fyb3VzZWxFY0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndGh1bWJzQ2Fyb3VzZWwnKSBwcm90ZWN0ZWQgdGh1bWJzQ2Fyb3VzZWw/OiBFbWJsYUNhcm91c2VsRWNDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKVxuICBwcml2YXRlIF9vcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoT3B0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UgPSBpbmplY3QoUHJvZHVjdERldGFpbFNlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9kdWN0U2VydmljZTogUHJvZHVjdHNTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RzU2VydmljZSk7XG4gIHByaXZhdGUgX2FjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG4gIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG4gIHByaXZhdGUgX3Nlb1NlcnZpY2U6IFNlb1NlcnZpY2UgPSBpbmplY3QoU2VvU2VydmljZSk7XG4gIHByaXZhdGUgcGFyYW1ldGVyc1NlcnZpY2UgPSBpbmplY3QoUGFyYW1ldGVyc1NlcnZpY2UpO1xuICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcblxuICBwcml2YXRlIF93aXNobGlzdFNlcnZpY2U6IFdpc2hsaXN0U2VydmljZSA9IGluamVjdChXaXNobGlzdFNlcnZpY2UpO1xuICBwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgd2lzaGxpc3RWaXNpYmlsaXR5ID0gaW5qZWN0KFdpc2hsaXN0VmlzaWJpbGl0eVNlcnZpY2UpO1xuXG4gIHB1YmxpYyBwcm9kdWN0JDogT2JzZXJ2YWJsZTxQcm9kdWN0IHwgbnVsbD4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5wcm9kdWN0JDtcbiAgcHVibGljIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5vcHRpb25zJDtcbiAgcHVibGljIGRhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5hc3NvY2lhdGVkRGF0YSQ7XG4gIHByaXZhdGUgcm91dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlcnlQYXJhbVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHByb2R1Y3RTdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwcm9kdWN0Q29tbWVudFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjaGFubmVsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1YW50aXR5Qm9vdHN0cmFwU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBjdXJyZW50UHJvZHVjdElkPzogc3RyaW5nO1xuICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHB1YmxpYyBtZWRpYVVybCA9IHRoaXMuX2NvbnN0cy5tZWRpYVVybCgpO1xuICBwdWJsaWMgY29kZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBzaG93Rm9ybUNvbnRhY3QgPSBmYWxzZTtcbiAgcHVibGljIHNob3dDb250YWN0TW9kYWwgPSBmYWxzZTtcbiAgcHVibGljIHNob3dSZXZpZXdzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2F0ZWdvcmllczogYW55W10gPSBbXTtcbiAgcHVibGljIHNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VyczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpY2VWaXNpYmlsaXR5ID0gaW5qZWN0KFByaWNlVmlzaWJpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgZW1ibGFFdmVudHM6IEVtYmxhRXZlbnRUeXBlW10gPSBbLi4uREVGQVVMVF9FTUJMQV9FVkVOVFMsICdyZUluaXQnXTtcbiAgcHVibGljIHJlYWRvbmx5IG1haW5FbWJsYU9wdGlvbnM6IEVtYmxhT3B0aW9uc1R5cGUgPSBjcmVhdGVFbWJsYU9wdGlvbnMoe1xuICAgIGxvb3A6IGZhbHNlLFxuICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IHRodW1ic0VtYmxhT3B0aW9uczogRW1ibGFPcHRpb25zVHlwZSA9IGNyZWF0ZUVtYmxhT3B0aW9ucyh7XG4gICAgbG9vcDogZmFsc2UsXG4gICAgZHJhZ0ZyZWU6IHRydWUsXG4gICAgY29udGFpblNjcm9sbDogJ2tlZXBTbmFwcycsXG4gICAgc2xpZGVzVG9TY3JvbGw6IDEsXG4gIH0pO1xuICBwdWJsaWMgbWFpblNlbGVjdGVkSW5kZXggPSAwO1xuICBwdWJsaWMgY2FuTWFpblNjcm9sbFByZXYgPSBmYWxzZTtcbiAgcHVibGljIGNhbk1haW5TY3JvbGxOZXh0ID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5UaHVtYnNTY3JvbGxQcmV2ID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5UaHVtYnNTY3JvbGxOZXh0ID0gZmFsc2U7XG4gIHB1YmxpYyB0aHVtYnNOYXZpZ2F0aW9uUmVhZHkgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRQcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21tZW50cyA9ICcnO1xuICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRQaWN0dXJlczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVmFyaWFudEZyb21RdWVyeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBhcHBsaWVkVmFyaWFudEZyb21RdWVyeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBjdXJyZW50T3B0aW9uczogYW55W10gPSBbXTtcblxuICBwdWJsaWMgcXVhbnRpdHk6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMSk7XG4gIHB1YmxpYyBpc0FkZGluZ1RvQ2FydDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgcXVhbnRpdHlJbnB1dCA9ICcxJztcbiAgcHVibGljIHBhcmFtZXRlcnMkOiBPYnNlcnZhYmxlPFBhcmFtZXRlcltdIHwgbnVsbD4gPSB0aGlzLnBhcmFtZXRlcnNTZXJ2aWNlLmdldFBhcmFtZXRlcnMoKTtcbiAgcHVibGljIGhhc1BhcmFtcyA9IHRoaXMucGFyYW1ldGVyc1NlcnZpY2UuaGFzUGFyYW1zO1xuICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcblxuICBwcml2YXRlIHByb2R1Y3RTaWduYWwgPSBzaWduYWw8UHJvZHVjdCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHF1YW50aXR5UnVsZXM6IFF1YW50aXR5UnVsZXNTZXJ2aWNlID0gaW5qZWN0KFF1YW50aXR5UnVsZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsYXN0UXVhbnRpdHlCb290c3RyYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBpc0Zhdm9yaXRlID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93V2lzaGxpc3RNb2RhbCA9IGZhbHNlO1xuICBwdWJsaWMgd2lzaGxpc3RNb2RhbExpc3RzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgd2lzaGxpc3RTZWxlY3RlZFRva2VucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgd2lzaGxpc3RVcGRhdGluZ1Rva2VucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgd2lzaGxpc3RDcmVhdGluZyA9IGZhbHNlO1xuICBwdWJsaWMgd2lzaGxpc3ROZXdMaXN0TmFtZSA9ICcnO1xuICBwdWJsaWMgd2lzaGxpc3RzJCA9IHRoaXMuX3dpc2hsaXN0U2VydmljZS53aXNobGlzdHMkO1xuICBwcml2YXRlIF9wZW5kaW5nVmFyaWFudENvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfY3VycmVudFdpc2hsaXN0UHJvZHVjdDogUHJvZHVjdCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIExhIGNhcmdhIGluaWNpYWwgZGVsIHByb2R1Y3RvIHNlIG1hbmVqYSBlbiBuZ09uSW5pdFxuICAgIHRoaXMuY2hhbm5lbFN1YnNjcmlwdGlvbiA9IHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkLnN1YnNjcmliZShjaGFubmVsID0+IHtcbiAgICAgIHRoaXMuc2hvd1Jldmlld3MgPSBjaGFubmVsLnNob3dSZXZpZXdzO1xuICAgICAgdGhpcy5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgPSAhIWNoYW5uZWwuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzO1xuICAgICAgdGhpcy5oaWRlUHJpY2VzID0gISFjaGFubmVsLmhpZGVQcmljZXM7XG4gICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gISFjaGFubmVsLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb3B0aW9uc1NlcnZpY2UuZ2V0Q2F0ZWdvcmllcygpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzID0gcmVzO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvZHVjdCQuc3Vic2NyaWJlKHByb2R1Y3QgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0U2lnbmFsLnNldChwcm9kdWN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRXaXNobGlzdFByb2R1Y3QgPSBwcm9kdWN0O1xuXG4gICAgICBpZiAocHJvZHVjdD8uaWQpIHtcbiAgICAgICAgdGhpcy5jaGVja0lmRmF2b3JpdGUocHJvZHVjdC5pZC50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbU1hcCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnkgPSBwYXJhbXMuZ2V0KCd2YXJpYW50Jyk7XG4gICAgICB0aGlzLmFwcGxpZWRWYXJpYW50RnJvbVF1ZXJ5ID0gbnVsbDtcbiAgICAgIHRoaXMuYXBwbHlWYXJpYW50RnJvbVF1ZXJ5KCk7XG4gICAgfSk7XG5cbiAgICAvLyBTdXNjcmliaXJzZSBhIGxvcyBjYW1iaW9zIGRlIHBhcsOhbWV0cm9zIGRlIGxhIHJ1dGFcbiAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBjb25zdCBuZXdQcm9kdWN0SWQgPSBwYXJhbXNbJ2lkJ107XG4gICAgICBpZiAobmV3UHJvZHVjdElkICYmIG5ld1Byb2R1Y3RJZCAhPT0gdGhpcy5jdXJyZW50UHJvZHVjdElkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2R1Y3RJZCA9IG5ld1Byb2R1Y3RJZDtcbiAgICAgICAgdGhpcy5jb2RlID0gbmV3UHJvZHVjdElkO1xuICAgICAgICB0aGlzLmNvbW1lbnRzID0gJyc7XG5cbiAgICAgICAgLy8gU2Nyb2xsIGFsIGluaWNpbyBkZSBsYSBww6FnaW5hIGN1YW5kbyBjYW1iaWEgZWwgcHJvZHVjdG9cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVsIHJlc2V0ZW8gYWhvcmEgc2UgaGFjZSBlbiBlbCBzZXJ2aWNpbyBhbnRlcyBkZSBjYXJnYXJcbiAgICAgICAgdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2UubG9hZFByb2R1Y3QodGhpcy5jb2RlKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld01vZGFsKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3QkLnN1YnNjcmliZShwcm9kdWN0ID0+IHtcbiAgICAgIGlmIChwcm9kdWN0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWV0YVRhZ3MocHJvZHVjdCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3RTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJvZHVjdCRcbiAgICAgIC5waXBlKGZpbHRlcigocHJvZHVjdCk6IHByb2R1Y3QgaXMgUHJvZHVjdCA9PiAhIXByb2R1Y3QpKVxuICAgICAgLnN1YnNjcmliZSgocHJvZHVjdCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0ID0gcHJvZHVjdDtcbiAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmRlZmF1bHRQaWN0dXJlcyA9IEFycmF5LmlzQXJyYXkocHJvZHVjdC5waWN0dXJlc2RlZmF1bHQpXG4gICAgICAgICAgPyBbLi4ucHJvZHVjdC5waWN0dXJlc2RlZmF1bHRdXG4gICAgICAgICAgOiBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFxuICAgICAgICAgICAgPyBbcHJvZHVjdC5waWN0dXJlc2RlZmF1bHQgYXMgc3RyaW5nXVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgdGhpcy5hcHBseVZhcmlhbnRGcm9tUXVlcnkoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5vcHRpb25zJFxuICAgICAgLnBpcGUoZmlsdGVyKChvcHRpb25zOiBhbnkpID0+IEFycmF5LmlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbnM6IGFueVtdKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmFwcGx5VmFyaWFudEZyb21RdWVyeSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3QkXG4gICAgICAucGlwZShmaWx0ZXIoKHByb2R1Y3QpOiBwcm9kdWN0IGlzIFByb2R1Y3QgPT4gISFwcm9kdWN0KSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0RW1ibGFHYWxsZXJ5U3RhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5wcm9kdWN0Q29tbWVudFN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucHJvZHVjdCQsIHRoaXMuZGF0YSQsIHRoaXMuX2NhcnRTZXJ2aWNlLmNhcnRJdGVtcyQsIHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkXSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwcm9kdWN0LCBkYXRhLCBpdGVtcywgY2hhbm5lbF0pID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9ICEhY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU7XG4gICAgICAgIHRoaXMuc3luY1Byb2R1Y3RDb21tZW50RnJvbUNhcnQocHJvZHVjdCwgZGF0YSwgaXRlbXMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnF1YW50aXR5Qm9vdHN0cmFwU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy5wcm9kdWN0JCwgdGhpcy5kYXRhJF0pXG4gICAgICAuc3Vic2NyaWJlKChbcHJvZHVjdCwgZGF0YV0pID0+IHtcbiAgICAgICAgdGhpcy5ib290c3RyYXBRdWFudGl0eUZyb21NdWx0aXBsZShwcm9kdWN0LCBkYXRhKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJvZHVjdFN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJvZHVjdENvbW1lbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFubmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucXVhbnRpdHlCb290c3RyYXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25NYWluQ2Fyb3VzZWxTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZU1haW5OYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRodW1ic0Nhcm91c2VsU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUaHVtYnNOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1haW5TZWxlY3RlZENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYWluU2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LnNjcm9sbFRvKGluZGV4KTtcbiAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByb2R1Y3RJbWFnZXMgPSAob3B0aW9uVmFsdWU6IHN0cmluZywgb3B0aW9uQ29kZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRQcm9kdWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudCA9IHRoaXMuY3VycmVudFByb2R1Y3QudmFyaWFudHM/LmZpbmQoKGl0ZW06IGFueSkgPT5cbiAgICAgIGl0ZW0ub3B0aW9ucz8uc29tZSgob3B0aW9uOiBhbnkpID0+IG9wdGlvbj8uW29wdGlvbkNvZGVdID09PSBvcHRpb25WYWx1ZSksXG4gICAgKTtcblxuICAgIGNvbnN0IHBpY3R1cmVzID0gQXJyYXkuaXNBcnJheSh2YXJpYW50Py5pbWFnZXMpICYmIHZhcmlhbnQuaW1hZ2VzLmxlbmd0aCA+IDBcbiAgICAgID8gWy4uLnZhcmlhbnQuaW1hZ2VzXVxuICAgICAgOiBbLi4udGhpcy5kZWZhdWx0UGljdHVyZXNdO1xuXG4gICAgaWYgKCFwaWN0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCA9IHBpY3R1cmVzO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5yZWZyZXNoR2FsbGVyeSgpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBhcHBseVZhcmlhbnRGcm9tUXVlcnkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRQcm9kdWN0IHx8ICF0aGlzLnNlbGVjdGVkVmFyaWFudEZyb21RdWVyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmN1cnJlbnRPcHRpb25zKSB8fCAhdGhpcy5jdXJyZW50T3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkVmFyaWFudEZyb21RdWVyeSA9PT0gdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YXJpYW50ID0gdGhpcy5jdXJyZW50UHJvZHVjdC52YXJpYW50cz8uZmluZCgoaXRlbTogYW55KSA9PlxuICAgICAgaXRlbT8uY29kZSA9PT0gdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnkgfHxcbiAgICAgIGl0ZW0/LmlkID09PSB0aGlzLnNlbGVjdGVkVmFyaWFudEZyb21RdWVyeSB8fFxuICAgICAgaXRlbT8udmFyaWFudF9pZCA9PT0gdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnksXG4gICAgKTtcblxuICAgIGlmICghdmFyaWFudD8ub3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudE9wdGlvbnM6IEFycmF5PHsgb3B0aW9uQ29kZTogc3RyaW5nOyBvcHRpb25WYWx1ZTogYW55IH0+ID0gdmFyaWFudC5vcHRpb25zXG4gICAgICAuZmlsdGVyKChvcHRpb246IGFueSkgPT4gb3B0aW9uICYmIHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKVxuICAgICAgLmZsYXRNYXAoKG9wdGlvbjogYW55KSA9PiBPYmplY3Qua2V5cyhvcHRpb24pLm1hcCgob3B0aW9uQ29kZSkgPT4gKHsgb3B0aW9uQ29kZSwgb3B0aW9uVmFsdWU6IG9wdGlvbltvcHRpb25Db2RlXSB9KSkpO1xuXG4gICAgY29uc3Qgb3B0aW9uc1JlYWR5ID0gdmFyaWFudE9wdGlvbnMuZXZlcnkoKHsgb3B0aW9uQ29kZSwgb3B0aW9uVmFsdWUgfTogeyBvcHRpb25Db2RlOiBzdHJpbmc7IG9wdGlvblZhbHVlOiBhbnkgfSkgPT5cbiAgICAgIHRoaXMuY3VycmVudE9wdGlvbnMuc29tZSgob3B0aW9uOiBhbnkpID0+XG4gICAgICAgIG9wdGlvbj8uY29kZSA9PT0gb3B0aW9uQ29kZSAmJlxuICAgICAgICBvcHRpb24/LnZhbHVlcz8uc29tZSgodmFsdWU6IGFueSkgPT4gdmFsdWU/Lm5hbWUgPT09IG9wdGlvblZhbHVlKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmICghb3B0aW9uc1JlYWR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkVmFyaWFudEZyb21RdWVyeSA9IHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5O1xuXG4gICAgZm9yIChjb25zdCB7IG9wdGlvbkNvZGUsIG9wdGlvblZhbHVlIH0gb2YgdmFyaWFudE9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLnNldE9wdGlvbihvcHRpb25Db2RlLCBvcHRpb25WYWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JPcHRpb24gPSB2YXJpYW50Lm9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IG9wdGlvbj8uQ09MT1IpO1xuXG4gICAgaWYgKGNvbG9yT3B0aW9uPy5DT0xPUikge1xuICAgICAgdGhpcy51cGRhdGVQcm9kdWN0SW1hZ2VzKGNvbG9yT3B0aW9uLkNPTE9SLCAnQ09MT1InKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFyaWFudC5pbWFnZXMpICYmIHZhcmlhbnQuaW1hZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFByb2R1Y3QucGljdHVyZXNkZWZhdWx0ID0gWy4uLnZhcmlhbnQuaW1hZ2VzXTtcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hHYWxsZXJ5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hHYWxsZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRFbWJsYUdhbGxlcnlTdGF0ZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1haW5DYXJvdXNlbD8uZW1ibGFSZWY/LnJlSW5pdCgpO1xuICAgICAgdGhpcy50aHVtYnNDYXJvdXNlbD8uZW1ibGFSZWY/LnJlSW5pdCgpO1xuICAgICAgdGhpcy5tYWluQ2Fyb3VzZWw/LnNjcm9sbFRvKDApO1xuICAgICAgdGhpcy50aHVtYnNDYXJvdXNlbD8uc2Nyb2xsVG8oMCk7XG4gICAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVGh1bWJDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYWluQ2Fyb3VzZWw/LnNjcm9sbFRvKGluZGV4KTtcbiAgICB0aGlzLm1haW5TZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy50aHVtYnNDYXJvdXNlbD8uc2Nyb2xsVG8oaW5kZXgpO1xuICAgIHRoaXMucXVldWVOYXZpZ2F0aW9uU3RhdGVTeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsTWFpblByZXYoKTogdm9pZCB7XG4gICAgdGhpcy5tYWluQ2Fyb3VzZWw/LnNjcm9sbFByZXYoKTtcbiAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbE1haW5OZXh0KCk6IHZvaWQge1xuICAgIHRoaXMubWFpbkNhcm91c2VsPy5zY3JvbGxOZXh0KCk7XG4gICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUaHVtYnNQcmV2KCk6IHZvaWQge1xuICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LnNjcm9sbFByZXYoKTtcbiAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbFRodW1ic05leHQoKTogdm9pZCB7XG4gICAgdGhpcy50aHVtYnNDYXJvdXNlbD8uc2Nyb2xsTmV4dCgpO1xuICAgIHRoaXMucXVldWVOYXZpZ2F0aW9uU3RhdGVTeW5jKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRFbWJsYUdhbGxlcnlTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1haW5TZWxlY3RlZEluZGV4ID0gMDtcbiAgICB0aGlzLnRodW1ic05hdmlnYXRpb25SZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuY2FuTWFpblNjcm9sbFByZXYgPSBmYWxzZTtcbiAgICB0aGlzLmNhbk1haW5TY3JvbGxOZXh0ID0gZmFsc2U7XG4gICAgdGhpcy5jYW5UaHVtYnNTY3JvbGxQcmV2ID0gZmFsc2U7XG4gICAgdGhpcy5jYW5UaHVtYnNTY3JvbGxOZXh0ID0gZmFsc2U7XG4gICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBxdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTogdm9pZCB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVNYWluTmF2aWdhdGlvblN0YXRlKCk7XG4gICAgICB0aGlzLnVwZGF0ZVRodW1ic05hdmlnYXRpb25TdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZU1haW5OYXZpZ2F0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgYXBpID0gdGhpcy5tYWluQ2Fyb3VzZWw/LmVtYmxhUmVmPy5lbWJsYUFwaTtcblxuICAgIHRoaXMuY2FuTWFpblNjcm9sbFByZXYgPSBCb29sZWFuKGFwaT8uY2FuU2Nyb2xsUHJldj8uKCkpO1xuICAgIHRoaXMuY2FuTWFpblNjcm9sbE5leHQgPSBCb29sZWFuKGFwaT8uY2FuU2Nyb2xsTmV4dD8uKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVRodW1ic05hdmlnYXRpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhcGkgPSB0aGlzLnRodW1ic0Nhcm91c2VsPy5lbWJsYVJlZj8uZW1ibGFBcGk7XG5cbiAgICBpZiAoIWFwaSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGh1bWJzTmF2aWdhdGlvblJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNhblRodW1ic1Njcm9sbFByZXYgPSBCb29sZWFuKGFwaS5jYW5TY3JvbGxQcmV2Py4oKSk7XG4gICAgdGhpcy5jYW5UaHVtYnNTY3JvbGxOZXh0ID0gQm9vbGVhbihhcGkuY2FuU2Nyb2xsTmV4dD8uKCkpO1xuICB9XG5cbiAgdXBkYXRlTWV0YVRhZ3MocHJvZHVjdDogUHJvZHVjdCkge1xuICAgIGNvbnN0IGRlc2NyaXBjaW9uTGltcGlhID0gaGUuZGVjb2RlKHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgJycpXG4gICAgICAucmVwbGFjZSgvPHN0eWxlW14+XSo+W1xcc1xcU10qPzxcXC9zdHlsZT4vZ2ksICcnKVxuICAgICAgLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj5bXFxzXFxTXSo/PFxcL3NjcmlwdD4vZ2ksICcnKVxuICAgICAgLnJlcGxhY2UoLzxbXj5dKj4vZywgJyAnKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxuICAgICAgLnRyaW0oKTtcbiAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuX2NvbnN0cy5nZXRBYnNvbHV0ZUltYWdlVXJsKEFycmF5LmlzQXJyYXkocHJvZHVjdC5waWN0dXJlc2RlZmF1bHQpID8gcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF0gOiBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCk7XG4gICAgY29uc3Qgc2l0ZU5hbWUgPSB0aGlzLl9zZW9TZXJ2aWNlLmdldFNpdGVOYW1lKCk7XG4gICAgY29uc3QgdGl0bGUgPSBwcm9kdWN0Lm5hbWUgPyBgJHtwcm9kdWN0Lm5hbWV9IHwgJHtzaXRlTmFtZX1gIDogYFByb2R1Y3RvIHwgJHtzaXRlTmFtZX1gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZGVzY3JpcGNpb25MaW1waWEgfHwgJ0ZpY2hhIGRlIHByb2R1Y3RvJztcblxuICAgIHRoaXMuX3Nlb1NlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuICAgIHRoaXMuX3Nlb1NlcnZpY2Uuc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dJbWFnZShpbWFnZVVybCB8fCAnJyk7XG4gICAgdGhpcy5fc2VvU2VydmljZS5zZXRPZ1R5cGUoJ3Byb2R1Y3QnKTtcbiAgICB0aGlzLl9zZW9TZXJ2aWNlLnNldENhbm9uaWNhbCh0aGlzLl9jb25zdHMuZ2V0RnJvbnRlbmRVcmwoKSArIHRoaXMuX3JvdXRlci51cmwpO1xuICB9XG4gIGRlY29kZUh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgdHh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgIHR4dC5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmV0dXJuIHR4dC52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cbiAgc2FuaXRpemVkSHRtbChodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgY29uc3QgZGVjb2RlZEh0bWwgPSB0aGlzLmRlY29kZUh0bWwoaHRtbCB8fCAnJyk7XG4gICAgY29uc3QgY2xlYW5lZEh0bWwgPSBkZWNvZGVkSHRtbC5yZXBsYWNlKFxuICAgICAgL2FsbG93PShbJ1wiXSkoW14nXCJdKilcXDEvZ2ksXG4gICAgICAoX21hdGNoLCBxdW90ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdmFsdWVcbiAgICAgICAgICAuc3BsaXQoJzsnKVxuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoID4gMCAmJiBpdGVtLnRvTG93ZXJDYXNlKCkgIT09ICd3ZWItc2hhcmUnKTtcblxuICAgICAgICByZXR1cm4gZmVhdHVyZXMubGVuZ3RoID8gYGFsbG93PSR7cXVvdGV9JHtmZWF0dXJlcy5qb2luKCc7ICcpfSR7cXVvdGV9YCA6ICcnO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjbGVhbmVkSHRtbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3dpcGVySW5zdGFuY2Uoc3dpcGVyUmVmOiBhbnkpOiBhbnkgfCBudWxsIHtcbiAgICBjb25zdCBzd2lwZXJFbCA9IHN3aXBlclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXN3aXBlckVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlckVsLnN3aXBlciAmJiB0eXBlb2Ygc3dpcGVyRWwuaW5pdGlhbGl6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3dpcGVyRWwuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXJFbC5zd2lwZXIgfHwgbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzbGlkZVN3aXBlcihzd2lwZXJSZWY6IGFueSwgZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzLmdldFN3aXBlckluc3RhbmNlKHN3aXBlclJlZik7XG4gICAgaWYgKCFzd2lwZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvdWxkVXNlSG92ZXJJbnRlcmFjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cubWF0Y2hNZWRpYSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgnKGhvdmVyOiBob3ZlcikgYW5kIChwb2ludGVyOiBmaW5lKScpLm1hdGNoZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xhbXBJbmRleChpbmRleDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRvdGFsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoaW5kZXgsIDApLCB0b3RhbCAtIDEpO1xuICB9XG5cbiAgYWRkVG9DYXJ0KCkge1xuICAgIGlmICh0aGlzLmlzQWRkaW5nVG9DYXJ0KCkgfHwgdGhpcy5xdWFudGl0eSgpIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQWRkaW5nVG9DYXJ0LnNldCh0cnVlKTtcbiAgICBjb25zdCBjb21tZW50cyA9IHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPyB0aGlzLm5vcm1hbGl6ZVByb2R1Y3RDb21tZW50KHRoaXMuY29tbWVudHMpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YXJ0ZWQgPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5hZGRUb0NhcnQodGhpcy5xdWFudGl0eSgpLCB1bmRlZmluZWQsIGNvbW1lbnRzKTtcblxuICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgdGhpcy5pc0FkZGluZ1RvQ2FydC5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NhcnRTZXJ2aWNlLmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChsb2FkaW5nKSA9PiAhbG9hZGluZyksXG4gICAgICAgIHRha2UoMSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0FkZGluZ1RvQ2FydC5zZXQoZmFsc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRRdWFudGl0eU1pbihkYXRhOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnF1YW50aXR5UnVsZXMuZ2V0UXVhbnRpdHlNaW4odGhpcy5yZXNvbHZlUXVhbnRpdHlQcm9kdWN0KGRhdGEpKTtcbiAgfVxuXG4gIGdldFF1YW50aXR5U3RlcChkYXRhOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnF1YW50aXR5UnVsZXMuZ2V0UXVhbnRpdHlTdGVwKHRoaXMucmVzb2x2ZVF1YW50aXR5UHJvZHVjdChkYXRhKSk7XG4gIH1cblxuICBvblF1YW50aXR5SW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVhbnRpdHlJbnB1dCA9IGlucHV0LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMucXVhbnRpdHlJbnB1dC50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHRoaXMucXVhbnRpdHlJbnB1dCk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYXJzZWQpKSB7XG4gICAgICB0aGlzLnF1YW50aXR5LnNldChwYXJzZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uUXVhbnRpdHlCbHVyKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmFsaWduUXVhbnRpdHlJbnB1dCh0aGlzLnF1YW50aXR5SW5wdXQsIGRhdGEpO1xuICAgIHRoaXMucXVhbnRpdHkuc2V0KG5leHQpO1xuICAgIHRoaXMucXVhbnRpdHlJbnB1dCA9IFN0cmluZyhuZXh0KTtcbiAgfVxuXG4gIHBsdXMoc3RvY2s/OiBudW1iZXIsIG11bHRpcGxlUXVhbnRpdHk/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gTnVtYmVyKHRoaXMucXVhbnRpdHkoKSk7XG4gICAgY29uc3QgaW5jcmVtZW50ID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGN1cnJlbnQgKyBpbmNyZW1lbnQ7XG4gICAgY29uc3QgbmV4dCA9IE51bWJlci5pc0Zpbml0ZShzdG9jaykgJiYgc3RvY2sgIT0gbnVsbCA/IE1hdGgubWluKGNhbmRpZGF0ZSwgTnVtYmVyKHN0b2NrKSkgOiBjYW5kaWRhdGU7XG5cbiAgICBpZiAobmV4dCA9PT0gY3VycmVudCkge1xuICAgICAgdGhpcy5zeW5jUXVhbnRpdHlJbnB1dEZyb21TaWduYWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnF1YW50aXR5LnNldChuZXh0KTtcbiAgICB0aGlzLnN5bmNRdWFudGl0eUlucHV0RnJvbVNpZ25hbCgpO1xuICB9XG5cbiAgbGVzcyhtdWx0aXBsZVF1YW50aXR5PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IE51bWJlcih0aGlzLnF1YW50aXR5KCkpO1xuICAgIGNvbnN0IGRlY3JlbWVudCA9IG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDAgPyBtdWx0aXBsZVF1YW50aXR5IDogMTtcblxuICAgIGlmIChkZWNyZW1lbnQgPiAxKSB7XG4gICAgICBpZiAoY3VycmVudCA+IGRlY3JlbWVudCkge1xuICAgICAgICB0aGlzLnF1YW50aXR5LnNldChjdXJyZW50IC0gZGVjcmVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPiAxKSB7XG4gICAgICB0aGlzLnF1YW50aXR5LnNldChjdXJyZW50IC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5zeW5jUXVhbnRpdHlJbnB1dEZyb21TaWduYWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVQcm9kdWN0Q29tbWVudChjb21tZW50OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKGNvbW1lbnQgPz8gJycpLnNsaWNlKDAsIDEwMCkudHJpbSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bmNQcm9kdWN0Q29tbWVudEZyb21DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QgfCBudWxsLCBkYXRhOiBhbnksIGl0ZW1zOiBhbnlbXSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgfHwgIXByb2R1Y3Q/LmlkIHx8ICFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2R1Y3RJZCA9IFN0cmluZyhwcm9kdWN0LmlkKTtcbiAgICBjb25zdCB2YXJpYW50Q29kZSA9IHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5IHx8IGRhdGE/LnZhcmlhbnRDb2RlIHx8IGRhdGE/LnZhcmlhbnRfaWQgfHwgbnVsbDtcbiAgICBjb25zdCBwcm9kdWN0SXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gU3RyaW5nKGl0ZW0/LnByb2R1Y3Q/LmlkID8/ICcnKSA9PT0gcHJvZHVjdElkKTtcblxuICAgIGNvbnN0IG1hdGNoID0gdmFyaWFudENvZGVcbiAgICAgID8gcHJvZHVjdEl0ZW1zLmZpbmQoKGl0ZW06IGFueSkgPT4gU3RyaW5nKGl0ZW0/LnZhcmlhbnRfaWQgPz8gJycpID09PSBTdHJpbmcodmFyaWFudENvZGUpKVxuICAgICAgOiBwcm9kdWN0SXRlbXMubGVuZ3RoID09PSAxXG4gICAgICAgID8gcHJvZHVjdEl0ZW1zWzBdXG4gICAgICAgIDogbnVsbDtcblxuICAgIHRoaXMuY29tbWVudHMgPSBtYXRjaD8uY29tbWVudHMgPz8gJyc7XG4gIH1cblxuICBwcml2YXRlIGJvb3RzdHJhcFF1YW50aXR5RnJvbU11bHRpcGxlKHByb2R1Y3Q6IFByb2R1Y3QgfCBudWxsLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXByb2R1Y3Q/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IHRoaXMucXVhbnRpdHlSdWxlcy5nZXRRdWFudGl0eVN0ZXAodGhpcy5yZXNvbHZlUXVhbnRpdHlQcm9kdWN0KGRhdGEpKTtcbiAgICBjb25zdCB2YXJpYW50S2V5ID0gU3RyaW5nKGRhdGE/LnZhcmlhbnRDb2RlID8/IGRhdGE/LnZhcmlhbnRfaWQgPz8gJycpO1xuICAgIGNvbnN0IGJvb3RzdHJhcEtleSA9IGAke3Byb2R1Y3QuaWR9OiR7dmFyaWFudEtleX1gO1xuXG4gICAgaWYgKGJvb3RzdHJhcEtleSA9PT0gdGhpcy5sYXN0UXVhbnRpdHlCb290c3RyYXBLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RRdWFudGl0eUJvb3RzdHJhcEtleSA9IGJvb3RzdHJhcEtleTtcblxuICAgIGlmIChtdWx0aXBsZVF1YW50aXR5ID4gMSkge1xuICAgICAgdGhpcy5xdWFudGl0eS5zZXQobXVsdGlwbGVRdWFudGl0eSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1YW50aXR5KCkgPCAxKSB7XG4gICAgICB0aGlzLnF1YW50aXR5LnNldCgxKTtcbiAgICB9XG5cbiAgICB0aGlzLnN5bmNRdWFudGl0eUlucHV0RnJvbVNpZ25hbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jUXVhbnRpdHlJbnB1dEZyb21TaWduYWwoKTogdm9pZCB7XG4gICAgdGhpcy5xdWFudGl0eUlucHV0ID0gU3RyaW5nKHRoaXMucXVhbnRpdHkoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVRdWFudGl0eVByb2R1Y3QoZGF0YTogYW55KTogUHJvZHVjdCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50UHJvZHVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY3VycmVudFByb2R1Y3QsXG4gICAgICBzdG9jazogZGF0YT8uc3RvY2sgPz8gdGhpcy5jdXJyZW50UHJvZHVjdC5zdG9jayxcbiAgICAgIG11bHRpcGxlUXVhbnRpdHk6IGRhdGE/Lm11bHRpcGxlUXVhbnRpdHkgPz8gdGhpcy5jdXJyZW50UHJvZHVjdC5tdWx0aXBsZVF1YW50aXR5LFxuICAgICAgbWF4aW11bUl0ZW1zUXVhbnRpdHk6IGRhdGE/Lm1heGltdW1JdGVtc1F1YW50aXR5ID8/IHRoaXMuY3VycmVudFByb2R1Y3QubWF4aW11bUl0ZW1zUXVhbnRpdHksXG4gICAgICBtaW5pbXVtSXRlbXNRdWFudGl0eTogZGF0YT8ubWluaW11bUl0ZW1zUXVhbnRpdHkgPz8gdGhpcy5jdXJyZW50UHJvZHVjdC5taW5pbXVtSXRlbXNRdWFudGl0eSxcbiAgICB9IGFzIFByb2R1Y3Q7XG4gIH1cblxuICBwcml2YXRlIGFsaWduUXVhbnRpdHlJbnB1dChyYXdWYWx1ZTogc3RyaW5nLCBkYXRhOiBhbnkpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihTdHJpbmcocmF3VmFsdWUgPz8gJycpLnRyaW0oKSk7XG4gICAgY29uc3QgcHJvZHVjdCA9IHRoaXMucmVzb2x2ZVF1YW50aXR5UHJvZHVjdChkYXRhKTtcbiAgICBjb25zdCBtaW5BbGxvd2VkID0gdGhpcy5xdWFudGl0eVJ1bGVzLmdldFF1YW50aXR5TWluKHByb2R1Y3QpO1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLnF1YW50aXR5UnVsZXMuZ2V0UXVhbnRpdHlTdGVwKHByb2R1Y3QpO1xuICAgIGNvbnN0IHN0b2NrID0gTnVtYmVyKHByb2R1Y3Q/LnN0b2NrID8/IDApO1xuICAgIGNvbnN0IG1heEFsbG93ZWQgPSBOdW1iZXIuaXNGaW5pdGUoc3RvY2spICYmIHN0b2NrID4gMCA/IHN0b2NrIDogSW5maW5pdHk7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbWluQWxsb3dlZDtcblxuICAgIGNhbmRpZGF0ZSA9IE1hdGgubWF4KGNhbmRpZGF0ZSwgbWluQWxsb3dlZCk7XG4gICAgY2FuZGlkYXRlID0gTWF0aC5taW4oY2FuZGlkYXRlLCBtYXhBbGxvd2VkKTtcblxuICAgIGlmIChzdGVwIDw9IDEpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVhbnRpdHlSdWxlcy5hbGlnblRvTXVsdGlwbGUoY2FuZGlkYXRlLCBtaW5BbGxvd2VkLCBtYXhBbGxvd2VkLCBzdGVwKTtcbiAgfVxuXG4gIGNoZWNrU3RvY2soc3RvY2s6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnF1YW50aXR5KCkgPj0gc3RvY2spXG4gICAgICB0aGlzLnF1YW50aXR5LnNldChzdG9jayk7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1NlY3Rpb24oc2VjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Rm9ybUNvbnRhY3QgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb24pO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgb3BlbkNvbnRhY3RNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dDb250YWN0TW9kYWwgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VDb250YWN0TW9kYWwoKSB7XG4gICAgdGhpcy5zaG93Q29udGFjdE1vZGFsID0gZmFsc2U7XG4gIH1cblxuICByZXNldEZvcm0gPSAoKSA9PiB7XG4gICAgdGhpcy5yZXNldCA9ICF0aGlzLnJlc2V0XG4gICAgdGhpcy5zdWNjZXNzID0gdHJ1ZVxuICB9XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFscyBtw6FzIGVmaWNpZW50ZXNcbiAgcHVibGljIGhhc0Rpc2NvdW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RTaWduYWwoKTtcbiAgICBpZiAoIXByb2R1Y3Q/LnNhbGVwcmljZSB8fCAhcHJvZHVjdD8ucHJpY2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFByaWNlID0gcGFyc2VGbG9hdChwcm9kdWN0LnByaWNlLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2UudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gc2FsZVByaWNlID4gMCAmJiBvcmlnaW5hbFByaWNlID4gc2FsZVByaWNlO1xuICB9KTtcblxuICBwdWJsaWMgZGlzY291bnRQZXJjZW50YWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5oYXNEaXNjb3VudCgpKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RTaWduYWwoKTtcbiAgICBpZiAoIXByb2R1Y3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5wcmljZT8udG9TdHJpbmcoKSB8fCAnMCcpO1xuICAgIGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5zYWxlcHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcblxuICAgIGlmIChvcmlnaW5hbFByaWNlIDw9IDAgfHwgc2FsZVByaWNlIDw9IDAgfHwgc2FsZVByaWNlID49IG9yaWdpbmFsUHJpY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdW50ID0gKChvcmlnaW5hbFByaWNlIC0gc2FsZVByaWNlKSAvIG9yaWdpbmFsUHJpY2UpICogMTAwO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGRpc2NvdW50KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAgKiBNw6l0b2RvIHBhcmEgdHJhY2tlYXIgY2FtYmlvcyBlbiBlbCBwcm9kdWN0SWQgeSBmb3J6YXIgbGEgcmVjcmVhY2nDs24gZGVsIGNvbXBvbmVudGUgcmVsYWNpb25hZG9zXG4gICAgKi9cbiAgdHJhY2tCeVByb2R1Y3RJZChpbmRleDogbnVtYmVyLCBwcm9kdWN0SWQ6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHByb2R1Y3RJZDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkZhdm9yaXRlKHByb2R1Y3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCQpIHtcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3dpc2hsaXN0U2VydmljZS5nZXRXaXNobGlzdHNTaWxlbnQodW5kZWZpbmVkLCB0cnVlKS50aGVuKChsaXN0czogYW55W10pID0+IHtcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IGxpc3RzLnNvbWUobGlzdCA9PiBsaXN0Lml0ZW1zPy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdF9jb2RlID09PSBwcm9kdWN0SWQpKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmlzRmF2b3JpdGUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSGVhcnRDbGljayhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXByb2R1Y3Q/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCQpIHtcbiAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCd3aXNobGlzdC1sb2dpbi1yZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnRDb2RlID0gcHJvZHVjdC52YXJpYW50cz8uWzBdPy5jb2RlO1xuICAgIHRoaXMub3Blbldpc2hsaXN0TW9kYWwocHJvZHVjdCwgdmFyaWFudENvZGUpO1xuICB9XG5cbiAgb3Blbldpc2hsaXN0TW9kYWwocHJvZHVjdD86IFByb2R1Y3QsIHZhcmlhbnRDb2RlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFwcm9kdWN0Py5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRXaXNobGlzdFByb2R1Y3QgPSBwcm9kdWN0O1xuICAgIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSA9IHZhcmlhbnRDb2RlID8/IHByb2R1Y3QudmFyaWFudHM/LlswXT8uY29kZTtcblxuICAgIHRoaXMuX3dpc2hsaXN0U2VydmljZS5nZXRXaXNobGlzdHNTaWxlbnQoKS50aGVuKChsaXN0czogYW55W10pID0+IHtcbiAgICAgIHRoaXMud2lzaGxpc3RNb2RhbExpc3RzID0gbGlzdHMgPz8gW107XG4gICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMgPSBuZXcgU2V0KFxuICAgICAgICB0aGlzLndpc2hsaXN0TW9kYWxMaXN0c1xuICAgICAgICAgIC5maWx0ZXIod2lzaGxpc3QgPT4gdGhpcy5pc1Byb2R1Y3RJbldpc2hsaXN0KHdpc2hsaXN0LCBwcm9kdWN0LmlkIS50b1N0cmluZygpKSlcbiAgICAgICAgICAubWFwKHdpc2hsaXN0ID0+IHdpc2hsaXN0LnRva2VuKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRoaXMud2lzaGxpc3RTZWxlY3RlZFRva2Vucy5zaXplID4gMDtcbiAgICAgIHRoaXMuc2hvd1dpc2hsaXN0TW9kYWwgPSB0cnVlO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWJyaWVuZG8gbW9kYWwgZGUgd2lzaGxpc3QnLCBlcnJvcik7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnd2lzaGxpc3QtcHJvZHVjdC1zYXZlLWVycm9yJyk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZVdpc2hsaXN0TW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2lzaGxpc3RDcmVhdGluZyB8fCB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dXaXNobGlzdE1vZGFsID0gZmFsc2U7XG4gICAgdGhpcy53aXNobGlzdE5ld0xpc3ROYW1lID0gJyc7XG4gICAgdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1ZhcmlhbnRDb2RlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdG9nZ2xlV2lzaGxpc3RTZWxlY3Rpb24od2lzaGxpc3Q6IGFueSwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQcm9kdWN0ID0gdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdDtcbiAgICBpZiAoIWN1cnJlbnRQcm9kdWN0Py5pZCB8fCAhd2lzaGxpc3Q/LnRva2VuIHx8IHRoaXMud2lzaGxpc3RDcmVhdGluZyB8fCB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuaGFzKHdpc2hsaXN0LnRva2VuKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0gd2lzaGxpc3QudG9rZW47XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuaGFzKHRva2VuKTtcbiAgICBpZiAoY2hlY2tlZCA9PT0gd2FzU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuYWRkKHRva2VuKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGNoZWNrZWRcbiAgICAgID8gdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLmFkZFByb2R1Y3RTaWxlbnQoY3VycmVudFByb2R1Y3QuaWQudG9TdHJpbmcoKSwgdG9rZW4sIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSlcbiAgICAgIDogdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLnJlbW92ZVByb2R1Y3RTaWxlbnQodG9rZW4sIGN1cnJlbnRQcm9kdWN0LmlkLnRvU3RyaW5nKCksIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSk7XG5cbiAgICBhY3Rpb24udGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3dpc2hsaXN0LXByb2R1Y3Qtc2F2ZWQtaW4tbGlzdCcsIHsgbmFtZTogZ2V0V2lzaGxpc3REaXNwbGF5TmFtZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCB3aXNobGlzdCkgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZC1mcm9tLXdpc2hsaXN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRoaXMud2lzaGxpc3RTZWxlY3RlZFRva2Vucy5zaXplID4gMDtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjdHVhbGl6YW5kbyB3aXNobGlzdCcsIGVycm9yKTtcbiAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCd3aXNobGlzdC1wcm9kdWN0LXNhdmUtZXJyb3InKTtcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMud2lzaGxpc3RVcGRhdGluZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlTGlzdEFuZFNhdmVQcm9kdWN0KG5hbWU6IHN0cmluZywgcHJvZHVjdD86IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UHJvZHVjdCA9IHByb2R1Y3QgPz8gdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdDtcbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IG5hbWUudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZE5hbWUgfHwgIWN1cnJlbnRQcm9kdWN0Py5pZCB8fCB0aGlzLndpc2hsaXN0Q3JlYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndpc2hsaXN0Q3JlYXRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLmNyZWF0ZVdpc2hsaXN0U2lsZW50KHRyaW1tZWROYW1lKS50aGVuKChuZXdXaXNobGlzdDogYW55KSA9PiB7XG4gICAgICBjb25zdCBjcmVhdGVkV2lzaGxpc3QgPSB7XG4gICAgICAgIC4uLm5ld1dpc2hsaXN0LFxuICAgICAgICBuYW1lOiBuZXdXaXNobGlzdD8ubmFtZSB8fCB0cmltbWVkTmFtZSxcbiAgICAgICAgdG9rZW46IG5ld1dpc2hsaXN0Py50b2tlblxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3dpc2hsaXN0U2VydmljZS5hZGRQcm9kdWN0U2lsZW50KGN1cnJlbnRQcm9kdWN0LmlkIS50b1N0cmluZygpLCBjcmVhdGVkV2lzaGxpc3QudG9rZW4sIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlZFdpc2hsaXN0KTtcbiAgICB9KS50aGVuKChjcmVhdGVkV2lzaGxpc3Q6IGFueSkgPT4ge1xuICAgICAgdGhpcy53aXNobGlzdE1vZGFsTGlzdHMgPSBbLi4udGhpcy53aXNobGlzdE1vZGFsTGlzdHMsIGNyZWF0ZWRXaXNobGlzdF07XG4gICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuYWRkKGNyZWF0ZWRXaXNobGlzdC50b2tlbik7XG4gICAgICB0aGlzLndpc2hsaXN0TmV3TGlzdE5hbWUgPSAnJztcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRydWU7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnd2lzaGxpc3QtcHJvZHVjdC1zYXZlZC1pbi1saXN0JywgeyBuYW1lOiBnZXRXaXNobGlzdERpc3BsYXlOYW1lKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsIGNyZWF0ZWRXaXNobGlzdCkgfSk7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhbmRvIHdpc2hsaXN0JywgZXJyb3IpO1xuICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3dpc2hsaXN0LXByb2R1Y3Qtc2F2ZS1lcnJvcicpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy53aXNobGlzdENyZWF0aW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRXaXNobGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd3aXNobGlzdC1kZWZhdWx0LW5hbWUnKTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZCAmJiB0cmFuc2xhdGVkICE9PSAnd2lzaGxpc3QtZGVmYXVsdC1uYW1lJyA/IHRyYW5zbGF0ZWQgOiAnTGlzdGEgZGUgZmF2b3JpdG9zJztcbiAgfVxuXG4gIHByaXZhdGUgaXNQcm9kdWN0SW5XaXNobGlzdCh3aXNobGlzdDogYW55LCBwcm9kdWN0Q29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdpc2hsaXN0Py5pdGVtcz8uc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLnByb2R1Y3RfY29kZSA9PT0gcHJvZHVjdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0ZWEgZWwgZXN0YWRvIGRlbCBtb2RhbCBkZSByZXNlw7Fhc1xuICAgKi9cbiAgcHJpdmF0ZSByZXNldFJldmlld01vZGFsKCk6IHZvaWQge1xuICAgIC8vIFNpIGV4aXN0ZSB1biBtw6l0b2RvIHJlc2V0Rm9ybSBkZWwgY29tcG9uZW50ZSBwYWRyZSwgbGxhbWFybG9cbiAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkucmVzZXRGb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAodGhpcyBhcyBhbnkpLnJlc2V0Rm9ybSgpO1xuICAgIH1cblxuICAgIC8vIFNpIGV4aXN0ZSB1bmEgcHJvcGllZGFkIHN1Y2Nlc3MsIHJlc2V0ZWFybGFcbiAgICBpZiAoJ3N1Y2Nlc3MnIGluIHRoaXMpIHtcbiAgICAgICh0aGlzIGFzIGFueSkuc3VjY2VzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiIl19
765
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1kZXRhaWwtZWMvcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQXFCLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFD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Qy9ELElBQUksT0FBUSxJQUFZLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2pELElBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO3dHQTcyQlUsd0JBQXdCOzRGQUF4Qix3QkFBd0Isa1NDdERyQyxFQUFBOzs0RkRzRGEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQzt3REFLcEIsWUFBWTtzQkFBaEQsU0FBUzt1QkFBQyxjQUFjO2dCQUNjLGNBQWM7c0JBQXBELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIEluamVjdG9yLCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFyYW1ldGVyc1NlcnZpY2UsIENoYW5uZWxTZXJ2aWNlLCBDYXJ0U2VydmljZSwgUHJpY2VWaXNpYmlsaXR5U2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBXcml0YWJsZVNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1NYXAsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlLCBTZW9TZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIFF1YW50aXR5UnVsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCAqIGFzIGhlIGZyb20gJ2hlJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgVmFyaWFudHNFY0NvbXBvbmVudCB9IGZyb20gJy4uL3ZhcmlhbnRzLWVjL3ZhcmlhbnRzLWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0Q29tbWVudEVjQ29tcG9uZW50IH0gZnJvbSAnLi4vd2lkZ2V0cy1lYyc7XG5pbXBvcnQgdHlwZSB7IEVtYmxhRXZlbnRUeXBlLCBFbWJsYU9wdGlvbnNUeXBlIH0gZnJvbSAnZW1ibGEtY2Fyb3VzZWwtYW5ndWxhcic7XG5pbXBvcnQge1xuICBjcmVhdGVFbWJsYUVjT3B0aW9ucyBhcyBjcmVhdGVFbWJsYU9wdGlvbnMsXG4gIERFRkFVTFRfRU1CTEFfRVZFTlRTLFxuICBFbWJsYUNhcm91c2VsRWNDb21wb25lbnQsXG59IGZyb20gJy4uL2VtYmxhLWNhcm91c2VsLWVjJztcbmltcG9ydCB7IFdpc2hsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzL3dpc2hsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgV2lzaGxpc3RWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzL3dpc2hsaXN0LXZpc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBnZXRXaXNobGlzdERpc3BsYXlOYW1lIH0gZnJvbSAnLi4vd2lzaGxpc3QtbW9kYWwtZWMvd2lzaGxpc3QtbW9kYWwtZWMudXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdpc2hsaXN0VmFyaWFudENvZGUocHJvZHVjdDogUHJvZHVjdCB8IG51bGwgfCB1bmRlZmluZWQsIHNlbGVjdGVkVmFyaWFudENvZGU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFyaWFudHMgPSBBcnJheS5pc0FycmF5KHByb2R1Y3Q/LnZhcmlhbnRzKSA/IHByb2R1Y3QudmFyaWFudHMgOiBbXTtcblxuICBpZiAoc2VsZWN0ZWRWYXJpYW50Q29kZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFyaWFudCA9IHZhcmlhbnRzLmZpbmQoKHZhcmlhbnQ6IGFueSkgPT5cbiAgICAgIFN0cmluZyh2YXJpYW50Py5jb2RlID8/ICcnKSA9PT0gU3RyaW5nKHNlbGVjdGVkVmFyaWFudENvZGUpIHx8XG4gICAgICBTdHJpbmcodmFyaWFudD8uaWQgPz8gJycpID09PSBTdHJpbmcoc2VsZWN0ZWRWYXJpYW50Q29kZSkgfHxcbiAgICAgIFN0cmluZyh2YXJpYW50Py52YXJpYW50X2lkID8/ICcnKSA9PT0gU3RyaW5nKHNlbGVjdGVkVmFyaWFudENvZGUpLFxuICAgICk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpYW50Py5jb2RlID8gU3RyaW5nKHNlbGVjdGVkVmFyaWFudC5jb2RlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB2YXJpYW50cy5sZW5ndGggPT09IDEgJiYgdmFyaWFudHNbMF0/LmNvZGUgPyBTdHJpbmcodmFyaWFudHNbMF0uY29kZSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpc2hsaXN0SXRlbUZvclZhcmlhbnQoaXRlbTogYW55LCBwcm9kdWN0Q29kZTogc3RyaW5nLCB2YXJpYW50Q29kZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gU3RyaW5nKGl0ZW0/LnByb2R1Y3RfY29kZSA/PyAnJykgPT09IFN0cmluZyhwcm9kdWN0Q29kZSkgJiZcbiAgICBTdHJpbmcoaXRlbT8udmFyaWFudF9jb2RlID8/ICcnKSA9PT0gU3RyaW5nKHZhcmlhbnRDb2RlID8/ICcnKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZGV0YWlsLWVjJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1ZhcmlhbnRzRWNDb21wb25lbnQsIFByb2R1Y3RDb21tZW50RWNDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWFpbkNhcm91c2VsJykgcHJvdGVjdGVkIG1haW5DYXJvdXNlbD86IEVtYmxhQ2Fyb3VzZWxFY0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndGh1bWJzQ2Fyb3VzZWwnKSBwcm90ZWN0ZWQgdGh1bWJzQ2Fyb3VzZWw/OiBFbWJsYUNhcm91c2VsRWNDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKVxuICBwcml2YXRlIF9vcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoT3B0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UgPSBpbmplY3QoUHJvZHVjdERldGFpbFNlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9kdWN0U2VydmljZTogUHJvZHVjdHNTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RzU2VydmljZSk7XG4gIHByaXZhdGUgX2FjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG4gIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG4gIHByaXZhdGUgX3Nlb1NlcnZpY2U6IFNlb1NlcnZpY2UgPSBpbmplY3QoU2VvU2VydmljZSk7XG4gIHByaXZhdGUgcGFyYW1ldGVyc1NlcnZpY2UgPSBpbmplY3QoUGFyYW1ldGVyc1NlcnZpY2UpO1xuICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcblxuICBwcml2YXRlIF93aXNobGlzdFNlcnZpY2U6IFdpc2hsaXN0U2VydmljZSA9IGluamVjdChXaXNobGlzdFNlcnZpY2UpO1xuICBwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgd2lzaGxpc3RWaXNpYmlsaXR5ID0gaW5qZWN0KFdpc2hsaXN0VmlzaWJpbGl0eVNlcnZpY2UpO1xuXG4gIHB1YmxpYyBwcm9kdWN0JDogT2JzZXJ2YWJsZTxQcm9kdWN0IHwgbnVsbD4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5wcm9kdWN0JDtcbiAgcHVibGljIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5vcHRpb25zJDtcbiAgcHVibGljIGRhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5hc3NvY2lhdGVkRGF0YSQ7XG4gIHByaXZhdGUgcm91dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlcnlQYXJhbVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHByb2R1Y3RTdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwcm9kdWN0Q29tbWVudFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjaGFubmVsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1YW50aXR5Qm9vdHN0cmFwU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBjdXJyZW50UHJvZHVjdElkPzogc3RyaW5nO1xuICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHB1YmxpYyBtZWRpYVVybCA9IHRoaXMuX2NvbnN0cy5tZWRpYVVybCgpO1xuICBwdWJsaWMgY29kZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBzaG93Rm9ybUNvbnRhY3QgPSBmYWxzZTtcbiAgcHVibGljIHNob3dDb250YWN0TW9kYWwgPSBmYWxzZTtcbiAgcHVibGljIHNob3dSZXZpZXdzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2F0ZWdvcmllczogYW55W10gPSBbXTtcbiAgcHVibGljIHNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VyczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpY2VWaXNpYmlsaXR5ID0gaW5qZWN0KFByaWNlVmlzaWJpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgZW1ibGFFdmVudHM6IEVtYmxhRXZlbnRUeXBlW10gPSBbLi4uREVGQVVMVF9FTUJMQV9FVkVOVFMsICdyZUluaXQnXTtcbiAgcHVibGljIHJlYWRvbmx5IG1haW5FbWJsYU9wdGlvbnM6IEVtYmxhT3B0aW9uc1R5cGUgPSBjcmVhdGVFbWJsYU9wdGlvbnMoe1xuICAgIGxvb3A6IGZhbHNlLFxuICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IHRodW1ic0VtYmxhT3B0aW9uczogRW1ibGFPcHRpb25zVHlwZSA9IGNyZWF0ZUVtYmxhT3B0aW9ucyh7XG4gICAgbG9vcDogZmFsc2UsXG4gICAgZHJhZ0ZyZWU6IHRydWUsXG4gICAgY29udGFpblNjcm9sbDogJ2tlZXBTbmFwcycsXG4gICAgc2xpZGVzVG9TY3JvbGw6IDEsXG4gIH0pO1xuICBwdWJsaWMgbWFpblNlbGVjdGVkSW5kZXggPSAwO1xuICBwdWJsaWMgY2FuTWFpblNjcm9sbFByZXYgPSBmYWxzZTtcbiAgcHVibGljIGNhbk1haW5TY3JvbGxOZXh0ID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5UaHVtYnNTY3JvbGxQcmV2ID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5UaHVtYnNTY3JvbGxOZXh0ID0gZmFsc2U7XG4gIHB1YmxpYyB0aHVtYnNOYXZpZ2F0aW9uUmVhZHkgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRQcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21tZW50cyA9ICcnO1xuICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRQaWN0dXJlczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVmFyaWFudEZyb21RdWVyeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBhcHBsaWVkVmFyaWFudEZyb21RdWVyeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBjdXJyZW50T3B0aW9uczogYW55W10gPSBbXTtcblxuICBwdWJsaWMgcXVhbnRpdHk6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMSk7XG4gIHB1YmxpYyBpc0FkZGluZ1RvQ2FydDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgcXVhbnRpdHlJbnB1dCA9ICcxJztcbiAgcHVibGljIHBhcmFtZXRlcnMkOiBPYnNlcnZhYmxlPFBhcmFtZXRlcltdIHwgbnVsbD4gPSB0aGlzLnBhcmFtZXRlcnNTZXJ2aWNlLmdldFBhcmFtZXRlcnMoKTtcbiAgcHVibGljIGhhc1BhcmFtcyA9IHRoaXMucGFyYW1ldGVyc1NlcnZpY2UuaGFzUGFyYW1zO1xuICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcblxuICBwcml2YXRlIHByb2R1Y3RTaWduYWwgPSBzaWduYWw8UHJvZHVjdCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHF1YW50aXR5UnVsZXM6IFF1YW50aXR5UnVsZXNTZXJ2aWNlID0gaW5qZWN0KFF1YW50aXR5UnVsZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsYXN0UXVhbnRpdHlCb290c3RyYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBpc0Zhdm9yaXRlID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93V2lzaGxpc3RNb2RhbCA9IGZhbHNlO1xuICBwdWJsaWMgd2lzaGxpc3RNb2RhbExpc3RzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgd2lzaGxpc3RTZWxlY3RlZFRva2VucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgd2lzaGxpc3RVcGRhdGluZ1Rva2VucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgd2lzaGxpc3RDcmVhdGluZyA9IGZhbHNlO1xuICBwdWJsaWMgd2lzaGxpc3ROZXdMaXN0TmFtZSA9ICcnO1xuICBwdWJsaWMgd2lzaGxpc3RzJCA9IHRoaXMuX3dpc2hsaXN0U2VydmljZS53aXNobGlzdHMkO1xuICBwcml2YXRlIF9wZW5kaW5nVmFyaWFudENvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfY3VycmVudFdpc2hsaXN0UHJvZHVjdDogUHJvZHVjdCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIExhIGNhcmdhIGluaWNpYWwgZGVsIHByb2R1Y3RvIHNlIG1hbmVqYSBlbiBuZ09uSW5pdFxuICAgIHRoaXMuY2hhbm5lbFN1YnNjcmlwdGlvbiA9IHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkLnN1YnNjcmliZShjaGFubmVsID0+IHtcbiAgICAgIHRoaXMuc2hvd1Jldmlld3MgPSBjaGFubmVsLnNob3dSZXZpZXdzO1xuICAgICAgdGhpcy5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgPSAhIWNoYW5uZWwuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzO1xuICAgICAgdGhpcy5oaWRlUHJpY2VzID0gISFjaGFubmVsLmhpZGVQcmljZXM7XG4gICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gISFjaGFubmVsLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb3B0aW9uc1NlcnZpY2UuZ2V0Q2F0ZWdvcmllcygpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzID0gcmVzO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvZHVjdCQuc3Vic2NyaWJlKHByb2R1Y3QgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0U2lnbmFsLnNldChwcm9kdWN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRXaXNobGlzdFByb2R1Y3QgPSBwcm9kdWN0O1xuXG4gICAgICBpZiAocHJvZHVjdD8uaWQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoV2lzaGxpc3RGYXZvcml0ZVN0YXRlKHByb2R1Y3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0Zhdm9yaXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtTWFwKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudEZyb21RdWVyeSA9IHBhcmFtcy5nZXQoJ3ZhcmlhbnQnKTtcbiAgICAgIHRoaXMuYXBwbGllZFZhcmlhbnRGcm9tUXVlcnkgPSBudWxsO1xuICAgICAgdGhpcy5hcHBseVZhcmlhbnRGcm9tUXVlcnkoKTtcbiAgICAgIHRoaXMucmVmcmVzaFdpc2hsaXN0RmF2b3JpdGVTdGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gU3VzY3JpYmlyc2UgYSBsb3MgY2FtYmlvcyBkZSBwYXLDoW1ldHJvcyBkZSBsYSBydXRhXG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvZHVjdElkID0gcGFyYW1zWydpZCddO1xuICAgICAgaWYgKG5ld1Byb2R1Y3RJZCAmJiBuZXdQcm9kdWN0SWQgIT09IHRoaXMuY3VycmVudFByb2R1Y3RJZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0SWQgPSBuZXdQcm9kdWN0SWQ7XG4gICAgICAgIHRoaXMuY29kZSA9IG5ld1Byb2R1Y3RJZDtcbiAgICAgICAgdGhpcy5jb21tZW50cyA9ICcnO1xuXG4gICAgICAgIC8vIFNjcm9sbCBhbCBpbmljaW8gZGUgbGEgcMOhZ2luYSBjdWFuZG8gY2FtYmlhIGVsIHByb2R1Y3RvXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbCByZXNldGVvIGFob3JhIHNlIGhhY2UgZW4gZWwgc2VydmljaW8gYW50ZXMgZGUgY2FyZ2FyXG4gICAgICAgIHRoaXMuX3Byb2R1Y3REZXRhaWxTZXJ2aWNlLmxvYWRQcm9kdWN0KHRoaXMuY29kZSk7XG4gICAgICAgIHRoaXMucmVzZXRSZXZpZXdNb2RhbCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9kdWN0JC5zdWJzY3JpYmUocHJvZHVjdCA9PiB7XG4gICAgICBpZiAocHJvZHVjdCkge1xuICAgICAgICB0aGlzLnVwZGF0ZU1ldGFUYWdzKHByb2R1Y3QpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9kdWN0U3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnByb2R1Y3QkXG4gICAgICAucGlwZShmaWx0ZXIoKHByb2R1Y3QpOiBwcm9kdWN0IGlzIFByb2R1Y3QgPT4gISFwcm9kdWN0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHByb2R1Y3QpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZHVjdCA9IHByb2R1Y3Q7XG4gICAgICAgIHRoaXMuY3VycmVudE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UGljdHVyZXMgPSBBcnJheS5pc0FycmF5KHByb2R1Y3QucGljdHVyZXNkZWZhdWx0KVxuICAgICAgICAgID8gWy4uLnByb2R1Y3QucGljdHVyZXNkZWZhdWx0XVxuICAgICAgICAgIDogcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRcbiAgICAgICAgICAgID8gW3Byb2R1Y3QucGljdHVyZXNkZWZhdWx0IGFzIHN0cmluZ11cbiAgICAgICAgICAgIDogW107XG4gICAgICAgIHRoaXMuYXBwbHlWYXJpYW50RnJvbVF1ZXJ5KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMub3B0aW9ucyRcbiAgICAgIC5waXBlKGZpbHRlcigob3B0aW9uczogYW55KSA9PiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkpXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb25zOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hcHBseVZhcmlhbnRGcm9tUXVlcnkoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5wcm9kdWN0JFxuICAgICAgLnBpcGUoZmlsdGVyKChwcm9kdWN0KTogcHJvZHVjdCBpcyBQcm9kdWN0ID0+ICEhcHJvZHVjdCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEVtYmxhR2FsbGVyeVN0YXRlKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucHJvZHVjdENvbW1lbnRTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnByb2R1Y3QkLCB0aGlzLmRhdGEkLCB0aGlzLl9jYXJ0U2VydmljZS5jYXJ0SXRlbXMkLCB0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJF0pXG4gICAgICAuc3Vic2NyaWJlKChbcHJvZHVjdCwgZGF0YSwgaXRlbXMsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSAhIWNoYW5uZWw/LmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlO1xuICAgICAgICB0aGlzLnN5bmNQcm9kdWN0Q29tbWVudEZyb21DYXJ0KHByb2R1Y3QsIGRhdGEsIGl0ZW1zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5xdWFudGl0eUJvb3RzdHJhcFN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucHJvZHVjdCQsIHRoaXMuZGF0YSRdKVxuICAgICAgLnN1YnNjcmliZSgoW3Byb2R1Y3QsIGRhdGFdKSA9PiB7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwUXVhbnRpdHlGcm9tTXVsdGlwbGUocHJvZHVjdCwgZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb2R1Y3RTdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb2R1Y3RDb21tZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbm5lbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnF1YW50aXR5Qm9vdHN0cmFwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uTWFpbkNhcm91c2VsU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVNYWluTmF2aWdhdGlvblN0YXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25UaHVtYnNDYXJvdXNlbFN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGh1bWJzTmF2aWdhdGlvblN0YXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25NYWluU2VsZWN0ZWRDaGFuZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWFpblNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRodW1ic0Nhcm91c2VsPy5zY3JvbGxUbyhpbmRleCk7XG4gICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQcm9kdWN0SW1hZ2VzID0gKG9wdGlvblZhbHVlOiBzdHJpbmcsIG9wdGlvbkNvZGU6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50UHJvZHVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnQgPSB0aGlzLmN1cnJlbnRQcm9kdWN0LnZhcmlhbnRzPy5maW5kKChpdGVtOiBhbnkpID0+XG4gICAgICBpdGVtLm9wdGlvbnM/LnNvbWUoKG9wdGlvbjogYW55KSA9PiBvcHRpb24/LltvcHRpb25Db2RlXSA9PT0gb3B0aW9uVmFsdWUpLFxuICAgICk7XG5cbiAgICBjb25zdCBwaWN0dXJlcyA9IEFycmF5LmlzQXJyYXkodmFyaWFudD8uaW1hZ2VzKSAmJiB2YXJpYW50LmltYWdlcy5sZW5ndGggPiAwXG4gICAgICA/IFsuLi52YXJpYW50LmltYWdlc11cbiAgICAgIDogWy4uLnRoaXMuZGVmYXVsdFBpY3R1cmVzXTtcblxuICAgIGlmICghcGljdHVyZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UHJvZHVjdC5waWN0dXJlc2RlZmF1bHQgPSBwaWN0dXJlcztcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVmcmVzaEdhbGxlcnkoKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgYXBwbHlWYXJpYW50RnJvbVF1ZXJ5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jdXJyZW50UHJvZHVjdCB8fCAhdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jdXJyZW50T3B0aW9ucykgfHwgIXRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZFZhcmlhbnRGcm9tUXVlcnkgPT09IHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudCA9IHRoaXMuY3VycmVudFByb2R1Y3QudmFyaWFudHM/LmZpbmQoKGl0ZW06IGFueSkgPT5cbiAgICAgIGl0ZW0/LmNvZGUgPT09IHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5IHx8XG4gICAgICBpdGVtPy5pZCA9PT0gdGhpcy5zZWxlY3RlZFZhcmlhbnRGcm9tUXVlcnkgfHxcbiAgICAgIGl0ZW0/LnZhcmlhbnRfaWQgPT09IHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5LFxuICAgICk7XG5cbiAgICBpZiAoIXZhcmlhbnQ/Lm9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnRPcHRpb25zOiBBcnJheTx7IG9wdGlvbkNvZGU6IHN0cmluZzsgb3B0aW9uVmFsdWU6IGFueSB9PiA9IHZhcmlhbnQub3B0aW9uc1xuICAgICAgLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IG9wdGlvbiAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JylcbiAgICAgIC5mbGF0TWFwKChvcHRpb246IGFueSkgPT4gT2JqZWN0LmtleXMob3B0aW9uKS5tYXAoKG9wdGlvbkNvZGUpID0+ICh7IG9wdGlvbkNvZGUsIG9wdGlvblZhbHVlOiBvcHRpb25bb3B0aW9uQ29kZV0gfSkpKTtcblxuICAgIGNvbnN0IG9wdGlvbnNSZWFkeSA9IHZhcmlhbnRPcHRpb25zLmV2ZXJ5KCh7IG9wdGlvbkNvZGUsIG9wdGlvblZhbHVlIH06IHsgb3B0aW9uQ29kZTogc3RyaW5nOyBvcHRpb25WYWx1ZTogYW55IH0pID0+XG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zLnNvbWUoKG9wdGlvbjogYW55KSA9PlxuICAgICAgICBvcHRpb24/LmNvZGUgPT09IG9wdGlvbkNvZGUgJiZcbiAgICAgICAgb3B0aW9uPy52YWx1ZXM/LnNvbWUoKHZhbHVlOiBhbnkpID0+IHZhbHVlPy5uYW1lID09PSBvcHRpb25WYWx1ZSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBpZiAoIW9wdGlvbnNSZWFkeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZFZhcmlhbnRGcm9tUXVlcnkgPSB0aGlzLnNlbGVjdGVkVmFyaWFudEZyb21RdWVyeTtcblxuICAgIGZvciAoY29uc3QgeyBvcHRpb25Db2RlLCBvcHRpb25WYWx1ZSB9IG9mIHZhcmlhbnRPcHRpb25zKSB7XG4gICAgICB0aGlzLl9wcm9kdWN0RGV0YWlsU2VydmljZS5zZXRPcHRpb24ob3B0aW9uQ29kZSwgb3B0aW9uVmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yT3B0aW9uID0gdmFyaWFudC5vcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiBvcHRpb24/LkNPTE9SKTtcblxuICAgIGlmIChjb2xvck9wdGlvbj8uQ09MT1IpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZHVjdEltYWdlcyhjb2xvck9wdGlvbi5DT0xPUiwgJ0NPTE9SJyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhcmlhbnQuaW1hZ2VzKSAmJiB2YXJpYW50LmltYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCA9IFsuLi52YXJpYW50LmltYWdlc107XG4gICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5yZWZyZXNoR2FsbGVyeSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoR2FsbGVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RW1ibGFHYWxsZXJ5U3RhdGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tYWluQ2Fyb3VzZWw/LmVtYmxhUmVmPy5yZUluaXQoKTtcbiAgICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LmVtYmxhUmVmPy5yZUluaXQoKTtcbiAgICAgIHRoaXMubWFpbkNhcm91c2VsPy5zY3JvbGxUbygwKTtcbiAgICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LnNjcm9sbFRvKDApO1xuICAgICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRodW1iQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWFpbkNhcm91c2VsPy5zY3JvbGxUbyhpbmRleCk7XG4gICAgdGhpcy5tYWluU2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LnNjcm9sbFRvKGluZGV4KTtcbiAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbE1haW5QcmV2KCk6IHZvaWQge1xuICAgIHRoaXMubWFpbkNhcm91c2VsPy5zY3JvbGxQcmV2KCk7XG4gICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxNYWluTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1haW5DYXJvdXNlbD8uc2Nyb2xsTmV4dCgpO1xuICAgIHRoaXMucXVldWVOYXZpZ2F0aW9uU3RhdGVTeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVGh1bWJzUHJldigpOiB2b2lkIHtcbiAgICB0aGlzLnRodW1ic0Nhcm91c2VsPy5zY3JvbGxQcmV2KCk7XG4gICAgdGhpcy5xdWV1ZU5hdmlnYXRpb25TdGF0ZVN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUaHVtYnNOZXh0KCk6IHZvaWQge1xuICAgIHRoaXMudGh1bWJzQ2Fyb3VzZWw/LnNjcm9sbE5leHQoKTtcbiAgICB0aGlzLnF1ZXVlTmF2aWdhdGlvblN0YXRlU3luYygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RW1ibGFHYWxsZXJ5U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5tYWluU2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgdGhpcy50aHVtYnNOYXZpZ2F0aW9uUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLmNhbk1haW5TY3JvbGxQcmV2ID0gZmFsc2U7XG4gICAgdGhpcy5jYW5NYWluU2Nyb2xsTmV4dCA9IGZhbHNlO1xuICAgIHRoaXMuY2FuVGh1bWJzU2Nyb2xsUHJldiA9IGZhbHNlO1xuICAgIHRoaXMuY2FuVGh1bWJzU2Nyb2xsTmV4dCA9IGZhbHNlO1xuICAgIHRoaXMucXVldWVOYXZpZ2F0aW9uU3RhdGVTeW5jKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcXVldWVOYXZpZ2F0aW9uU3RhdGVTeW5jKCk6IHZvaWQge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTWFpbk5hdmlnYXRpb25TdGF0ZSgpO1xuICAgICAgdGhpcy51cGRhdGVUaHVtYnNOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVNYWluTmF2aWdhdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGFwaSA9IHRoaXMubWFpbkNhcm91c2VsPy5lbWJsYVJlZj8uZW1ibGFBcGk7XG5cbiAgICB0aGlzLmNhbk1haW5TY3JvbGxQcmV2ID0gQm9vbGVhbihhcGk/LmNhblNjcm9sbFByZXY/LigpKTtcbiAgICB0aGlzLmNhbk1haW5TY3JvbGxOZXh0ID0gQm9vbGVhbihhcGk/LmNhblNjcm9sbE5leHQ/LigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVUaHVtYnNOYXZpZ2F0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgYXBpID0gdGhpcy50aHVtYnNDYXJvdXNlbD8uZW1ibGFSZWY/LmVtYmxhQXBpO1xuXG4gICAgaWYgKCFhcGkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRodW1ic05hdmlnYXRpb25SZWFkeSA9IHRydWU7XG4gICAgdGhpcy5jYW5UaHVtYnNTY3JvbGxQcmV2ID0gQm9vbGVhbihhcGkuY2FuU2Nyb2xsUHJldj8uKCkpO1xuICAgIHRoaXMuY2FuVGh1bWJzU2Nyb2xsTmV4dCA9IEJvb2xlYW4oYXBpLmNhblNjcm9sbE5leHQ/LigpKTtcbiAgfVxuXG4gIHVwZGF0ZU1ldGFUYWdzKHByb2R1Y3Q6IFByb2R1Y3QpIHtcbiAgICBjb25zdCBkZXNjcmlwY2lvbkxpbXBpYSA9IGhlLmRlY29kZShwcm9kdWN0LmRlc2NyaXB0aW9uIHx8ICcnKVxuICAgICAgLnJlcGxhY2UoLzxzdHlsZVtePl0qPltcXHNcXFNdKj88XFwvc3R5bGU+L2dpLCAnJylcbiAgICAgIC5yZXBsYWNlKC88c2NyaXB0W14+XSo+W1xcc1xcU10qPzxcXC9zY3JpcHQ+L2dpLCAnJylcbiAgICAgIC5yZXBsYWNlKC88W14+XSo+L2csICcgJylcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgIC50cmltKCk7XG4gICAgY29uc3QgaW1hZ2VVcmwgPSB0aGlzLl9jb25zdHMuZ2V0QWJzb2x1dGVJbWFnZVVybChBcnJheS5pc0FycmF5KHByb2R1Y3QucGljdHVyZXNkZWZhdWx0KSA/IHByb2R1Y3QucGljdHVyZXNkZWZhdWx0WzBdIDogcHJvZHVjdC5waWN0dXJlc2RlZmF1bHQpO1xuICAgIGNvbnN0IHNpdGVOYW1lID0gdGhpcy5fc2VvU2VydmljZS5nZXRTaXRlTmFtZSgpO1xuICAgIGNvbnN0IHRpdGxlID0gcHJvZHVjdC5uYW1lID8gYCR7cHJvZHVjdC5uYW1lfSB8ICR7c2l0ZU5hbWV9YCA6IGBQcm9kdWN0byB8ICR7c2l0ZU5hbWV9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGRlc2NyaXBjaW9uTGltcGlhIHx8ICdGaWNoYSBkZSBwcm9kdWN0byc7XG5cbiAgICB0aGlzLl9zZW9TZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcbiAgICB0aGlzLl9zZW9TZXJ2aWNlLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLl9zZW9TZXJ2aWNlLnNldE9nSW1hZ2UoaW1hZ2VVcmwgfHwgJycpO1xuICAgIHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dUeXBlKCdwcm9kdWN0Jyk7XG4gICAgdGhpcy5fc2VvU2VydmljZS5zZXRDYW5vbmljYWwodGhpcy5fY29uc3RzLmdldEZyb250ZW5kVXJsKCkgKyB0aGlzLl9yb3V0ZXIudXJsKTtcbiAgfVxuICBkZWNvZGVIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHR4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICB0eHQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiB0eHQudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBodG1sO1xuICB9XG4gIHNhbml0aXplZEh0bWwoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIGNvbnN0IGRlY29kZWRIdG1sID0gdGhpcy5kZWNvZGVIdG1sKGh0bWwgfHwgJycpO1xuICAgIGNvbnN0IGNsZWFuZWRIdG1sID0gZGVjb2RlZEh0bWwucmVwbGFjZShcbiAgICAgIC9hbGxvdz0oWydcIl0pKFteJ1wiXSopXFwxL2dpLFxuICAgICAgKF9tYXRjaCwgcXVvdGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHZhbHVlXG4gICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmxlbmd0aCA+IDAgJiYgaXRlbS50b0xvd2VyQ2FzZSgpICE9PSAnd2ViLXNoYXJlJyk7XG5cbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmxlbmd0aCA/IGBhbGxvdz0ke3F1b3RlfSR7ZmVhdHVyZXMuam9pbignOyAnKX0ke3F1b3RlfWAgOiAnJztcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY2xlYW5lZEh0bWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN3aXBlckluc3RhbmNlKHN3aXBlclJlZjogYW55KTogYW55IHwgbnVsbCB7XG4gICAgY29uc3Qgc3dpcGVyRWwgPSBzd2lwZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFzd2lwZXJFbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFzd2lwZXJFbC5zd2lwZXIgJiYgdHlwZW9mIHN3aXBlckVsLmluaXRpYWxpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN3aXBlckVsLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpcGVyRWwuc3dpcGVyIHx8IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2xpZGVTd2lwZXIoc3dpcGVyUmVmOiBhbnksIGRpcmVjdGlvbjogJ3ByZXYnIHwgJ25leHQnLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcy5nZXRTd2lwZXJJbnN0YW5jZShzd2lwZXJSZWYpO1xuICAgIGlmICghc3dpcGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNob3VsZFVzZUhvdmVySW50ZXJhY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93Lm1hdGNoTWVkaWEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoJyhob3ZlcjogaG92ZXIpIGFuZCAocG9pbnRlcjogZmluZSknKS5tYXRjaGVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsYW1wSW5kZXgoaW5kZXg6IG51bWJlciwgdG90YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0b3RhbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGluZGV4LCAwKSwgdG90YWwgLSAxKTtcbiAgfVxuXG4gIGFkZFRvQ2FydCgpIHtcbiAgICBpZiAodGhpcy5pc0FkZGluZ1RvQ2FydCgpIHx8IHRoaXMucXVhbnRpdHkoKSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0FkZGluZ1RvQ2FydC5zZXQodHJ1ZSk7XG4gICAgY29uc3QgY29tbWVudHMgPSB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID8gdGhpcy5ub3JtYWxpemVQcm9kdWN0Q29tbWVudCh0aGlzLmNvbW1lbnRzKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGFydGVkID0gdGhpcy5fcHJvZHVjdERldGFpbFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMucXVhbnRpdHkoKSwgdW5kZWZpbmVkLCBjb21tZW50cyk7XG5cbiAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuaXNBZGRpbmdUb0NhcnQuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jYXJ0U2VydmljZS5sb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigobG9hZGluZykgPT4gIWxvYWRpbmcpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNBZGRpbmdUb0NhcnQuc2V0KGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UXVhbnRpdHlNaW4oZGF0YTogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xdWFudGl0eVJ1bGVzLmdldFF1YW50aXR5TWluKHRoaXMucmVzb2x2ZVF1YW50aXR5UHJvZHVjdChkYXRhKSk7XG4gIH1cblxuICBnZXRRdWFudGl0eVN0ZXAoZGF0YTogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xdWFudGl0eVJ1bGVzLmdldFF1YW50aXR5U3RlcCh0aGlzLnJlc29sdmVRdWFudGl0eVByb2R1Y3QoZGF0YSkpO1xuICB9XG5cbiAgb25RdWFudGl0eUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnF1YW50aXR5SW5wdXQgPSBpbnB1dC52YWx1ZTtcblxuICAgIGlmICh0aGlzLnF1YW50aXR5SW5wdXQudHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih0aGlzLnF1YW50aXR5SW5wdXQpO1xuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkge1xuICAgICAgdGhpcy5xdWFudGl0eS5zZXQocGFyc2VkKTtcbiAgICB9XG4gIH1cblxuICBvblF1YW50aXR5Qmx1cihkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5hbGlnblF1YW50aXR5SW5wdXQodGhpcy5xdWFudGl0eUlucHV0LCBkYXRhKTtcbiAgICB0aGlzLnF1YW50aXR5LnNldChuZXh0KTtcbiAgICB0aGlzLnF1YW50aXR5SW5wdXQgPSBTdHJpbmcobmV4dCk7XG4gIH1cblxuICBwbHVzKHN0b2NrPzogbnVtYmVyLCBtdWx0aXBsZVF1YW50aXR5PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IE51bWJlcih0aGlzLnF1YW50aXR5KCkpO1xuICAgIGNvbnN0IGluY3JlbWVudCA9IG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDAgPyBtdWx0aXBsZVF1YW50aXR5IDogMTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBjdXJyZW50ICsgaW5jcmVtZW50O1xuICAgIGNvbnN0IG5leHQgPSBOdW1iZXIuaXNGaW5pdGUoc3RvY2spICYmIHN0b2NrICE9IG51bGwgPyBNYXRoLm1pbihjYW5kaWRhdGUsIE51bWJlcihzdG9jaykpIDogY2FuZGlkYXRlO1xuXG4gICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIHtcbiAgICAgIHRoaXMuc3luY1F1YW50aXR5SW5wdXRGcm9tU2lnbmFsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5xdWFudGl0eS5zZXQobmV4dCk7XG4gICAgdGhpcy5zeW5jUXVhbnRpdHlJbnB1dEZyb21TaWduYWwoKTtcbiAgfVxuXG4gIGxlc3MobXVsdGlwbGVRdWFudGl0eT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBOdW1iZXIodGhpcy5xdWFudGl0eSgpKTtcbiAgICBjb25zdCBkZWNyZW1lbnQgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICBpZiAoZGVjcmVtZW50ID4gMSkge1xuICAgICAgaWYgKGN1cnJlbnQgPiBkZWNyZW1lbnQpIHtcbiAgICAgICAgdGhpcy5xdWFudGl0eS5zZXQoY3VycmVudCAtIGRlY3JlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50ID4gMSkge1xuICAgICAgdGhpcy5xdWFudGl0eS5zZXQoY3VycmVudCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMuc3luY1F1YW50aXR5SW5wdXRGcm9tU2lnbmFsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplUHJvZHVjdENvbW1lbnQoY29tbWVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyhjb21tZW50ID8/ICcnKS5zbGljZSgwLCAxMDApLnRyaW0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jUHJvZHVjdENvbW1lbnRGcm9tQ2FydChwcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCwgZGF0YTogYW55LCBpdGVtczogYW55W10gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlIHx8ICFwcm9kdWN0Py5pZCB8fCAhQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9kdWN0SWQgPSBTdHJpbmcocHJvZHVjdC5pZCk7XG4gICAgY29uc3QgdmFyaWFudENvZGUgPSB0aGlzLnNlbGVjdGVkVmFyaWFudEZyb21RdWVyeSB8fCBkYXRhPy52YXJpYW50Q29kZSB8fCBkYXRhPy52YXJpYW50X2lkIHx8IG51bGw7XG4gICAgY29uc3QgcHJvZHVjdEl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IFN0cmluZyhpdGVtPy5wcm9kdWN0Py5pZCA/PyAnJykgPT09IHByb2R1Y3RJZCk7XG5cbiAgICBjb25zdCBtYXRjaCA9IHZhcmlhbnRDb2RlXG4gICAgICA/IHByb2R1Y3RJdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IFN0cmluZyhpdGVtPy52YXJpYW50X2lkID8/ICcnKSA9PT0gU3RyaW5nKHZhcmlhbnRDb2RlKSlcbiAgICAgIDogcHJvZHVjdEl0ZW1zLmxlbmd0aCA9PT0gMVxuICAgICAgICA/IHByb2R1Y3RJdGVtc1swXVxuICAgICAgICA6IG51bGw7XG5cbiAgICB0aGlzLmNvbW1lbnRzID0gbWF0Y2g/LmNvbW1lbnRzID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBib290c3RyYXBRdWFudGl0eUZyb21NdWx0aXBsZShwcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFwcm9kdWN0Py5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpcGxlUXVhbnRpdHkgPSB0aGlzLnF1YW50aXR5UnVsZXMuZ2V0UXVhbnRpdHlTdGVwKHRoaXMucmVzb2x2ZVF1YW50aXR5UHJvZHVjdChkYXRhKSk7XG4gICAgY29uc3QgdmFyaWFudEtleSA9IFN0cmluZyhkYXRhPy52YXJpYW50Q29kZSA/PyBkYXRhPy52YXJpYW50X2lkID8/ICcnKTtcbiAgICBjb25zdCBib290c3RyYXBLZXkgPSBgJHtwcm9kdWN0LmlkfToke3ZhcmlhbnRLZXl9YDtcblxuICAgIGlmIChib290c3RyYXBLZXkgPT09IHRoaXMubGFzdFF1YW50aXR5Qm9vdHN0cmFwS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0UXVhbnRpdHlCb290c3RyYXBLZXkgPSBib290c3RyYXBLZXk7XG5cbiAgICBpZiAobXVsdGlwbGVRdWFudGl0eSA+IDEpIHtcbiAgICAgIHRoaXMucXVhbnRpdHkuc2V0KG11bHRpcGxlUXVhbnRpdHkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWFudGl0eSgpIDwgMSkge1xuICAgICAgdGhpcy5xdWFudGl0eS5zZXQoMSk7XG4gICAgfVxuXG4gICAgdGhpcy5zeW5jUXVhbnRpdHlJbnB1dEZyb21TaWduYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1F1YW50aXR5SW5wdXRGcm9tU2lnbmFsKCk6IHZvaWQge1xuICAgIHRoaXMucXVhbnRpdHlJbnB1dCA9IFN0cmluZyh0aGlzLnF1YW50aXR5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUXVhbnRpdHlQcm9kdWN0KGRhdGE6IGFueSk6IFByb2R1Y3QgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFByb2R1Y3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmN1cnJlbnRQcm9kdWN0LFxuICAgICAgc3RvY2s6IGRhdGE/LnN0b2NrID8/IHRoaXMuY3VycmVudFByb2R1Y3Quc3RvY2ssXG4gICAgICBtdWx0aXBsZVF1YW50aXR5OiBkYXRhPy5tdWx0aXBsZVF1YW50aXR5ID8/IHRoaXMuY3VycmVudFByb2R1Y3QubXVsdGlwbGVRdWFudGl0eSxcbiAgICAgIG1heGltdW1JdGVtc1F1YW50aXR5OiBkYXRhPy5tYXhpbXVtSXRlbXNRdWFudGl0eSA/PyB0aGlzLmN1cnJlbnRQcm9kdWN0Lm1heGltdW1JdGVtc1F1YW50aXR5LFxuICAgICAgbWluaW11bUl0ZW1zUXVhbnRpdHk6IGRhdGE/Lm1pbmltdW1JdGVtc1F1YW50aXR5ID8/IHRoaXMuY3VycmVudFByb2R1Y3QubWluaW11bUl0ZW1zUXVhbnRpdHksXG4gICAgfSBhcyBQcm9kdWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBhbGlnblF1YW50aXR5SW5wdXQocmF3VmFsdWU6IHN0cmluZywgZGF0YTogYW55KTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIoU3RyaW5nKHJhd1ZhbHVlID8/ICcnKS50cmltKCkpO1xuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnJlc29sdmVRdWFudGl0eVByb2R1Y3QoZGF0YSk7XG4gICAgY29uc3QgbWluQWxsb3dlZCA9IHRoaXMucXVhbnRpdHlSdWxlcy5nZXRRdWFudGl0eU1pbihwcm9kdWN0KTtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5xdWFudGl0eVJ1bGVzLmdldFF1YW50aXR5U3RlcChwcm9kdWN0KTtcbiAgICBjb25zdCBzdG9jayA9IE51bWJlcihwcm9kdWN0Py5zdG9jayA/PyAwKTtcbiAgICBjb25zdCBtYXhBbGxvd2VkID0gTnVtYmVyLmlzRmluaXRlKHN0b2NrKSAmJiBzdG9jayA+IDAgPyBzdG9jayA6IEluZmluaXR5O1xuICAgIGxldCBjYW5kaWRhdGUgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG1pbkFsbG93ZWQ7XG5cbiAgICBjYW5kaWRhdGUgPSBNYXRoLm1heChjYW5kaWRhdGUsIG1pbkFsbG93ZWQpO1xuICAgIGNhbmRpZGF0ZSA9IE1hdGgubWluKGNhbmRpZGF0ZSwgbWF4QWxsb3dlZCk7XG5cbiAgICBpZiAoc3RlcCA8PSAxKSB7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1YW50aXR5UnVsZXMuYWxpZ25Ub011bHRpcGxlKGNhbmRpZGF0ZSwgbWluQWxsb3dlZCwgbWF4QWxsb3dlZCwgc3RlcCk7XG4gIH1cblxuICBjaGVja1N0b2NrKHN0b2NrOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5xdWFudGl0eSgpID49IHN0b2NrKVxuICAgICAgdGhpcy5xdWFudGl0eS5zZXQoc3RvY2spO1xuICB9XG5cbiAgcHVibGljIGdvVG9TZWN0aW9uKHNlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Zvcm1Db250YWN0ID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIG9wZW5Db250YWN0TW9kYWwoKSB7XG4gICAgdGhpcy5zaG93Q29udGFjdE1vZGFsID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlQ29udGFjdE1vZGFsKCkge1xuICAgIHRoaXMuc2hvd0NvbnRhY3RNb2RhbCA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXRGb3JtID0gKCkgPT4ge1xuICAgIHRoaXMucmVzZXQgPSAhdGhpcy5yZXNldFxuICAgIHRoaXMuc3VjY2VzcyA9IHRydWVcbiAgfVxuXG4gIC8vIENvbXB1dGVkIHNpZ25hbHMgbcOhcyBlZmljaWVudGVzXG4gIHB1YmxpYyBoYXNEaXNjb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0U2lnbmFsKCk7XG4gICAgaWYgKCFwcm9kdWN0Py5zYWxlcHJpY2UgfHwgIXByb2R1Y3Q/LnByaWNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmljZSA9IHBhcnNlRmxvYXQocHJvZHVjdC5wcmljZS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzYWxlUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3Quc2FsZXByaWNlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHNhbGVQcmljZSA+IDAgJiYgb3JpZ2luYWxQcmljZSA+IHNhbGVQcmljZTtcbiAgfSk7XG5cbiAgcHVibGljIGRpc2NvdW50UGVyY2VudGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuaGFzRGlzY291bnQoKSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0U2lnbmFsKCk7XG4gICAgaWYgKCFwcm9kdWN0KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yaWdpbmFsUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3QucHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcbiAgICBjb25zdCBzYWxlUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3Quc2FsZXByaWNlPy50b1N0cmluZygpIHx8ICcwJyk7XG5cbiAgICBpZiAob3JpZ2luYWxQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA8PSAwIHx8IHNhbGVQcmljZSA+PSBvcmlnaW5hbFByaWNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3VudCA9ICgob3JpZ2luYWxQcmljZSAtIHNhbGVQcmljZSkgLyBvcmlnaW5hbFByaWNlKSAqIDEwMDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChkaXNjb3VudCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgICogTcOpdG9kbyBwYXJhIHRyYWNrZWFyIGNhbWJpb3MgZW4gZWwgcHJvZHVjdElkIHkgZm9yemFyIGxhIHJlY3JlYWNpw7NuIGRlbCBjb21wb25lbnRlIHJlbGFjaW9uYWRvc1xuICAgICovXG4gIHRyYWNrQnlQcm9kdWN0SWQoaW5kZXg6IG51bWJlciwgcHJvZHVjdElkOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBwcm9kdWN0SWQ7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZGYXZvcml0ZShwcm9kdWN0SWQ6IHN0cmluZywgdmFyaWFudENvZGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkJCkge1xuICAgICAgdGhpcy5pc0Zhdm9yaXRlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLmdldFdpc2hsaXN0c1NpbGVudCh1bmRlZmluZWQsIHRydWUpLnRoZW4oKGxpc3RzOiBhbnlbXSkgPT4ge1xuICAgICAgdGhpcy5pc0Zhdm9yaXRlID0gbGlzdHMuc29tZShsaXN0ID0+IGxpc3QuaXRlbXM/LnNvbWUoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgaXNXaXNobGlzdEl0ZW1Gb3JWYXJpYW50KGl0ZW0sIHByb2R1Y3RJZCwgdmFyaWFudENvZGUpXG4gICAgICApKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmlzRmF2b3JpdGUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSGVhcnRDbGljayhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXByb2R1Y3Q/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCQpIHtcbiAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCd3aXNobGlzdC1sb2dpbi1yZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnRDb2RlID0gdGhpcy5yZXNvbHZlV2lzaGxpc3RWYXJpYW50Q29kZShwcm9kdWN0KTtcbiAgICBpZiAoIXZhcmlhbnRDb2RlKSB7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tdmFyaWFudHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5XaXNobGlzdE1vZGFsKHByb2R1Y3QsIHZhcmlhbnRDb2RlKTtcbiAgfVxuXG4gIG9wZW5XaXNobGlzdE1vZGFsKHByb2R1Y3Q/OiBQcm9kdWN0LCB2YXJpYW50Q29kZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcHJvZHVjdD8uaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50V2lzaGxpc3RQcm9kdWN0ID0gcHJvZHVjdDtcbiAgICB0aGlzLl9wZW5kaW5nVmFyaWFudENvZGUgPSB2YXJpYW50Q29kZSA/PyB0aGlzLnJlc29sdmVXaXNobGlzdFZhcmlhbnRDb2RlKHByb2R1Y3QpO1xuICAgIGlmICghdGhpcy5fcGVuZGluZ1ZhcmlhbnRDb2RlKSB7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tdmFyaWFudHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl93aXNobGlzdFNlcnZpY2UuZ2V0V2lzaGxpc3RzU2lsZW50KCkudGhlbigobGlzdHM6IGFueVtdKSA9PiB7XG4gICAgICB0aGlzLndpc2hsaXN0TW9kYWxMaXN0cyA9IGxpc3RzID8/IFtdO1xuICAgICAgdGhpcy53aXNobGlzdFNlbGVjdGVkVG9rZW5zID0gbmV3IFNldChcbiAgICAgICAgdGhpcy53aXNobGlzdE1vZGFsTGlzdHNcbiAgICAgICAgICAuZmlsdGVyKHdpc2hsaXN0ID0+IHRoaXMuaXNQcm9kdWN0SW5XaXNobGlzdCh3aXNobGlzdCwgcHJvZHVjdC5pZCEudG9TdHJpbmcoKSwgdGhpcy5fcGVuZGluZ1ZhcmlhbnRDb2RlKSlcbiAgICAgICAgICAubWFwKHdpc2hsaXN0ID0+IHdpc2hsaXN0LnRva2VuKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRoaXMud2lzaGxpc3RTZWxlY3RlZFRva2Vucy5zaXplID4gMDtcbiAgICAgIHRoaXMuc2hvd1dpc2hsaXN0TW9kYWwgPSB0cnVlO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWJyaWVuZG8gbW9kYWwgZGUgd2lzaGxpc3QnLCBlcnJvcik7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnd2lzaGxpc3QtcHJvZHVjdC1zYXZlLWVycm9yJyk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZVdpc2hsaXN0TW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2lzaGxpc3RDcmVhdGluZyB8fCB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dXaXNobGlzdE1vZGFsID0gZmFsc2U7XG4gICAgdGhpcy53aXNobGlzdE5ld0xpc3ROYW1lID0gJyc7XG4gICAgdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1ZhcmlhbnRDb2RlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdG9nZ2xlV2lzaGxpc3RTZWxlY3Rpb24od2lzaGxpc3Q6IGFueSwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQcm9kdWN0ID0gdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdDtcbiAgICBpZiAoIWN1cnJlbnRQcm9kdWN0Py5pZCB8fCAhd2lzaGxpc3Q/LnRva2VuIHx8IHRoaXMud2lzaGxpc3RDcmVhdGluZyB8fCB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuaGFzKHdpc2hsaXN0LnRva2VuKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0gd2lzaGxpc3QudG9rZW47XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuaGFzKHRva2VuKTtcbiAgICBpZiAoY2hlY2tlZCA9PT0gd2FzU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndpc2hsaXN0VXBkYXRpbmdUb2tlbnMuYWRkKHRva2VuKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGNoZWNrZWRcbiAgICAgID8gdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLmFkZFByb2R1Y3RTaWxlbnQoY3VycmVudFByb2R1Y3QuaWQudG9TdHJpbmcoKSwgdG9rZW4sIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSlcbiAgICAgIDogdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLnJlbW92ZVByb2R1Y3RTaWxlbnQodG9rZW4sIGN1cnJlbnRQcm9kdWN0LmlkLnRvU3RyaW5nKCksIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSk7XG5cbiAgICBhY3Rpb24udGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3dpc2hsaXN0LXByb2R1Y3Qtc2F2ZWQtaW4tbGlzdCcsIHsgbmFtZTogZ2V0V2lzaGxpc3REaXNwbGF5TmFtZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCB3aXNobGlzdCkgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZC1mcm9tLXdpc2hsaXN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRoaXMud2lzaGxpc3RTZWxlY3RlZFRva2Vucy5zaXplID4gMDtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjdHVhbGl6YW5kbyB3aXNobGlzdCcsIGVycm9yKTtcbiAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCd3aXNobGlzdC1wcm9kdWN0LXNhdmUtZXJyb3InKTtcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMud2lzaGxpc3RVcGRhdGluZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlTGlzdEFuZFNhdmVQcm9kdWN0KG5hbWU6IHN0cmluZywgcHJvZHVjdD86IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UHJvZHVjdCA9IHByb2R1Y3QgPz8gdGhpcy5fY3VycmVudFdpc2hsaXN0UHJvZHVjdDtcbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IG5hbWUudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZE5hbWUgfHwgIWN1cnJlbnRQcm9kdWN0Py5pZCB8fCB0aGlzLndpc2hsaXN0Q3JlYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndpc2hsaXN0Q3JlYXRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5fd2lzaGxpc3RTZXJ2aWNlLmNyZWF0ZVdpc2hsaXN0U2lsZW50KHRyaW1tZWROYW1lKS50aGVuKChuZXdXaXNobGlzdDogYW55KSA9PiB7XG4gICAgICBjb25zdCBjcmVhdGVkV2lzaGxpc3QgPSB7XG4gICAgICAgIC4uLm5ld1dpc2hsaXN0LFxuICAgICAgICBuYW1lOiBuZXdXaXNobGlzdD8ubmFtZSB8fCB0cmltbWVkTmFtZSxcbiAgICAgICAgdG9rZW46IG5ld1dpc2hsaXN0Py50b2tlblxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3dpc2hsaXN0U2VydmljZS5hZGRQcm9kdWN0U2lsZW50KGN1cnJlbnRQcm9kdWN0LmlkIS50b1N0cmluZygpLCBjcmVhdGVkV2lzaGxpc3QudG9rZW4sIHRoaXMuX3BlbmRpbmdWYXJpYW50Q29kZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlZFdpc2hsaXN0KTtcbiAgICB9KS50aGVuKChjcmVhdGVkV2lzaGxpc3Q6IGFueSkgPT4ge1xuICAgICAgdGhpcy53aXNobGlzdE1vZGFsTGlzdHMgPSBbLi4udGhpcy53aXNobGlzdE1vZGFsTGlzdHMsIGNyZWF0ZWRXaXNobGlzdF07XG4gICAgICB0aGlzLndpc2hsaXN0U2VsZWN0ZWRUb2tlbnMuYWRkKGNyZWF0ZWRXaXNobGlzdC50b2tlbik7XG4gICAgICB0aGlzLndpc2hsaXN0TmV3TGlzdE5hbWUgPSAnJztcbiAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IHRydWU7XG4gICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnd2lzaGxpc3QtcHJvZHVjdC1zYXZlZC1pbi1saXN0JywgeyBuYW1lOiBnZXRXaXNobGlzdERpc3BsYXlOYW1lKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsIGNyZWF0ZWRXaXNobGlzdCkgfSk7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhbmRvIHdpc2hsaXN0JywgZXJyb3IpO1xuICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3dpc2hsaXN0LXByb2R1Y3Qtc2F2ZS1lcnJvcicpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy53aXNobGlzdENyZWF0aW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRXaXNobGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd3aXNobGlzdC1kZWZhdWx0LW5hbWUnKTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZCAmJiB0cmFuc2xhdGVkICE9PSAnd2lzaGxpc3QtZGVmYXVsdC1uYW1lJyA/IHRyYW5zbGF0ZWQgOiAnTGlzdGEgZGUgZmF2b3JpdG9zJztcbiAgfVxuXG4gIHByaXZhdGUgaXNQcm9kdWN0SW5XaXNobGlzdCh3aXNobGlzdDogYW55LCBwcm9kdWN0Q29kZTogc3RyaW5nLCB2YXJpYW50Q29kZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aXNobGlzdD8uaXRlbXM/LnNvbWUoKGl0ZW06IGFueSkgPT4gaXNXaXNobGlzdEl0ZW1Gb3JWYXJpYW50KGl0ZW0sIHByb2R1Y3RDb2RlLCB2YXJpYW50Q29kZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlV2lzaGxpc3RWYXJpYW50Q29kZShwcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHJlc29sdmVXaXNobGlzdFZhcmlhbnRDb2RlKHByb2R1Y3QsIHRoaXMuc2VsZWN0ZWRWYXJpYW50RnJvbVF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFdpc2hsaXN0RmF2b3JpdGVTdGF0ZShwcm9kdWN0OiBQcm9kdWN0IHwgbnVsbCA9IHRoaXMuY3VycmVudFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoIXByb2R1Y3Q/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0lmRmF2b3JpdGUocHJvZHVjdC5pZC50b1N0cmluZygpLCB0aGlzLnJlc29sdmVXaXNobGlzdFZhcmlhbnRDb2RlKHByb2R1Y3QpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldGVhIGVsIGVzdGFkbyBkZWwgbW9kYWwgZGUgcmVzZcOxYXNcbiAgICovXG4gIHByaXZhdGUgcmVzZXRSZXZpZXdNb2RhbCgpOiB2b2lkIHtcbiAgICAvLyBTaSBleGlzdGUgdW4gbcOpdG9kbyByZXNldEZvcm0gZGVsIGNvbXBvbmVudGUgcGFkcmUsIGxsYW1hcmxvXG4gICAgaWYgKHR5cGVvZiAodGhpcyBhcyBhbnkpLnJlc2V0Rm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKHRoaXMgYXMgYW55KS5yZXNldEZvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBTaSBleGlzdGUgdW5hIHByb3BpZWRhZCBzdWNjZXNzLCByZXNldGVhcmxhXG4gICAgaWYgKCdzdWNjZXNzJyBpbiB0aGlzKSB7XG4gICAgICAodGhpcyBhcyBhbnkpLnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIiJdfQ==