simpo-component-library 1.4.300 → 1.4.301

Sign up to get free protection for your applications and to get access to all the features.
@@ -274,7 +274,7 @@ export class FeaturedProductsComponent extends BaseSection {
274
274
  }, 100);
275
275
  }
276
276
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: FeaturedProductsComponent, deps: [{ token: PLATFORM_ID }, { token: i1.EventsService }, { token: i2.RestService }, { token: i3.Router }, { token: i4.CartService }, { token: i5.MatBottomSheet }, { token: i6.StorageServiceService }, { token: i7.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
277
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: FeaturedProductsComponent, isStandalone: true, selector: "simpo-featured-products", inputs: { data: "data", responseData: "responseData", index: "index", isRelatedProduct: "isRelatedProduct", edit: "edit", delete: "delete" }, outputs: { changeDetailProduct: "changeDetailProduct" }, host: { listeners: { "window: resize": "getScreenSize($event)" } }, providers: [MessageService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<ng-container *ngIf=\"!isLoading\">\r\n <section class=\"container-fluid total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n [simpoBackground]=\"styles?.background\" (click)=\"editSection()\" >\r\n <div [id]=\"data?.id\" class=\"display-block\" #mainContainer [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\" [simpoAnimation]=\"styles?.animation\" [simpoLayout]=\"styles?.layout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img loading=\"lazy\" src=\"https://dev-beeos.s3.amazonaws.com/library-media/714126c1707378935732span.png\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\">\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.minWidth]=\"getProductWidth()\" [style.maxWidth]=\"getProductWidth()\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n </section>\r\n</ng-container>\r\n\r\n<ng-template #VarientList let-product=\"data\">\r\n <div class=\"varient-list\" *ngIf=\"product?.itemVariant?.length\">\r\n <ng-container *ngFor=\"let varient of product?.itemVariant; let idx = index\">\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"varient.variantImages?.[0]?.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" class=\"varient\" [ngClass]=\"{'selected-varient': varient.variantId == product.varientId}\"\r\n [style.borderColor]=\"varient.variantId == product.varientId ? 'blue' : 'transparent'\"\r\n (click)=\"selectVarient(product, varient)\">\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #FavouriteTags let-product=\"data\">\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\" *ngIf=\"!product.whislist\">favorite_border</mat-icon>\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\" *ngIf=\"product.whislist\">favorite</mat-icon>\r\n</ng-template>\r\n\r\n<ng-template #AddToCart let-product=\"data\">\r\n <div *ngIf=\"content?.display?.showButton\" class=\"add-to-cart-btn\">\r\n <button simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [buttonStyle]=\"button?.styles\"\r\n [color]=\"styles?.background?.accentColor\" *ngIf=\"!product.quantity && !isItemOutOfStock(product)\"\r\n (click)=\"addItemToCart(product, 'ADD')\">{{button?.content?.label ?? 'Add to Cart'}}</button>\r\n <div class=\"quantity\" *ngIf=\"product.quantity && !isItemOutOfStock(product)\">\r\n <span (click)=\"addItemToCart(product, 'SUBSTRACT')\">-</span>\r\n <span>{{product.quantity}}</span>\r\n <span (click)=\"addItemToCart(product, 'ADD')\">+</span>\r\n </div>\r\n <button disabled class=\"out-of-stock\" *ngIf=\"isItemOutOfStock(product)\">Out Of Stock</button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductPricing let-product=\"data\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"price body-large d-flex\" [id]=\"data?.id\" [simpoColor]=\"styles?.background?.color\">\r\n <!-- <div *ngIf=\"product.price.value != product.price.discountedPrice\" class=\"selling-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.value}}\r\n </div> -->\r\n <div class=\"discounted-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.discountedPrice}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!product.itemVariant?.length\">\r\n <ng-container *ngTemplateOutlet=\"AddToCart; context: {data: product}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductDes let-product=\"data\" let-idx=\"idx\">\r\n <div (click)=\"proceedToProductDesc(product)\" class=\"position-relative\">\r\n <ng-container *ngTemplateOutlet=\"FavouriteTags; context: {data: product}\"></ng-container>\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [id]=\"'preview_'+idx\" [src]=\"product.itemImages?.[product.prviewIdx]?.imgUrl\" alt=\"\"\r\n class=\"product-img preivew\" (mouseenter)=\"togglePreviewImage(product, idx)\"\r\n (mouseleave)=\"product.prviewIdx = 0\">\r\n </div>\r\n <div class=\"mt-15 w-100\">\r\n <div class=\"product-name heading-large text-left trim-text w-100\" [id]=\"data?.id\"\r\n [simpoColor]=\"styles?.background?.color\">\r\n {{product.name }}</div>\r\n <ng-container *ngTemplateOutlet=\"VarientList; context: {data: product}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"ProductPricing; context: {data: product}\"></ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading || filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n}\">\r\n</ngx-skeleton-loader>", styles: [".product-parent{display:flex;flex-wrap:wrap;margin-top:15px}.product{padding:10px;cursor:pointer;position:relative;display:flex;flex-direction:column;justify-content:space-between}.product-img{height:310px;width:100%}.price{color:#222;font-size:16px;font-weight:600;line-height:normal}.varient-list{display:flex;gap:5px;margin-bottom:5px;width:100%;overflow-x:auto}.varient-list .varient{height:60px;width:45px;border-radius:5px;border:1px solid lightgray}.varient-list .selected-varient{border:1px solid transparent}.tags{position:absolute;top:8px;left:8px;display:flex;gap:5px}.tags .tag{font-size:12px;background-color:#fff;padding:5px;border-radius:3px}.out-of-stock{background-color:#d3d3d333;color:#000;border-radius:5px;border:none}.fav-icon{position:absolute;z-index:1000;padding:5px;right:8px;top:8px;height:fit-content;width:fit-content;background-color:#ffffff78;border-radius:50%}.out-of-stock{background-color:#d3d3d333;color:#000;padding:5px 10px;border-radius:5px}.product-name{color:#222;font-size:16px;line-height:26px;margin-bottom:5px}.selling-price{text-decoration:line-through;font-size:14px!important;margin-right:8px;color:#d3d3d3}@media screen and (max-width: 475px){.selling-price{display:none!important}}.discounted-price{margin-top:-3px}.add-product-button{width:20%}.action-btn{display:flex;justify-content:center;margin-top:20px}.action-btn>a{width:fit-content!important;padding:5px 20px;text-decoration:none}.mt-15{margin-top:15px}.default-image{background-color:#f2f3f5;text-align:center}.default-image img{width:70%;height:310px}.total-container{height:auto;position:relative}.display-block{display:block!important}.quantity{display:flex;justify-content:space-between;align-items:center;border:1.5px solid lightgray;border-radius:3px;padding:5px;font-weight:600;width:95px}.preivew{transition:opacity .5s ease-in-out;opacity:1}.transition-preview{opacity:0}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}@media screen and (max-width: 475px){.container-fluid{padding-left:5px!important;padding-right:5px!important}.product-img{height:100%}.default-image img{height:250px}.out-of-stock{font-size:12px!important}}.add-to-cart-btn{display:flex;gap:10px}.add-to-cart-btn .mat-icon{height:30px;width:35px;font-size:27px;margin-top:5px}.add-to-cart-btn button{height:35px;font-size:16px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i9.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i10.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i11.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type:
277
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: FeaturedProductsComponent, isStandalone: true, selector: "simpo-featured-products", inputs: { data: "data", responseData: "responseData", index: "index", isRelatedProduct: "isRelatedProduct", edit: "edit", delete: "delete" }, outputs: { changeDetailProduct: "changeDetailProduct" }, host: { listeners: { "window: resize": "getScreenSize($event)" } }, providers: [MessageService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<ng-container *ngIf=\"!isLoading\">\r\n <section class=\"container-fluid total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n [simpoBackground]=\"styles?.background\" (click)=\"editSection()\" >\r\n <div [id]=\"data?.id\" class=\"display-block\" #mainContainer [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\" [simpoAnimation]=\"styles?.animation\" [simpoLayout]=\"styles?.layout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img loading=\"lazy\" src=\"https://dev-beeos.s3.amazonaws.com/library-media/714126c1707378935732span.png\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\">\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.minWidth]=\"getProductWidth()\" [style.maxWidth]=\"getProductWidth()\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n </section>\r\n</ng-container>\r\n\r\n<ng-template #VarientList let-product=\"data\">\r\n <div class=\"varient-list\" *ngIf=\"product?.itemVariant?.length\">\r\n <ng-container *ngFor=\"let varient of product?.itemVariant; let idx = index\">\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"varient.variantImages?.[0]?.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" class=\"varient\" [ngClass]=\"{'selected-varient': varient.variantId == product.varientId}\"\r\n [style.borderColor]=\"varient.variantId == product.varientId ? 'blue' : 'transparent'\"\r\n (click)=\"selectVarient(product, varient)\">\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #FavouriteTags let-product=\"data\">\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\" *ngIf=\"!product.whislist\">favorite_border</mat-icon>\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\" *ngIf=\"product.whislist\">favorite</mat-icon>\r\n</ng-template>\r\n\r\n<ng-template #AddToCart let-product=\"data\">\r\n <div *ngIf=\"content?.display?.showButton\" class=\"add-to-cart-btn\">\r\n <button simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [buttonStyle]=\"button?.styles\"\r\n [color]=\"styles?.background?.accentColor\" *ngIf=\"!product.quantity && !isItemOutOfStock(product)\"\r\n (click)=\"addItemToCart(product, 'ADD')\">{{button?.content?.label ?? 'Add to Cart'}}</button>\r\n <div class=\"quantity\" *ngIf=\"product.quantity && !isItemOutOfStock(product)\">\r\n <span (click)=\"addItemToCart(product, 'SUBSTRACT')\">-</span>\r\n <span>{{product.quantity}}</span>\r\n <span (click)=\"addItemToCart(product, 'ADD')\">+</span>\r\n </div>\r\n <button disabled class=\"out-of-stock\" *ngIf=\"isItemOutOfStock(product)\">Out Of Stock</button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductPricing let-product=\"data\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"price body-large d-flex\" [id]=\"data?.id\" [simpoColor]=\"styles?.background?.color\">\r\n <!-- <div *ngIf=\"product.price.value != product.price.discountedPrice\" class=\"selling-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.value}}\r\n </div> -->\r\n <div class=\"discounted-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.discountedPrice}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!product.itemVariant?.length\">\r\n <ng-container *ngTemplateOutlet=\"AddToCart; context: {data: product}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductDes let-product=\"data\" let-idx=\"idx\">\r\n <div (click)=\"proceedToProductDesc(product)\" class=\"position-relative\" [style.height.px]=\"isMobile ? (styles?.maximumProduct == 1 ? '480' : '230' ) : ''\">\r\n <ng-container *ngTemplateOutlet=\"FavouriteTags; context: {data: product}\"></ng-container>\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [id]=\"'preview_'+idx\" [src]=\"product.itemImages?.[product.prviewIdx]?.imgUrl\" alt=\"\"\r\n class=\"product-img preivew\" (mouseenter)=\"togglePreviewImage(product, idx)\"\r\n (mouseleave)=\"product.prviewIdx = 0\">\r\n </div>\r\n <div class=\"mt-15 w-100\">\r\n <div class=\"product-name heading-large text-left trim-text w-100\" [id]=\"data?.id\"\r\n [simpoColor]=\"styles?.background?.color\">\r\n {{product.name }}</div>\r\n <ng-container *ngTemplateOutlet=\"VarientList; context: {data: product}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"ProductPricing; context: {data: product}\"></ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading || filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n}\">\r\n</ngx-skeleton-loader>", styles: [".product-parent{display:flex;flex-wrap:wrap;margin-top:15px}.product{padding:10px;cursor:pointer;position:relative;display:flex;flex-direction:column;justify-content:space-between}.product-img{height:310px;width:100%}.price{color:#222;font-size:16px;font-weight:600;line-height:normal}.varient-list{display:flex;gap:5px;margin-bottom:5px;width:100%;overflow-x:auto}.varient-list .varient{height:60px;width:45px;border-radius:5px;border:1px solid lightgray}.varient-list .selected-varient{border:1px solid transparent}.tags{position:absolute;top:8px;left:8px;display:flex;gap:5px}.tags .tag{font-size:12px;background-color:#fff;padding:5px;border-radius:3px}.out-of-stock{background-color:#d3d3d333;color:#000;border-radius:5px;border:none}.fav-icon{position:absolute;z-index:1000;padding:5px;right:8px;top:8px;height:fit-content;width:fit-content;background-color:#ffffff78;border-radius:50%}.out-of-stock{background-color:#d3d3d333;color:#000;padding:5px 10px;border-radius:5px}.product-name{color:#222;font-size:16px;line-height:26px;margin-bottom:5px}.selling-price{text-decoration:line-through;font-size:14px!important;margin-right:8px;color:#d3d3d3}@media screen and (max-width: 475px){.selling-price{display:none!important}}.discounted-price{margin-top:-3px}.add-product-button{width:20%}.action-btn{display:flex;justify-content:center;margin-top:20px}.action-btn>a{width:fit-content!important;padding:5px 20px;text-decoration:none}.mt-15{margin-top:15px}.default-image{background-color:#f2f3f5;text-align:center}.default-image img{width:70%;height:310px}.total-container{height:auto;position:relative}.display-block{display:block!important}.quantity{display:flex;justify-content:space-between;align-items:center;border:1.5px solid lightgray;border-radius:3px;padding:5px;font-weight:600;width:95px}.preivew{transition:opacity .5s ease-in-out;opacity:1}.transition-preview{opacity:0}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}@media screen and (max-width: 475px){.container-fluid{padding-left:5px!important;padding-right:5px!important}.product-img{height:100%}.default-image img{height:250px}.out-of-stock{font-size:12px!important}}.add-to-cart-btn{display:flex;gap:10px}.add-to-cart-btn .mat-icon{height:30px;width:35px;font-size:27px;margin-top:5px}.add-to-cart-btn button{height:35px;font-size:16px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i9.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i10.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i11.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type:
278
278
  //directive
279
279
  SimpoWrapComntainer, selector: "[simpoWrapContainer]", inputs: ["simpoWrapContainer"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i12.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
280
280
  }
@@ -299,7 +299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
299
299
  MatBottomSheetModule,
300
300
  ButtonDirectiveDirective,
301
301
  ToastModule
302
- ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<ng-container *ngIf=\"!isLoading\">\r\n <section class=\"container-fluid total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n [simpoBackground]=\"styles?.background\" (click)=\"editSection()\" >\r\n <div [id]=\"data?.id\" class=\"display-block\" #mainContainer [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\" [simpoAnimation]=\"styles?.animation\" [simpoLayout]=\"styles?.layout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img loading=\"lazy\" src=\"https://dev-beeos.s3.amazonaws.com/library-media/714126c1707378935732span.png\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\">\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.minWidth]=\"getProductWidth()\" [style.maxWidth]=\"getProductWidth()\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n </section>\r\n</ng-container>\r\n\r\n<ng-template #VarientList let-product=\"data\">\r\n <div class=\"varient-list\" *ngIf=\"product?.itemVariant?.length\">\r\n <ng-container *ngFor=\"let varient of product?.itemVariant; let idx = index\">\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"varient.variantImages?.[0]?.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" class=\"varient\" [ngClass]=\"{'selected-varient': varient.variantId == product.varientId}\"\r\n [style.borderColor]=\"varient.variantId == product.varientId ? 'blue' : 'transparent'\"\r\n (click)=\"selectVarient(product, varient)\">\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #FavouriteTags let-product=\"data\">\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\" *ngIf=\"!product.whislist\">favorite_border</mat-icon>\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\" *ngIf=\"product.whislist\">favorite</mat-icon>\r\n</ng-template>\r\n\r\n<ng-template #AddToCart let-product=\"data\">\r\n <div *ngIf=\"content?.display?.showButton\" class=\"add-to-cart-btn\">\r\n <button simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [buttonStyle]=\"button?.styles\"\r\n [color]=\"styles?.background?.accentColor\" *ngIf=\"!product.quantity && !isItemOutOfStock(product)\"\r\n (click)=\"addItemToCart(product, 'ADD')\">{{button?.content?.label ?? 'Add to Cart'}}</button>\r\n <div class=\"quantity\" *ngIf=\"product.quantity && !isItemOutOfStock(product)\">\r\n <span (click)=\"addItemToCart(product, 'SUBSTRACT')\">-</span>\r\n <span>{{product.quantity}}</span>\r\n <span (click)=\"addItemToCart(product, 'ADD')\">+</span>\r\n </div>\r\n <button disabled class=\"out-of-stock\" *ngIf=\"isItemOutOfStock(product)\">Out Of Stock</button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductPricing let-product=\"data\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"price body-large d-flex\" [id]=\"data?.id\" [simpoColor]=\"styles?.background?.color\">\r\n <!-- <div *ngIf=\"product.price.value != product.price.discountedPrice\" class=\"selling-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.value}}\r\n </div> -->\r\n <div class=\"discounted-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.discountedPrice}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!product.itemVariant?.length\">\r\n <ng-container *ngTemplateOutlet=\"AddToCart; context: {data: product}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductDes let-product=\"data\" let-idx=\"idx\">\r\n <div (click)=\"proceedToProductDesc(product)\" class=\"position-relative\">\r\n <ng-container *ngTemplateOutlet=\"FavouriteTags; context: {data: product}\"></ng-container>\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [id]=\"'preview_'+idx\" [src]=\"product.itemImages?.[product.prviewIdx]?.imgUrl\" alt=\"\"\r\n class=\"product-img preivew\" (mouseenter)=\"togglePreviewImage(product, idx)\"\r\n (mouseleave)=\"product.prviewIdx = 0\">\r\n </div>\r\n <div class=\"mt-15 w-100\">\r\n <div class=\"product-name heading-large text-left trim-text w-100\" [id]=\"data?.id\"\r\n [simpoColor]=\"styles?.background?.color\">\r\n {{product.name }}</div>\r\n <ng-container *ngTemplateOutlet=\"VarientList; context: {data: product}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"ProductPricing; context: {data: product}\"></ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading || filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n}\">\r\n</ngx-skeleton-loader>", styles: [".product-parent{display:flex;flex-wrap:wrap;margin-top:15px}.product{padding:10px;cursor:pointer;position:relative;display:flex;flex-direction:column;justify-content:space-between}.product-img{height:310px;width:100%}.price{color:#222;font-size:16px;font-weight:600;line-height:normal}.varient-list{display:flex;gap:5px;margin-bottom:5px;width:100%;overflow-x:auto}.varient-list .varient{height:60px;width:45px;border-radius:5px;border:1px solid lightgray}.varient-list .selected-varient{border:1px solid transparent}.tags{position:absolute;top:8px;left:8px;display:flex;gap:5px}.tags .tag{font-size:12px;background-color:#fff;padding:5px;border-radius:3px}.out-of-stock{background-color:#d3d3d333;color:#000;border-radius:5px;border:none}.fav-icon{position:absolute;z-index:1000;padding:5px;right:8px;top:8px;height:fit-content;width:fit-content;background-color:#ffffff78;border-radius:50%}.out-of-stock{background-color:#d3d3d333;color:#000;padding:5px 10px;border-radius:5px}.product-name{color:#222;font-size:16px;line-height:26px;margin-bottom:5px}.selling-price{text-decoration:line-through;font-size:14px!important;margin-right:8px;color:#d3d3d3}@media screen and (max-width: 475px){.selling-price{display:none!important}}.discounted-price{margin-top:-3px}.add-product-button{width:20%}.action-btn{display:flex;justify-content:center;margin-top:20px}.action-btn>a{width:fit-content!important;padding:5px 20px;text-decoration:none}.mt-15{margin-top:15px}.default-image{background-color:#f2f3f5;text-align:center}.default-image img{width:70%;height:310px}.total-container{height:auto;position:relative}.display-block{display:block!important}.quantity{display:flex;justify-content:space-between;align-items:center;border:1.5px solid lightgray;border-radius:3px;padding:5px;font-weight:600;width:95px}.preivew{transition:opacity .5s ease-in-out;opacity:1}.transition-preview{opacity:0}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}@media screen and (max-width: 475px){.container-fluid{padding-left:5px!important;padding-right:5px!important}.product-img{height:100%}.default-image img{height:250px}.out-of-stock{font-size:12px!important}}.add-to-cart-btn{display:flex;gap:10px}.add-to-cart-btn .mat-icon{height:30px;width:35px;font-size:27px;margin-top:5px}.add-to-cart-btn button{height:35px;font-size:16px!important}\n"] }]
302
+ ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<ng-container *ngIf=\"!isLoading\">\r\n <section class=\"container-fluid total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n [simpoBackground]=\"styles?.background\" (click)=\"editSection()\" >\r\n <div [id]=\"data?.id\" class=\"display-block\" #mainContainer [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\" [simpoAnimation]=\"styles?.animation\" [simpoLayout]=\"styles?.layout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img loading=\"lazy\" src=\"https://dev-beeos.s3.amazonaws.com/library-media/714126c1707378935732span.png\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\">\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.minWidth]=\"getProductWidth()\" [style.maxWidth]=\"getProductWidth()\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n </section>\r\n</ng-container>\r\n\r\n<ng-template #VarientList let-product=\"data\">\r\n <div class=\"varient-list\" *ngIf=\"product?.itemVariant?.length\">\r\n <ng-container *ngFor=\"let varient of product?.itemVariant; let idx = index\">\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"varient.variantImages?.[0]?.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" class=\"varient\" [ngClass]=\"{'selected-varient': varient.variantId == product.varientId}\"\r\n [style.borderColor]=\"varient.variantId == product.varientId ? 'blue' : 'transparent'\"\r\n (click)=\"selectVarient(product, varient)\">\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #FavouriteTags let-product=\"data\">\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\" *ngIf=\"!product.whislist\">favorite_border</mat-icon>\r\n <mat-icon class=\"fav-icon\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\" *ngIf=\"product.whislist\">favorite</mat-icon>\r\n</ng-template>\r\n\r\n<ng-template #AddToCart let-product=\"data\">\r\n <div *ngIf=\"content?.display?.showButton\" class=\"add-to-cart-btn\">\r\n <button simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [buttonStyle]=\"button?.styles\"\r\n [color]=\"styles?.background?.accentColor\" *ngIf=\"!product.quantity && !isItemOutOfStock(product)\"\r\n (click)=\"addItemToCart(product, 'ADD')\">{{button?.content?.label ?? 'Add to Cart'}}</button>\r\n <div class=\"quantity\" *ngIf=\"product.quantity && !isItemOutOfStock(product)\">\r\n <span (click)=\"addItemToCart(product, 'SUBSTRACT')\">-</span>\r\n <span>{{product.quantity}}</span>\r\n <span (click)=\"addItemToCart(product, 'ADD')\">+</span>\r\n </div>\r\n <button disabled class=\"out-of-stock\" *ngIf=\"isItemOutOfStock(product)\">Out Of Stock</button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductPricing let-product=\"data\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"price body-large d-flex\" [id]=\"data?.id\" [simpoColor]=\"styles?.background?.color\">\r\n <!-- <div *ngIf=\"product.price.value != product.price.discountedPrice\" class=\"selling-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.value}}\r\n </div> -->\r\n <div class=\"discounted-price\">\r\n <span [innerHTML]='currency'></span>\r\n {{product.price.discountedPrice}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!product.itemVariant?.length\">\r\n <ng-container *ngTemplateOutlet=\"AddToCart; context: {data: product}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ProductDes let-product=\"data\" let-idx=\"idx\">\r\n <div (click)=\"proceedToProductDesc(product)\" class=\"position-relative\" [style.height.px]=\"isMobile ? (styles?.maximumProduct == 1 ? '480' : '230' ) : ''\">\r\n <ng-container *ngTemplateOutlet=\"FavouriteTags; context: {data: product}\"></ng-container>\r\n <img loading=\"lazy\" onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [id]=\"'preview_'+idx\" [src]=\"product.itemImages?.[product.prviewIdx]?.imgUrl\" alt=\"\"\r\n class=\"product-img preivew\" (mouseenter)=\"togglePreviewImage(product, idx)\"\r\n (mouseleave)=\"product.prviewIdx = 0\">\r\n </div>\r\n <div class=\"mt-15 w-100\">\r\n <div class=\"product-name heading-large text-left trim-text w-100\" [id]=\"data?.id\"\r\n [simpoColor]=\"styles?.background?.color\">\r\n {{product.name }}</div>\r\n <ng-container *ngTemplateOutlet=\"VarientList; context: {data: product}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"ProductPricing; context: {data: product}\"></ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading || filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n}\">\r\n</ngx-skeleton-loader>", styles: [".product-parent{display:flex;flex-wrap:wrap;margin-top:15px}.product{padding:10px;cursor:pointer;position:relative;display:flex;flex-direction:column;justify-content:space-between}.product-img{height:310px;width:100%}.price{color:#222;font-size:16px;font-weight:600;line-height:normal}.varient-list{display:flex;gap:5px;margin-bottom:5px;width:100%;overflow-x:auto}.varient-list .varient{height:60px;width:45px;border-radius:5px;border:1px solid lightgray}.varient-list .selected-varient{border:1px solid transparent}.tags{position:absolute;top:8px;left:8px;display:flex;gap:5px}.tags .tag{font-size:12px;background-color:#fff;padding:5px;border-radius:3px}.out-of-stock{background-color:#d3d3d333;color:#000;border-radius:5px;border:none}.fav-icon{position:absolute;z-index:1000;padding:5px;right:8px;top:8px;height:fit-content;width:fit-content;background-color:#ffffff78;border-radius:50%}.out-of-stock{background-color:#d3d3d333;color:#000;padding:5px 10px;border-radius:5px}.product-name{color:#222;font-size:16px;line-height:26px;margin-bottom:5px}.selling-price{text-decoration:line-through;font-size:14px!important;margin-right:8px;color:#d3d3d3}@media screen and (max-width: 475px){.selling-price{display:none!important}}.discounted-price{margin-top:-3px}.add-product-button{width:20%}.action-btn{display:flex;justify-content:center;margin-top:20px}.action-btn>a{width:fit-content!important;padding:5px 20px;text-decoration:none}.mt-15{margin-top:15px}.default-image{background-color:#f2f3f5;text-align:center}.default-image img{width:70%;height:310px}.total-container{height:auto;position:relative}.display-block{display:block!important}.quantity{display:flex;justify-content:space-between;align-items:center;border:1.5px solid lightgray;border-radius:3px;padding:5px;font-weight:600;width:95px}.preivew{transition:opacity .5s ease-in-out;opacity:1}.transition-preview{opacity:0}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}@media screen and (max-width: 475px){.container-fluid{padding-left:5px!important;padding-right:5px!important}.product-img{height:100%}.default-image img{height:250px}.out-of-stock{font-size:12px!important}}.add-to-cart-btn{display:flex;gap:10px}.add-to-cart-btn .mat-icon{height:30px;width:35px;font-size:27px;margin-top:5px}.add-to-cart-btn button{height:35px;font-size:16px!important}\n"] }]
303
303
  }], ctorParameters: () => [{ type: Object, decorators: [{
304
304
  type: Inject,
305
305
  args: [PLATFORM_ID]
@@ -321,4 +321,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
321
321
  type: HostListener,
322
322
  args: ["window: resize", ["$event"]]
323
323
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxXQUFXLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBR3ZKLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFL0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUcs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S0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBNEJQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmVhdHVyZWRQcm9kdWN0Q29udGVudE1vZGFsLCBGZWF0dXJlZFByb2R1Y3RNb2RhbCwgRmVhdHVyZWRQcm9kdWN0U3R5bGVzTW9kZWwgfSBmcm9tICcuL2ZlYXR1cmVkLXByb2R1Y3RzLm1vZGFsJztcclxuaW1wb3J0IHsgUHJvZHVjdCwgSXRlbUltYWdlLCBJdGVtVmFyaWFudCB9IGZyb20gJy4uLy4uL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuaW1wb3J0IHsgSXRlbVZhcmllbnRDb21wb25lbnQgfSBmcm9tICcuLi9pdGVtLXZhcmllbnQvaXRlbS12YXJpZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWZlYXR1cmVkLXByb2R1Y3RzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU2ltcG9XcmFwQ29tbnRhaW5lcixcclxuICAgIE1hdEljb24sXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sb3JEaXJlY3RpdmUsXHJcbiAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmVkLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVkUHJvZHVjdHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGRhdGE6IEZlYXR1cmVkUHJvZHVjdE1vZGFsIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcmVzcG9uc2VEYXRhPzogUHJvZHVjdFtdO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGlzUmVsYXRlZFByb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIGNoYW5nZURldGFpbFByb2R1Y3Q6IEV2ZW50RW1pdHRlcjxQcm9kdWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcclxuICBjb250ZW50PzogRmVhdHVyZWRQcm9kdWN0Q29udGVudE1vZGFsO1xyXG4gIHN0eWxlcz86IEZlYXR1cmVkUHJvZHVjdFN0eWxlc01vZGVsO1xyXG4gIGJ1dHRvbj86IEJ1dHRvbk1vZGVsO1xyXG5cclxuICBwcml2YXRlIF9ldmVudFN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvdHRvbVNoZWV0OiBNYXRCb3R0b21TaGVldCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmdldFNjcmVlblNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgVVNFUl9DQVJUOiBPcmRlcmVkSXRlbXNbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgVVNFUl9XSVNITElTVDogT3JkZXJlZEl0ZW1zW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzogcmVzaXplXCIsIFtcIiRldmVudFwiXSlcclxuICBnZXRTY3JlZW5TaXplKCkge1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbi5idXR0b25zWzBdO1xyXG5cclxuICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICB0aGlzLmdldEZlYXR1cmVQcm9kdWN0KCk7XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyID0gdGhpcy5fZXZlbnRTZXJ2aWNlLmZlYXR1cmVDb2xsZWN0aW9uTGlzdC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZVByb2R1Y3QoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2Uuc2hvd0xvYWRpbmdTY3JlZW4uc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHJlc3BvbnNlO1xyXG4gICAgfSlcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNwb25zZURhdGEgPSB0aGlzLnJlc3BvbnNlRGF0YT8ubWFwKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucHJvZHVjdCxcclxuICAgICAgICBwcnZpZXdJZHg6IDBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2V2ZW50U3Vic2NyaWJlcilcclxuICAgICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZHVjdFdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPiA0NzUgPyAodGhpcy5zY3JlZW5XaWR0aCA8IDEwMjUgPyAnMjUlJyA6ICdjYWxjKCcgKyAoKDEwMCAvICh0aGlzLnN0eWxlcz8uZWxlbWVudEluUm93IHx8IDQpKSkgKyAnJSknKSA6ICh0aGlzLnN0eWxlcz8ubW9iaWxlQ29sdW1uID09PSAxID8gJzEwMCUnIDogJzUwJScpXHJcbiAgfVxyXG5cclxuICBnZXRTbGljZVBhcmFtZXRlcnMoKSB7XHJcbiAgICByZXR1cm4gWzAsICh0aGlzLnN0eWxlcz8ubWF4aW11bVByb2R1Y3QgfHwgMCldO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZVByb2R1Y3QoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEZlYXR1cmVkUHJvZHVjdCh0aGlzLmNvbnRlbnQ/LmNvbGxlY3Rpb25JZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlckNhcnQoKS50aGVuKChjYXJ0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjYXJ0UmVzcG9uc2Uub25zdWNjZXNzID0gKGNhcnREYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLlVTRVJfQ0FSVCA9IGNhcnREYXRhLnRhcmdldC5yZXN1bHQgYXMgdW5rbm93biBhcyBPcmRlcmVkSXRlbXNbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhPy5mb3JFYWNoKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtSWQgPT0gcHJvZHVjdC5pdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtVmFyaWVudDogSXRlbVZhcmlhbnQgPSBwcm9kdWN0Py5pdGVtVmFyaWFudD8uWzBdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbVZhcmllbnQudmFyaWFudElkID09IGl0ZW0udmFyaWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5pdGVtSW1hZ2VzID0gaXRlbVZhcmllbnQudmFyaWFudEltYWdlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LnByaWNlID0gaXRlbVZhcmllbnQuaXRlbVZhcmlhbnRQcmljZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LnF1YW50aXR5ID0gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcldoaXNobGlzdCgpLnRoZW4oKHdpc2hsaXN0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICB3aXNobGlzdFJlc3BvbnNlLm9uc3VjY2VzcyA9ICh3aGlzbGlzdERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUID0gd2hpc2xpc3REYXRhLnRhcmdldC5yZXN1bHQgYXMgdW5rbm93biBhcyBPcmRlcmVkSXRlbXNbXTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YT8uZm9yRWFjaCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVVNFUl9XSVNITElTVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbUlkID09IHByb2R1Y3QuaXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50ID0gcHJvZHVjdD8uaXRlbVZhcmlhbnQ/LlswXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1WYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IGl0ZW1WYXJpZW50Py52YXJpYW50SW1hZ2VzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2UgPSBpdGVtVmFyaWVudC5pdGVtVmFyaWFudFByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9nZ2xlSXRlbVRvRmF2KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdSRU1PVkUnKSB7XHJcblxyXG4gICAgaWYgKHR5cGUgPT0gJ0FERCcpIHtcclxuICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IHRydWU7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1dpc2hsaXN0JywgZGV0YWlsOiAnSXRlbSBhZGRlZCB0byB5b3VyIHdpc2hsaXN0JyB9KTtcclxuICAgICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpdGVtVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gdGhpcy5nZXRJdGVtVmFyaWVudChwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1WYXJpZW50KSB7XHJcbiAgICAgICAgICBpdGVtVmFyaWVudC53aXNobGlzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0Zhdm91cml0ZShwcm9kdWN0IGFzIFByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvRmF2b3VyaXRlKHByb2R1Y3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnaW5mbycsIHN1bW1hcnk6ICdXaXNobGlzdCcsIGRldGFpbDogJ0l0ZW0gcmVtb3ZlIGZyb20geW91ciB3aXNobGlzdCcgfSk7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UucmVtb3ZlSXRlbUZyb21GYXZvdXJpdGUocHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2R1Y3Qud2hpc2xpc3QpIHtcclxuICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9XSVNITElTVCA9IHRoaXMuVVNFUl9XSVNITElTVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHByb2NlZWRUb1Byb2R1Y3REZXNjKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIGlmICh0aGlzLmlzUmVsYXRlZFByb2R1Y3QpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRhaWxQcm9kdWN0LmVtaXQocHJvZHVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYGRldGFpbHNgXSwgeyBxdWVyeVBhcmFtczogeyBpZDogcHJvZHVjdC5pdGVtSWQsIHZhcmllbnRJZDogcHJvZHVjdC52YXJpZW50SWQgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVByZXZpZXdJbWFnZShwcm9kdWN0OiBQcm9kdWN0LCBpZHg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3XycgKyBpZHgpO1xyXG4gICAgZWxlbWVudD8uY2xhc3NMaXN0LmFkZChcInRyYW5zaXRpb24tcHJlaXZld1wiKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcHJvZHVjdC5wcnZpZXdJZHggPSAoKHByb2R1Y3Q/Lml0ZW1JbWFnZXM/Lmxlbmd0aCA/PyAwKSA+IDEgPyAxIDogMCk7XHJcbiAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ3RyYW5zaXRpb24tcHJlaXZldycpO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuICBpc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBwcm9kdWN0Lml0ZW1JbnZlbnRvcnk/Lm9wZW5pbmdTdG9jayA9PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbVZhcmllbnQocHJvZHVjdDogUHJvZHVjdCwgdmFyaWVudElkOiBzdHJpbmcpOiBJdGVtVmFyaWFudCB8IG51bGwge1xyXG4gICAgbGV0IHNlbGVjdGVkVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gbnVsbDtcclxuICAgIHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5mb3JFYWNoKCh2YXJpZW50OiBJdGVtVmFyaWFudCkgPT4ge1xyXG4gICAgICBpZiAodmFyaWVudC52YXJpYW50SWQgPT0gdmFyaWVudElkKVxyXG4gICAgICAgIHNlbGVjdGVkVmFyaWVudCA9IHZhcmllbnQ7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZFZhcmllbnQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnQ6IEl0ZW1WYXJpYW50KSB7XHJcbiAgICAvLyBuZWRkIHRvIGNoYW5nZVxyXG4gICAgcHJvZHVjdC52YXJpZW50SWQgPSB2YXJpZW50LnZhcmlhbnRJZDtcclxuICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IHZhcmllbnQudmFyaWFudEltYWdlcztcclxuICAgIHByb2R1Y3QucHJpY2UgPSB2YXJpZW50Lml0ZW1WYXJpYW50UHJpY2U7XHJcbiAgICBwcm9kdWN0Lml0ZW1JbnZlbnRvcnkgPSB2YXJpZW50Lml0ZW1JbnZlbnRvcnk7XHJcbiAgICBwcm9kdWN0LnF1YW50aXR5ID0gdGhpcy5nZXRWYXJpZW50UXVhbnRpdHkodmFyaWVudCk7XHJcbiAgICBwcm9kdWN0LndoaXNsaXN0ID0gdGhpcy5pc1ZhcmllbnRQcmVzZW50SW5XaXNodGxpc3QodmFyaWVudCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVuY3koKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBCVVNJTkVTU19DT05TVEFOVFMuQ1VSUkVOQ1k7XHJcbiAgfVxyXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhcmllbnRRdWFudGl0eShwcm9kdWN0VmFyaWVudDogSXRlbVZhcmlhbnQpOiBudW1iZXIge1xyXG4gICAgbGV0IGl0ZW1RdWFudGl0eTogbnVtYmVyID0gMDtcclxuICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgaWYgKHByb2R1Y3RWYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZClcclxuICAgICAgICBpdGVtUXVhbnRpdHkgPSBpdGVtLnF1YW50aXR5O1xyXG4gICAgfSlcclxuICAgIHJldHVybiBpdGVtUXVhbnRpdHk7XHJcbiAgfVxyXG4gIHByaXZhdGUgaXNWYXJpZW50UHJlc2VudEluV2lzaHRsaXN0KHByb2R1Y3RWYXJpZW50OiBJdGVtVmFyaWFudCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHRoaXMuVVNFUl9XSVNITElTVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgIGlmIChwcm9kdWN0VmFyaWVudC52YXJpYW50SWQgPT0gaXRlbS52YXJpZW50SWQpXHJcbiAgICAgICAgcHJlc2VudCA9IHRydWU7XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHByZXNlbnQ7XHJcbiAgfVxyXG5cclxuICBlZGl0U2VjdGlvbigpe1xyXG4gICAgXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7ZGF0YTp0aGlzLmRhdGF9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiPjwvcC10b2FzdD5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICA8c2VjdGlvbiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0b3RhbC1jb250YWluZXJcIiBbaWRdPVwiZGF0YT8uaWRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiXHJcbiAgICBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIChjbGljayk9XCJlZGl0U2VjdGlvbigpXCIgPlxyXG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cImRpc3BsYXktYmxvY2tcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpdGVtLnZhbHVlXCIgW25nQ2xhc3NdPVwiaXRlbS5sYWJlbCA9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIHNyYz1cImh0dHBzOi8vZGV2LWJlZW9zLnMzLmFtYXpvbmF3cy5jb20vbGlicmFyeS1tZWRpYS83MTQxMjZjMTcwNzM3ODkzNTczMnNwYW4ucG5nXCIgYWx0PVwiXCJcclxuICAgICAgICBjbGFzcz1cInNwYW4taW1nIG10LTE1XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyTG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LXBhcmVudFwiICpuZ0lmPVwicmVzcG9uc2VEYXRhICYmIHJlc3BvbnNlRGF0YT8ubGVuZ3RoXCJcclxuICAgICAgICAgIFtzaW1wb1dyYXBDb250YWluZXJdPVwic3R5bGVzPy5kaXJlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgcmVzcG9uc2VEYXRhIHwgc2xpY2U6Z2V0U2xpY2VQYXJhbWV0ZXJzKClbMF06Z2V0U2xpY2VQYXJhbWV0ZXJzKClbMV07IGxldCBpZHggPSBpbmRleFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdFwiIFtzdHlsZS5taW5XaWR0aF09XCJnZXRQcm9kdWN0V2lkdGgoKVwiIFtzdHlsZS5tYXhXaWR0aF09XCJnZXRQcm9kdWN0V2lkdGgoKVwiPlxyXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJQcm9kdWN0RGVzOyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdCwgaWR4OiBpZHh9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L3NlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNWYXJpZW50TGlzdCBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwidmFyaWVudC1saXN0XCIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YXJpZW50IG9mIHByb2R1Y3Q/Lml0ZW1WYXJpYW50OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIG9uZXJyb3I9XCJ0aGlzLnNyYz0naHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIFtzcmNdPVwidmFyaWVudC52YXJpYW50SW1hZ2VzPy5bMF0/LmltZ1VybCA/PyAnaHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIGFsdD1cIlwiIGNsYXNzPVwidmFyaWVudFwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdmFyaWVudCc6IHZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkfVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkID8gJ2JsdWUnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZhcmllbnQocHJvZHVjdCwgdmFyaWVudClcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNGYXZvdXJpdGVUYWdzIGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdBREQnKVwiICpuZ0lmPVwiIXByb2R1Y3Qud2hpc2xpc3RcIj5mYXZvcml0ZV9ib3JkZXI8L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdSRU1PVkUnKVwiICpuZ0lmPVwicHJvZHVjdC53aGlzbGlzdFwiPmZhdm9yaXRlPC9tYXQtaWNvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjQWRkVG9DYXJ0IGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJjb250ZW50Py5kaXNwbGF5Py5zaG93QnV0dG9uXCIgY2xhc3M9XCJhZGQtdG8tY2FydC1idG5cIj5cclxuICAgIDxidXR0b24gc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkKyhidXR0b24/LmlkIHx8ICcnKVwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiXHJcbiAgICAgIFtjb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiXHJcbiAgICAgIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdBREQnKVwiPnt7YnV0dG9uPy5jb250ZW50Py5sYWJlbCA/PyAnQWRkIHRvIENhcnQnfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWFudGl0eVwiICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPlxyXG4gICAgICA8c3BhbiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnU1VCU1RSQUNUJylcIj4tPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57e3Byb2R1Y3QucXVhbnRpdHl9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ0FERCcpXCI+Kzwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cIm91dC1vZi1zdG9ja1wiICpuZ0lmPVwiaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPk91dCBPZiBTdG9jazwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNQcm9kdWN0UHJpY2luZyBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByaWNlIGJvZHktbGFyZ2UgZC1mbGV4XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiPlxyXG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJwcm9kdWN0LnByaWNlLnZhbHVlICE9IHByb2R1Y3QucHJpY2UuZGlzY291bnRlZFByaWNlXCIgY2xhc3M9XCJzZWxsaW5nLXByaWNlXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09J2N1cnJlbmN5Jz48L3NwYW4+XHJcbiAgICAgICAge3twcm9kdWN0LnByaWNlLnZhbHVlfX1cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlzY291bnRlZC1wcmljZVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPSdjdXJyZW5jeSc+PC9zcGFuPlxyXG4gICAgICAgIHt7cHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2V9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Lml0ZW1WYXJpYW50Py5sZW5ndGhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkFkZFRvQ2FydDsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjUHJvZHVjdERlcyBsZXQtcHJvZHVjdD1cImRhdGFcIiBsZXQtaWR4PVwiaWR4XCI+XHJcbiAgPGRpdiAoY2xpY2spPVwicHJvY2VlZFRvUHJvZHVjdERlc2MocHJvZHVjdClcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRmF2b3VyaXRlVGFnczsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgb25lcnJvcj1cInRoaXMuc3JjPSdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXHJcbiAgICAgIFtpZF09XCIncHJldmlld18nK2lkeFwiIFtzcmNdPVwicHJvZHVjdC5pdGVtSW1hZ2VzPy5bcHJvZHVjdC5wcnZpZXdJZHhdPy5pbWdVcmxcIiBhbHQ9XCJcIlxyXG4gICAgICBjbGFzcz1cInByb2R1Y3QtaW1nIHByZWl2ZXdcIiAobW91c2VlbnRlcik9XCJ0b2dnbGVQcmV2aWV3SW1hZ2UocHJvZHVjdCwgaWR4KVwiXHJcbiAgICAgIChtb3VzZWxlYXZlKT1cInByb2R1Y3QucHJ2aWV3SWR4ID0gMFwiPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtdC0xNSB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtbmFtZSBoZWFkaW5nLWxhcmdlIHRleHQtbGVmdCB0cmltLXRleHQgdy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICBbc2ltcG9Db2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yXCI+XHJcbiAgICAgIHt7cHJvZHVjdC5uYW1lIH19PC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVmFyaWVudExpc3Q7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlByb2R1Y3RQcmljaW5nOyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiaXNMb2FkaW5nIHx8IGZpbHRlckxvYWRpbmdcIiBjb3VudD1cIjFcIiBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICB3aWR0aDogJzEwMCUnLFxyXG4gIGhlaWdodDogJzQwdmgnLFxyXG4gICdib3JkZXItcmFkaXVzJzogJzEwcHgnLFxyXG4gICdwb3NpdGlvbic6ICdyZWxhdGl2ZScsXHJcbiAgJ3JpZ2h0JzogJzVweCdcclxufVwiPlxyXG48L25neC1za2VsZXRvbi1sb2FkZXI+Il19
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxXQUFXLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBR3ZKLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFL0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUcs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S0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBNEJQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmVhdHVyZWRQcm9kdWN0Q29udGVudE1vZGFsLCBGZWF0dXJlZFByb2R1Y3RNb2RhbCwgRmVhdHVyZWRQcm9kdWN0U3R5bGVzTW9kZWwgfSBmcm9tICcuL2ZlYXR1cmVkLXByb2R1Y3RzLm1vZGFsJztcclxuaW1wb3J0IHsgUHJvZHVjdCwgSXRlbUltYWdlLCBJdGVtVmFyaWFudCB9IGZyb20gJy4uLy4uL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuaW1wb3J0IHsgSXRlbVZhcmllbnRDb21wb25lbnQgfSBmcm9tICcuLi9pdGVtLXZhcmllbnQvaXRlbS12YXJpZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWZlYXR1cmVkLXByb2R1Y3RzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU2ltcG9XcmFwQ29tbnRhaW5lcixcclxuICAgIE1hdEljb24sXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sb3JEaXJlY3RpdmUsXHJcbiAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmVkLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVkUHJvZHVjdHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGRhdGE6IEZlYXR1cmVkUHJvZHVjdE1vZGFsIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcmVzcG9uc2VEYXRhPzogUHJvZHVjdFtdO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGlzUmVsYXRlZFByb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIGNoYW5nZURldGFpbFByb2R1Y3Q6IEV2ZW50RW1pdHRlcjxQcm9kdWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcclxuICBjb250ZW50PzogRmVhdHVyZWRQcm9kdWN0Q29udGVudE1vZGFsO1xyXG4gIHN0eWxlcz86IEZlYXR1cmVkUHJvZHVjdFN0eWxlc01vZGVsO1xyXG4gIGJ1dHRvbj86IEJ1dHRvbk1vZGVsO1xyXG5cclxuICBwcml2YXRlIF9ldmVudFN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvdHRvbVNoZWV0OiBNYXRCb3R0b21TaGVldCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmdldFNjcmVlblNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgVVNFUl9DQVJUOiBPcmRlcmVkSXRlbXNbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgVVNFUl9XSVNITElTVDogT3JkZXJlZEl0ZW1zW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzogcmVzaXplXCIsIFtcIiRldmVudFwiXSlcclxuICBnZXRTY3JlZW5TaXplKCkge1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbi5idXR0b25zWzBdO1xyXG5cclxuICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICB0aGlzLmdldEZlYXR1cmVQcm9kdWN0KCk7XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyID0gdGhpcy5fZXZlbnRTZXJ2aWNlLmZlYXR1cmVDb2xsZWN0aW9uTGlzdC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZVByb2R1Y3QoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2Uuc2hvd0xvYWRpbmdTY3JlZW4uc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHJlc3BvbnNlO1xyXG4gICAgfSlcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNwb25zZURhdGEgPSB0aGlzLnJlc3BvbnNlRGF0YT8ubWFwKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucHJvZHVjdCxcclxuICAgICAgICBwcnZpZXdJZHg6IDBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2V2ZW50U3Vic2NyaWJlcilcclxuICAgICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZHVjdFdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPiA0NzUgPyAodGhpcy5zY3JlZW5XaWR0aCA8IDEwMjUgPyAnMjUlJyA6ICdjYWxjKCcgKyAoKDEwMCAvICh0aGlzLnN0eWxlcz8uZWxlbWVudEluUm93IHx8IDQpKSkgKyAnJSknKSA6ICh0aGlzLnN0eWxlcz8ubW9iaWxlQ29sdW1uID09PSAxID8gJzEwMCUnIDogJzUwJScpXHJcbiAgfVxyXG5cclxuICBnZXRTbGljZVBhcmFtZXRlcnMoKSB7XHJcbiAgICByZXR1cm4gWzAsICh0aGlzLnN0eWxlcz8ubWF4aW11bVByb2R1Y3QgfHwgMCldO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZVByb2R1Y3QoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEZlYXR1cmVkUHJvZHVjdCh0aGlzLmNvbnRlbnQ/LmNvbGxlY3Rpb25JZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlckNhcnQoKS50aGVuKChjYXJ0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjYXJ0UmVzcG9uc2Uub25zdWNjZXNzID0gKGNhcnREYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLlVTRVJfQ0FSVCA9IGNhcnREYXRhLnRhcmdldC5yZXN1bHQgYXMgdW5rbm93biBhcyBPcmRlcmVkSXRlbXNbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhPy5mb3JFYWNoKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtSWQgPT0gcHJvZHVjdC5pdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtVmFyaWVudDogSXRlbVZhcmlhbnQgPSBwcm9kdWN0Py5pdGVtVmFyaWFudD8uWzBdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbVZhcmllbnQudmFyaWFudElkID09IGl0ZW0udmFyaWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5pdGVtSW1hZ2VzID0gaXRlbVZhcmllbnQudmFyaWFudEltYWdlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LnByaWNlID0gaXRlbVZhcmllbnQuaXRlbVZhcmlhbnRQcmljZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LnF1YW50aXR5ID0gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcldoaXNobGlzdCgpLnRoZW4oKHdpc2hsaXN0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICB3aXNobGlzdFJlc3BvbnNlLm9uc3VjY2VzcyA9ICh3aGlzbGlzdERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUID0gd2hpc2xpc3REYXRhLnRhcmdldC5yZXN1bHQgYXMgdW5rbm93biBhcyBPcmRlcmVkSXRlbXNbXTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YT8uZm9yRWFjaCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVVNFUl9XSVNITElTVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbUlkID09IHByb2R1Y3QuaXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50ID0gcHJvZHVjdD8uaXRlbVZhcmlhbnQ/LlswXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1WYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IGl0ZW1WYXJpZW50Py52YXJpYW50SW1hZ2VzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2UgPSBpdGVtVmFyaWVudC5pdGVtVmFyaWFudFByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9nZ2xlSXRlbVRvRmF2KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdSRU1PVkUnKSB7XHJcblxyXG4gICAgaWYgKHR5cGUgPT0gJ0FERCcpIHtcclxuICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IHRydWU7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1dpc2hsaXN0JywgZGV0YWlsOiAnSXRlbSBhZGRlZCB0byB5b3VyIHdpc2hsaXN0JyB9KTtcclxuICAgICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpdGVtVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gdGhpcy5nZXRJdGVtVmFyaWVudChwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1WYXJpZW50KSB7XHJcbiAgICAgICAgICBpdGVtVmFyaWVudC53aXNobGlzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0Zhdm91cml0ZShwcm9kdWN0IGFzIFByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvRmF2b3VyaXRlKHByb2R1Y3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcHJvZHVjdC53aGlzbGlzdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnaW5mbycsIHN1bW1hcnk6ICdXaXNobGlzdCcsIGRldGFpbDogJ0l0ZW0gcmVtb3ZlIGZyb20geW91ciB3aXNobGlzdCcgfSk7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UucmVtb3ZlSXRlbUZyb21GYXZvdXJpdGUocHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2R1Y3Qud2hpc2xpc3QpIHtcclxuICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9XSVNITElTVCA9IHRoaXMuVVNFUl9XSVNITElTVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHByb2NlZWRUb1Byb2R1Y3REZXNjKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIGlmICh0aGlzLmlzUmVsYXRlZFByb2R1Y3QpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRhaWxQcm9kdWN0LmVtaXQocHJvZHVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYGRldGFpbHNgXSwgeyBxdWVyeVBhcmFtczogeyBpZDogcHJvZHVjdC5pdGVtSWQsIHZhcmllbnRJZDogcHJvZHVjdC52YXJpZW50SWQgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVByZXZpZXdJbWFnZShwcm9kdWN0OiBQcm9kdWN0LCBpZHg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3XycgKyBpZHgpO1xyXG4gICAgZWxlbWVudD8uY2xhc3NMaXN0LmFkZChcInRyYW5zaXRpb24tcHJlaXZld1wiKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcHJvZHVjdC5wcnZpZXdJZHggPSAoKHByb2R1Y3Q/Lml0ZW1JbWFnZXM/Lmxlbmd0aCA/PyAwKSA+IDEgPyAxIDogMCk7XHJcbiAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ3RyYW5zaXRpb24tcHJlaXZldycpO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuICBpc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBwcm9kdWN0Lml0ZW1JbnZlbnRvcnk/Lm9wZW5pbmdTdG9jayA9PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbVZhcmllbnQocHJvZHVjdDogUHJvZHVjdCwgdmFyaWVudElkOiBzdHJpbmcpOiBJdGVtVmFyaWFudCB8IG51bGwge1xyXG4gICAgbGV0IHNlbGVjdGVkVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gbnVsbDtcclxuICAgIHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5mb3JFYWNoKCh2YXJpZW50OiBJdGVtVmFyaWFudCkgPT4ge1xyXG4gICAgICBpZiAodmFyaWVudC52YXJpYW50SWQgPT0gdmFyaWVudElkKVxyXG4gICAgICAgIHNlbGVjdGVkVmFyaWVudCA9IHZhcmllbnQ7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZFZhcmllbnQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnQ6IEl0ZW1WYXJpYW50KSB7XHJcbiAgICAvLyBuZWRkIHRvIGNoYW5nZVxyXG4gICAgcHJvZHVjdC52YXJpZW50SWQgPSB2YXJpZW50LnZhcmlhbnRJZDtcclxuICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IHZhcmllbnQudmFyaWFudEltYWdlcztcclxuICAgIHByb2R1Y3QucHJpY2UgPSB2YXJpZW50Lml0ZW1WYXJpYW50UHJpY2U7XHJcbiAgICBwcm9kdWN0Lml0ZW1JbnZlbnRvcnkgPSB2YXJpZW50Lml0ZW1JbnZlbnRvcnk7XHJcbiAgICBwcm9kdWN0LnF1YW50aXR5ID0gdGhpcy5nZXRWYXJpZW50UXVhbnRpdHkodmFyaWVudCk7XHJcbiAgICBwcm9kdWN0LndoaXNsaXN0ID0gdGhpcy5pc1ZhcmllbnRQcmVzZW50SW5XaXNodGxpc3QodmFyaWVudCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVuY3koKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBCVVNJTkVTU19DT05TVEFOVFMuQ1VSUkVOQ1k7XHJcbiAgfVxyXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhcmllbnRRdWFudGl0eShwcm9kdWN0VmFyaWVudDogSXRlbVZhcmlhbnQpOiBudW1iZXIge1xyXG4gICAgbGV0IGl0ZW1RdWFudGl0eTogbnVtYmVyID0gMDtcclxuICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgaWYgKHByb2R1Y3RWYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZClcclxuICAgICAgICBpdGVtUXVhbnRpdHkgPSBpdGVtLnF1YW50aXR5O1xyXG4gICAgfSlcclxuICAgIHJldHVybiBpdGVtUXVhbnRpdHk7XHJcbiAgfVxyXG4gIHByaXZhdGUgaXNWYXJpZW50UHJlc2VudEluV2lzaHRsaXN0KHByb2R1Y3RWYXJpZW50OiBJdGVtVmFyaWFudCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHRoaXMuVVNFUl9XSVNITElTVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgIGlmIChwcm9kdWN0VmFyaWVudC52YXJpYW50SWQgPT0gaXRlbS52YXJpZW50SWQpXHJcbiAgICAgICAgcHJlc2VudCA9IHRydWU7XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHByZXNlbnQ7XHJcbiAgfVxyXG5cclxuICBlZGl0U2VjdGlvbigpe1xyXG4gICAgXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7ZGF0YTp0aGlzLmRhdGF9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiPjwvcC10b2FzdD5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICA8c2VjdGlvbiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0b3RhbC1jb250YWluZXJcIiBbaWRdPVwiZGF0YT8uaWRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiXHJcbiAgICBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIChjbGljayk9XCJlZGl0U2VjdGlvbigpXCIgPlxyXG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cImRpc3BsYXktYmxvY2tcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpdGVtLnZhbHVlXCIgW25nQ2xhc3NdPVwiaXRlbS5sYWJlbCA9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIHNyYz1cImh0dHBzOi8vZGV2LWJlZW9zLnMzLmFtYXpvbmF3cy5jb20vbGlicmFyeS1tZWRpYS83MTQxMjZjMTcwNzM3ODkzNTczMnNwYW4ucG5nXCIgYWx0PVwiXCJcclxuICAgICAgICBjbGFzcz1cInNwYW4taW1nIG10LTE1XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyTG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LXBhcmVudFwiICpuZ0lmPVwicmVzcG9uc2VEYXRhICYmIHJlc3BvbnNlRGF0YT8ubGVuZ3RoXCJcclxuICAgICAgICAgIFtzaW1wb1dyYXBDb250YWluZXJdPVwic3R5bGVzPy5kaXJlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgcmVzcG9uc2VEYXRhIHwgc2xpY2U6Z2V0U2xpY2VQYXJhbWV0ZXJzKClbMF06Z2V0U2xpY2VQYXJhbWV0ZXJzKClbMV07IGxldCBpZHggPSBpbmRleFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdFwiIFtzdHlsZS5taW5XaWR0aF09XCJnZXRQcm9kdWN0V2lkdGgoKVwiIFtzdHlsZS5tYXhXaWR0aF09XCJnZXRQcm9kdWN0V2lkdGgoKVwiPlxyXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJQcm9kdWN0RGVzOyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdCwgaWR4OiBpZHh9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L3NlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNWYXJpZW50TGlzdCBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwidmFyaWVudC1saXN0XCIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YXJpZW50IG9mIHByb2R1Y3Q/Lml0ZW1WYXJpYW50OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIG9uZXJyb3I9XCJ0aGlzLnNyYz0naHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIFtzcmNdPVwidmFyaWVudC52YXJpYW50SW1hZ2VzPy5bMF0/LmltZ1VybCA/PyAnaHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIGFsdD1cIlwiIGNsYXNzPVwidmFyaWVudFwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdmFyaWVudCc6IHZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkfVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkID8gJ2JsdWUnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZhcmllbnQocHJvZHVjdCwgdmFyaWVudClcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNGYXZvdXJpdGVUYWdzIGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdBREQnKVwiICpuZ0lmPVwiIXByb2R1Y3Qud2hpc2xpc3RcIj5mYXZvcml0ZV9ib3JkZXI8L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdSRU1PVkUnKVwiICpuZ0lmPVwicHJvZHVjdC53aGlzbGlzdFwiPmZhdm9yaXRlPC9tYXQtaWNvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjQWRkVG9DYXJ0IGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJjb250ZW50Py5kaXNwbGF5Py5zaG93QnV0dG9uXCIgY2xhc3M9XCJhZGQtdG8tY2FydC1idG5cIj5cclxuICAgIDxidXR0b24gc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkKyhidXR0b24/LmlkIHx8ICcnKVwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiXHJcbiAgICAgIFtjb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiXHJcbiAgICAgIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdBREQnKVwiPnt7YnV0dG9uPy5jb250ZW50Py5sYWJlbCA/PyAnQWRkIHRvIENhcnQnfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWFudGl0eVwiICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPlxyXG4gICAgICA8c3BhbiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnU1VCU1RSQUNUJylcIj4tPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57e3Byb2R1Y3QucXVhbnRpdHl9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ0FERCcpXCI+Kzwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cIm91dC1vZi1zdG9ja1wiICpuZ0lmPVwiaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPk91dCBPZiBTdG9jazwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNQcm9kdWN0UHJpY2luZyBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByaWNlIGJvZHktbGFyZ2UgZC1mbGV4XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiPlxyXG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJwcm9kdWN0LnByaWNlLnZhbHVlICE9IHByb2R1Y3QucHJpY2UuZGlzY291bnRlZFByaWNlXCIgY2xhc3M9XCJzZWxsaW5nLXByaWNlXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09J2N1cnJlbmN5Jz48L3NwYW4+XHJcbiAgICAgICAge3twcm9kdWN0LnByaWNlLnZhbHVlfX1cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlzY291bnRlZC1wcmljZVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPSdjdXJyZW5jeSc+PC9zcGFuPlxyXG4gICAgICAgIHt7cHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2V9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Lml0ZW1WYXJpYW50Py5sZW5ndGhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkFkZFRvQ2FydDsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjUHJvZHVjdERlcyBsZXQtcHJvZHVjdD1cImRhdGFcIiBsZXQtaWR4PVwiaWR4XCI+XHJcbiAgPGRpdiAoY2xpY2spPVwicHJvY2VlZFRvUHJvZHVjdERlc2MocHJvZHVjdClcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCIgW3N0eWxlLmhlaWdodC5weF09XCJpc01vYmlsZSA/IChzdHlsZXM/Lm1heGltdW1Qcm9kdWN0ID09IDEgPyAnNDgwJyA6ICcyMzAnICkgOiAnJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkZhdm91cml0ZVRhZ3M7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIG9uZXJyb3I9XCJ0aGlzLnNyYz0naHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICBbaWRdPVwiJ3ByZXZpZXdfJytpZHhcIiBbc3JjXT1cInByb2R1Y3QuaXRlbUltYWdlcz8uW3Byb2R1Y3QucHJ2aWV3SWR4XT8uaW1nVXJsXCIgYWx0PVwiXCJcclxuICAgICAgY2xhc3M9XCJwcm9kdWN0LWltZyBwcmVpdmV3XCIgKG1vdXNlZW50ZXIpPVwidG9nZ2xlUHJldmlld0ltYWdlKHByb2R1Y3QsIGlkeClcIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJwcm9kdWN0LnBydmlld0lkeCA9IDBcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibXQtMTUgdy0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LW5hbWUgaGVhZGluZy1sYXJnZSB0ZXh0LWxlZnQgdHJpbS10ZXh0IHctMTAwXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgW3NpbXBvQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiPlxyXG4gICAgICB7e3Byb2R1Y3QubmFtZSB9fTwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlZhcmllbnRMaXN0OyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJQcm9kdWN0UHJpY2luZzsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmd4LXNrZWxldG9uLWxvYWRlciAqbmdJZj1cImlzTG9hZGluZyB8fCBmaWx0ZXJMb2FkaW5nXCIgY291bnQ9XCIxXCIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgd2lkdGg6ICcxMDAlJyxcclxuICBoZWlnaHQ6ICc0MHZoJyxcclxuICAnYm9yZGVyLXJhZGl1cyc6ICcxMHB4JyxcclxuICAncG9zaXRpb24nOiAncmVsYXRpdmUnLFxyXG4gICdyaWdodCc6ICc1cHgnXHJcbn1cIj5cclxuPC9uZ3gtc2tlbGV0b24tbG9hZGVyPiJdfQ==