simpo-component-library 1.6.23 → 1.6.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +4 -4
  2. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -2
  3. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
  4. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  5. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +10 -7
  6. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +10 -7
  7. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +7 -3
  8. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +4 -3
  9. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +8 -6
  10. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
  11. package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +3 -3
  12. package/fesm2022/simpo-component-library.mjs +47 -33
  13. package/fesm2022/simpo-component-library.mjs.map +1 -1
  14. package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -0
  15. package/lib/ecommerce/sections/featured-category/featured-collection.component.d.ts +1 -0
  16. package/lib/ecommerce/sections/featured-products/featured-products.component.d.ts +2 -0
  17. package/package.json +1 -1
  18. package/simpo-component-library-1.6.27.tgz +0 -0
  19. package/simpo-component-library-1.6.18.tgz +0 -0
  20. package/simpo-component-library-1.6.19.tgz +0 -0
  21. package/simpo-component-library-1.6.20.tgz +0 -0
  22. package/simpo-component-library-1.6.21.tgz +0 -0
  23. package/simpo-component-library-1.6.22.tgz +0 -0
  24. package/simpo-component-library-1.6.23.tgz +0 -0
@@ -72,6 +72,7 @@ export class FeaturedProductsComponent extends BaseSection {
72
72
  this.content = this.data?.content;
73
73
  this.styles = this.data?.styles;
74
74
  this.button = this.data?.action.buttons[0];
75
+ this.viewAllButton = this.data?.action.buttons[1];
75
76
  if (!this.isRelatedProduct)
76
77
  this.getFeatureProduct();
77
78
  this._eventSubscriber = this._eventService.featureCollectionList.subscribe((response) => {
@@ -316,6 +317,9 @@ export class FeaturedProductsComponent extends BaseSection {
316
317
  get stylesLayout() {
317
318
  return { ...this.styles?.layout };
318
319
  }
320
+ proceedToProductList() {
321
+ this.router.navigate(['/list']);
322
+ }
319
323
  editSection() {
320
324
  this._eventService.toggleEditorEvent.emit(false);
321
325
  setTimeout(() => {
@@ -323,7 +327,7 @@ export class FeaturedProductsComponent extends BaseSection {
323
327
  }, 100);
324
328
  }
325
329
  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 }); }
326
- 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], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], 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\" [spacingHorizontal]=\"stylesLayout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img *ngIf=\"styles?.dividerImage?.showDivider\" loading=\"lazy\" [src]=\"styles?.dividerImage?.url\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent position-relative\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\" #container>\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.padding.px]=\"styles?.theme != theme.Theme1 ? '3' : ''\" [style.width.%]=\"styles?.theme != theme.Theme1 && isMobile && isRelatedProduct ? '48' : ''\" [style.minWidth]=\"applyProductWidth() ? getProductWidth() : ''\" [style.maxWidth]=\"applyProductWidth() ? getProductWidth() : ''\">\r\n <ng-container *ngIf=\"styles?.theme == theme.Theme1\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </ng-container>\r\n <div *ngIf=\"styles?.theme != theme.Theme1\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"this.screenWidth > 475 || (this.screenWidth <= 475 && styles?.direction == 'ROW')\"></simpo-small-product-listing>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\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 | sanitizeHtml'></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?.mobileColumn == 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>\r\n", styles: ["div[class*=arrow]{background-color:#fff;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:10000001;cursor:pointer}div[class*=arrow] .mat-icon{color:#000}.left-arrow{left:10px}.right-arrow{right:10px}.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%}.them2-lisiting{min-width:195px;max-width:195px;margin-right:10px}@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:
330
+ 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], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], 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\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"d-flex jc-space align-end\">\r\n <div>\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"body-large view-all\" *ngIf=\"content?.display?.showButton\" (click)=\"proceedToProductList()\">{{viewAllButton?.content?.label ?? 'See All'}} ></div>\r\n </div>\r\n <img *ngIf=\"styles?.dividerImage?.showDivider\" loading=\"lazy\" [src]=\"styles?.dividerImage?.url\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent position-relative\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\" #container>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n </ng-container>\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.padding.px]=\"styles?.theme != theme.Theme1 ? '3' : ''\" [style.width.%]=\"styles?.theme != theme.Theme1 && isMobile && isRelatedProduct ? '48' : ''\" [style.minWidth]=\"applyProductWidth() ? getProductWidth() : ''\" [style.maxWidth]=\"applyProductWidth() ? getProductWidth() : ''\">\r\n <ng-container *ngIf=\"styles?.theme == theme.Theme1\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </ng-container>\r\n <div *ngIf=\"styles?.theme != theme.Theme1\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"this.screenWidth > 475 || (this.screenWidth <= 475 && styles?.direction == 'ROW')\"></simpo-small-product-listing>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \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 | sanitizeHtml'></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?.mobileColumn == 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>\r\n", styles: ["div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:sticky;height:fit-content;top:50%;display:flex;align-items:center;justify-content:center;z-index:10000001;cursor:pointer}div[class*=arrow] .mat-icon{color:#000}.left-arrow{left:2px}.right-arrow{right:2px}.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%}.them2-lisiting{min-width:195px;max-width:195px;margin-right:10px}@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}.jc-space{justify-content:space-between}.align-end{align-items:end}.view-all{font-size:16px;font-weight:600}\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:
327
331
  //directive
328
332
  SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal"] }, { kind: "directive", type: 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"] }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "component", type: SmallProductListingComponent, selector: "simpo-small-product-listing", inputs: ["product", "data", "isScrollable", "isCategoryProductList"] }] }); }
329
333
  }
@@ -351,7 +355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
351
355
  ToastModule,
352
356
  SanitizeHtmlPipe,
353
357
  SmallProductListingComponent
