buildingproduct-library 0.2.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/assets/fonts/arial-webfont.woff +0 -0
- package/assets/fonts/arial-webfont.woff2 +0 -0
- package/assets/fonts/arialblack-webfont.woff +0 -0
- package/assets/fonts/arialblack-webfont.woff2 +0 -0
- package/assets/fonts/arialbold-webfont.woff +0 -0
- package/assets/fonts/arialbold-webfont.woff2 +0 -0
- package/assets/fonts/helveticaneue.woff +0 -0
- package/assets/fonts/helveticaneue.woff2 +0 -0
- package/assets/fonts/helveticaneuemedium-webfont.woff +0 -0
- package/assets/fonts/helveticaneuemedium-webfont.woff2 +0 -0
- package/assets/fonts/helveticaneuethin-webfont.woff +0 -0
- package/assets/fonts/helveticaneuethin-webfont.woff2 +0 -0
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/images/ActivateIcon.svg +14 -0
- package/assets/images/AlertIcon.svg +3 -0
- package/assets/images/DisableIcon.svg +3 -0
- package/assets/images/Divider line.svg +3 -0
- package/assets/images/EditIconEnabled.svg +6 -0
- package/assets/images/EditIcondisabled.svg +6 -0
- package/assets/images/Grid-dark.svg +8 -0
- package/assets/images/Grid-light.svg +8 -0
- package/assets/images/Hamburger_icon_white.png +0 -0
- package/assets/images/Icon-awesome-user-alt-white.svg +13 -0
- package/assets/images/Icon-ionic-ios-arrow-down.svg +3 -0
- package/assets/images/Icon-ionic-ios-help-circle.svg +6 -0
- package/assets/images/Icon-ionic-ios-home.svg +6 -0
- package/assets/images/Icon-ionic-ios-settings.svg +6 -0
- package/assets/images/Icon-material-shopping-cart.svg +7 -0
- package/assets/images/Invited.svg +4 -0
- package/assets/images/List-dark.svg +3 -0
- package/assets/images/List-light.svg +3 -0
- package/assets/images/PDP-add-more.svg +3 -0
- package/assets/images/PDP-colour-selected.svg +7 -0
- package/assets/images/PDP-quote-exists.svg +12 -0
- package/assets/images/PDP-remove-icon.svg +3 -0
- package/assets/images/Selected icon.svg +3 -0
- package/assets/images/Selected-icon.svg +3 -0
- package/assets/images/banner-image.png +0 -0
- package/assets/images/br_down.png +0 -0
- package/assets/images/cart-shopping-fast.svg +6 -0
- package/assets/images/check-square.svg +3 -0
- package/assets/images/checkmark-circle-outline.svg +4 -0
- package/assets/images/closegrey.svg +71 -0
- package/assets/images/dashboard.svg +35 -0
- package/assets/images/delivery.svg +11 -0
- package/assets/images/download-icon.svg +7 -0
- package/assets/images/downloads-dark.svg +6 -0
- package/assets/images/downloads-light.svg +6 -0
- package/assets/images/erroricon.svg +3 -0
- package/assets/images/home-icon.svg +6 -0
- package/assets/images/home_banner.png +0 -0
- package/assets/images/ic_calender.svg +15 -0
- package/assets/images/icon-clock-icon.svg +10 -0
- package/assets/images/icon-feather-edit.svg +6 -0
- package/assets/images/icon-flashing-black.svg +3 -0
- package/assets/images/icon-flashing-white.svg +3 -0
- package/assets/images/icon-ionic-ios-search.svg +3 -0
- package/assets/images/icon-logout.svg +6 -0
- package/assets/images/icon-mail-icon.svg +7 -0
- package/assets/images/icon-metro-info.svg +3 -0
- package/assets/images/ionic-arrow-back.svg +3 -0
- package/assets/images/ionic-ios-feather-phone.svg +3 -0
- package/assets/images/ionic-ios-help-circle-outline.svg +6 -0
- package/assets/images/ionic-ios-location-outline.svg +3 -0
- package/assets/images/ionic-ios-my-location.svg +3 -0
- package/assets/images/ionic-ios-users-outline.svg +3 -0
- package/assets/images/ionic-trash.svg +3 -0
- package/assets/images/logo-black.svg +16 -0
- package/assets/images/logo-dark.svg +48 -0
- package/assets/images/logo.svg +16 -0
- package/assets/images/my-account.svg +21 -0
- package/assets/images/my-list.svg +43 -0
- package/assets/images/my-team.svg +17 -0
- package/assets/images/newsfeed-banner.jpg +0 -0
- package/assets/images/no-saved-cart.svg +3 -0
- package/assets/images/open-account-logout.png +0 -0
- package/assets/images/orders.svg +23 -0
- package/assets/images/pdp-noimage.svg +21 -0
- package/assets/images/pickup.svg +8 -0
- package/assets/images/plp-grid-noimage.svg +22 -0
- package/assets/images/plp-list-noimage.svg +16 -0
- package/assets/images/product-banner.png +0 -0
- package/assets/images/product-details-dark.svg +10 -0
- package/assets/images/product-details-light.svg +10 -0
- package/assets/images/products.svg +34 -0
- package/assets/images/quotes.svg +12 -0
- package/assets/images/related-products-dark.svg +9 -0
- package/assets/images/related-products-light.svg +9 -0
- package/assets/images/search-noimage.svg +16 -0
- package/assets/images/see-more-bg-hover.svg +1 -0
- package/assets/images/see-more-bg.svg +1 -0
- package/assets/images/shopping-cart-icon.svg +14 -0
- package/assets/images/slash-small-white.svg +3 -0
- package/assets/images/warningicon.svg +3 -0
- package/assets/images/why-dimond.svg +7 -0
- package/buildingproduct-library-0.2.73.tgz +0 -0
- package/buildingproduct-library.d.ts +5 -0
- package/bundles/buildingproduct-library.umd.js +9907 -0
- package/bundles/buildingproduct-library.umd.js.map +1 -0
- package/esm2015/buildingproduct-library.js +5 -0
- package/esm2015/lib/account-dropdown/account-dropdown.component.js +126 -0
- package/esm2015/lib/account-dropdown/account-dropdown.module.js +55 -0
- package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
- package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +435 -0
- package/esm2015/lib/checkout/checkout.module.js +141 -0
- package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +362 -0
- package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +41 -0
- package/esm2015/lib/checkout/order-review/delivery-information/delivery-information.component.js +32 -0
- package/esm2015/lib/checkout/order-review/order-review-grid/order-review-grid.component.js +92 -0
- package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +94 -0
- package/esm2015/lib/checkout/order-review/order-review.component.js +147 -0
- package/esm2015/lib/constants/general.js +57 -0
- package/esm2015/lib/contact-us/contact-us.component.js +38 -0
- package/esm2015/lib/contact-us/contact-us.module.js +41 -0
- package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +48 -0
- package/esm2015/lib/custom-cart/custom-cart.component.js +94 -0
- package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +26 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.module.js +54 -0
- package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.component.js +24 -0
- package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.module.js +48 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +138 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +68 -0
- package/esm2015/lib/custom-navigation/custom-navigation/custom-navigation.component.js +121 -0
- package/esm2015/lib/custom-navigation/custom-navigation.module.js +89 -0
- package/esm2015/lib/custom-order-details/custom-order-details.component.js +197 -0
- package/esm2015/lib/custom-order-details/custom-order-details.module.js +91 -0
- package/esm2015/lib/custom-order-details/download-popup/download-popup.component.js +34 -0
- package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +108 -0
- package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +103 -0
- package/esm2015/lib/custom-order-history/custom-order-history.component.js +652 -0
- package/esm2015/lib/custom-order-history/custom-order-history.module.js +97 -0
- package/esm2015/lib/custom-order-history/slider-progress/slider-progress.component.js +62 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +96 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.js +125 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +115 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +56 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +33 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +107 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +89 -0
- package/esm2015/lib/custom-saved-cart/save-cart.service.js +67 -0
- package/esm2015/lib/custom-saved-cart/saved-cart-general.js +49 -0
- package/esm2015/lib/custom-saved-cart/saved-cart.service.js +39 -0
- package/esm2015/lib/custom-search/custom-search.component.js +132 -0
- package/esm2015/lib/custom-search/custom-search.module.js +46 -0
- package/esm2015/lib/custom-user-account/custom-user-account.component.js +92 -0
- package/esm2015/lib/custom-user-account/custom-user-account.module.js +63 -0
- package/esm2015/lib/directives/custom-directives.module.js +22 -0
- package/esm2015/lib/directives/custom-paginatior.directive.js +127 -0
- package/esm2015/lib/environments/environment.js +24 -0
- package/esm2015/lib/find-store/find-store.component.js +94 -0
- package/esm2015/lib/find-store/find-store.module.js +66 -0
- package/esm2015/lib/help-support/help-support.component.js +24 -0
- package/esm2015/lib/help-support/help-support.module.js +38 -0
- package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +134 -0
- package/esm2015/lib/my-account/account-statements/account-statements.component.js +57 -0
- package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +342 -0
- package/esm2015/lib/my-account/my-account.component.js +85 -0
- package/esm2015/lib/my-account/my-account.module.js +91 -0
- package/esm2015/lib/my-team/my-team.component.js +418 -0
- package/esm2015/lib/my-team/my-team.module.js +96 -0
- package/esm2015/lib/my-team/team-member.service.js +123 -0
- package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
- package/esm2015/lib/preference/preference.component.js +19 -0
- package/esm2015/lib/preference/preference.module.js +45 -0
- package/esm2015/lib/services/account-dropdown-state.service.js +21 -0
- package/esm2015/lib/services/cart.service.js +70 -0
- package/esm2015/lib/services/checkout.service.js +73 -0
- package/esm2015/lib/services/endPointURL.js +187 -0
- package/esm2015/lib/services/find-store.service.js +61 -0
- package/esm2015/lib/services/logout.service.js +50 -0
- package/esm2015/lib/services/my-account.service.js +68 -0
- package/esm2015/lib/services/order-history.service.js +65 -0
- package/esm2015/lib/services/order.review.js +38 -0
- package/esm2015/lib/services/search.service.js +42 -0
- package/esm2015/lib/services/user-account-detail-service.service.js +44 -0
- package/esm2015/lib/shared/CustomProduct.js +47 -0
- package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +105 -0
- package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +92 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-detail.component.js +95 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +355 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +360 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +575 -0
- package/esm2015/lib/shared/custom-cart-detail/split.pipe.js +17 -0
- package/esm2015/lib/shared/date-range-picker/date-range-picker.component.js +123 -0
- package/esm2015/lib/shared/regEx.validator.js +15 -0
- package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +85 -0
- package/esm2015/lib/shared/shared-components.module.js +108 -0
- package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +143 -0
- package/esm2015/lib/spa-custom-header.component.js +26 -0
- package/esm2015/lib/spa-custom-header.module.js +145 -0
- package/esm2015/lib/spa-custom-header.service.js +14 -0
- package/esm2015/lib/utils/utils.js +27 -0
- package/esm2015/lib/utils.js +27 -0
- package/esm2015/public-api.js +35 -0
- package/fesm2015/buildingproduct-library.js +9190 -0
- package/fesm2015/buildingproduct-library.js.map +1 -0
- package/lib/account-dropdown/account-dropdown.component.d.ts +22 -0
- package/lib/account-dropdown/account-dropdown.module.d.ts +10 -0
- package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
- package/lib/checkout/add-new-address/add-new-address.component.d.ts +29 -0
- package/lib/checkout/checkout.module.d.ts +26 -0
- package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +80 -0
- package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +26 -0
- package/lib/checkout/order-review/delivery-information/delivery-information.component.d.ts +13 -0
- package/lib/checkout/order-review/order-review-grid/order-review-grid.component.d.ts +27 -0
- package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +28 -0
- package/lib/checkout/order-review/order-review.component.d.ts +44 -0
- package/lib/constants/general.d.ts +50 -0
- package/lib/contact-us/contact-us.component.d.ts +13 -0
- package/lib/contact-us/contact-us.module.d.ts +9 -0
- package/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.d.ts +18 -0
- package/lib/custom-cart/custom-cart.component.d.ts +25 -0
- package/lib/custom-cart/custom-cart.module.d.ts +15 -0
- package/lib/custom-header-logo/custom-header-logo.component.d.ts +11 -0
- package/lib/custom-header-logo/custom-header-logo.module.d.ts +11 -0
- package/lib/custom-header-paragraph/custom-header-paragraph.component.d.ts +11 -0
- package/lib/custom-header-paragraph/custom-header-paragraph.module.d.ts +10 -0
- package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +45 -0
- package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +14 -0
- package/lib/custom-navigation/custom-navigation/custom-navigation.component.d.ts +37 -0
- package/lib/custom-navigation/custom-navigation.module.d.ts +21 -0
- package/lib/custom-order-details/custom-order-details.component.d.ts +60 -0
- package/lib/custom-order-details/custom-order-details.module.d.ts +17 -0
- package/lib/custom-order-details/download-popup/download-popup.component.d.ts +15 -0
- package/lib/custom-order-details/order-detail-grid/order-detail-grid.component.d.ts +30 -0
- package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +28 -0
- package/lib/custom-order-history/custom-order-history.component.d.ts +96 -0
- package/lib/custom-order-history/custom-order-history.module.d.ts +17 -0
- package/lib/custom-order-history/slider-progress/slider-progress.component.d.ts +15 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +32 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.d.ts +20 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.d.ts +68 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.d.ts +31 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +15 -0
- package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +57 -0
- package/lib/custom-saved-cart/custom-saved-cart.module.d.ts +16 -0
- package/lib/custom-saved-cart/save-cart.service.d.ts +17 -0
- package/lib/custom-saved-cart/saved-cart-general.d.ts +88 -0
- package/lib/custom-saved-cart/saved-cart.service.d.ts +11 -0
- package/lib/custom-search/custom-search.component.d.ts +35 -0
- package/lib/custom-search/custom-search.module.d.ts +10 -0
- package/lib/custom-user-account/custom-user-account.component.d.ts +35 -0
- package/lib/custom-user-account/custom-user-account.module.d.ts +12 -0
- package/lib/directives/custom-directives.module.d.ts +8 -0
- package/lib/directives/custom-paginatior.directive.d.ts +24 -0
- package/lib/environments/environment.d.ts +12 -0
- package/lib/find-store/find-store.component.d.ts +34 -0
- package/lib/find-store/find-store.module.d.ts +12 -0
- package/lib/help-support/help-support.component.d.ts +11 -0
- package/lib/help-support/help-support.module.d.ts +9 -0
- package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +34 -0
- package/lib/my-account/account-statements/account-statements.component.d.ts +24 -0
- package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +62 -0
- package/lib/my-account/my-account.component.d.ts +26 -0
- package/lib/my-account/my-account.module.d.ts +18 -0
- package/lib/my-team/my-team.component.d.ts +96 -0
- package/lib/my-team/my-team.module.d.ts +17 -0
- package/lib/my-team/team-member.service.d.ts +17 -0
- package/lib/pipes/custom-date-pipe.pipe.d.ts +11 -0
- package/lib/preference/preference.component.d.ts +8 -0
- package/lib/preference/preference.module.d.ts +10 -0
- package/lib/services/account-dropdown-state.service.d.ts +10 -0
- package/lib/services/cart.service.d.ts +15 -0
- package/lib/services/checkout.service.d.ts +17 -0
- package/lib/services/endPointURL.d.ts +153 -0
- package/lib/services/find-store.service.d.ts +14 -0
- package/lib/services/logout.service.d.ts +11 -0
- package/lib/services/my-account.service.d.ts +16 -0
- package/lib/services/order-history.service.d.ts +14 -0
- package/lib/services/order.review.d.ts +11 -0
- package/lib/services/search.service.d.ts +11 -0
- package/lib/services/user-account-detail-service.service.d.ts +15 -0
- package/lib/shared/CustomProduct.d.ts +27 -0
- package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +56 -0
- package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +28 -0
- package/lib/shared/custom-cart-detail/custom-cart-detail.component.d.ts +32 -0
- package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +74 -0
- package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +79 -0
- package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +93 -0
- package/lib/shared/custom-cart-detail/split.pipe.d.ts +7 -0
- package/lib/shared/date-range-picker/date-range-picker.component.d.ts +31 -0
- package/lib/shared/regEx.validator.d.ts +8 -0
- package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
- package/lib/shared/shared-components.module.d.ts +24 -0
- package/lib/shared/shared-download-order/shared-download-order.component.d.ts +37 -0
- package/lib/spa-custom-header.component.d.ts +11 -0
- package/lib/spa-custom-header.module.d.ts +28 -0
- package/lib/spa-custom-header.service.d.ts +6 -0
- package/lib/utils/utils.d.ts +6 -0
- package/lib/utils.d.ts +5 -0
- package/package.json +90 -0
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { FormGroup } from '@angular/forms';
|
|
4
|
+
import { CartForm } from '../../CustomProduct';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../../services/cart.service";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "@spartacus/core";
|
|
9
|
+
import * as i4 from "@spartacus/storefront";
|
|
10
|
+
import * as i5 from "../custom-product-quantity-form/custom-product-quantity-form.component";
|
|
11
|
+
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
+
import * as i7 from "@angular/common";
|
|
13
|
+
import * as i8 from "../split.pipe";
|
|
14
|
+
export class CustomCartGridComponent {
|
|
15
|
+
constructor(cartService, cdr, formBuilder, activeCartService) {
|
|
16
|
+
this.cartService = cartService;
|
|
17
|
+
this.cdr = cdr;
|
|
18
|
+
this.formBuilder = formBuilder;
|
|
19
|
+
this.activeCartService = activeCartService;
|
|
20
|
+
this.isFinishedPoduct = false;
|
|
21
|
+
this.additinalselectedColour = [];
|
|
22
|
+
this.modalSelectedColour = [];
|
|
23
|
+
this.isShow = true;
|
|
24
|
+
this.showDetails = [];
|
|
25
|
+
this.disableAddMore = false;
|
|
26
|
+
this.errorIndex = [];
|
|
27
|
+
this.rowIndex = 0;
|
|
28
|
+
this.showWaitCursor = new BehaviorSubject(false);
|
|
29
|
+
this.updateCartEntry = new EventEmitter();
|
|
30
|
+
this.isModalSelectedColor = [];
|
|
31
|
+
this.arrowUpDown = [];
|
|
32
|
+
this.defaultConfigInfo = {
|
|
33
|
+
configuratorType: 'TEXTFIELD',
|
|
34
|
+
configurationLabel: 'COLOR',
|
|
35
|
+
configurationValue: '',
|
|
36
|
+
};
|
|
37
|
+
this.productForm = new FormGroup({});
|
|
38
|
+
this.addToCartError = null;
|
|
39
|
+
this.errorMessage = 'Some error occurred while processing data';
|
|
40
|
+
this.showToast = false;
|
|
41
|
+
this.env = sessionStorage.getItem('env');
|
|
42
|
+
this.environment = JSON.parse(this.env);
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
var _a;
|
|
46
|
+
const cartObj = localStorage.getItem('spartacus⚿dimond-spa⚿cart');
|
|
47
|
+
this.cartId = (_a = JSON.parse(cartObj)) === null || _a === void 0 ? void 0 : _a.active;
|
|
48
|
+
this.productForm = this.formBuilder.group({
|
|
49
|
+
cart: this.formBuilder.array([]),
|
|
50
|
+
});
|
|
51
|
+
this.updateDefaultCartDetails();
|
|
52
|
+
this.cartService.expandAll.subscribe((data) => {
|
|
53
|
+
for (let i = 0; i < this.cartDetails.length; i++) {
|
|
54
|
+
this.showDetails[i] = data;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
this.cdr.detectChanges();
|
|
58
|
+
}
|
|
59
|
+
get cartForm() {
|
|
60
|
+
return this.productForm.get('cart');
|
|
61
|
+
}
|
|
62
|
+
hasCartDetails() {
|
|
63
|
+
var _a;
|
|
64
|
+
return this.cartForm && ((_a = Object.keys(this.cartForm)) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
65
|
+
}
|
|
66
|
+
updateDefaultCartDetails() {
|
|
67
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
68
|
+
for (let i = 0; i < this.cartDetails.length; i++) {
|
|
69
|
+
(_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.push(this.formBuilder.group(new CartForm()));
|
|
70
|
+
(_c = (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.controls[i].get('jobReference')) === null || _c === void 0 ? void 0 : _c.setValue((_d = this.cartDetails[i]) === null || _d === void 0 ? void 0 : _d.jobReference);
|
|
71
|
+
const qty = ((_f = (_e = this.cartDetails[i]) === null || _e === void 0 ? void 0 : _e.product) === null || _f === void 0 ? void 0 : _f.finishedProduct)
|
|
72
|
+
? parseInt((_g = this.cartDetails[i]) === null || _g === void 0 ? void 0 : _g.quantity)
|
|
73
|
+
: (_h = this.cartDetails[i]) === null || _h === void 0 ? void 0 : _h.quantityDouble;
|
|
74
|
+
(_k = (_j = this.cartForm) === null || _j === void 0 ? void 0 : _j.controls[i].get('prodQty')) === null || _k === void 0 ? void 0 : _k.setValue(qty);
|
|
75
|
+
this.isModalSelectedColor.push(false);
|
|
76
|
+
this.showDetails.push(false);
|
|
77
|
+
if (((_l = this.cartDetails[i]) === null || _l === void 0 ? void 0 : _l.configurationInfos) &&
|
|
78
|
+
((_o = (_m = this.cartDetails[i]) === null || _m === void 0 ? void 0 : _m.configurationInfos) === null || _o === void 0 ? void 0 : _o.length) > 0) {
|
|
79
|
+
for (const config of (_p = this.cartDetails[i]) === null || _p === void 0 ? void 0 : _p.configurationInfos) {
|
|
80
|
+
if ((config === null || config === void 0 ? void 0 : config.configurationLabel) == 'COLOR') {
|
|
81
|
+
this.defaultConfigInfo.configurationValue =
|
|
82
|
+
((_q = config === null || config === void 0 ? void 0 : config.configurationValue) === null || _q === void 0 ? void 0 : _q.split('|')[0]) || '';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (((_r = this.cartDetails[i]) === null || _r === void 0 ? void 0 : _r.configValues) &&
|
|
86
|
+
((_t = (_s = this.cartDetails[i]) === null || _s === void 0 ? void 0 : _s.configValues) === null || _t === void 0 ? void 0 : _t.length) > 0)
|
|
87
|
+
this.cartDetails[i]['configValues'] = this.defaultConfigInfo;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getColours(cartDetails, index) {
|
|
92
|
+
var _a;
|
|
93
|
+
this.selectedColour =
|
|
94
|
+
(_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.configurationInfos[0]) === null || _a === void 0 ? void 0 : _a.configurationValue.split('|');
|
|
95
|
+
// for (let i = 0; i >= this.cartDetails.length; i++) {
|
|
96
|
+
// this.showDetails[i] = false;
|
|
97
|
+
// }
|
|
98
|
+
this.selectedIndex = index;
|
|
99
|
+
for (let i = 0; i < this.cartDetails.length; i++) {
|
|
100
|
+
if (i != index) {
|
|
101
|
+
this.cartDetails[i].isExpand = false;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.cartDetails[index].isExpand = !this.cartDetails[index].isExpand;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
this.cdr.detectChanges();
|
|
108
|
+
}
|
|
109
|
+
updateSelectedColourCode(code) {
|
|
110
|
+
var _a;
|
|
111
|
+
if (this.cartDetails[this.selectedIndex] &&
|
|
112
|
+
((_a = this.cartDetails[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.configValues)) {
|
|
113
|
+
this.cartDetails[this.selectedIndex].configValues.configurationValue =
|
|
114
|
+
code;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
ngOnChanges(changes) {
|
|
118
|
+
var _a;
|
|
119
|
+
if (!((_a = changes === null || changes === void 0 ? void 0 : changes.cartDetails) === null || _a === void 0 ? void 0 : _a.firstChange)) {
|
|
120
|
+
this.updateDefaultCartDetails();
|
|
121
|
+
this.cdr.detectChanges();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
showHide(ind) {
|
|
125
|
+
this.showDetails[ind] = !this.showDetails[ind];
|
|
126
|
+
}
|
|
127
|
+
arrowHideShow(id) {
|
|
128
|
+
this.arrowUpDown[id] = !this.arrowUpDown[id];
|
|
129
|
+
}
|
|
130
|
+
modalSelectedColor(event, colour, ind) {
|
|
131
|
+
event.preventDefault();
|
|
132
|
+
if (this.isFinishedPoduct === true) {
|
|
133
|
+
this.additinalselectedColour[ind] = colour;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.modalSelectedColour[ind] = colour;
|
|
137
|
+
//this.additinalselectedColour = colour;
|
|
138
|
+
this.selectedColour = (colour === null || colour === void 0 ? void 0 : colour.code) || this.selectedColour;
|
|
139
|
+
}
|
|
140
|
+
this.isModalSelectedColor[ind] = true;
|
|
141
|
+
this.updateSelectedColourCode(colour === null || colour === void 0 ? void 0 : colour.code);
|
|
142
|
+
this.cdr.detectChanges();
|
|
143
|
+
this.updateProductColor(this.cartDetails[ind], colour, ind);
|
|
144
|
+
}
|
|
145
|
+
updateProductColor(cart, color, index) {
|
|
146
|
+
//event.preventDefault();
|
|
147
|
+
const obj = [];
|
|
148
|
+
obj.push({
|
|
149
|
+
"configuratorType": "TEXTFIELD",
|
|
150
|
+
"configurationLabel": "COLOR",
|
|
151
|
+
"configurationValue": color === null || color === void 0 ? void 0 : color.code
|
|
152
|
+
});
|
|
153
|
+
this.updateCartDetails(cart, index, obj);
|
|
154
|
+
}
|
|
155
|
+
addtionalModalSelectedColor(event, colour, ind) {
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
if (this.isFinishedPoduct === true) {
|
|
158
|
+
this.additinalselectedColour[ind] = colour;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.additinalselectedColour[ind] = colour;
|
|
162
|
+
}
|
|
163
|
+
//this.modalSelectedColour[ind] = colour;
|
|
164
|
+
//this.selectedColour = colour?.code;
|
|
165
|
+
this.cdr.detectChanges();
|
|
166
|
+
this.updateSelectedColourCode(this.selectedColour);
|
|
167
|
+
}
|
|
168
|
+
proceedWithSubmit(color, ind) {
|
|
169
|
+
this.isModalSelectedColor[ind] = true;
|
|
170
|
+
this.modalSelectedColour[ind] = color[0];
|
|
171
|
+
this.closeInviteModal.nativeElement.click();
|
|
172
|
+
this.updateProductColor(this.cartDetails[ind], color[0], ind);
|
|
173
|
+
this.getColours(color, ind);
|
|
174
|
+
}
|
|
175
|
+
cancel() {
|
|
176
|
+
this.additinalselectedColour = [];
|
|
177
|
+
}
|
|
178
|
+
deleteEntry(entNumber) {
|
|
179
|
+
this.showWaitCursor.next(true);
|
|
180
|
+
this.cartService.deleteCartEntry(this.cartId, entNumber).subscribe((data) => {
|
|
181
|
+
this.cdr.detectChanges();
|
|
182
|
+
this.updateCartEntry.emit();
|
|
183
|
+
this.activeCartService.reloadActiveCart();
|
|
184
|
+
this.showWaitCursor.next(false);
|
|
185
|
+
}, (error) => {
|
|
186
|
+
this.showWaitCursor.next(false);
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Check if any value is empty or undefined
|
|
190
|
+
isNullOrEmpty(value) {
|
|
191
|
+
return value == null || value == undefined || value == '';
|
|
192
|
+
}
|
|
193
|
+
// Update Cart Details if Quantity Changed for Accessories only
|
|
194
|
+
updateCartDetails(cart, index, color) {
|
|
195
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
196
|
+
let payLoad = {};
|
|
197
|
+
this.showWaitCursor.next(true);
|
|
198
|
+
const entryNumber = ((_a = cart === null || cart === void 0 ? void 0 : cart.product) === null || _a === void 0 ? void 0 : _a.entryNumber) || (cart === null || cart === void 0 ? void 0 : cart.entryNumber);
|
|
199
|
+
if (color) {
|
|
200
|
+
payLoad = {
|
|
201
|
+
quantity: parseInt((_d = (_c = (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.controls[index]) === null || _c === void 0 ? void 0 : _c.get('prodQty')) === null || _d === void 0 ? void 0 : _d.value),
|
|
202
|
+
"configurationInfos": color
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
else if ((_e = cart === null || cart === void 0 ? void 0 : cart.product) === null || _e === void 0 ? void 0 : _e.finishedProduct) {
|
|
206
|
+
payLoad = {
|
|
207
|
+
quantity: parseInt((_h = (_g = (_f = this.cartForm) === null || _f === void 0 ? void 0 : _f.controls[index]) === null || _g === void 0 ? void 0 : _g.get('prodQty')) === null || _h === void 0 ? void 0 : _h.value),
|
|
208
|
+
jobReference: (_l = (_k = (_j = this.cartForm) === null || _j === void 0 ? void 0 : _j.controls[index]) === null || _k === void 0 ? void 0 : _k.get('jobReference')) === null || _l === void 0 ? void 0 : _l.value,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
payLoad = {
|
|
213
|
+
quantity: 1,
|
|
214
|
+
product: {
|
|
215
|
+
code: (_m = cart === null || cart === void 0 ? void 0 : cart.product) === null || _m === void 0 ? void 0 : _m.code,
|
|
216
|
+
},
|
|
217
|
+
jobReference: (_q = (_p = (_o = this.cartForm) === null || _o === void 0 ? void 0 : _o.controls[index]) === null || _p === void 0 ? void 0 : _p.get('jobReference')) === null || _q === void 0 ? void 0 : _q.value,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
this.cartService
|
|
221
|
+
.updateCartEntry(this.cartId, entryNumber, payLoad)
|
|
222
|
+
.subscribe((response) => {
|
|
223
|
+
var _a, _b, _c;
|
|
224
|
+
if (((_a = response === null || response === void 0 ? void 0 : response.statusCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == 'success') {
|
|
225
|
+
this.activeCartService.reloadActiveCart();
|
|
226
|
+
this.updateCartEntry.emit();
|
|
227
|
+
this.cdr.detectChanges();
|
|
228
|
+
this.showToast = true;
|
|
229
|
+
this.showWaitCursor.next(false);
|
|
230
|
+
setTimeout(() => {
|
|
231
|
+
this.showToast = false;
|
|
232
|
+
}, 4000);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
this.addToCartError =
|
|
236
|
+
((_b = response === null || response === void 0 ? void 0 : response.errors[0]) === null || _b === void 0 ? void 0 : _b.message) ||
|
|
237
|
+
((_c = response === null || response === void 0 ? void 0 : response.errors[0]) === null || _c === void 0 ? void 0 : _c.errorMessage) ||
|
|
238
|
+
this.errorMessage;
|
|
239
|
+
this.showWaitCursor.next(false);
|
|
240
|
+
}
|
|
241
|
+
}, (error) => {
|
|
242
|
+
var _a, _b, _c, _d;
|
|
243
|
+
this.addToCartError =
|
|
244
|
+
((_b = (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message) ||
|
|
245
|
+
((_d = (_c = error === null || error === void 0 ? void 0 : error.error) === null || _c === void 0 ? void 0 : _c.errors[0]) === null || _d === void 0 ? void 0 : _d.errorMessage) ||
|
|
246
|
+
this.errorMessage;
|
|
247
|
+
this.showWaitCursor.next(false);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
// Get Product Quantity Errors
|
|
251
|
+
prodQtyErrors(index) {
|
|
252
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
253
|
+
return ((((_c = (_b = (_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get('prodQty')) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
254
|
+
((_f = (_e = (_d = this.cartForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get('prodQty')) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
255
|
+
(((_j = (_h = (_g = this.cartForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get('prodQty')) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
256
|
+
((_m = (_l = (_k = this.cartForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get('prodQty')) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
257
|
+
}
|
|
258
|
+
// Get Job Reference Errors
|
|
259
|
+
jobReferenceErrors(index) {
|
|
260
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
261
|
+
return ((((_c = (_b = (_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get('jobReference')) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
262
|
+
((_f = (_e = (_d = this.cartForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get('jobReference')) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
263
|
+
(((_j = (_h = (_g = this.cartForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get('jobReference')) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
264
|
+
((_m = (_l = (_k = this.cartForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get('jobReference')) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
265
|
+
}
|
|
266
|
+
// Check is Form Valid
|
|
267
|
+
isFormValid(index, cart) {
|
|
268
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
269
|
+
return (((_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.controls[index]) &&
|
|
270
|
+
((_d = (_c = (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.controls[index]) === null || _c === void 0 ? void 0 : _c.get('jobReference')) === null || _d === void 0 ? void 0 : _d.valid) &&
|
|
271
|
+
(((_g = (_f = (_e = this.cartForm) === null || _e === void 0 ? void 0 : _e.controls[index]) === null || _f === void 0 ? void 0 : _f.get('prodQty')) === null || _g === void 0 ? void 0 : _g.valid) ||
|
|
272
|
+
!((_h = cart === null || cart === void 0 ? void 0 : cart.product) === null || _h === void 0 ? void 0 : _h.finishedProduct)));
|
|
273
|
+
}
|
|
274
|
+
// Update Cart Details on change of Job Reference or Quantity
|
|
275
|
+
updateCart(event, cart, index) {
|
|
276
|
+
var _a;
|
|
277
|
+
event.preventDefault();
|
|
278
|
+
const value = (_a = event === null || event === void 0 ? void 0 : event.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
|
|
279
|
+
if (!this.isNullOrEmpty(value) && this.isFormValid(index, cart)) {
|
|
280
|
+
this.updateCartDetails(cart, index);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
updateJobReference(event, cart, index) {
|
|
284
|
+
event.preventDefault();
|
|
285
|
+
this.updateCartDetails(cart, index);
|
|
286
|
+
}
|
|
287
|
+
reoladCartEntires() {
|
|
288
|
+
this.updateCartEntry.emit();
|
|
289
|
+
}
|
|
290
|
+
// Get the Image Details based on Products
|
|
291
|
+
getImageDetails(cartDetails, thumbnail = true) {
|
|
292
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
293
|
+
let imageUrl = (_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _a === void 0 ? void 0 : _a.images;
|
|
294
|
+
if (this.isCardData) {
|
|
295
|
+
imageUrl = (_b = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _b === void 0 ? void 0 : _b.images;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
imageUrl = (_e = (_d = (_c = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _c === void 0 ? void 0 : _c.images) === null || _d === void 0 ? void 0 : _d.PRIMARY) === null || _e === void 0 ? void 0 : _e.cartIcon;
|
|
299
|
+
}
|
|
300
|
+
let srcUrl;
|
|
301
|
+
if ((cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) &&
|
|
302
|
+
((_f = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) === null || _f === void 0 ? void 0 : _f.length) &&
|
|
303
|
+
((_g = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _g === void 0 ? void 0 : _g.flashingProduct)) {
|
|
304
|
+
srcUrl =
|
|
305
|
+
thumbnail && ((_h = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) === null || _h === void 0 ? void 0 : _h.length) > 1
|
|
306
|
+
? (_j = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[1]) === null || _j === void 0 ? void 0 : _j.downloadURL
|
|
307
|
+
: (_k = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[0]) === null || _k === void 0 ? void 0 : _k.downloadURL;
|
|
308
|
+
imageUrl = {
|
|
309
|
+
url: (_l = (this.environment.occBaseUrl.slice(0, this.environment.occBaseUrl.length - 1) +
|
|
310
|
+
srcUrl)) === null || _l === void 0 ? void 0 : _l.replace('&attachment=true', ''),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
return imageUrl;
|
|
314
|
+
}
|
|
315
|
+
viewImage(event, cartDetails) {
|
|
316
|
+
var _a;
|
|
317
|
+
event.preventDefault();
|
|
318
|
+
this.imageModalSrc = (_a = this.getImageDetails(cartDetails, false)) === null || _a === void 0 ? void 0 : _a.url;
|
|
319
|
+
}
|
|
320
|
+
getPdfLink(cartDetails) {
|
|
321
|
+
var _a;
|
|
322
|
+
return (_a = this.getImageDetails(cartDetails, false)) === null || _a === void 0 ? void 0 : _a.url;
|
|
323
|
+
}
|
|
324
|
+
hasImage(cartDetails) {
|
|
325
|
+
var _a;
|
|
326
|
+
const mimeType = (_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[0]) === null || _a === void 0 ? void 0 : _a.mime;
|
|
327
|
+
const mimeArray = ["image/png", "image/jpg", "image/jpeg"];
|
|
328
|
+
return mimeArray.includes(mimeType);
|
|
329
|
+
}
|
|
330
|
+
closeToast() {
|
|
331
|
+
this.showToast = false;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
CustomCartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartGridComponent, deps: [{ token: i1.CartService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i3.ActiveCartService }], target: i0.ɵɵFactoryTarget.Component });
|
|
335
|
+
CustomCartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomCartGridComponent, selector: "app-custom-cart-grid", inputs: { additionalPara: "additionalPara", cartDetails: "cartDetails", isCardData: "isCardData" }, outputs: { updateCartEntry: "updateCartEntry" }, viewQueries: [{ propertyName: "closeInviteModal", first: true, predicate: ["closeInviteModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"showWaitCursor | async\">Loading…</div>\r\n<ng-container [formGroup]=\"productForm\">\r\n <ng-container formArrayName=\"cart\" *ngIf=\"hasCartDetails()\">\r\n <div class=\"py-3\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-lg-3 col-sm-6\"\r\n *ngFor=\"let cart of cartForm.controls; let i = index\"\r\n [formGroupName]=\"i\"\r\n >\r\n <div\r\n class=\"cart-grid-tile\"\r\n *ngIf=\"!isNullOrEmpty(cartDetails[i]?.product?.code)\"\r\n >\r\n <div class=\"grid-tile-top position-relative\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center mb-3\"\r\n >\r\n <span class=\"sku-code\"\r\n >SKU:{{ cartDetails[i]?.product?.code }}</span\r\n >\r\n <span>\r\n <img\r\n class=\"delete-icon\"\r\n src=\"../../../../../assets/images/ionic-trash.svg\"\r\n alt=\"delete\"\r\n (click)=\"deleteEntry(cartDetails[i]?.entryNumber)\"\r\n /></span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-3 col-3 pr-0\">\r\n <!-- <cx-media\r\n [container]=\"cartDetails[i]?.product?.images\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media> -->\r\n\r\n <ng-container\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct;\r\n else normalImage\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n class=\"flashing-expand\"\r\n (click)=\"viewImage($event, cartDetails[i])\"\r\n [attr.data-target]=\"'#imageModal'\"\r\n *ngIf=\"hasImage(cartDetails[i]); else hasPdf\"\r\n >\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </a>\r\n <ng-template #hasPdf>\r\n <a class=\"flashing-expand flashing-open\" [href]=\"getPdfLink(cartDetails[i])\" target=\"_blank\">\r\n <img\r\n class=\"pdf-icon\"\r\n src=\"../../../../../assets/images/pdf-icon.svg\"\r\n alt=\"Click to open PDF\"\r\n title=\"Click to open PDF\"\r\n />\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #normalImage>\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </ng-template>\r\n </div>\r\n <div class=\"col-md-7 col-7 ellipsis\">\r\n <h4\r\n placement=\"top\"\r\n title=\"{{ cartDetails[i]?.product?.name }}\"\r\n >\r\n {{ cartDetails[i]?.product?.name }}\r\n </h4>\r\n </div>\r\n </div>\r\n <span class=\"expandBtn\" (click)=\"arrowHideShow(i)\">\r\n <ng-container *ngIf=\"arrowUpDown[i] == true; else arrowUp\">\r\n <i class=\"fas fa-chevron-up\"></i>\r\n </ng-container>\r\n <ng-template #arrowUp>\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </ng-template>\r\n </span>\r\n </div>\r\n <ng-container *ngIf=\"arrowUpDown[i]\">\r\n <div class=\"grid-tile-middle\">\r\n <ng-container *ngIf=\"cartDetails[i]?.product?.classifications\">\r\n <p class=\"mt-3 mb-0 ellipsis sigleLine_ellipsis\">\r\n <span\r\n *ngFor=\"\r\n let attributes of cartDetails[i]?.product &&\r\n cartDetails[i]?.product?.classifications &&\r\n cartDetails[i]?.product?.classifications[0] &&\r\n cartDetails[i]?.product?.classifications[0]?.features;\r\n last as isLast\r\n \"\r\n >\r\n {{ attributes?.featureValues[0]?.value }}\r\n <span *ngIf=\"!isLast\"> | </span>\r\n <span *ngIf=\"isLast\">mm</span>\r\n </span>\r\n </p>\r\n </ng-container>\r\n <input\r\n type=\"text\"\r\n [value]=\"cartDetails[i].jobReference\"\r\n formControlName=\"jobReference\"\r\n class=\"custom-input-field\"\r\n (blur)=\"updateJobReference($event, cartDetails[i], i)\"\r\n />\r\n <div\r\n class=\"mt-2 text-danger mb-2\"\r\n *ngIf=\"jobReferenceErrors(i)\"\r\n >\r\n Please enter valid Job Reference\r\n </div>\r\n <div\r\n *ngIf=\"!isModalSelectedColor[i]\"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n <span\r\n class=\"color-block\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n [ngStyle]=\"{\r\n background:\r\n cartDetails[i]?.configurationInfos[0]\r\n ?.configurationValue | split : '|' : 2\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n ngbTooltip=\"{{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : '|' : 1\r\n }}\"\r\n >\r\n {{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : \"|\" : 1\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n isModalSelectedColor[i] ||\r\n cartDetails[i]?.product?.finishedProduct\r\n \"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n <span\r\n class=\"color-block\"\r\n [ngStyle]=\"{\r\n background:\r\n modalSelectedColour[i]?.hexadecimalCode ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n >\r\n {{\r\n modalSelectedColour[i]?.name ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <!-- avaialable colours popup -->\r\n <div\r\n *ngIf=\"cartDetails[i]?.isExpand\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.variantOptions;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n modalSelectedColor(\r\n $event,\r\n modalcolour.colours[0],\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.colours[0]?.name }}\"\r\n >\r\n {{ modalcolour?.colours[0]?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.additionalColours?.length > 0\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"cartDetails[i]?.product?.flashingProduct == false\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div class=\"colours m-1 pt-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours?.length > 0\">\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Additional colours popup-->\r\n <div\r\n class=\"modal fade\"\r\n id=\"additionalColorsModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"inviteMemberLabel\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Additional Colours</h4>\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"more-content\">\r\n <div>\r\n <img\r\n class=\"mr-2\"\r\n src=\"../../../../assets/images/warningicon.svg\"\r\n alt=\"alert\"\r\n />\r\n </div>\r\n <div>{{ additionalPara?.content }}.</div>\r\n </div>\r\n\r\n <div class=\"colours pt-3 pb-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n addtionalModalSelectedColor(\r\n $event,\r\n modalcolour,\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n additinalselectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"m-1 pt-3\"\r\n *ngIf=\"additinalselectedColour[i]\"\r\n >\r\n <h6 class=\"font-weight-bold\">Colour Selection</h6>\r\n <div class=\"selected_color_section\">\r\n <div\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n additinalselectedColour[i]?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <div>{{ additinalselectedColour[i]?.name }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-sm-flex justify-content-end d-block\">\r\n <button\r\n (click)=\"cancel()\"\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n class=\"btn mobile-cancel-btn dimond-secondary-btn mr-lg-5\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n (click)=\"\r\n proceedWithSubmit(additinalselectedColour, i)\r\n \"\r\n type=\"submit\"\r\n class=\"btn mobile-save-btn dimond-primary-btn float-right\"\r\n >\r\n Proceed\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <a class=\"see-more-link\" (click)=\"showHide(i)\">\r\n {{ showDetails[i] == true ? \"Hide\" : \"See\" }} more details\r\n </a>\r\n <div\r\n *ngIf=\"showDetails[i]\"\r\n class=\"grid\"\r\n [ngClass]=\"{\r\n 'quantity-form-details':\r\n !cartDetails[i]?.product?.finishedProduct\r\n }\"\r\n >\r\n <app-custom-product-quantity-form\r\n [productCode]=\"cartDetails[i]?.product?.code\"\r\n [productDetails]=\"cartDetails[i]\"\r\n [listView]=\"false\"\r\n [accessoriesPrice]=\"cartDetails[i]?.basePrice?.value\"\r\n [selectedColour]=\"selectedColour\"\r\n [finishedVariantDetails]=\"finishedVariantDetails\"\r\n [isFinishedProduct]=\"\r\n cartDetails[i]?.product?.finishedProduct\r\n \"\r\n (updateCartEntires)=\"reoladCartEntires()\"\r\n ></app-custom-product-quantity-form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-6 border-right\">\r\n <div class=\"total-qty\">\r\n <span\r\n >Total Qty: {{ cartDetails[i]?.quantityDouble\r\n }}{{ cartDetails[i]?.basePrice?.unitType }}</span\r\n ><br />\r\n <span\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct;\r\n else nonAccessories\r\n \"\r\n >{{ cartDetails[i]?.basePrice?.formattedValue }}/{{\r\n cartDetails[i]?.basePrice?.unitType\r\n }}</span\r\n >\r\n <ng-template #nonAccessories>\r\n <span>\r\n <input\r\n class=\"qty_input refernce-input\"\r\n type=\"text\"\r\n formControlName=\"prodQty\"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n (blur)=\"updateCart($event, cartDetails[i], i)\"\r\n />\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ cartDetails[i]?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct &&\r\n cartDetails[i]?.productConfiguredInfos &&\r\n cartDetails[i]?.productConfiguredInfos?.length > 0\r\n \"\r\n >\r\n <div\r\n class=\"flashing-block\"\r\n *ngFor=\"let data of cartDetails[i]?.productConfiguredInfos\"\r\n >\r\n <div class=\"grid-tile-top\">\r\n <div>\r\n <h6 class=\"skuId\">SKU: {{ data?.product?.code }}</h6>\r\n <h3 class=\"flash-title\">{{ data?.product?.name }}</h3>\r\n <span *ngIf=\"data?.girth\">Grith: +{{ data?.girth }}mm</span>\r\n </div>\r\n </div>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-md-6 col-6 d-flex align-items-center border-right\"\r\n >\r\n <div class=\"total-qty\">\r\n <div>\r\n Total Qty: {{ data?.quantityDouble\r\n }}{{ data?.unitType }}\r\n </div>\r\n <span\r\n >@{{ data?.basePrice?.formattedValue }}/{{\r\n data?.unitType\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ data?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n class=\"modal fade\"\r\n id=\"imageModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"imageModal\"\r\n aria-hidden=\"true\"\r\n #imageModal\r\n>\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body m-4\">\r\n <img [src]=\"imageModalSrc\" alt=\"alert\" />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ngb-toast *ngIf=\"showToast\" [autohide]=\"true\" [delay]=\"4000\">\r\n <img src=\"../../../../assets/images/Invited.svg\" />\r\n Cart updated successfully!\r\n <i\r\n class=\"icon-close toast-close\"\r\n aria-label=\"Close\"\r\n (click)=\"closeToast()\"\r\n ></i>\r\n</ngb-toast>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative;z-index:10}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.cart-grid-tile{border:1px solid #E0E0E0;margin-bottom:20px}.cart-grid-tile .grid-tile-top{background-color:#e8e8e8;border:1px solid #E0E0E0;padding:15px}.cart-grid-tile .grid-tile-top .sku-code{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif;color:#707070}.cart-grid-tile .grid-tile-top .ellipsis{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.cart-grid-tile .grid-tile-top .sigleLine_ellipsis{-webkit-line-clamp:1}.cart-grid-tile .grid-tile-top .delete-icon{cursor:pointer}.cart-grid-tile .grid-tile-top h4{margin-left:6px;font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.cart-grid-tile .grid-tile-middle{background-color:#fff;padding:15px}.cart-grid-tile .grid-tile-middle .custom-input-field{width:100%;border:1px solid #C6C6C6;height:40px;margin-bottom:15px;padding-left:15px}.cart-grid-tile .grid-tile-middle .color-block{width:20px;height:20px;border:1px solid #E0E0E0}.cart-grid-tile .grid-tile-middle .more-color{cursor:pointer;color:#b61828;margin-left:10px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-underline-offset:4px;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;position:relative}.cart-grid-tile .grid-tile-middle .more-detail{text-decoration:underline;cursor:pointer;margin-bottom:0}.cart-grid-tile .grid-tile-middle a{color:#262626;text-decoration:underline;cursor:pointer}.cart-grid-tile .grid-tile-middle a:hover{color:#262626}.cart-grid-tile .grid-tile-bottom{background-color:#fff;padding:0 15px;border-top:1px solid #E0E0E0}.cart-grid-tile .grid-tile-bottom .total-qty{font-size:var(--fontsize14);font-family:\"Arial Regular\",sans-serif;padding:15px 0}.cart-grid-tile .grid-tile-bottom .total-amount h4{font-size:var(--fontsize20);margin-bottom:0}.cart-grid-tile .grid-tile-bottom .total-amount span{font-size:var(--fontsize14)}.cart-details-table th{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.colours .colour{padding:0 15px;position:relative}.colours .colour .checkbox{display:none}.colours .colour .colour-title{position:absolute;bottom:-48px;width:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:var(--fontsize14);text-align:center;cursor:grabbing}.colours .colour.selected{border:1px solid #000000}.colours .colour.selected .checkbox{position:absolute;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2217.186%22 height%3D%2217.186%22 viewBox%3D%220 0 17.186 17.186%22%3E%0D %3Cg id%3D%22Group_12857%22 data-name%3D%22Group 12857%22 transform%3D%22translate(0.25 0.25)%22%3E%0D %3Ccircle id%3D%22Ellipse_14%22 data-name%3D%22Ellipse 14%22 cx%3D%228.316%22 cy%3D%228.316%22 r%3D%228.316%22 transform%3D%22translate(0 0.039)%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle%22 data-name%3D%22Icon ionic-md-checkmark-circle%22 d%3D%22M11.718%2C3.375a8.343%2C8.343%2C0%2C1%2C0%2C8.343%2C8.343A8.367%2C8.367%2C0%2C0%2C0%2C11.718%2C3.375ZM10.005%2C16.166%2C5.729%2C11.89l1.2-1.2%2C3.08%2C3.08%2C6.5-6.5%2C1.2%2C1.2Z%22 transform%3D%22translate(-3.375 -3.375)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle_-_Outline%22 data-name%3D%22Icon ionic-md-checkmark-circle - Outline%22 d%3D%22M11.718%2C3.125a8.583%2C8.583%2C0%2C0%2C1%2C6.069%2C14.662A8.583%2C8.583%2C0%2C1%2C1%2C5.649%2C5.649%2C8.532%2C8.532%2C0%2C0%2C1%2C11.718%2C3.125Zm0%2C16.686A8.117%2C8.117%2C0%2C1%2C0%2C6%2C17.433%2C8.035%2C8.035%2C0%2C0%2C0%2C11.718%2C19.811ZM16.511%2C6.916l1.553%2C1.553-8.059%2C8.05L5.376%2C11.89l1.553-1.553%2C3.08%2C3.08Zm.846%2C1.553-.846-.846-6.5%2C6.5-3.08-3.08-.846.846%2C3.922%2C3.922Z%22 transform%3D%22translate(-3.375 -3.375)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:20px;height:20px;display:inline-block;top:10px;left:10px}.colours .colour.main{box-sizing:border-box;width:40px;height:40px;display:inline-block;padding:0;border:1px solid #C6C6C6}.colours_container{width:320px;height:auto;position:absolute;z-index:9}.more-content{display:flex;border:1px solid #548AF7;padding:8px;background-color:#edf5ff}.additional-color-link{cursor:pointer}.expandBtn{z-index:9;cursor:pointer;position:absolute;background-color:#fff;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;bottom:-24px;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);box-shadow:0 0 6px #00000026;-webkit-box-shadow:0px 0px 6px rgba(0,0,0,.15);-moz-box-shadow:0px 0px 6px rgba(0,0,0,.15)}.see-more-link{z-index:2;position:relative;top:10px;cursor:pointer}.see-more-link:hover{color:#d51317!important}.total-qty .qty_input{width:100%;border:1px solid #C6C6C6}.quantity-form-details{margin-top:-40px;z-index:0}.selected_color_section{display:flex}.selected_color_section .selected_color{width:20px;height:20px;border:1px solid #C6C6C6}::ng-deep app-custom-product-quantity-form .quantity{border:0!important}@media screen and (max-width: 767px){.mobile-cancel-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}.mobile-save-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}}#imageModal.show{display:flex!important;vertical-align:middle!important;align-items:center!important}#imageModal.show .modal-header{justify-content:right;border:none}#imageModal.show .modal-body{text-align:center;vertical-align:middle;margin:0 auto}::ng-deep .toast{top:20%;left:50%;position:fixed;min-width:500px;max-width:500px;transform:translate(-50%);z-index:9999;background-color:#1d1d1b}::ng-deep .toast .toast-body{color:#fff}::ng-deep .toast .toast-body img{margin-right:10px}::ng-deep .toast .toast-body .toast-close{top:50%;right:5%;position:absolute;transform:translate(-50%,-50%);cursor:pointer}::ng-deep .toast .toast-header{background-color:#1d1d1b;color:#fff;padding:15px;border-radius:0}::ng-deep .toast .toast-header .close{color:#fff;opacity:1;text-shadow:none}.flashing-expand{cursor:pointer}.flashing-expand:after{background:url(../../../../../assets/images/expand-icon.svg) no-repeat center;z-index:2;width:24px;content:\"\";height:24px;position:absolute;top:0;right:0}\n"], components: [{ type: i4.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i5.CustomProductQuantityFormComponent, selector: "app-custom-product-quantity-form", inputs: ["hasBundle", "productCode", "productDetails", "unitType", "accessoriesPrice", "selectedColour", "cuttingValidation", "finishedVariantDetails", "finishedAvailableColours", "isFinishedProduct", "isFlashingProduct", "listView"], outputs: ["updateCartEntires"] }, { type: i6.NgbToast, selector: "ngb-toast", inputs: ["delay", "autohide", "animation", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }], pipes: { "async": i7.AsyncPipe, "split": i8.SplitPipe } });
|
|
336
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartGridComponent, decorators: [{
|
|
337
|
+
type: Component,
|
|
338
|
+
args: [{
|
|
339
|
+
selector: 'app-custom-cart-grid',
|
|
340
|
+
templateUrl: './custom-cart-grid.component.html',
|
|
341
|
+
styleUrls: ['./custom-cart-grid.component.scss'],
|
|
342
|
+
}]
|
|
343
|
+
}], ctorParameters: function () { return [{ type: i1.CartService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i3.ActiveCartService }]; }, propDecorators: { additionalPara: [{
|
|
344
|
+
type: Input
|
|
345
|
+
}], cartDetails: [{
|
|
346
|
+
type: Input
|
|
347
|
+
}], isCardData: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}], updateCartEntry: [{
|
|
350
|
+
type: Output
|
|
351
|
+
}], closeInviteModal: [{
|
|
352
|
+
type: ViewChild,
|
|
353
|
+
args: ['closeInviteModal']
|
|
354
|
+
}] } });
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLWNhcnQtZ3JpZC9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tY2FydC1ncmlkL2N1c3RvbS1jYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsU0FBUyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sdUJBQXVCO0lBeUNsQyxZQUNVLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLGlCQUFvQztRQUhwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBNUM5QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsNEJBQXVCLEdBQVEsRUFBRSxDQUFDO1FBQ2xDLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUM5QixXQUFNLEdBQVksSUFBSSxDQUFDO1FB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OztRQUNwQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQywwQ0FBRSxHQUFHLENBQUM7SUFDckUsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFnQjs7UUFDekIsT0FBTyxNQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQywwQ0FBRSxHQUFHLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFnQjs7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxJQUFJLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7O3FIQW5YVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qiw0VkN0QnBDLG9vMkJBd25CQTs0RkRsbUJhLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDakQ7NExBYVUsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDd0IsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7IFxyXG5pbXBvcnQgeyBBY3RpdmVDYXJ0U2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDYXJ0Rm9ybSB9IGZyb20gJy4uLy4uL0N1c3RvbVByb2R1Y3QnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLWNhcnQtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1jYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1jYXJ0LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbUNhcnRHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIGlzRmluaXNoZWRQb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZGRpdGluYWxzZWxlY3RlZENvbG91cjogYW55ID0gW107XHJcbiAgbW9kYWxTZWxlY3RlZENvbG91cjogYW55ID0gW107XHJcbiAgaXNTaG93OiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93RGV0YWlsczogYW55ID0gW107XHJcbiAgZGlzYWJsZUFkZE1vcmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlcnJvckluZGV4OiBhbnkgPSBbXTtcclxuICByb3dJbmRleCA9IDA7XHJcbiAgY2FydElkOiBhbnk7XHJcbiAgc2hvd1dhaXRDdXJzb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgQElucHV0KCkgYWRkaXRpb25hbFBhcmE6IGFueTtcclxuICBASW5wdXQoKSBjYXJ0RGV0YWlsczogYW55O1xyXG4gIEBJbnB1dCgpIGlzQ2FyZERhdGE6IGFueTtcclxuICBAT3V0cHV0KCkgdXBkYXRlQ2FydEVudHJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnY2xvc2VJbnZpdGVNb2RhbCcpIGNsb3NlSW52aXRlTW9kYWw6IGFueTtcclxuICBpc01vZGFsU2VsZWN0ZWRDb2xvcjogYW55ID0gW107XHJcbiAgaW1hZ2VNb2RhbFNyYzogYW55O1xyXG5cclxuICBzZWxlY3RlZENvbG91cjogYW55O1xyXG5cclxuICBzZWxlY3RlZEluZGV4OiBhbnk7XHJcbiAgYXJyb3dVcERvd246IGFueSA9IFtdO1xyXG4gIGRlZmF1bHRDb25maWdJbmZvOiBhbnkgPSB7XHJcbiAgICBjb25maWd1cmF0b3JUeXBlOiAnVEVYVEZJRUxEJyxcclxuICAgIGNvbmZpZ3VyYXRpb25MYWJlbDogJ0NPTE9SJyxcclxuICAgIGNvbmZpZ3VyYXRpb25WYWx1ZTogJycsXHJcbiAgfTtcclxuXHJcbiAgcHJvZHVjdENvZGU6IGFueTtcclxuICBwcm9kdWN0RGV0YWlsczogYW55O1xyXG4gIGFjY2Vzc29yaWVzUHJpY2U6IGFueTtcclxuICBmaW5pc2hlZFZhcmlhbnREZXRhaWxzOiBhbnk7XHJcblxyXG4gIHByb2R1Y3RGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRUb0NhcnRFcnJvcjogYW55ID0gbnVsbDtcclxuICBlcnJvck1lc3NhZ2UgPSAnU29tZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIGRhdGEnO1xyXG4gIHNob3dUb2FzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVudjogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZW52Jyk7XHJcbiAgZW52aXJvbm1lbnQgOiBhbnkgPSBKU09OLnBhcnNlKHRoaXMuZW52KTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2ZUNhcnRTZXJ2aWNlOiBBY3RpdmVDYXJ0U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYXJ0T2JqOiBhbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3BhcnRhY3Vz4pq/ZGltb25kLXNwYeKav2NhcnQnKTtcclxuICAgIHRoaXMuY2FydElkID0gSlNPTi5wYXJzZShjYXJ0T2JqKT8uYWN0aXZlO1xyXG5cclxuICAgIHRoaXMucHJvZHVjdEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgY2FydDogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZURlZmF1bHRDYXJ0RGV0YWlscygpO1xyXG4gICAgdGhpcy5jYXJ0U2VydmljZS5leHBhbmRBbGwuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYXJ0RGV0YWlscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbHNbaV0gPSBkYXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJ0Rm9ybSgpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdEZvcm0uZ2V0KCdjYXJ0JykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgaGFzQ2FydERldGFpbHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXJ0Rm9ybSAmJiBPYmplY3Qua2V5cyh0aGlzLmNhcnRGb3JtKT8ubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlZmF1bHRDYXJ0RGV0YWlscygpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYXJ0RGV0YWlscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5wdXNoKHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAobmV3IENhcnRGb3JtKCkpKTtcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaV1cclxuICAgICAgICAuZ2V0KCdqb2JSZWZlcmVuY2UnKVxyXG4gICAgICAgID8uc2V0VmFsdWUodGhpcy5jYXJ0RGV0YWlsc1tpXT8uam9iUmVmZXJlbmNlKTtcclxuICAgICAgY29uc3QgcXR5ID0gdGhpcy5jYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgPyBwYXJzZUludCh0aGlzLmNhcnREZXRhaWxzW2ldPy5xdWFudGl0eSlcclxuICAgICAgICA6IHRoaXMuY2FydERldGFpbHNbaV0/LnF1YW50aXR5RG91YmxlO1xyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpXS5nZXQoJ3Byb2RRdHknKT8uc2V0VmFsdWUocXR5KTtcclxuICAgICAgdGhpcy5pc01vZGFsU2VsZWN0ZWRDb2xvci5wdXNoKGZhbHNlKTtcclxuICAgICAgdGhpcy5zaG93RGV0YWlscy5wdXNoKGZhbHNlKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcyAmJlxyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcz8ubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3MpIHtcclxuICAgICAgICAgIGlmIChjb25maWc/LmNvbmZpZ3VyYXRpb25MYWJlbCA9PSAnQ09MT1InKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ0luZm8uY29uZmlndXJhdGlvblZhbHVlID1cclxuICAgICAgICAgICAgICBjb25maWc/LmNvbmZpZ3VyYXRpb25WYWx1ZT8uc3BsaXQoJ3wnKVswXSB8fCAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlnVmFsdWVzICYmXHJcbiAgICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWdWYWx1ZXM/Lmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldWydjb25maWdWYWx1ZXMnXSA9IHRoaXMuZGVmYXVsdENvbmZpZ0luZm87XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbG91cnMoY2FydERldGFpbHM6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbG91ciA9XHJcbiAgICAgIGNhcnREZXRhaWxzPy5jb25maWd1cmF0aW9uSW5mb3NbMF0/LmNvbmZpZ3VyYXRpb25WYWx1ZS5zcGxpdCgnfCcpO1xyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPj0gdGhpcy5jYXJ0RGV0YWlscy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICB0aGlzLnNob3dEZXRhaWxzW2ldID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FydERldGFpbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGkgIT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldLmlzRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpbmRleF0uaXNFeHBhbmQgPSAhdGhpcy5jYXJ0RGV0YWlsc1tpbmRleF0uaXNFeHBhbmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkQ29sb3VyQ29kZShjb2RlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jYXJ0RGV0YWlsc1t0aGlzLnNlbGVjdGVkSW5kZXhdICYmXHJcbiAgICAgIHRoaXMuY2FydERldGFpbHNbdGhpcy5zZWxlY3RlZEluZGV4XT8uY29uZmlnVmFsdWVzXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jYXJ0RGV0YWlsc1t0aGlzLnNlbGVjdGVkSW5kZXhdLmNvbmZpZ1ZhbHVlcy5jb25maWd1cmF0aW9uVmFsdWUgPVxyXG4gICAgICAgIGNvZGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoIWNoYW5nZXM/LmNhcnREZXRhaWxzPy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURlZmF1bHRDYXJ0RGV0YWlscygpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93SGlkZShpbmQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93RGV0YWlsc1tpbmRdID0gIXRoaXMuc2hvd0RldGFpbHNbaW5kXTtcclxuICB9XHJcbiAgYXJyb3dIaWRlU2hvdyhpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFycm93VXBEb3duW2lkXSA9ICF0aGlzLmFycm93VXBEb3duW2lkXTtcclxuICB9XHJcbiAgbW9kYWxTZWxlY3RlZENvbG9yKGV2ZW50OiBhbnksIGNvbG91cjogYW55LCBpbmQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLmlzRmluaXNoZWRQb2R1Y3QgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbFNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICAgIC8vdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91ciA9IGNvbG91cjtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbG91ciA9IGNvbG91cj8uY29kZSB8fCB0aGlzLnNlbGVjdGVkQ29sb3VyO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc01vZGFsU2VsZWN0ZWRDb2xvcltpbmRdID0gdHJ1ZTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRDb2xvdXJDb2RlKGNvbG91cj8uY29kZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVByb2R1Y3RDb2xvcih0aGlzLmNhcnREZXRhaWxzW2luZF0sIGNvbG91ciwgaW5kKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVByb2R1Y3RDb2xvcihjYXJ0OiBhbnksIGNvbG9yOiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IG9iaiA9IFtdO1xyXG4gICAgb2JqLnB1c2goe1xyXG4gICAgICBcImNvbmZpZ3VyYXRvclR5cGVcIjogXCJURVhURklFTERcIixcclxuICAgICAgXCJjb25maWd1cmF0aW9uTGFiZWxcIjogXCJDT0xPUlwiLFxyXG4gICAgICBcImNvbmZpZ3VyYXRpb25WYWx1ZVwiOiBjb2xvcj8uY29kZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKGNhcnQsIGluZGV4LCBvYmopO1xyXG4gIH1cclxuXHJcbiAgYWRkdGlvbmFsTW9kYWxTZWxlY3RlZENvbG9yKGV2ZW50OiBhbnksIGNvbG91cjogYW55LCBpbmQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLmlzRmluaXNoZWRQb2R1Y3QgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgfVxyXG4gICAvL3RoaXMubW9kYWxTZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgLy90aGlzLnNlbGVjdGVkQ29sb3VyID0gY29sb3VyPy5jb2RlO1xyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRDb2xvdXJDb2RlKHRoaXMuc2VsZWN0ZWRDb2xvdXIpO1xyXG5cclxuICB9XHJcblxyXG4gIHByb2NlZWRXaXRoU3VibWl0KGNvbG9yOiBhbnksIGluZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmlzTW9kYWxTZWxlY3RlZENvbG9yW2luZF0gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RhbFNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvclswXTtcclxuICAgIHRoaXMuY2xvc2VJbnZpdGVNb2RhbC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVByb2R1Y3RDb2xvcih0aGlzLmNhcnREZXRhaWxzW2luZF0sIGNvbG9yWzBdLCBpbmQpO1xyXG4gICAgdGhpcy5nZXRDb2xvdXJzKGNvbG9yLCBpbmQpXHJcblxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91ciA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRW50cnkoZW50TnVtYmVyOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEVudHJ5KHRoaXMuY2FydElkLCBlbnROdW1iZXIpLnN1YnNjcmliZShcclxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDYXJ0U2VydmljZS5yZWxvYWRBY3RpdmVDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYW55IHZhbHVlIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gIGlzTnVsbE9yRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIENhcnQgRGV0YWlscyBpZiBRdWFudGl0eSBDaGFuZ2VkIGZvciBBY2Nlc3NvcmllcyBvbmx5XHJcbiB1cGRhdGVDYXJ0RGV0YWlscyhjYXJ0OiBhbnksIGluZGV4OiBhbnksIGNvbG9yPzphbnkpOiB2b2lkIHtcclxuICAgIGxldCBwYXlMb2FkOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGVudHJ5TnVtYmVyID0gY2FydD8ucHJvZHVjdD8uZW50cnlOdW1iZXIgfHwgY2FydD8uZW50cnlOdW1iZXI7XHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgcGF5TG9hZCA9IHtcclxuICAgICAgICBxdWFudGl0eTogcGFyc2VJbnQodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8udmFsdWUpLFxyXG4gICAgICAgIFwiY29uZmlndXJhdGlvbkluZm9zXCI6IGNvbG9yXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjYXJ0Py5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QpIHtcclxuICAgICAgcGF5TG9hZCA9IHtcclxuICAgICAgICBxdWFudGl0eTogcGFyc2VJbnQodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8udmFsdWUpLFxyXG4gICAgICAgIGpvYlJlZmVyZW5jZTpcclxuICAgICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8udmFsdWUsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXlMb2FkID0ge1xyXG4gICAgICAgIHF1YW50aXR5OiAxLFxyXG4gICAgICAgIHByb2R1Y3Q6IHtcclxuICAgICAgICAgIGNvZGU6IGNhcnQ/LnByb2R1Y3Q/LmNvZGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqb2JSZWZlcmVuY2U6XHJcbiAgICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LnZhbHVlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYXJ0U2VydmljZVxyXG4gICAgICAudXBkYXRlQ2FydEVudHJ5KHRoaXMuY2FydElkLCBlbnRyeU51bWJlciwgcGF5TG9hZClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdGF0dXNDb2RlPy50b0xvd2VyQ2FzZSgpID09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlLnJlbG9hZEFjdGl2ZUNhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0RW50cnkuZW1pdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgNDAwMCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgICByZXNwb25zZT8uZXJyb3JzWzBdPy5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgcmVzcG9uc2U/LmVycm9yc1swXT8uZXJyb3JNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZGRUb0NhcnRFcnJvciA9XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3JzWzBdPy5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3JzWzBdPy5lcnJvck1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBQcm9kdWN0IFF1YW50aXR5IEVycm9yc1xyXG4gIHByb2RRdHlFcnJvcnMoaW5kZXg6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8uZXJyb3JzIHx8XHJcbiAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LmRpcnR5IHx8XHJcbiAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgSm9iIFJlZmVyZW5jZSBFcnJvcnNcclxuICBqb2JSZWZlcmVuY2VFcnJvcnMoaW5kZXg6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LmludmFsaWQpICYmXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LmRpcnR5IHx8XHJcbiAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy50b3VjaGVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlzIEZvcm0gVmFsaWRcclxuICBpc0Zvcm1WYWxpZChpbmRleDogYW55LCBjYXJ0OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdICYmXHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8udmFsaWQgJiZcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LnZhbGlkIHx8XHJcbiAgICAgICAgIWNhcnQ/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgQ2FydCBEZXRhaWxzIG9uIGNoYW5nZSBvZiBKb2IgUmVmZXJlbmNlIG9yIFF1YW50aXR5XHJcbiAgdXBkYXRlQ2FydChldmVudDogYW55LCBjYXJ0OiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50Py5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcclxuICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHZhbHVlKSAmJiB0aGlzLmlzRm9ybVZhbGlkKGluZGV4LCBjYXJ0KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKGNhcnQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUpvYlJlZmVyZW5jZShldmVudDogYW55LCBjYXJ0OiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKGNhcnQsIGluZGV4KTtcclxuICB9XHJcblxyXG4gIHJlb2xhZENhcnRFbnRpcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVDYXJ0RW50cnkuZW1pdCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEdldCB0aGUgSW1hZ2UgRGV0YWlscyBiYXNlZCBvbiBQcm9kdWN0c1xyXG4gIGdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlsczogYW55LCB0aHVtYm5haWw6IGFueSA9IHRydWUpOiBhbnkge1xyXG4gICAgbGV0IGltYWdlVXJsOiBhbnkgPSBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzO1xyXG4gICAgaWYgKHRoaXMuaXNDYXJkRGF0YSkge1xyXG4gICAgICBpbWFnZVVybCA9IGNhcnREZXRhaWxzPy5wcm9kdWN0Py5pbWFnZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbWFnZVVybCA9IGNhcnREZXRhaWxzPy5wcm9kdWN0Py5pbWFnZXM/LlBSSU1BUlk/LmNhcnRJY29uO1xyXG4gICAgfVxyXG4gICAgbGV0IHNyY1VybDogYW55O1xyXG4gICAgaWYgKFxyXG4gICAgICBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHMgJiZcclxuICAgICAgY2FydERldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGggJiZcclxuICAgICAgY2FydERldGFpbHM/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgKSB7XHJcbiAgICAgIHNyY1VybCA9XHJcbiAgICAgICAgdGh1bWJuYWlsICYmIGNhcnREZXRhaWxzPy5hdHRhY2htZW50cz8ubGVuZ3RoID4gMVxyXG4gICAgICAgICAgPyBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHNbMV0/LmRvd25sb2FkVVJMXHJcbiAgICAgICAgICA6IGNhcnREZXRhaWxzPy5hdHRhY2htZW50c1swXT8uZG93bmxvYWRVUkw7XHJcbiAgICAgIGltYWdlVXJsID0ge1xyXG4gICAgICAgIHVybDogKFxyXG4gICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5vY2NCYXNlVXJsLnNsaWNlKDAsIHRoaXMuZW52aXJvbm1lbnQub2NjQmFzZVVybC5sZW5ndGggLSAxKSArXHJcbiAgICAgICAgICBzcmNVcmxcclxuICAgICAgICApPy5yZXBsYWNlKCcmYXR0YWNobWVudD10cnVlJywgJycpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltYWdlVXJsO1xyXG4gIH1cclxuXHJcbiAgdmlld0ltYWdlKGV2ZW50OiBhbnksIGNhcnREZXRhaWxzOiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmltYWdlTW9kYWxTcmMgPSB0aGlzLmdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlscywgZmFsc2UpPy51cmw7XHJcbiAgfVxyXG5cclxuICBnZXRQZGZMaW5rKGNhcnREZXRhaWxzOiBhbnkpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlscywgZmFsc2UpPy51cmw7XHJcbiAgfVxyXG5cclxuICBoYXNJbWFnZShjYXJ0RGV0YWlsczogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtaW1lVHlwZSA9IGNhcnREZXRhaWxzPy5hdHRhY2htZW50c1swXT8ubWltZTtcclxuICAgIGNvbnN0IG1pbWVBcnJheSA9IFtcImltYWdlL3BuZ1wiLCBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIl07XHJcbiAgICByZXR1cm4gbWltZUFycmF5LmluY2x1ZGVzKG1pbWVUeXBlKTtcclxuICB9XHJcblxyXG4gIGNsb3NlVG9hc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibG9hZGluZ1wiICpuZ0lmPVwic2hvd1dhaXRDdXJzb3IgfCBhc3luY1wiPkxvYWRpbmcmIzgyMzA7PC9kaXY+XHJcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJwcm9kdWN0Rm9ybVwiPlxyXG4gIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cImNhcnRcIiAqbmdJZj1cImhhc0NhcnREZXRhaWxzKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImNvbC1sZy0zIGNvbC1zbS02XCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXJ0IG9mIGNhcnRGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjYXJ0LWdyaWQtdGlsZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTnVsbE9yRW1wdHkoY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNvZGUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS10b3AgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3UtY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgID5TS1U6e3sgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNvZGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9pb25pYy10cmFzaC5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUVudHJ5KGNhcnREZXRhaWxzW2ldPy5lbnRyeU51bWJlcilcIlxyXG4gICAgICAgICAgICAgICAgLz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC0zIHByLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVyXT1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5pbWFnZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cImNhcnRJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3gtbWVkaWE+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBub3JtYWxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsYXNoaW5nLWV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0ltYWdlKCRldmVudCwgY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGFyZ2V0XT1cIicjaW1hZ2VNb2RhbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNJbWFnZShjYXJ0RGV0YWlsc1tpXSk7IGVsc2UgaGFzUGRmXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCJnZXRJbWFnZURldGFpbHMoY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PVwiY2FydEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2N4LW1lZGlhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hhc1BkZj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxhc2hpbmctZXhwYW5kIGZsYXNoaW5nLW9wZW5cIiBbaHJlZl09XCJnZXRQZGZMaW5rKGNhcnREZXRhaWxzW2ldKVwiIHRhcmdldD1cIl9ibGFua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZGYtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9wZGYtaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNsaWNrIHRvIG9wZW4gUERGXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIG9wZW4gUERGXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxJbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiZ2V0SW1hZ2VEZXRhaWxzKGNhcnREZXRhaWxzW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJjYXJ0SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9jeC1tZWRpYT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03IGNvbC03IGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoNFxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHBhbmRCdG5cIiAoY2xpY2spPVwiYXJyb3dIaWRlU2hvdyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycm93VXBEb3duW2ldID09IHRydWU7IGVsc2UgYXJyb3dVcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLXVwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Fycm93VXA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycm93VXBEb3duW2ldXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMyBtYi0wIGVsbGlwc2lzIHNpZ2xlTGluZV9lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZXMgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNsYXNzaWZpY2F0aW9uc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnNbMF0/LmZlYXR1cmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0IGFzIGlzTGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGVzPy5mZWF0dXJlVmFsdWVzWzBdPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMYXN0XCI+IHwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0xhc3RcIj5tbTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNhcnREZXRhaWxzW2ldLmpvYlJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImpvYlJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWlucHV0LWZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlSm9iUmVmZXJlbmNlKCRldmVudCwgY2FydERldGFpbHNbaV0sIGkpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJqb2JSZWZlcmVuY2VFcnJvcnMoaSlcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgSm9iIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTW9kYWxTZWxlY3RlZENvbG9yW2ldXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXS5jb25maWd1cmF0aW9uSW5mb3NbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3NbMF0/LmNvbmZpZ3VyYXRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uY29uZmlndXJhdGlvblZhbHVlIHwgc3BsaXQgOiAnfCcgOiAyXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBub2xpbmtGb3JmbGFzaDogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjY29sbGFwc2VDb2xvdXJze3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXS5jb25maWd1cmF0aW9uSW5mb3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldLmNvbmZpZ3VyYXRpb25JbmZvc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb2xvdXJzKGNhcnREZXRhaWxzW2ldLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGxpdCA6ICd8JyA6IDFcclxuICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgc3BsaXQgOiBcInxcIiA6IDFcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93biBkcm9wZG93bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pXHJcbiAgICAgICAgICAgICAgICAgID48L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNb2RhbFNlbGVjdGVkQ29sb3JbaV0gfHxcclxuICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlbGVjdGVkQ29sb3VyW2ldPy5oZXhhZGVjaW1hbENvZGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uY29sb3Vyc1swXT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9yZS1jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgbm9saW5rRm9yZmxhc2g6IGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiI2NvbGxhcHNlQ29sb3Vyc3t7IGkgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbG91cnMoY2FydERldGFpbHNbaV0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlbGVjdGVkQ29sb3VyW2ldPy5uYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5icEFkZGl0aW9uYWxBdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/LmNvbG91cnNbMF0/Lm5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93biBkcm9wZG93bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pXHJcbiAgICAgICAgICAgICAgICAgID48L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGF2YWlhbGFibGUgY29sb3VycyBwb3B1cCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYXJ0RGV0YWlsc1tpXT8uaXNFeHBhbmRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbGxhcHNlIGNvbG91cnNfY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUNvbG91cnN7eyBpIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8udmFyaWFudE9wdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91cnMgbS0xIHB0LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGFsY29sb3VyIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnZhcmlhbnRPcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91ci5jb2xvdXJzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXItdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/LmNvbG91cnNbMF0/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LnZhcmlhbnRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXJzIG0tMSBwdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RhbGNvbG91ciBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmNvbG91cnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsU2VsZWN0ZWRDb2xvcigkZXZlbnQsIG1vZGFsY29sb3VyLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXIgbS0xIG1iLTMgbWFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlbGVjdGVkQ29sb3VyW2ldPy5oZXhhZGVjaW1hbENvZGUgPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vZGFsY29sb3VyPy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZGRpdGlvbmFsQ29sb3Vycz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10YXJnZXQ9XCIjYWRkaXRpb25hbENvbG9yc01vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHU+IEFkZGl0aW9uYWwgY29sb3JzIG1heSBiZSBhdmlhbGFibGUgPC91PjwvYVxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xsYXBzZSBjb2xvdXJzX2NvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICBpZD1cImNvbGxhcHNlQ29sb3Vyc3t7IGkgfX1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3VycyBtLTEgcHQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kYWxjb2xvdXIgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uY29sb3VycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbFNlbGVjdGVkQ29sb3IoJGV2ZW50LCBtb2RhbGNvbG91ciwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXItdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vZGFsY29sb3VyPy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgID8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5hZGRpdGlvbmFsQ29sb3Vycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGFyZ2V0PVwiI2FkZGl0aW9uYWxDb2xvcnNNb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHU+IEFkZGl0aW9uYWwgY29sb3JzIG1heSBiZSBhdmlhbGFibGUgPC91PjwvYVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBZGRpdGlvbmFsIGNvbG91cnMgcG9wdXAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb2RhbCBmYWRlXCJcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJhZGRpdGlvbmFsQ29sb3JzTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICByb2xlPVwiZGlhbG9nXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiaW52aXRlTWVtYmVyTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BZGRpdGlvbmFsIENvbG91cnM8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjY2xvc2VJbnZpdGVNb2RhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9yZS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy93YXJuaW5naWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJhbGVydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgYWRkaXRpb25hbFBhcmE/LmNvbnRlbnQgfX0uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG91cnMgcHQtMyBwYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RhbGNvbG91ciBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5hZGRpdGlvbmFsQ29sb3VycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGR0aW9uYWxNb2RhbFNlbGVjdGVkQ29sb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXItdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vZGFsY29sb3VyPy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMSBwdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2ldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj5Db2xvdXIgU2VsZWN0aW9uPC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRfY29sb3Jfc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkX2NvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8ubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtc20tZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG1vYmlsZS1jYW5jZWwtYnRuIGRpbW9uZC1zZWNvbmRhcnktYnRuIG1yLWxnLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VlZFdpdGhTdWJtaXQoYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXIsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBtb2JpbGUtc2F2ZS1idG4gZGltb25kLXByaW1hcnktYnRuIGZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFByb2NlZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInNlZS1tb3JlLWxpbmtcIiAoY2xpY2spPVwic2hvd0hpZGUoaSlcIj5cclxuICAgICAgICAgICAgICAgICAge3sgc2hvd0RldGFpbHNbaV0gPT0gdHJ1ZSA/IFwiSGlkZVwiIDogXCJTZWVcIiB9fSBtb3JlIGRldGFpbHNcclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RGV0YWlsc1tpXVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAncXVhbnRpdHktZm9ybS1kZXRhaWxzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm1cclxuICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdENvZGVdPVwiY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0RGV0YWlsc109XCJjYXJ0RGV0YWlsc1tpXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpc3RWaWV3XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYWNjZXNzb3JpZXNQcmljZV09XCJjYXJ0RGV0YWlsc1tpXT8uYmFzZVByaWNlPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkQ29sb3VyXT1cInNlbGVjdGVkQ29sb3VyXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmluaXNoZWRWYXJpYW50RGV0YWlsc109XCJmaW5pc2hlZFZhcmlhbnREZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNGaW5pc2hlZFByb2R1Y3RdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAodXBkYXRlQ2FydEVudGlyZXMpPVwicmVvbGFkQ2FydEVudGlyZXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2FwcC1jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBib3JkZXItcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLXF0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+VG90YWwgUXR5OiB7eyBjYXJ0RGV0YWlsc1tpXT8ucXVhbnRpdHlEb3VibGVcclxuICAgICAgICAgICAgICAgICAgICAgIH19e3sgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8udW5pdFR5cGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG5vbkFjY2Vzc29yaWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19L3t7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LnVuaXRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vbkFjY2Vzc29yaWVzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicXR5X2lucHV0IHJlZmVybmNlLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZFF0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlQ2FydCgkZXZlbnQsIGNhcnREZXRhaWxzW2ldLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1hbW91bnQgdGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoND57eyBjYXJ0RGV0YWlsc1tpXT8udG90YWxQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmV4Y2wgR1NUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdENvbmZpZ3VyZWRJbmZvcyAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3RDb25maWd1cmVkSW5mb3M/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGFzaGluZy1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdENvbmZpZ3VyZWRJbmZvc1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJza3VJZFwiPlNLVToge3sgZGF0YT8ucHJvZHVjdD8uY29kZSB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZmxhc2gtdGl0bGVcIj57eyBkYXRhPy5wcm9kdWN0Py5uYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmdpcnRoXCI+R3JpdGg6ICt7eyBkYXRhPy5naXJ0aCB9fW1tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgY29sLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1xdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBRdHk6IHt7IGRhdGE/LnF1YW50aXR5RG91YmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX17eyBkYXRhPy51bml0VHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+QHt7IGRhdGE/LmJhc2VQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX0ve3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/LnVuaXRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLWFtb3VudCB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND57eyBkYXRhPy50b3RhbFByaWNlPy5mb3JtYXR0ZWRWYWx1ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmV4Y2wgR1NUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwibW9kYWwgZmFkZVwiXHJcbiAgaWQ9XCJpbWFnZU1vZGFsXCJcclxuICByb2xlPVwiZGlhbG9nXCJcclxuICBhcmlhLWxhYmVsbGVkYnk9XCJpbWFnZU1vZGFsXCJcclxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICNpbWFnZU1vZGFsXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgICNjbG9zZUludml0ZU1vZGFsXHJcbiAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgID48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtLTRcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VNb2RhbFNyY1wiIGFsdD1cImFsZXJ0XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmdiLXRvYXN0ICpuZ0lmPVwic2hvd1RvYXN0XCIgW2F1dG9oaWRlXT1cInRydWVcIiBbZGVsYXldPVwiNDAwMFwiPlxyXG4gIDxpbWcgc3JjPVwiLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9JbnZpdGVkLnN2Z1wiIC8+XHJcbiAgQ2FydCB1cGRhdGVkIHN1Y2Nlc3NmdWxseSFcclxuICA8aVxyXG4gICAgY2xhc3M9XCJpY29uLWNsb3NlIHRvYXN0LWNsb3NlXCJcclxuICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAoY2xpY2spPVwiY2xvc2VUb2FzdCgpXCJcclxuICA+PC9pPlxyXG48L25nYi10b2FzdD5cclxuIl19
|