354
- ], 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\" [spacingHorizontal]=\"stylesLayout\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n <img *ngIf=\"styles?.dividerImage?.showDivider\" loading=\"lazy\" [src]=\"styles?.dividerImage?.url\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent position-relative\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\" #container>\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.padding.px]=\"styles?.theme != theme.Theme1 ? '3' : ''\" [style.width.%]=\"styles?.theme != theme.Theme1 && isMobile && isRelatedProduct ? '48' : ''\" [style.minWidth]=\"applyProductWidth() ? getProductWidth() : ''\" [style.maxWidth]=\"applyProductWidth() ? getProductWidth() : ''\">\r\n <ng-container *ngIf=\"styles?.theme == theme.Theme1\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </ng-container>\r\n <div *ngIf=\"styles?.theme != theme.Theme1\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"this.screenWidth > 475 || (this.screenWidth <= 475 && styles?.direction == 'ROW')\"></simpo-small-product-listing>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\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 | sanitizeHtml'></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?.mobileColumn == 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>\r\n", styles: ["div[class*=arrow]{background-color:#fff;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:10000001;cursor:pointer}div[class*=arrow] .mat-icon{color:#000}.left-arrow{left:10px}.right-arrow{right:10px}.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%}.them2-lisiting{min-width:195px;max-width:195px;margin-right:10px}@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"] }]
358
+ ], 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\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"d-flex jc-space align-end\">\r\n <div>\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"body-large view-all\" *ngIf=\"content?.display?.showButton\" (click)=\"proceedToProductList()\">{{viewAllButton?.content?.label ?? 'See All'}} ></div>\r\n </div>\r\n <img *ngIf=\"styles?.dividerImage?.showDivider\" loading=\"lazy\" [src]=\"styles?.dividerImage?.url\" alt=\"\"\r\n class=\"span-img mt-15\">\r\n <ng-container *ngIf=\"!filterLoading\">\r\n <div class=\"product-parent position-relative\" *ngIf=\"responseData && responseData?.length\"\r\n [simpoWrapContainer]=\"styles?.direction\" #container>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n </ng-container>\r\n <div\r\n *ngFor=\"let product of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\r\n class=\"product\" [style.padding.px]=\"styles?.theme != theme.Theme1 ? '3' : ''\" [style.width.%]=\"styles?.theme != theme.Theme1 && isMobile && isRelatedProduct ? '48' : ''\" [style.minWidth]=\"applyProductWidth() ? getProductWidth() : ''\" [style.maxWidth]=\"applyProductWidth() ? getProductWidth() : ''\">\r\n <ng-container *ngIf=\"styles?.theme == theme.Theme1\">\r\n <ng-container *ngTemplateOutlet=\"ProductDes; context: {data: product, idx: idx}\"></ng-container>\r\n </ng-container>\r\n <div *ngIf=\"styles?.theme != theme.Theme1\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"this.screenWidth > 475 || (this.screenWidth <= 475 && styles?.direction == 'ROW')\"></simpo-small-product-listing>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"styles?.direction == 'ROW' && !isMobile\">\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && responseData?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \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 | sanitizeHtml'></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?.mobileColumn == 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>\r\n", styles: ["div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:sticky;height:fit-content;top:50%;display:flex;align-items:center;justify-content:center;z-index:10000001;cursor:pointer}div[class*=arrow] .mat-icon{color:#000}.left-arrow{left:2px}.right-arrow{right:2px}.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%}.them2-lisiting{min-width:195px;max-width:195px;margin-right:10px}@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}.jc-space{justify-content:space-between}.align-end{align-items:end}.view-all{font-size:16px;font-weight:600}\n"] }]
355
359
  }], ctorParameters: () => [{ type: Object, decorators: [{
356
360
  type: Inject,
357
361
  args: [PLATFORM_ID]
@@ -376,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
376
380
  type: HostListener,
377
381
  args: ["window: resize", ["$event"]]
378
382
  }] } });
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxXQUFXLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdEQUF3RCxD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Q0FBQzs7MEJBc0J4QixNQUFNOzJCQUFDLFdBQVc7NE9BakJaLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS2lCLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVztnQkF5QnRCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGZWF0dXJlZFByb2R1Y3RDb250ZW50TW9kYWwsIEZlYXR1cmVkUHJvZHVjdE1vZGFsLCBGZWF0dXJlZFByb2R1Y3RTdHlsZXNNb2RlbCB9IGZyb20gJy4vZmVhdHVyZWQtcHJvZHVjdHMubW9kYWwnO1xyXG5pbXBvcnQgeyBQcm9kdWN0LCBJdGVtSW1hZ2UsIEl0ZW1WYXJpYW50IH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvdGV4dC1iYWNrZ3JvdW5kLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2RlbCwgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuaW1wb3J0IHsgSXRlbVZhcmllbnRDb21wb25lbnQgfSBmcm9tICcuLi9pdGVtLXZhcmllbnQvaXRlbS12YXJpZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNhbml0aXplSHRtbFBpcGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYW5pdGl6ZUh0bWwnO1xyXG5pbXBvcnQgeyBQcm9kdWN0Q2FyZFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWZlYXR1cmVkLXByb2R1Y3RzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBTaW1wb1dyYXBDb21udGFpbmVyLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIE1hdEJvdHRvbVNoZWV0TW9kdWxlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgVG9hc3RNb2R1bGUsXHJcbiAgICBTYW5pdGl6ZUh0bWxQaXBlLFxyXG4gICAgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlZC1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZlYXR1cmVkLXByb2R1Y3RzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlZFByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBkYXRhOiBGZWF0dXJlZFByb2R1Y3RNb2RhbCB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YT86IFByb2R1Y3RbXTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBpc1JlbGF0ZWRQcm9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VEZXRhaWxQcm9kdWN0OiBFdmVudEVtaXR0ZXI8UHJvZHVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XHJcbiAgY29udGVudD86IEZlYXR1cmVkUHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzdHlsZXM/OiBGZWF0dXJlZFByb2R1Y3RTdHlsZXNNb2RlbDtcclxuICBidXR0b24/OiBCdXR0b25Nb2RlbDtcclxuXHJcbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiKSBjb250YWluZXJSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2V2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYm90dG9tU2hlZXQ6IE1hdEJvdHRvbVNoZWV0LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2NyZWVuU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzY3JlZW5XaWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBVU0VSX1dJU0hMSVNUOiBPcmRlcmVkSXRlbXNbXSB8IG51bGwgPSBudWxsO1xyXG4gIHRoZW1lID0gUHJvZHVjdENhcmRUaGVtZVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OiByZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIGdldFNjcmVlblNpemUoKSB7XHJcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmJ1dHRvbiA9IHRoaXMuZGF0YT8uYWN0aW9uLmJ1dHRvbnNbMF07XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzUmVsYXRlZFByb2R1Y3QpXHJcbiAgICAgIHRoaXMuZ2V0RmVhdHVyZVByb2R1Y3QoKTtcclxuXHJcbiAgICB0aGlzLl9ldmVudFN1YnNjcmliZXIgPSB0aGlzLl9ldmVudFNlcnZpY2UuZmVhdHVyZUNvbGxlY3Rpb25MaXN0LnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmlzUmVsYXRlZFByb2R1Y3QpXHJcbiAgICAgICAgdGhpcy5nZXRGZWF0dXJlUHJvZHVjdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gcmVzcG9uc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHRoaXMucmVzcG9uc2VEYXRhPy5tYXAoKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5wcm9kdWN0LFxyXG4gICAgICAgIHBydmlld0lkeDogMFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZXZlbnRTdWJzY3JpYmVyKVxyXG4gICAgICB0aGlzLl9ldmVudFN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVByb2R1Y3RXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0eWxlcz8udGhlbWUgPT09IHRoaXMudGhlbWUuVGhlbWUxIHx8XHJcbiAgICAgICh0aGlzLnNjcmVlbldpZHRoIDwgNDc1ICYmIHRoaXMuc3R5bGVzPy50aGVtZSA9PSB0aGlzLnRoZW1lLlRoZW1lMiAmJiB0aGlzLnN0eWxlcz8uZGlyZWN0aW9uICE9ICdST1cnKVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZHVjdFdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPiA0NzUgPyAodGhpcy5zY3JlZW5XaWR0aCA8IDEwMjUgPyAnMjUlJyA6ICdjYWxjKCcgKyAoKDEwMCAvICh0aGlzLnN0eWxlcz8uZWxlbWVudEluUm93IHx8IDQpKSkgKyAnJSknKSA6ICh0aGlzLnN0eWxlcz8ubW9iaWxlQ29sdW1uID09PSAxID8gJzEwMCUnIDogJzUwJScpXHJcbiAgfVxyXG5cclxuICBnZXRTbGljZVBhcmFtZXRlcnMoKSB7XHJcbiAgICByZXR1cm4gWzAsICh0aGlzLnN0eWxlcz8ubWF4aW11bVByb2R1Y3QgfHwgMCldO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZVByb2R1Y3QoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEZlYXR1cmVkUHJvZHVjdCh0aGlzLmNvbnRlbnQ/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/Lml0ZW1WYXJpYW50Py5mb3JFYWNoKCh2YXJpZW50OiBJdGVtVmFyaWFudCkgPT4ge1xyXG4gICAgICBpZiAodmFyaWVudC52YXJpYW50SWQgPT0gdmFyaWVudElkKVxyXG4gICAgICAgIHNlbGVjdGVkVmFyaWVudCA9IHZhcmllbnQ7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZFZhcmllbnQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnQ6IEl0ZW1WYXJpYW50KSB7XHJcbiAgICAvLyBuZWRkIHRvIGNoYW5nZVxyXG4gICAgcHJvZHVjdC52YXJpZW50SWQgPSB2YXJpZW50LnZhcmlhbnRJZDtcclxuICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IHZhcmllbnQudmFyaWFudEltYWdlcztcclxuICAgIHByb2R1Y3QucHJpY2UgPSB2YXJpZW50Lml0ZW1WYXJpYW50UHJpY2U7XHJcbiAgICBwcm9kdWN0Lml0ZW1JbnZlbnRvcnkgPSB2YXJpZW50Lml0ZW1JbnZlbnRvcnk7XHJcbiAgICBwcm9kdWN0LnF1YW50aXR5ID0gdGhpcy5nZXRWYXJpZW50UXVhbnRpdHkodmFyaWVudCk7XHJcbiAgICBwcm9kdWN0LndoaXNsaXN0ID0gdGhpcy5pc1ZhcmllbnRQcmVzZW50SW5XaXNodGxpc3QodmFyaWVudCk7XHJcbiAgfVxyXG4gIFxyXG4gIHNjcm9sbFJpZ2h0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGxldCBzY3JvbGxBbW91bnQgPSAwO1xyXG4gICAgICBjb25zdCBzbGlkZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIHNjcm9sbEFtb3VudCArPSBjb250YWluZXIuY2xpZW50V2lkdGggLyAxMjtcclxuICAgICAgICBpZiAoc2Nyb2xsQW1vdW50ID49IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDIpIHtcclxuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHNsaWRlVGltZXIpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDI1KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2Nyb2xsTGVmdCgpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICBsZXQgc2Nyb2xsQW1vdW50ID0gMDtcclxuICAgICAgY29uc3Qgc2xpZGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBjb250YWluZXIuc2Nyb2xsTGVmdCAtPSBjb250YWluZXIuY2xpZW50V2lkdGggLyAxMjtcclxuICAgICAgICBzY3JvbGxBbW91bnQgKz0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMTI7XHJcbiAgICAgICAgaWYgKHNjcm9sbEFtb3VudCA+PSBjb250YWluZXIuY2xpZW50V2lkdGggLyAyKSB7XHJcbiAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChzbGlkZVRpbWVyKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQXJyb3dzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAyNSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dSaWdodEFycm93ID0gdHJ1ZTtcclxuICBzaG93TGVmdEFycm93ID0gZmFsc2U7XHJcbiAgdXBkYXRlQXJyb3dzKCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChlbCkge1xyXG4gICAgICB0aGlzLnNob3dSaWdodEFycm93ID0gKGVsLnNjcm9sbFdpZHRoIC0gZWwuc2Nyb2xsTGVmdCAtIGVsLmNsaWVudFdpZHRoKSA+PSAxO1xyXG4gICAgICB0aGlzLnNob3dMZWZ0QXJyb3cgPSBlbC5zY3JvbGxMZWZ0ID4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJVU0lORVNTX0NPTlNUQU5UUy5DVVJSRU5DWTtcclxuICB9XHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFyaWVudFF1YW50aXR5KHByb2R1Y3RWYXJpZW50OiBJdGVtVmFyaWFudCk6IG51bWJlciB7XHJcbiAgICBsZXQgaXRlbVF1YW50aXR5OiBudW1iZXIgPSAwO1xyXG4gICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICBpZiAocHJvZHVjdFZhcmllbnQudmFyaWFudElkID09IGl0ZW0udmFyaWVudElkKVxyXG4gICAgICAgIGl0ZW1RdWFudGl0eSA9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGl0ZW1RdWFudGl0eTtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1ZhcmllbnRQcmVzZW50SW5XaXNodGxpc3QocHJvZHVjdFZhcmllbnQ6IEl0ZW1WYXJpYW50KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5VU0VSX1dJU0hMSVNUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgaWYgKHByb2R1Y3RWYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZClcclxuICAgICAgICBwcmVzZW50ID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgICByZXR1cm4gcHJlc2VudDtcclxuICB9XHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7Li4udGhpcy5zdHlsZXM/LmxheW91dH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG5cclxuICBlZGl0U2VjdGlvbigpe1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHtkYXRhOnRoaXMuZGF0YX0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCI+PC9wLXRvYXN0PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gIDxzZWN0aW9uIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRvdGFsLWNvbnRhaW5lclwiIFtpZF09XCJkYXRhPy5pZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCJcclxuICAgIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgKGNsaWNrKT1cImVkaXRTZWN0aW9uKClcIj5cclxuICAgIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgY2xhc3M9XCJkaXNwbGF5LWJsb2NrXCIgI21haW5Db250YWluZXIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbc2ltcG9Cb3JkZXJdPVwic3R5bGVzPy5ib3JkZXJcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIiBbbmdDbGFzc109XCJpdGVtLmxhYmVsID09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW1nICpuZ0lmPVwic3R5bGVzPy5kaXZpZGVySW1hZ2U/LnNob3dEaXZpZGVyXCIgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cInN0eWxlcz8uZGl2aWRlckltYWdlPy51cmxcIiBhbHQ9XCJcIlxyXG4gICAgICAgIGNsYXNzPVwic3Bhbi1pbWcgbXQtMTVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXJMb2FkaW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtcGFyZW50IHBvc2l0aW9uLXJlbGF0aXZlXCIgKm5nSWY9XCJyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhPy5sZW5ndGhcIlxyXG4gICAgICAgICAgW3NpbXBvV3JhcENvbnRhaW5lcl09XCJzdHlsZXM/LmRpcmVjdGlvblwiICNjb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHJlc3BvbnNlRGF0YSB8IHNsaWNlOmdldFNsaWNlUGFyYW1ldGVycygpWzBdOmdldFNsaWNlUGFyYW1ldGVycygpWzFdOyBsZXQgaWR4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInByb2R1Y3RcIiBbc3R5bGUucGFkZGluZy5weF09XCJzdHlsZXM/LnRoZW1lICE9IHRoZW1lLlRoZW1lMSA/ICczJyA6ICcnXCIgW3N0eWxlLndpZHRoLiVdPVwic3R5bGVzPy50aGVtZSAhPSB0aGVtZS5UaGVtZTEgJiYgaXNNb2JpbGUgJiYgaXNSZWxhdGVkUHJvZHVjdCA/ICc0OCcgOiAnJ1wiIFtzdHlsZS5taW5XaWR0aF09XCJhcHBseVByb2R1Y3RXaWR0aCgpID8gZ2V0UHJvZHVjdFdpZHRoKCkgOiAnJ1wiIFtzdHlsZS5tYXhXaWR0aF09XCJhcHBseVByb2R1Y3RXaWR0aCgpID8gZ2V0UHJvZHVjdFdpZHRoKCkgOiAnJ1wiPlxyXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LnRoZW1lID09IHRoZW1lLlRoZW1lMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiUHJvZHVjdERlczsgY29udGV4dDoge2RhdGE6IHByb2R1Y3QsIGlkeDogaWR4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdHlsZXM/LnRoZW1lICE9IHRoZW1lLlRoZW1lMVwiPlxyXG4gICAgICAgICAgICA8c2ltcG8tc21hbGwtcHJvZHVjdC1saXN0aW5nIFtwcm9kdWN0XT1cInByb2R1Y3RcIiBbZGF0YV09XCJkYXRhXCIgW2lzU2Nyb2xsYWJsZV09XCJ0aGlzLnNjcmVlbldpZHRoID4gNDc1IHx8ICh0aGlzLnNjcmVlbldpZHRoIDw9IDQ3NSAmJiBzdHlsZXM/LmRpcmVjdGlvbiA9PSAnUk9XJylcIj48L3NpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZz5cclxuICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRpcmVjdGlvbiA9PSAnUk9XJyAmJiAhaXNNb2JpbGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWFycm93XCIgKGNsaWNrKT1cInNjcm9sbExlZnQoKVwiICpuZ0lmPVwic2hvd0xlZnRBcnJvdyAmJiByZXNwb25zZURhdGE/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxSaWdodCgpXCIgKm5nSWY9XCJzaG93UmlnaHRBcnJvdyAmJiByZXNwb25zZURhdGE/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9zZWN0aW9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjVmFyaWVudExpc3QgbGV0LXByb2R1Y3Q9XCJkYXRhXCI+XHJcbiAgPGRpdiBjbGFzcz1cInZhcmllbnQtbGlzdFwiICpuZ0lmPVwicHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWVudCBvZiBwcm9kdWN0Py5pdGVtVmFyaWFudDsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBvbmVycm9yPVwidGhpcy5zcmM9J2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcclxuICAgICAgICBbc3JjXT1cInZhcmllbnQudmFyaWFudEltYWdlcz8uWzBdPy5pbWdVcmwgPz8gJ2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcclxuICAgICAgICBhbHQ9XCJcIiBjbGFzcz1cInZhcmllbnRcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLXZhcmllbnQnOiB2YXJpZW50LnZhcmlhbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZH1cIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJ2YXJpZW50LnZhcmlhbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCA/ICdibHVlJyA6ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RWYXJpZW50KHByb2R1Y3QsIHZhcmllbnQpXCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjRmF2b3VyaXRlVGFncyBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJmYXYtaWNvblwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVJdGVtVG9GYXYoJGV2ZW50LCBwcm9kdWN0LCAnQUREJylcIiAqbmdJZj1cIiFwcm9kdWN0LndoaXNsaXN0XCI+ZmF2b3JpdGVfYm9yZGVyPC9tYXQtaWNvbj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJmYXYtaWNvblwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVJdGVtVG9GYXYoJGV2ZW50LCBwcm9kdWN0LCAnUkVNT1ZFJylcIiAqbmdJZj1cInByb2R1Y3Qud2hpc2xpc3RcIj5mYXZvcml0ZTwvbWF0LWljb24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI0FkZFRvQ2FydCBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2ICpuZ0lmPVwiY29udGVudD8uZGlzcGxheT8uc2hvd0J1dHRvblwiIGNsYXNzPVwiYWRkLXRvLWNhcnQtYnRuXCI+XHJcbiAgICA8YnV0dG9uIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCsoYnV0dG9uPy5pZCB8fCAnJylcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIlxyXG4gICAgICBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiIXByb2R1Y3QucXVhbnRpdHkgJiYgIWlzSXRlbU91dE9mU3RvY2socHJvZHVjdClcIlxyXG4gICAgICAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnQUREJylcIj57e2J1dHRvbj8uY29udGVudD8ubGFiZWwgPz8gJ0FkZCB0byBDYXJ0J319PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwicXVhbnRpdHlcIiAqbmdJZj1cInByb2R1Y3QucXVhbnRpdHkgJiYgIWlzSXRlbU91dE9mU3RvY2socHJvZHVjdClcIj5cclxuICAgICAgPHNwYW4gKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ1NVQlNUUkFDVCcpXCI+LTwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3twcm9kdWN0LnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgIDxzcGFuIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdBREQnKVwiPis8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gZGlzYWJsZWQgY2xhc3M9XCJvdXQtb2Ytc3RvY2tcIiAqbmdJZj1cImlzSXRlbU91dE9mU3RvY2socHJvZHVjdClcIj5PdXQgT2YgU3RvY2s8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjUHJvZHVjdFByaWNpbmcgbGV0LXByb2R1Y3Q9XCJkYXRhXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcmljZSBib2R5LWxhcmdlIGQtZmxleFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0NvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3JcIj5cclxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5wcmljZS52YWx1ZSAhPSBwcm9kdWN0LnByaWNlLmRpc2NvdW50ZWRQcmljZVwiIGNsYXNzPVwic2VsbGluZy1wcmljZVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPSdjdXJyZW5jeSc+PC9zcGFuPlxyXG4gICAgICAgIHt7cHJvZHVjdC5wcmljZS52YWx1ZX19XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpc2NvdW50ZWQtcHJpY2VcIj5cclxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT0nY3VycmVuY3kgfCBzYW5pdGl6ZUh0bWwnPjwvc3Bhbj5cclxuICAgICAgICB7e3Byb2R1Y3QucHJpY2UuZGlzY291bnRlZFByaWNlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5pdGVtVmFyaWFudD8ubGVuZ3RoXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJBZGRUb0NhcnQ7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI1Byb2R1Y3REZXMgbGV0LXByb2R1Y3Q9XCJkYXRhXCIgbGV0LWlkeD1cImlkeFwiPlxyXG4gIDxkaXYgKGNsaWNrKT1cInByb2NlZWRUb1Byb2R1Y3REZXNjKHByb2R1Y3QpXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaXNNb2JpbGUgPyAoc3R5bGVzPy5tb2JpbGVDb2x1bW4gPT0gMSA/ICc0ODAnIDogJzIzMCcgKSA6ICcnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRmF2b3VyaXRlVGFnczsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgb25lcnJvcj1cInRoaXMuc3JjPSdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXHJcbiAgICAgIFtpZF09XCIncHJldmlld18nK2lkeFwiIFtzcmNdPVwicHJvZHVjdC5pdGVtSW1hZ2VzPy5bcHJvZHVjdC5wcnZpZXdJZHhdPy5pbWdVcmxcIiBhbHQ9XCJcIlxyXG4gICAgICBjbGFzcz1cInByb2R1Y3QtaW1nIHByZWl2ZXdcIiAobW91c2VlbnRlcik9XCJ0b2dnbGVQcmV2aWV3SW1hZ2UocHJvZHVjdCwgaWR4KVwiXHJcbiAgICAgIChtb3VzZWxlYXZlKT1cInByb2R1Y3QucHJ2aWV3SWR4ID0gMFwiPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtdC0xNSB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtbmFtZSBoZWFkaW5nLWxhcmdlIHRleHQtbGVmdCB0cmltLXRleHQgdy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICBbc2ltcG9Db2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yXCI+XHJcbiAgICAgIHt7cHJvZHVjdC5uYW1lIH19PC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVmFyaWVudExpc3Q7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlByb2R1Y3RQcmljaW5nOyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiaXNMb2FkaW5nIHx8IGZpbHRlckxvYWRpbmdcIiBjb3VudD1cIjFcIiBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICB3aWR0aDogJzEwMCUnLFxyXG4gIGhlaWdodDogJzQwdmgnLFxyXG4gICdib3JkZXItcmFkaXVzJzogJzEwcHgnLFxyXG4gICdwb3NpdGlvbic6ICdyZWxhdGl2ZScsXHJcbiAgJ3JpZ2h0JzogJzVweCdcclxufVwiPlxyXG48L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiJdfQ==
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxXQUFXLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdEQUF3RCxD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QW1CO3dCQUNuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGdDQUFnQzt3QkFDaEMsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLDRCQUE0QjtxQkFDN0IsYUFDVSxDQUFDLGNBQWMsQ0FBQzs7MEJBdUJ4QixNQUFNOzJCQUFDLFdBQVc7NE9BbEJaLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBTWlCLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVztnQkF5QnRCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGZWF0dXJlZFByb2R1Y3RDb250ZW50TW9kYWwsIEZlYXR1cmVkUHJvZHVjdE1vZGFsLCBGZWF0dXJlZFByb2R1Y3RTdHlsZXNNb2RlbCB9IGZyb20gJy4vZmVhdHVyZWQtcHJvZHVjdHMubW9kYWwnO1xyXG5pbXBvcnQgeyBQcm9kdWN0LCBJdGVtSW1hZ2UsIEl0ZW1WYXJpYW50IH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvdGV4dC1iYWNrZ3JvdW5kLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2RlbCwgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuaW1wb3J0IHsgSXRlbVZhcmllbnRDb21wb25lbnQgfSBmcm9tICcuLi9pdGVtLXZhcmllbnQvaXRlbS12YXJpZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNhbml0aXplSHRtbFBpcGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYW5pdGl6ZUh0bWwnO1xyXG5pbXBvcnQgeyBQcm9kdWN0Q2FyZFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWZlYXR1cmVkLXByb2R1Y3RzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBTaW1wb1dyYXBDb21udGFpbmVyLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIE1hdEJvdHRvbVNoZWV0TW9kdWxlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgVG9hc3RNb2R1bGUsXHJcbiAgICBTYW5pdGl6ZUh0bWxQaXBlLFxyXG4gICAgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlZC1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZlYXR1cmVkLXByb2R1Y3RzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlZFByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBkYXRhOiBGZWF0dXJlZFByb2R1Y3RNb2RhbCB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YT86IFByb2R1Y3RbXTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBpc1JlbGF0ZWRQcm9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VEZXRhaWxQcm9kdWN0OiBFdmVudEVtaXR0ZXI8UHJvZHVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XHJcbiAgY29udGVudD86IEZlYXR1cmVkUHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzdHlsZXM/OiBGZWF0dXJlZFByb2R1Y3RTdHlsZXNNb2RlbDtcclxuICBidXR0b24/OiBCdXR0b25Nb2RlbDtcclxuICB2aWV3QWxsQnV0dG9uPzogQnV0dG9uTW9kZWxcclxuXHJcbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiKSBjb250YWluZXJSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2V2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYm90dG9tU2hlZXQ6IE1hdEJvdHRvbVNoZWV0LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2NyZWVuU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzY3JlZW5XaWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBVU0VSX1dJU0hMSVNUOiBPcmRlcmVkSXRlbXNbXSB8IG51bGwgPSBudWxsO1xyXG4gIHRoZW1lID0gUHJvZHVjdENhcmRUaGVtZVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OiByZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIGdldFNjcmVlblNpemUoKSB7XHJcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmJ1dHRvbiA9IHRoaXMuZGF0YT8uYWN0aW9uLmJ1dHRvbnNbMF07XHJcbiAgICB0aGlzLnZpZXdBbGxCdXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbi5idXR0b25zWzFdO1xyXG5cclxuICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICB0aGlzLmdldEZlYXR1cmVQcm9kdWN0KCk7XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyID0gdGhpcy5fZXZlbnRTZXJ2aWNlLmZlYXR1cmVDb2xsZWN0aW9uTGlzdC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc1JlbGF0ZWRQcm9kdWN0KVxyXG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZVByb2R1Y3QoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2Uuc2hvd0xvYWRpbmdTY3JlZW4uc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHJlc3BvbnNlO1xyXG4gICAgfSlcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNwb25zZURhdGEgPSB0aGlzLnJlc3BvbnNlRGF0YT8ubWFwKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucHJvZHVjdCxcclxuICAgICAgICBwcnZpZXdJZHg6IDBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2V2ZW50U3Vic2NyaWJlcilcclxuICAgICAgdGhpcy5fZXZlbnRTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlQcm9kdWN0V2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZXM/LnRoZW1lID09PSB0aGlzLnRoZW1lLlRoZW1lMSB8fFxyXG4gICAgICAodGhpcy5zY3JlZW5XaWR0aCA8IDQ3NSAmJiB0aGlzLnN0eWxlcz8udGhlbWUgPT0gdGhpcy50aGVtZS5UaGVtZTIgJiYgdGhpcy5zdHlsZXM/LmRpcmVjdGlvbiAhPSAnUk9XJylcclxuICB9XHJcblxyXG4gIGdldFByb2R1Y3RXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID4gNDc1ID8gKHRoaXMuc2NyZWVuV2lkdGggPCAxMDI1ID8gJzI1JScgOiAnY2FsYygnICsgKCgxMDAgLyAodGhpcy5zdHlsZXM/LmVsZW1lbnRJblJvdyB8fCA0KSkpICsgJyUpJykgOiAodGhpcy5zdHlsZXM/Lm1vYmlsZUNvbHVtbiA9PT0gMSA/ICcxMDAlJyA6ICc1MCUnKVxyXG4gIH1cclxuXHJcbiAgZ2V0U2xpY2VQYXJhbWV0ZXJzKCkge1xyXG4gICAgcmV0dXJuIFswLCAodGhpcy5zdHlsZXM/Lm1heGltdW1Qcm9kdWN0IHx8IDApXTtcclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmVQcm9kdWN0KCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRGZWF0dXJlZFByb2R1Y3QodGhpcy5jb250ZW50Py5jb2xsZWN0aW9uSWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXJDYXJ0KCkudGhlbigoY2FydFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY2FydFJlc3BvbnNlLm9uc3VjY2VzcyA9IChjYXJ0RGF0YTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5VU0VSX0NBUlQgPSBjYXJ0RGF0YS50YXJnZXQucmVzdWx0IGFzIHVua25vd24gYXMgT3JkZXJlZEl0ZW1zW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YT8uZm9yRWFjaCgocHJvZHVjdDogUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlVTRVJfQ0FSVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbUlkID09IHByb2R1Y3QuaXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50ID0gcHJvZHVjdD8uaXRlbVZhcmlhbnQ/LlswXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1WYXJpZW50LnZhcmlhbnRJZCA9PSBpdGVtLnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbUltYWdlcyA9IGl0ZW1WYXJpZW50LnZhcmlhbnRJbWFnZXMgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5wcmljZSA9IGl0ZW1WYXJpZW50Lml0ZW1WYXJpYW50UHJpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3QucXVhbnRpdHkgPSBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXJXaGlzaGxpc3QoKS50aGVuKCh3aXNobGlzdFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgd2lzaGxpc3RSZXNwb25zZS5vbnN1Y2Nlc3MgPSAod2hpc2xpc3REYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuVVNFUl9XSVNITElTVCA9IHdoaXNsaXN0RGF0YS50YXJnZXQucmVzdWx0IGFzIHVua25vd24gYXMgT3JkZXJlZEl0ZW1zW107XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNwb25zZURhdGE/LmZvckVhY2goKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlVTRVJfV0lTSExJU1Q/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1JZCA9PSBwcm9kdWN0Lml0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1WYXJpZW50OiBJdGVtVmFyaWFudCA9IHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5bMF07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtVmFyaWVudC52YXJpYW50SWQgPT0gaXRlbS52YXJpZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Lml0ZW1JbWFnZXMgPSBpdGVtVmFyaWVudD8udmFyaWFudEltYWdlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LnByaWNlID0gaXRlbVZhcmllbnQuaXRlbVZhcmlhbnRQcmljZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LndoaXNsaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcbiAgYWRkSXRlbVRvQ2FydChwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdTVUJTVFJBQ1QnKSB7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3QpKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ0NhcnQnLCBkZXRhaWw6ICdJdGVtIGlzIG5vdCBhdmFpbGFibGUgYXMgb2Ygbm93LiBXZSB3aWxsIG5vdGlmeSB5b3Ugb25jZSBhdmFpbGFibGUnIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwcm9kdWN0Py5xdWFudGl0eSlcclxuICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IDA7XHJcbiAgICBpZiAodHlwZSA9PSAnQUREJykge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ICs9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcHJvZHVjdC5xdWFudGl0eSAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1WYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSB0aGlzLmdldEl0ZW1WYXJpZW50KHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKTtcclxuICAgICAgaWYgKGl0ZW1WYXJpZW50KSB7XHJcbiAgICAgICAgaXRlbVZhcmllbnQucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0LCBpdGVtVmFyaWVudC52YXJpYW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0NhcnQocHJvZHVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvZHVjdC5xdWFudGl0eSkge1xyXG4gICAgICBsZXQgaXNQcmVzZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS52YXJpZW50SWQgPT0gcHJvZHVjdC52YXJpZW50SWQpIHtcclxuICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgICAgaXNQcmVzZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICghaXNQcmVzZW50KVxyXG4gICAgICAgIHRoaXMuVVNFUl9DQVJUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUID0gdGhpcy5VU0VSX0NBUlQ/LmZpbHRlcigoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiBpdGVtLnZhcmllbnRJZCAhPSBwcm9kdWN0LnZhcmllbnRJZCkgPz8gW107XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRvZ2dsZUl0ZW1Ub0ZhdihldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCwgdHlwZTogJ0FERCcgfCAnUkVNT1ZFJykge1xyXG5cclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXaXNobGlzdCcsIGRldGFpbDogJ0l0ZW0gYWRkZWQgdG8geW91ciB3aXNobGlzdCcgfSk7XHJcbiAgICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICAgIGlmIChpdGVtVmFyaWVudCkge1xyXG4gICAgICAgICAgaXRlbVZhcmllbnQud2lzaGxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9GYXZvdXJpdGUocHJvZHVjdCBhcyBQcm9kdWN0LCBpdGVtVmFyaWVudC52YXJpYW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0Zhdm91cml0ZShwcm9kdWN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2luZm8nLCBzdW1tYXJ5OiAnV2lzaGxpc3QnLCBkZXRhaWw6ICdJdGVtIHJlbW92ZSBmcm9tIHlvdXIgd2lzaGxpc3QnIH0pO1xyXG4gICAgICB0aGlzLmNhcnRTZXJ2aWNlLnJlbW92ZUl0ZW1Gcm9tRmF2b3VyaXRlKHByb2R1Y3QudmFyaWVudElkKTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LndoaXNsaXN0KSB7XHJcbiAgICAgIHRoaXMuVVNFUl9XSVNITElTVD8ucHVzaChuZXcgT3JkZXJlZEl0ZW1zKHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLlVTRVJfV0lTSExJU1QgPSB0aGlzLlVTRVJfV0lTSExJU1Q/LmZpbHRlcigoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiBpdGVtLnZhcmllbnRJZCAhPSBwcm9kdWN0LnZhcmllbnRJZCkgPz8gW107XHJcbiAgICB9XHJcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcm9jZWVkVG9Qcm9kdWN0RGVzYyhwcm9kdWN0OiBQcm9kdWN0KSB7XHJcbiAgICBpZiAodGhpcy5pc1JlbGF0ZWRQcm9kdWN0KSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0YWlsUHJvZHVjdC5lbWl0KHByb2R1Y3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2BkZXRhaWxzYF0sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHByb2R1Y3QuaXRlbUlkLCB2YXJpZW50SWQ6IHByb2R1Y3QudmFyaWVudElkIH0gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQcmV2aWV3SW1hZ2UocHJvZHVjdDogUHJvZHVjdCwgaWR4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlld18nICsgaWR4KTtcclxuICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoXCJ0cmFuc2l0aW9uLXByZWl2ZXdcIik7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHByb2R1Y3QucHJ2aWV3SWR4ID0gKChwcm9kdWN0Py5pdGVtSW1hZ2VzPy5sZW5ndGggPz8gMCkgPiAxID8gMSA6IDApO1xyXG4gICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCd0cmFuc2l0aW9uLXByZWl2ZXcnKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcbiAgaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gcHJvZHVjdC5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2sgPT0gMDtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09IHZhcmllbnRJZClcclxuICAgICAgICBzZWxlY3RlZFZhcmllbnQgPSB2YXJpZW50O1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmFyaWVudChwcm9kdWN0OiBQcm9kdWN0LCB2YXJpZW50OiBJdGVtVmFyaWFudCkge1xyXG4gICAgLy8gbmVkZCB0byBjaGFuZ2VcclxuICAgIHByb2R1Y3QudmFyaWVudElkID0gdmFyaWVudC52YXJpYW50SWQ7XHJcbiAgICBwcm9kdWN0Lml0ZW1JbWFnZXMgPSB2YXJpZW50LnZhcmlhbnRJbWFnZXM7XHJcbiAgICBwcm9kdWN0LnByaWNlID0gdmFyaWVudC5pdGVtVmFyaWFudFByaWNlO1xyXG4gICAgcHJvZHVjdC5pdGVtSW52ZW50b3J5ID0gdmFyaWVudC5pdGVtSW52ZW50b3J5O1xyXG4gICAgcHJvZHVjdC5xdWFudGl0eSA9IHRoaXMuZ2V0VmFyaWVudFF1YW50aXR5KHZhcmllbnQpO1xyXG4gICAgcHJvZHVjdC53aGlzbGlzdCA9IHRoaXMuaXNWYXJpZW50UHJlc2VudEluV2lzaHRsaXN0KHZhcmllbnQpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsUmlnaHQoKSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XHJcbiAgICAgIGNvbnN0IHNsaWRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKz0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMTI7XHJcbiAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIGlmIChzY3JvbGxBbW91bnQgPj0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMikge1xyXG4gICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoc2xpZGVUaW1lcik7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFycm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzY3JvbGxMZWZ0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGxldCBzY3JvbGxBbW91bnQgPSAwO1xyXG4gICAgICBjb25zdCBzbGlkZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0IC09IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIHNjcm9sbEFtb3VudCArPSBjb250YWluZXIuY2xpZW50V2lkdGggLyAxMjtcclxuICAgICAgICBpZiAoc2Nyb2xsQW1vdW50ID49IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDIpIHtcclxuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHNsaWRlVGltZXIpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDI1KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd1JpZ2h0QXJyb3cgPSB0cnVlO1xyXG4gIHNob3dMZWZ0QXJyb3cgPSBmYWxzZTtcclxuICB1cGRhdGVBcnJvd3MoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JpZ2h0QXJyb3cgPSAoZWwuc2Nyb2xsV2lkdGggLSBlbC5zY3JvbGxMZWZ0IC0gZWwuY2xpZW50V2lkdGgpID49IDE7XHJcbiAgICAgIHRoaXMuc2hvd0xlZnRBcnJvdyA9IGVsLnNjcm9sbExlZnQgPiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQlVTSU5FU1NfQ09OU1RBTlRTLkNVUlJFTkNZO1xyXG4gIH1cclxuICBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWYXJpZW50UXVhbnRpdHkocHJvZHVjdFZhcmllbnQ6IEl0ZW1WYXJpYW50KTogbnVtYmVyIHtcclxuICAgIGxldCBpdGVtUXVhbnRpdHk6IG51bWJlciA9IDA7XHJcbiAgICB0aGlzLlVTRVJfQ0FSVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgIGlmIChwcm9kdWN0VmFyaWVudC52YXJpYW50SWQgPT0gaXRlbS52YXJpZW50SWQpXHJcbiAgICAgICAgaXRlbVF1YW50aXR5ID0gaXRlbS5xdWFudGl0eTtcclxuICAgIH0pXHJcbiAgICByZXR1cm4gaXRlbVF1YW50aXR5O1xyXG4gIH1cclxuICBwcml2YXRlIGlzVmFyaWVudFByZXNlbnRJbldpc2h0bGlzdChwcm9kdWN0VmFyaWVudDogSXRlbVZhcmlhbnQpOiBib29sZWFuIHtcclxuICAgIGxldCBwcmVzZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB0aGlzLlVTRVJfV0lTSExJU1Q/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICBpZiAocHJvZHVjdFZhcmllbnQudmFyaWFudElkID09IGl0ZW0udmFyaWVudElkKVxyXG4gICAgICAgIHByZXNlbnQgPSB0cnVlO1xyXG4gICAgfSlcclxuICAgIHJldHVybiBwcmVzZW50O1xyXG4gIH1cclxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsuLi50aGlzLnN0eWxlcz8ubGF5b3V0fSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcblxyXG4gIHByb2NlZWRUb1Byb2R1Y3RMaXN0KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddKTtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCl7XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoe2RhdGE6dGhpcy5kYXRhfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIj48L3AtdG9hc3Q+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XHJcbiAgPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXItZmx1aWQgdG90YWwtY29udGFpbmVyXCIgW2lkXT1cImRhdGE/LmlkXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIlxyXG4gICAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiAoY2xpY2spPVwiZWRpdFNlY3Rpb24oKVwiPlxyXG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cImRpc3BsYXktYmxvY2tcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqYy1zcGFjZSBhbGlnbi1lbmRcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIiBbbmdDbGFzc109XCJpdGVtLmxhYmVsID09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktbGFyZ2Ugdmlldy1hbGxcIiAqbmdJZj1cImNvbnRlbnQ/LmRpc3BsYXk/LnNob3dCdXR0b25cIiAoY2xpY2spPVwicHJvY2VlZFRvUHJvZHVjdExpc3QoKVwiPnt7dmlld0FsbEJ1dHRvbj8uY29udGVudD8ubGFiZWwgPz8gJ1NlZSBBbGwnfX0gID48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJzdHlsZXM/LmRpdmlkZXJJbWFnZT8uc2hvd0RpdmlkZXJcIiBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwic3R5bGVzPy5kaXZpZGVySW1hZ2U/LnVybFwiIGFsdD1cIlwiXHJcbiAgICAgICAgY2xhc3M9XCJzcGFuLWltZyBtdC0xNVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbHRlckxvYWRpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1wYXJlbnQgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cInJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGE/Lmxlbmd0aFwiXHJcbiAgICAgICAgICBbc2ltcG9XcmFwQ29udGFpbmVyXT1cInN0eWxlcz8uZGlyZWN0aW9uXCIgI2NvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRpcmVjdGlvbiA9PSAnUk9XJyAmJiAhaXNNb2JpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsTGVmdCgpXCIgKm5nSWY9XCJzaG93TGVmdEFycm93ICYmIHJlc3BvbnNlRGF0YT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiByZXNwb25zZURhdGEgfCBzbGljZTpnZXRTbGljZVBhcmFtZXRlcnMoKVswXTpnZXRTbGljZVBhcmFtZXRlcnMoKVsxXTsgbGV0IGlkeCA9IGluZGV4XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwcm9kdWN0XCIgW3N0eWxlLnBhZGRpbmcucHhdPVwic3R5bGVzPy50aGVtZSAhPSB0aGVtZS5UaGVtZTEgPyAnMycgOiAnJ1wiIFtzdHlsZS53aWR0aC4lXT1cInN0eWxlcz8udGhlbWUgIT0gdGhlbWUuVGhlbWUxICYmIGlzTW9iaWxlICYmIGlzUmVsYXRlZFByb2R1Y3QgPyAnNDgnIDogJydcIiBbc3R5bGUubWluV2lkdGhdPVwiYXBwbHlQcm9kdWN0V2lkdGgoKSA/IGdldFByb2R1Y3RXaWR0aCgpIDogJydcIiBbc3R5bGUubWF4V2lkdGhdPVwiYXBwbHlQcm9kdWN0V2lkdGgoKSA/IGdldFByb2R1Y3RXaWR0aCgpIDogJydcIj5cclxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGVzPy50aGVtZSA9PSB0aGVtZS5UaGVtZTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlByb2R1Y3REZXM7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0LCBpZHg6IGlkeH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3R5bGVzPy50aGVtZSAhPSB0aGVtZS5UaGVtZTFcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZyBbcHJvZHVjdF09XCJwcm9kdWN0XCIgW2RhdGFdPVwiZGF0YVwiIFtpc1Njcm9sbGFibGVdPVwidGhpcy5zY3JlZW5XaWR0aCA+IDQ3NSB8fCAodGhpcy5zY3JlZW5XaWR0aCA8PSA0NzUgJiYgc3R5bGVzPy5kaXJlY3Rpb24gPT0gJ1JPVycpXCI+PC9zaW1wby1zbWFsbC1wcm9kdWN0LWxpc3Rpbmc+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRpcmVjdGlvbiA9PSAnUk9XJyAmJiAhaXNNb2JpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWFycm93XCIgKGNsaWNrKT1cInNjcm9sbFJpZ2h0KClcIiAqbmdJZj1cInNob3dSaWdodEFycm93ICYmIHJlc3BvbnNlRGF0YT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L3NlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNWYXJpZW50TGlzdCBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwidmFyaWVudC1saXN0XCIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YXJpZW50IG9mIHByb2R1Y3Q/Lml0ZW1WYXJpYW50OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIG9uZXJyb3I9XCJ0aGlzLnNyYz0naHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIFtzcmNdPVwidmFyaWVudC52YXJpYW50SW1hZ2VzPy5bMF0/LmltZ1VybCA/PyAnaHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIlxyXG4gICAgICAgIGFsdD1cIlwiIGNsYXNzPVwidmFyaWVudFwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdmFyaWVudCc6IHZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkfVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInZhcmllbnQudmFyaWFudElkID09IHByb2R1Y3QudmFyaWVudElkID8gJ2JsdWUnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZhcmllbnQocHJvZHVjdCwgdmFyaWVudClcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNGYXZvdXJpdGVUYWdzIGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdBREQnKVwiICpuZ0lmPVwiIXByb2R1Y3Qud2hpc2xpc3RcIj5mYXZvcml0ZV9ib3JkZXI8L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZhdi1pY29uXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdSRU1PVkUnKVwiICpuZ0lmPVwicHJvZHVjdC53aGlzbGlzdFwiPmZhdm9yaXRlPC9tYXQtaWNvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjQWRkVG9DYXJ0IGxldC1wcm9kdWN0PVwiZGF0YVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJjb250ZW50Py5kaXNwbGF5Py5zaG93QnV0dG9uXCIgY2xhc3M9XCJhZGQtdG8tY2FydC1idG5cIj5cclxuICAgIDxidXR0b24gc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkKyhidXR0b24/LmlkIHx8ICcnKVwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiXHJcbiAgICAgIFtjb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiXHJcbiAgICAgIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdBREQnKVwiPnt7YnV0dG9uPy5jb250ZW50Py5sYWJlbCA/PyAnQWRkIHRvIENhcnQnfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWFudGl0eVwiICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eSAmJiAhaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPlxyXG4gICAgICA8c3BhbiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnU1VCU1RSQUNUJylcIj4tPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57e3Byb2R1Y3QucXVhbnRpdHl9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ0FERCcpXCI+Kzwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cIm91dC1vZi1zdG9ja1wiICpuZ0lmPVwiaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KVwiPk91dCBPZiBTdG9jazwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNQcm9kdWN0UHJpY2luZyBsZXQtcHJvZHVjdD1cImRhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByaWNlIGJvZHktbGFyZ2UgZC1mbGV4XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiPlxyXG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJwcm9kdWN0LnByaWNlLnZhbHVlICE9IHByb2R1Y3QucHJpY2UuZGlzY291bnRlZFByaWNlXCIgY2xhc3M9XCJzZWxsaW5nLXByaWNlXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09J2N1cnJlbmN5Jz48L3NwYW4+XHJcbiAgICAgICAge3twcm9kdWN0LnByaWNlLnZhbHVlfX1cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlzY291bnRlZC1wcmljZVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPSdjdXJyZW5jeSB8IHNhbml0aXplSHRtbCc+PC9zcGFuPlxyXG4gICAgICAgIHt7cHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2V9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Lml0ZW1WYXJpYW50Py5sZW5ndGhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkFkZFRvQ2FydDsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjUHJvZHVjdERlcyBsZXQtcHJvZHVjdD1cImRhdGFcIiBsZXQtaWR4PVwiaWR4XCI+XHJcbiAgPGRpdiAoY2xpY2spPVwicHJvY2VlZFRvUHJvZHVjdERlc2MocHJvZHVjdClcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCIgW3N0eWxlLmhlaWdodC5weF09XCJpc01vYmlsZSA/IChzdHlsZXM/Lm1vYmlsZUNvbHVtbiA9PSAxID8gJzQ4MCcgOiAnMjMwJyApIDogJydcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJGYXZvdXJpdGVUYWdzOyBjb250ZXh0OiB7ZGF0YTogcHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBvbmVycm9yPVwidGhpcy5zcmM9J2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcclxuICAgICAgW2lkXT1cIidwcmV2aWV3XycraWR4XCIgW3NyY109XCJwcm9kdWN0Lml0ZW1JbWFnZXM/Lltwcm9kdWN0LnBydmlld0lkeF0/LmltZ1VybFwiIGFsdD1cIlwiXHJcbiAgICAgIGNsYXNzPVwicHJvZHVjdC1pbWcgcHJlaXZld1wiIChtb3VzZWVudGVyKT1cInRvZ2dsZVByZXZpZXdJbWFnZShwcm9kdWN0LCBpZHgpXCJcclxuICAgICAgKG1vdXNlbGVhdmUpPVwicHJvZHVjdC5wcnZpZXdJZHggPSAwXCI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm10LTE1IHctMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1uYW1lIGhlYWRpbmctbGFyZ2UgdGV4dC1sZWZ0IHRyaW0tdGV4dCB3LTEwMFwiIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtzaW1wb0NvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3JcIj5cclxuICAgICAge3twcm9kdWN0Lm5hbWUgfX08L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJWYXJpZW50TGlzdDsgY29udGV4dDoge2RhdGE6IHByb2R1Y3R9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiUHJvZHVjdFByaWNpbmc7IGNvbnRleHQ6IHtkYXRhOiBwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5neC1za2VsZXRvbi1sb2FkZXIgKm5nSWY9XCJpc0xvYWRpbmcgfHwgZmlsdGVyTG9hZGluZ1wiIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gIHdpZHRoOiAnMTAwJScsXHJcbiAgaGVpZ2h0OiAnNDB2aCcsXHJcbiAgJ2JvcmRlci1yYWRpdXMnOiAnMTBweCcsXHJcbiAgJ3Bvc2l0aW9uJzogJ3JlbGF0aXZlJyxcclxuICAncmlnaHQnOiAnNXB4J1xyXG59XCI+XHJcbjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuIl19