buildingproduct-library 0.2.7
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/newtab.svg +11 -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/pdf-icon.svg +45 -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.7.tgz +0 -0
- package/buildingproduct-library.d.ts +5 -0
- package/bundles/buildingproduct-library.umd.js +10979 -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 +159 -0
- package/esm2015/lib/account-dropdown/account-dropdown.module.js +59 -0
- package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
- package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +442 -0
- package/esm2015/lib/checkout/checkout.module.js +149 -0
- package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +348 -0
- package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +37 -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 +162 -0
- package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +151 -0
- package/esm2015/lib/checkout/order-review/order-review.component.js +123 -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 +70 -0
- package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +27 -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 +239 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +64 -0
- package/esm2015/lib/custom-navigation/custom-navigation.component.js +122 -0
- package/esm2015/lib/custom-navigation/custom-navigation.module.js +79 -0
- package/esm2015/lib/custom-order-details/custom-order-details.component.js +205 -0
- package/esm2015/lib/custom-order-details/custom-order-details.module.js +99 -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 +191 -0
- package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +169 -0
- package/esm2015/lib/custom-order-history/custom-order-history.component.js +680 -0
- package/esm2015/lib/custom-order-history/custom-order-history.module.js +105 -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 +108 -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 +91 -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 +51 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +114 -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 +48 -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 +197 -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 +133 -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 +379 -0
- package/esm2015/lib/my-account/my-account.component.js +95 -0
- package/esm2015/lib/my-account/my-account.module.js +99 -0
- package/esm2015/lib/my-team/my-team.component.js +445 -0
- package/esm2015/lib/my-team/my-team.module.js +100 -0
- package/esm2015/lib/my-team/team-member.service.js +95 -0
- package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -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 +69 -0
- package/esm2015/lib/services/endPointURL.js +192 -0
- package/esm2015/lib/services/find-store.service.js +50 -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 +207 -0
- package/esm2015/lib/shared/CustomProduct.js +48 -0
- package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +116 -0
- package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +102 -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 +477 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +431 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +622 -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 +173 -0
- package/esm2015/lib/shared/regEx.validator.js +17 -0
- package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +83 -0
- package/esm2015/lib/shared/shared-components.module.js +119 -0
- package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +220 -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 +10197 -0
- package/fesm2015/buildingproduct-library.js.map +1 -0
- package/lib/account-dropdown/account-dropdown.component.d.ts +24 -0
- package/lib/account-dropdown/account-dropdown.module.d.ts +11 -0
- package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
- package/lib/checkout/add-new-address/add-new-address.component.d.ts +30 -0
- package/lib/checkout/checkout.module.d.ts +28 -0
- package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +77 -0
- package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +23 -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 +33 -0
- package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +31 -0
- package/lib/checkout/order-review/order-review.component.d.ts +41 -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 +22 -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 +62 -0
- package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +13 -0
- package/lib/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 +63 -0
- package/lib/custom-order-details/custom-order-details.module.d.ts +19 -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 +40 -0
- package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +35 -0
- package/lib/custom-order-history/custom-order-history.component.d.ts +99 -0
- package/lib/custom-order-history/custom-order-history.module.d.ts +19 -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 +33 -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 +65 -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 +19 -0
- package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +59 -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 +12 -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 +29 -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 +66 -0
- package/lib/my-account/my-account.component.d.ts +26 -0
- package/lib/my-account/my-account.module.d.ts +20 -0
- package/lib/my-team/my-team.component.d.ts +103 -0
- package/lib/my-team/my-team.module.d.ts +18 -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/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 +156 -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 +40 -0
- package/lib/shared/CustomProduct.d.ts +28 -0
- package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +58 -0
- package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +30 -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 +81 -0
- package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +72 -0
- package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +100 -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 +39 -0
- package/lib/shared/regEx.validator.d.ts +10 -0
- package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
- package/lib/shared/shared-components.module.d.ts +26 -0
- package/lib/shared/shared-download-order/shared-download-order.component.d.ts +40 -0
- package/lib/spa-custom-header.component.d.ts +11 -0
- package/lib/spa-custom-header.module.d.ts +27 -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 +92 -0
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { loadModules } from 'esri-loader';
|
|
4
|
+
import { BehaviorSubject } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/checkout.service";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
export class AddNewAddressComponent {
|
|
9
|
+
constructor(checkoutService) {
|
|
10
|
+
this.checkoutService = checkoutService;
|
|
11
|
+
this.markerUrl = 'assets/images/marker.svg';
|
|
12
|
+
this.location = {};
|
|
13
|
+
this.isConfirmDisabled = new BehaviorSubject(true);
|
|
14
|
+
this.showAddress = new BehaviorSubject(false);
|
|
15
|
+
this.env = sessionStorage.getItem('env');
|
|
16
|
+
this.environment = JSON.parse(this.env);
|
|
17
|
+
this.apigee_url = this.environment.coreLogicApiUrl; // PROD: 'api.corelogic.asia'
|
|
18
|
+
this.client_id = this.environment.coreLogicClientId;
|
|
19
|
+
this.client_secret = this.environment.coreLogicClientSecret;
|
|
20
|
+
this.token_url = `https://${this.apigee_url}/access/oauth/token?client_id=${this.client_id}&client_secret=${this.client_secret}&grant_type=client_credentials`;
|
|
21
|
+
this.updateNewAddress = new EventEmitter();
|
|
22
|
+
this.errorInd$ = new BehaviorSubject(false);
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
navigator.geolocation.getCurrentPosition(position => {
|
|
26
|
+
if (position && position.coords) {
|
|
27
|
+
this.currentPosition = position.coords;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
if (this.confirmedAddress != '') {
|
|
31
|
+
this.confirmedAddress = this.confirmedAddress.replace(/null/g, '');
|
|
32
|
+
this.showAddress.next(true);
|
|
33
|
+
}
|
|
34
|
+
this.checkoutService.getToken(this.token_url).subscribe((response) => {
|
|
35
|
+
if (response) {
|
|
36
|
+
this.loadMap(response.access_token).then(() => {
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
loadMap(token) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const container = this.mapViewEl.nativeElement;
|
|
44
|
+
const streetmapURL = this.environment.coreLogicStreetMapUrl;
|
|
45
|
+
// Using NZTM spatial reference - the option to switch to WGS84 (lat/long) is available as an alternate
|
|
46
|
+
const [MapView, Point, WebMap, Search, SearchSource, esriRequest, Graphic, geometryEngine, SpatialReference, TileLayer, Basemap, esriConfig,] = yield loadModules([
|
|
47
|
+
'esri/views/MapView',
|
|
48
|
+
'esri/geometry/Point',
|
|
49
|
+
'esri/WebMap',
|
|
50
|
+
'esri/widgets/Search',
|
|
51
|
+
'esri/widgets/Search/SearchSource',
|
|
52
|
+
'esri/request',
|
|
53
|
+
'esri/Graphic',
|
|
54
|
+
'esri/geometry/geometryEngine',
|
|
55
|
+
'esri/geometry/SpatialReference',
|
|
56
|
+
"esri/layers/TileLayer",
|
|
57
|
+
"esri/Basemap",
|
|
58
|
+
'esri/config',
|
|
59
|
+
]);
|
|
60
|
+
// Create the Map
|
|
61
|
+
const centerPoint = new Point({
|
|
62
|
+
x: 1719071.99,
|
|
63
|
+
y: 5428579.07,
|
|
64
|
+
spatialReference: {
|
|
65
|
+
wkid: 2193,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
esriConfig.request.interceptors.push({
|
|
69
|
+
urls: [streetmapURL],
|
|
70
|
+
before: (params) => {
|
|
71
|
+
if (params.url.includes(this.apigee_url)) {
|
|
72
|
+
params.requestOptions.headers = params.requestOptions.headers || {};
|
|
73
|
+
params.requestOptions.headers['authorization'] = `Bearer ${token}`;
|
|
74
|
+
params.requestOptions.headers['Access-Control-Request-Headers'] = 'authorization';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// Default base layer - streetmap
|
|
79
|
+
let streetmap = new TileLayer({
|
|
80
|
+
url: streetmapURL
|
|
81
|
+
});
|
|
82
|
+
// Create basemap layers
|
|
83
|
+
const streetmap_base = new Basemap({
|
|
84
|
+
baseLayers: [streetmap],
|
|
85
|
+
title: "Streetmap"
|
|
86
|
+
});
|
|
87
|
+
// esri map
|
|
88
|
+
const webmap = new WebMap({
|
|
89
|
+
basemap: 'satellite', //hybrid, satellite // which map view we have to use ?
|
|
90
|
+
});
|
|
91
|
+
// Create the map - streetmap as default basemap
|
|
92
|
+
const myMap = new WebMap({
|
|
93
|
+
basemap: streetmap_base
|
|
94
|
+
});
|
|
95
|
+
const view = new MapView({
|
|
96
|
+
container: container,
|
|
97
|
+
map: myMap,
|
|
98
|
+
center: centerPoint,
|
|
99
|
+
zoom: 2,
|
|
100
|
+
constraints: {
|
|
101
|
+
snapToZoom: false,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
const simpleMarkerSymbol = {
|
|
105
|
+
type: 'picture-marker',
|
|
106
|
+
url: this.markerUrl,
|
|
107
|
+
width: 21,
|
|
108
|
+
height: 30,
|
|
109
|
+
};
|
|
110
|
+
const mapKeys = (data) => {
|
|
111
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
112
|
+
const obj = {
|
|
113
|
+
type: 'Feature',
|
|
114
|
+
geometry: {
|
|
115
|
+
type: 'Point',
|
|
116
|
+
coordinates: [(_a = data === null || data === void 0 ? void 0 : data.location) === null || _a === void 0 ? void 0 : _a.wgs84_lon, (_b = data === null || data === void 0 ? void 0 : data.location) === null || _b === void 0 ? void 0 : _b.wgs84_lat],
|
|
117
|
+
},
|
|
118
|
+
properties: {
|
|
119
|
+
label: ((_c = data === null || data === void 0 ? void 0 : data.formatted_address) === null || _c === void 0 ? void 0 : _c.line1) +
|
|
120
|
+
' ' +
|
|
121
|
+
((_d = data === null || data === void 0 ? void 0 : data.formatted_address) === null || _d === void 0 ? void 0 : _d.line2) +
|
|
122
|
+
' ' +
|
|
123
|
+
((_e = data === null || data === void 0 ? void 0 : data.formatted_address) === null || _e === void 0 ? void 0 : _e.line3) +
|
|
124
|
+
' ' +
|
|
125
|
+
((_f = data === null || data === void 0 ? void 0 : data.formatted_address) === null || _f === void 0 ? void 0 : _f.line4),
|
|
126
|
+
scrore: 0,
|
|
127
|
+
id: (_g = data === null || data === void 0 ? void 0 : data.references) === null || _g === void 0 ? void 0 : _g.id,
|
|
128
|
+
name: (_h = data === null || data === void 0 ? void 0 : data.formatted_address) === null || _h === void 0 ? void 0 : _h.line1,
|
|
129
|
+
postcode: (_j = data === null || data === void 0 ? void 0 : data.structured_address) === null || _j === void 0 ? void 0 : _j.postcode,
|
|
130
|
+
citycode: '',
|
|
131
|
+
x: (_k = data === null || data === void 0 ? void 0 : data.location) === null || _k === void 0 ? void 0 : _k.wgs84_lon,
|
|
132
|
+
y: (_l = data === null || data === void 0 ? void 0 : data.location) === null || _l === void 0 ? void 0 : _l.wgs84_lat,
|
|
133
|
+
city: (_m = data === null || data === void 0 ? void 0 : data.structured_address) === null || _m === void 0 ? void 0 : _m.region,
|
|
134
|
+
context: '',
|
|
135
|
+
type: 'street',
|
|
136
|
+
importance: '',
|
|
137
|
+
street: (_o = data === null || data === void 0 ? void 0 : data.structured_address) === null || _o === void 0 ? void 0 : _o.street_name,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
return obj;
|
|
141
|
+
};
|
|
142
|
+
const autoSuggestUrl = this.environment.coreLogicAddressApiUrl + 'autocomplete.json?api_key=' + this.environment.coreLogicAddressApikey;
|
|
143
|
+
const self = this;
|
|
144
|
+
const customSearchSource = new SearchSource({
|
|
145
|
+
placeholder: 'Type Address here ...',
|
|
146
|
+
// Provide a getSuggestions method
|
|
147
|
+
// to provide suggestions to the Search widget
|
|
148
|
+
getSuggestions: (params) => {
|
|
149
|
+
// You can request data from a
|
|
150
|
+
// third-party source to find some
|
|
151
|
+
// suggestions with provided suggestTerm
|
|
152
|
+
// the user types in the Search widget
|
|
153
|
+
return esriRequest(autoSuggestUrl, {
|
|
154
|
+
query: {
|
|
155
|
+
term: params.suggestTerm.replace(/ /g, '+'),
|
|
156
|
+
max: 10,
|
|
157
|
+
lat: view.center.latitude,
|
|
158
|
+
lon: view.center.longitude,
|
|
159
|
+
},
|
|
160
|
+
responseType: 'json',
|
|
161
|
+
}).then((results) => {
|
|
162
|
+
var _a;
|
|
163
|
+
// Return Suggestion results to display
|
|
164
|
+
// in the Search widget
|
|
165
|
+
return (_a = results === null || results === void 0 ? void 0 : results.data) === null || _a === void 0 ? void 0 : _a.map((feature) => {
|
|
166
|
+
return {
|
|
167
|
+
key: 'name',
|
|
168
|
+
text: feature === null || feature === void 0 ? void 0 : feature.label,
|
|
169
|
+
id: feature === null || feature === void 0 ? void 0 : feature.id,
|
|
170
|
+
sourceIndex: params.sourceIndex,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
},
|
|
175
|
+
// Provide a getResults method to find
|
|
176
|
+
// results from the suggestions
|
|
177
|
+
getResults: (params) => {
|
|
178
|
+
var _a;
|
|
179
|
+
// If the Search widget passes the current location,
|
|
180
|
+
// you can use this in your own custom source
|
|
181
|
+
let query = {};
|
|
182
|
+
// You can perform a different query if a location
|
|
183
|
+
// is provided
|
|
184
|
+
if (params.location) {
|
|
185
|
+
query.lat = params.location.latitude;
|
|
186
|
+
query.lon = params.location.longitude;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
query.q = params.suggestResult.text.replace(/ /g, '+');
|
|
190
|
+
query.limit = 6;
|
|
191
|
+
}
|
|
192
|
+
if (params.suggestResult.text == '') {
|
|
193
|
+
var lat = params.location.y;
|
|
194
|
+
var lon = params.location.x;
|
|
195
|
+
view.zoom = 15;
|
|
196
|
+
view.goTo({
|
|
197
|
+
center: new Point({
|
|
198
|
+
x: lon,
|
|
199
|
+
y: lat,
|
|
200
|
+
spatialReference: {
|
|
201
|
+
wkid: 2193
|
|
202
|
+
}
|
|
203
|
+
}),
|
|
204
|
+
});
|
|
205
|
+
const location = {
|
|
206
|
+
longitude: lon,
|
|
207
|
+
latitude: lat
|
|
208
|
+
};
|
|
209
|
+
const url = this.environment.coreLogicAddressApiUrl + 'reversegeocode.json?api_key=' + this.environment.coreLogicAddressApikey + '&limit=1&formatted=1&srid=2193';
|
|
210
|
+
self.checkoutService.getClickGeoLocationAddress(url, location).subscribe((response) => {
|
|
211
|
+
var _a, _b, _c, _d;
|
|
212
|
+
if (response && response != undefined && response.data && response.data.length > 0) {
|
|
213
|
+
this.location.selectedAddress = (_a = response === null || response === void 0 ? void 0 : response.data[0].attributes) === null || _a === void 0 ? void 0 : _a.label;
|
|
214
|
+
const afterSearchCompleteUrl = this.environment.coreLogicAddressApiUrl + 'address.json?api_key=' + this.environment.coreLogicAddressApikey + '&id=' + ((_d = (_c = (_b = response === null || response === void 0 ? void 0 : response.data[0].relationships) === null || _b === void 0 ? void 0 : _b.address) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.id);
|
|
215
|
+
let query = {};
|
|
216
|
+
query.lat = lat;
|
|
217
|
+
query.lon = lon;
|
|
218
|
+
esriRequest(afterSearchCompleteUrl, { query: query, responseType: 'json' }).then((results) => {
|
|
219
|
+
var _a, _b, _c, _d, _e;
|
|
220
|
+
if (results) {
|
|
221
|
+
const feature = mapKeys(results.data);
|
|
222
|
+
const location = {
|
|
223
|
+
lon: (_a = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _a === void 0 ? void 0 : _a.coordinates[0],
|
|
224
|
+
lat: (_b = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _b === void 0 ? void 0 : _b.coordinates[1]
|
|
225
|
+
};
|
|
226
|
+
this.location = location;
|
|
227
|
+
// Parse the results of your custom search
|
|
228
|
+
this.populateData(results, location);
|
|
229
|
+
// Create a Graphic the Search widget can display
|
|
230
|
+
this.location.selectedAddress = (_c = feature === null || feature === void 0 ? void 0 : feature.properties) === null || _c === void 0 ? void 0 : _c.label;
|
|
231
|
+
view.graphics = [];
|
|
232
|
+
// Get the coordinates of the click on the view
|
|
233
|
+
const point = {
|
|
234
|
+
type: 'point',
|
|
235
|
+
x: (_d = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _d === void 0 ? void 0 : _d.coordinates[0],
|
|
236
|
+
y: (_e = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _e === void 0 ? void 0 : _e.coordinates[1],
|
|
237
|
+
};
|
|
238
|
+
const pointGraphic = new Graphic({
|
|
239
|
+
geometry: point,
|
|
240
|
+
symbol: simpleMarkerSymbol,
|
|
241
|
+
});
|
|
242
|
+
view.graphics.add(pointGraphic);
|
|
243
|
+
this.isConfirmDisabled.next(false);
|
|
244
|
+
this.showAddress.next(true);
|
|
245
|
+
this.onConfirmedClick();
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}, (error) => {
|
|
250
|
+
console.log(error);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
const afterSearchCompleteUrl = this.environment.coreLogicAddressApiUrl + 'address.json?api_key=' + this.environment.coreLogicAddressApikey + '&id=' + ((_a = params === null || params === void 0 ? void 0 : params.suggestResult) === null || _a === void 0 ? void 0 : _a.id);
|
|
255
|
+
return esriRequest(afterSearchCompleteUrl, {
|
|
256
|
+
query: query,
|
|
257
|
+
responseType: 'json',
|
|
258
|
+
}).then((results) => {
|
|
259
|
+
// Parse the results of your custom search
|
|
260
|
+
const data = [results.data];
|
|
261
|
+
this.isConfirmDisabled.next(false);
|
|
262
|
+
let location = {
|
|
263
|
+
lon: data[0].location.wgs84_lon,
|
|
264
|
+
lat: data[0].location.wgs84_lat
|
|
265
|
+
};
|
|
266
|
+
this.populateData(results, location);
|
|
267
|
+
const searchResults = data === null || data === void 0 ? void 0 : data.map((feature) => {
|
|
268
|
+
var _a, _b, _c, _d;
|
|
269
|
+
// Create a Graphic the Search widget can display
|
|
270
|
+
feature = mapKeys(feature);
|
|
271
|
+
this.location.selectedAddress = (_a = feature === null || feature === void 0 ? void 0 : feature.properties) === null || _a === void 0 ? void 0 : _a.label;
|
|
272
|
+
const graphic = new Graphic({
|
|
273
|
+
geometry: new Point({
|
|
274
|
+
x: (_b = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _b === void 0 ? void 0 : _b.coordinates[0],
|
|
275
|
+
y: (_c = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _c === void 0 ? void 0 : _c.coordinates[1],
|
|
276
|
+
//spatialReference: self?.view.spatialReference,
|
|
277
|
+
spatialReference: SpatialReference.WGS84,
|
|
278
|
+
}),
|
|
279
|
+
attributes: feature === null || feature === void 0 ? void 0 : feature.properties,
|
|
280
|
+
});
|
|
281
|
+
// Optionally, you can provide an extent for
|
|
282
|
+
// a point result, so the view can zoom to it
|
|
283
|
+
const buffer = geometryEngine.geodesicBuffer(graphic.geometry, 100, 'meters');
|
|
284
|
+
// Return a Search Result
|
|
285
|
+
const searchResult = {
|
|
286
|
+
extent: buffer === null || buffer === void 0 ? void 0 : buffer.extent,
|
|
287
|
+
feature: graphic,
|
|
288
|
+
name: (_d = feature === null || feature === void 0 ? void 0 : feature.properties) === null || _d === void 0 ? void 0 : _d.label.replace(/null/g, ''),
|
|
289
|
+
};
|
|
290
|
+
return searchResult;
|
|
291
|
+
});
|
|
292
|
+
// Return an array of Search Results
|
|
293
|
+
return searchResults;
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
const searchWidget = new Search({
|
|
299
|
+
view: view,
|
|
300
|
+
sources: [customSearchSource],
|
|
301
|
+
includeDefaultSources: false,
|
|
302
|
+
});
|
|
303
|
+
// Add the widget to the top-right corner of the view
|
|
304
|
+
view.ui.add(searchWidget, {
|
|
305
|
+
position: 'top-right',
|
|
306
|
+
index: 2,
|
|
307
|
+
});
|
|
308
|
+
this.view = view;
|
|
309
|
+
searchWidget.on('search-complete', (event) => {
|
|
310
|
+
console.log('Results of the search: ', event); // Provides the results on search Complete
|
|
311
|
+
});
|
|
312
|
+
searchWidget.on('select-result', (event) => {
|
|
313
|
+
console.log('The selected search result: ', event); // Provides the selected results on search Complete and any result is selected from dropdown
|
|
314
|
+
});
|
|
315
|
+
view.on('click', (event) => {
|
|
316
|
+
event.stopPropagation();
|
|
317
|
+
var lat = event.mapPoint.y;
|
|
318
|
+
var lon = event.mapPoint.x;
|
|
319
|
+
view.goTo({
|
|
320
|
+
center: new Point({
|
|
321
|
+
x: lon,
|
|
322
|
+
y: lat,
|
|
323
|
+
spatialReference: {
|
|
324
|
+
wkid: 2193
|
|
325
|
+
}
|
|
326
|
+
}),
|
|
327
|
+
});
|
|
328
|
+
const point = {
|
|
329
|
+
type: 'point',
|
|
330
|
+
x: lon,
|
|
331
|
+
y: lat,
|
|
332
|
+
spatialReference: {
|
|
333
|
+
wkid: 2193
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
const pointGraphic = new Graphic({
|
|
337
|
+
geometry: point,
|
|
338
|
+
symbol: simpleMarkerSymbol,
|
|
339
|
+
});
|
|
340
|
+
view.graphics = [];
|
|
341
|
+
view.graphics.add(pointGraphic);
|
|
342
|
+
const location = {
|
|
343
|
+
longitude: lon,
|
|
344
|
+
latitude: lat
|
|
345
|
+
};
|
|
346
|
+
const url = this.environment.coreLogicAddressApiUrl + 'reversegeocode.json?api_key=' + this.environment.coreLogicAddressApikey + '&limit=1&formatted=1&srid=2193';
|
|
347
|
+
self.checkoutService
|
|
348
|
+
.getClickGeoLocationAddress(url, location)
|
|
349
|
+
.subscribe((response) => {
|
|
350
|
+
var _a, _b, _c, _d;
|
|
351
|
+
if (response && response != undefined && response.data.length > 0) {
|
|
352
|
+
this.isConfirmDisabled.next(false);
|
|
353
|
+
this.location.selectedAddress = (_a = response === null || response === void 0 ? void 0 : response.data[0].attributes) === null || _a === void 0 ? void 0 : _a.label;
|
|
354
|
+
const afterSearchCompleteUrl = this.environment.coreLogicAddressApiUrl + 'address.json?api_key=' + this.environment.coreLogicAddressApikey + '&id=' + ((_d = (_c = (_b = response === null || response === void 0 ? void 0 : response.data[0].relationships) === null || _b === void 0 ? void 0 : _b.address) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.id);
|
|
355
|
+
let query = {};
|
|
356
|
+
query.lat = lat;
|
|
357
|
+
query.lon = lon;
|
|
358
|
+
esriRequest(afterSearchCompleteUrl, {
|
|
359
|
+
query: query,
|
|
360
|
+
responseType: 'json',
|
|
361
|
+
}).then((results) => {
|
|
362
|
+
var _a, _b, _c, _d, _e;
|
|
363
|
+
if (results) {
|
|
364
|
+
this.isConfirmDisabled.next(false);
|
|
365
|
+
const feature = mapKeys(results.data);
|
|
366
|
+
const location = {
|
|
367
|
+
lon: (_a = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _a === void 0 ? void 0 : _a.coordinates[0],
|
|
368
|
+
lat: (_b = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _b === void 0 ? void 0 : _b.coordinates[1]
|
|
369
|
+
};
|
|
370
|
+
this.location = location;
|
|
371
|
+
// Parse the results of your custom search
|
|
372
|
+
this.populateData(results, location);
|
|
373
|
+
// Create a Graphic the Search widget can display
|
|
374
|
+
this.location.selectedAddress = (_c = feature === null || feature === void 0 ? void 0 : feature.properties) === null || _c === void 0 ? void 0 : _c.label;
|
|
375
|
+
// view.graphics = [];
|
|
376
|
+
// Get the coordinates of the click on the view
|
|
377
|
+
const point = {
|
|
378
|
+
type: 'point',
|
|
379
|
+
x: (_d = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _d === void 0 ? void 0 : _d.coordinates[0],
|
|
380
|
+
y: (_e = feature === null || feature === void 0 ? void 0 : feature.geometry) === null || _e === void 0 ? void 0 : _e.coordinates[1],
|
|
381
|
+
};
|
|
382
|
+
const pointGraphic = new Graphic({
|
|
383
|
+
geometry: point,
|
|
384
|
+
symbol: simpleMarkerSymbol,
|
|
385
|
+
});
|
|
386
|
+
// view.graphics.add(pointGraphic);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
this.errorInd$.next(true);
|
|
392
|
+
this.isConfirmDisabled.next(true);
|
|
393
|
+
setTimeout(() => {
|
|
394
|
+
this.errorInd$.next(false);
|
|
395
|
+
}, 5000);
|
|
396
|
+
}
|
|
397
|
+
}, (error) => {
|
|
398
|
+
console.log(error);
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
return this.view.when();
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
onConfirmedClick() {
|
|
405
|
+
this.confirmedAddress = this.location.selectedAddress.replace(/null/g, '');
|
|
406
|
+
this.updateNewAddress.emit(this.location);
|
|
407
|
+
this.showAddress.next(true);
|
|
408
|
+
}
|
|
409
|
+
populateData(results, location) {
|
|
410
|
+
var _a, _b, _c, _d, _e;
|
|
411
|
+
const data = results.data;
|
|
412
|
+
const newAddress = {
|
|
413
|
+
line1: (_a = data.formatted_address) === null || _a === void 0 ? void 0 : _a.line1,
|
|
414
|
+
line2: (_b = data.formatted_address) === null || _b === void 0 ? void 0 : _b.line2,
|
|
415
|
+
town: (_c = data.structured_address) === null || _c === void 0 ? void 0 : _c.town,
|
|
416
|
+
suburb: (_d = data.structured_address) === null || _d === void 0 ? void 0 : _d.suburb,
|
|
417
|
+
postalCode: (_e = data.structured_address) === null || _e === void 0 ? void 0 : _e.postcode,
|
|
418
|
+
longitude: location.lon,
|
|
419
|
+
latitude: location.lat,
|
|
420
|
+
};
|
|
421
|
+
newAddress.selectedAddress = this.location.selectedAddress;
|
|
422
|
+
this.location = newAddress;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
AddNewAddressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AddNewAddressComponent, deps: [{ token: i1.CustomCheckoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
426
|
+
AddNewAddressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AddNewAddressComponent, selector: "app-add-new-address", inputs: { confirmedAddress: "confirmedAddress" }, outputs: { updateNewAddress: "updateNewAddress" }, viewQueries: [{ propertyName: "mapViewEl", first: true, predicate: ["mapViewNode"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"corelogic-map\" #mapViewNode></div>\r\n<div class=\"confirm-cls\">\r\n <button type=\"button\" [disabled]=\"isConfirmDisabled | async\" (click)=\"onConfirmedClick()\" class=\"btn primary-button mt-4\">Confirm</button>\r\n <label *ngIf=\"showAddress | async\" class=\"form-label\">Confirmed Delivery Address </label>\r\n <div class=\"map-selected-address\" *ngIf=\"showAddress | async\" id=\"address\">\r\n {{confirmedAddress}}</div>\r\n</div>\r\n<div class=\" col-sm-12 alert alert-danger justify-content-start mt-3\" role=\"alert\" *ngIf=\"errorInd$ | async\">\r\n <img class=\"mr-3\" src=\"../../../../assets/images/erroricon.svg\" alt=\"alert\"> Please select valid Address\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://js.arcgis.com/4.25/@arcgis/core/assets/esri/themes/light/main.css\";@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}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}}::ng-deep .OrderCheckoutTemplate .esri-search-result-renderer .esri-search-result-renderer__more-results-item{margin-bottom:0;margin-top:20px}::ng-deep .OrderCheckoutTemplate .confirm-cls{align-items:flex-end;display:flex;flex-direction:column}::ng-deep .OrderCheckoutTemplate .corelogic-map{height:450px;margin-top:1rem}::ng-deep .OrderCheckoutTemplate .form-label{align-self:flex-start;font-size:var(--fontsize16);font-family:\"Arial Bold\",sans-serif}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i2.AsyncPipe } });
|
|
427
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AddNewAddressComponent, decorators: [{
|
|
428
|
+
type: Component,
|
|
429
|
+
args: [{
|
|
430
|
+
selector: 'app-add-new-address',
|
|
431
|
+
templateUrl: './add-new-address.component.html',
|
|
432
|
+
styleUrls: ['./add-new-address.component.scss']
|
|
433
|
+
}]
|
|
434
|
+
}], ctorParameters: function () { return [{ type: i1.CustomCheckoutService }]; }, propDecorators: { mapViewEl: [{
|
|
435
|
+
type: ViewChild,
|
|
436
|
+
args: ['mapViewNode', { static: true }]
|
|
437
|
+
}], confirmedAddress: [{
|
|
438
|
+
type: Input
|
|
439
|
+
}], updateNewAddress: [{
|
|
440
|
+
type: Output
|
|
441
|
+
}] } });
|
|
442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW5ldy1hZGRyZXNzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvY2hlY2tvdXQvYWRkLW5ldy1hZGRyZXNzL2FkZC1uZXctYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL2NoZWNrb3V0L2FkZC1uZXctYWRkcmVzcy9hZGQtbmV3LWFkZHJlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU92QyxNQUFNLE9BQU8sc0JBQXNCO0lBaUJqQyxZQUNTLGVBQXNDO1FBQXRDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQWhCeEMsY0FBUyxHQUFRLDBCQUEwQixDQUFDO1FBR25ELGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdkQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsRCxRQUFHLEdBQVEsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxnQkFBVyxHQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLDZCQUE2QjtRQUM1RSxjQUFT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Q25DLE1BQU0sRUFBRSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTTtZQUN2QyxVQUFVLEVBQUUsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFFBQVE7WUFDN0MsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHO1lBQ3ZCLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRztTQUN2QixDQUFBO1FBQ0QsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDOztvSEFuZFUsc0JBQXNCO3dHQUF0QixzQkFBc0Isd1JDVm5DLG90QkFVQTs0RkRBYSxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLGtDQUFrQztvQkFDL0MsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7aUJBQ2hEOzRHQUVxRCxTQUFTO3NCQUE1RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR2pDLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFXSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGxvYWRNb2R1bGVzIH0gZnJvbSAnZXNyaS1sb2FkZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ3VzdG9tQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1uZXctYWRkcmVzcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1uZXctYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLW5ldy1hZGRyZXNzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE5ld0FkZHJlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ21hcFZpZXdOb2RlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBtYXBWaWV3RWwhOiBFbGVtZW50UmVmO1xyXG4gIHB1YmxpYyBtYXJrZXJVcmw6IGFueSA9ICdhc3NldHMvaW1hZ2VzL21hcmtlci5zdmcnO1xyXG4gIHZpZXc6IGFueTtcclxuICBASW5wdXQoKSBjb25maXJtZWRBZGRyZXNzOiBhbnk7XHJcbiAgbG9jYXRpb246IGFueSA9IHt9O1xyXG4gIGlzQ29uZmlybURpc2FibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICBzaG93QWRkcmVzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGVudjogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZW52Jyk7XHJcbiAgZW52aXJvbm1lbnQgOiBhbnkgPSBKU09OLnBhcnNlKHRoaXMuZW52KTtcclxuICBhcGlnZWVfdXJsID0gdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBcGlVcmw7IC8vIFBST0Q6ICdhcGkuY29yZWxvZ2ljLmFzaWEnXHJcbiAgY2xpZW50X2lkID0gdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNDbGllbnRJZDtcclxuICBjbGllbnRfc2VjcmV0ID0gdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNDbGllbnRTZWNyZXQ7XHJcbiAgY3VycmVudFBvc2l0aW9uOiBhbnk7XHJcbiAgdG9rZW5fdXJsID0gYGh0dHBzOi8vJHt0aGlzLmFwaWdlZV91cmx9L2FjY2Vzcy9vYXV0aC90b2tlbj9jbGllbnRfaWQ9JHt0aGlzLmNsaWVudF9pZH0mY2xpZW50X3NlY3JldD0ke3RoaXMuY2xpZW50X3NlY3JldH0mZ3JhbnRfdHlwZT1jbGllbnRfY3JlZGVudGlhbHNgO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVOZXdBZGRyZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgZXJyb3JJbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY2hlY2tvdXRTZXJ2aWNlOiBDdXN0b21DaGVja291dFNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uID0+IHtcclxuICAgICAgaWYgKHBvc2l0aW9uICYmIHBvc2l0aW9uLmNvb3Jkcykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb24uY29vcmRzO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmNvbmZpcm1lZEFkZHJlc3MgIT0gJycpIHtcclxuICAgICAgdGhpcy5jb25maXJtZWRBZGRyZXNzID0gdGhpcy5jb25maXJtZWRBZGRyZXNzLnJlcGxhY2UoL251bGwvZywgJycpO1xyXG4gICAgICB0aGlzLnNob3dBZGRyZXNzLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRUb2tlbih0aGlzLnRva2VuX3VybCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMubG9hZE1hcChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRNYXAodG9rZW46IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm1hcFZpZXdFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IHN0cmVldG1hcFVSTCA9IHRoaXMuZW52aXJvbm1lbnQuY29yZUxvZ2ljU3RyZWV0TWFwVXJsO1xyXG4gICAgLy8gVXNpbmcgTlpUTSBzcGF0aWFsIHJlZmVyZW5jZSAtIHRoZSBvcHRpb24gdG8gc3dpdGNoIHRvIFdHUzg0IChsYXQvbG9uZykgaXMgYXZhaWxhYmxlIGFzIGFuIGFsdGVybmF0ZVxyXG5cclxuICAgIGNvbnN0IFtcclxuICAgICAgTWFwVmlldyxcclxuICAgICAgUG9pbnQsXHJcbiAgICAgIFdlYk1hcCxcclxuICAgICAgU2VhcmNoLFxyXG4gICAgICBTZWFyY2hTb3VyY2UsXHJcbiAgICAgIGVzcmlSZXF1ZXN0LFxyXG4gICAgICBHcmFwaGljLFxyXG4gICAgICBnZW9tZXRyeUVuZ2luZSxcclxuICAgICAgU3BhdGlhbFJlZmVyZW5jZSxcclxuICAgICAgVGlsZUxheWVyLFxyXG4gICAgICBCYXNlbWFwLFxyXG4gICAgICBlc3JpQ29uZmlnLFxyXG4gICAgXSA9IGF3YWl0IGxvYWRNb2R1bGVzKFtcclxuICAgICAgJ2Vzcmkvdmlld3MvTWFwVmlldycsXHJcbiAgICAgICdlc3JpL2dlb21ldHJ5L1BvaW50JyxcclxuICAgICAgJ2VzcmkvV2ViTWFwJyxcclxuICAgICAgJ2Vzcmkvd2lkZ2V0cy9TZWFyY2gnLFxyXG4gICAgICAnZXNyaS93aWRnZXRzL1NlYXJjaC9TZWFyY2hTb3VyY2UnLFxyXG4gICAgICAnZXNyaS9yZXF1ZXN0JyxcclxuICAgICAgJ2VzcmkvR3JhcGhpYycsXHJcbiAgICAgICdlc3JpL2dlb21ldHJ5L2dlb21ldHJ5RW5naW5lJyxcclxuICAgICAgJ2VzcmkvZ2VvbWV0cnkvU3BhdGlhbFJlZmVyZW5jZScsXHJcbiAgICAgIFwiZXNyaS9sYXllcnMvVGlsZUxheWVyXCIsXHJcbiAgICAgIFwiZXNyaS9CYXNlbWFwXCIsXHJcbiAgICAgICdlc3JpL2NvbmZpZycsXHJcbiAgICBdKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIE1hcCBcclxuICAgIGNvbnN0IGNlbnRlclBvaW50ID0gbmV3IFBvaW50KHtcclxuICAgICAgeDogMTcxOTA3MS45OSxcclxuICAgICAgeTogNTQyODU3OS4wNyxcclxuICAgICAgc3BhdGlhbFJlZmVyZW5jZToge1xyXG4gICAgICAgIHdraWQ6IDIxOTMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIGVzcmlDb25maWcucmVxdWVzdC5pbnRlcmNlcHRvcnMucHVzaCh7XHJcbiAgICAgIHVybHM6IFtzdHJlZXRtYXBVUkxdLCAvLyBzZXQgdGhlIGB1cmxzYCBwcm9wZXJ0eSB0byB0aGUgQXBpZ2VlIFVSTHNcclxuICAgICAgYmVmb3JlOiAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zLnVybC5pbmNsdWRlcyh0aGlzLmFwaWdlZV91cmwpKSB7XHJcbiAgICAgICAgICBwYXJhbXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHBhcmFtcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xyXG4gICAgICAgICAgcGFyYW1zLnJlcXVlc3RPcHRpb25zLmhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xyXG4gICAgICAgICAgcGFyYW1zLnJlcXVlc3RPcHRpb25zLmhlYWRlcnNbJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyddID0gJ2F1dGhvcml6YXRpb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGxheWVyIC0gc3RyZWV0bWFwXHJcbiAgICBsZXQgc3RyZWV0bWFwID0gbmV3IFRpbGVMYXllcih7XHJcbiAgICAgIHVybDogc3RyZWV0bWFwVVJMXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgYmFzZW1hcCBsYXllcnNcclxuICAgIGNvbnN0IHN0cmVldG1hcF9iYXNlID0gbmV3IEJhc2VtYXAoe1xyXG4gICAgICBiYXNlTGF5ZXJzOiBbc3RyZWV0bWFwXSxcclxuICAgICAgdGl0bGU6IFwiU3RyZWV0bWFwXCJcclxuICAgIH0pO1xyXG4gICAgLy8gZXNyaSBtYXAgXHJcbiAgICBjb25zdCB3ZWJtYXAgPSBuZXcgV2ViTWFwKHtcclxuICAgICAgYmFzZW1hcDogJ3NhdGVsbGl0ZScsIC8vaHlicmlkLCBzYXRlbGxpdGUgLy8gd2hpY2ggbWFwIHZpZXcgd2UgaGF2ZSB0byB1c2UgP1xyXG4gICAgfSk7XHJcbiAgICAvLyBDcmVhdGUgdGhlIG1hcCAtIHN0cmVldG1hcCBhcyBkZWZhdWx0IGJhc2VtYXBcclxuICAgIGNvbnN0IG15TWFwID0gbmV3IFdlYk1hcCh7XHJcbiAgICAgIGJhc2VtYXA6IHN0cmVldG1hcF9iYXNlXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IE1hcFZpZXcoe1xyXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcclxuICAgICAgbWFwOiBteU1hcCxcclxuICAgICAgY2VudGVyOiBjZW50ZXJQb2ludCxcclxuICAgICAgem9vbTogMixcclxuICAgICAgY29uc3RyYWludHM6IHtcclxuICAgICAgICBzbmFwVG9ab29tOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNpbXBsZU1hcmtlclN5bWJvbCA9IHtcclxuICAgICAgdHlwZTogJ3BpY3R1cmUtbWFya2VyJyxcclxuICAgICAgdXJsOiB0aGlzLm1hcmtlclVybCxcclxuICAgICAgd2lkdGg6IDIxLFxyXG4gICAgICBoZWlnaHQ6IDMwLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBtYXBLZXlzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmUnLFxyXG4gICAgICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtkYXRhPy5sb2NhdGlvbj8ud2dzODRfbG9uLCBkYXRhPy5sb2NhdGlvbj8ud2dzODRfbGF0XSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgIGxhYmVsOlxyXG4gICAgICAgICAgICBkYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTEgK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICBkYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTIgK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICBkYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTMgK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICBkYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTQsXHJcbiAgICAgICAgICBzY3JvcmU6IDAsXHJcbiAgICAgICAgICBpZDogZGF0YT8ucmVmZXJlbmNlcz8uaWQsXHJcbiAgICAgICAgICBuYW1lOiBkYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTEsXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGF0YT8uc3RydWN0dXJlZF9hZGRyZXNzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNpdHljb2RlOiAnJyxcclxuICAgICAgICAgIHg6IGRhdGE/LmxvY2F0aW9uPy53Z3M4NF9sb24sXHJcbiAgICAgICAgICB5OiBkYXRhPy5sb2NhdGlvbj8ud2dzODRfbGF0LFxyXG4gICAgICAgICAgY2l0eTogZGF0YT8uc3RydWN0dXJlZF9hZGRyZXNzPy5yZWdpb24sXHJcbiAgICAgICAgICBjb250ZXh0OiAnJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJlZXQnLFxyXG4gICAgICAgICAgaW1wb3J0YW5jZTogJycsXHJcbiAgICAgICAgICBzdHJlZXQ6IGRhdGE/LnN0cnVjdHVyZWRfYWRkcmVzcz8uc3RyZWV0X25hbWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IGF1dG9TdWdnZXN0VXJsID0gdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBZGRyZXNzQXBpVXJsICsgJ2F1dG9jb21wbGV0ZS5qc29uP2FwaV9rZXk9JyArIHRoaXMuZW52aXJvbm1lbnQuY29yZUxvZ2ljQWRkcmVzc0FwaWtleTtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIGNvbnN0IGN1c3RvbVNlYXJjaFNvdXJjZSA9IG5ldyBTZWFyY2hTb3VyY2Uoe1xyXG4gICAgICBwbGFjZWhvbGRlcjogJ1R5cGUgQWRkcmVzcyBoZXJlIC4uLicsXHJcbiAgICAgIC8vIFByb3ZpZGUgYSBnZXRTdWdnZXN0aW9ucyBtZXRob2RcclxuICAgICAgLy8gdG8gcHJvdmlkZSBzdWdnZXN0aW9ucyB0byB0aGUgU2VhcmNoIHdpZGdldFxyXG4gICAgICBnZXRTdWdnZXN0aW9uczogKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gWW91IGNhbiByZXF1ZXN0IGRhdGEgZnJvbSBhXHJcbiAgICAgICAgLy8gdGhpcmQtcGFydHkgc291cmNlIHRvIGZpbmQgc29tZVxyXG4gICAgICAgIC8vIHN1Z2dlc3Rpb25zIHdpdGggcHJvdmlkZWQgc3VnZ2VzdFRlcm1cclxuICAgICAgICAvLyB0aGUgdXNlciB0eXBlcyBpbiB0aGUgU2VhcmNoIHdpZGdldFxyXG4gICAgICAgIHJldHVybiBlc3JpUmVxdWVzdChhdXRvU3VnZ2VzdFVybCwge1xyXG4gICAgICAgICAgcXVlcnk6IHtcclxuICAgICAgICAgICAgdGVybTogcGFyYW1zLnN1Z2dlc3RUZXJtLnJlcGxhY2UoLyAvZywgJysnKSxcclxuICAgICAgICAgICAgbWF4OiAxMCxcclxuICAgICAgICAgICAgbGF0OiB2aWV3LmNlbnRlci5sYXRpdHVkZSxcclxuICAgICAgICAgICAgbG9uOiB2aWV3LmNlbnRlci5sb25naXR1ZGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXHJcbiAgICAgICAgfSkudGhlbigocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBSZXR1cm4gU3VnZ2VzdGlvbiByZXN1bHRzIHRvIGRpc3BsYXlcclxuICAgICAgICAgIC8vIGluIHRoZSBTZWFyY2ggd2lkZ2V0XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cz8uZGF0YT8ubWFwKChmZWF0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBrZXk6ICduYW1lJyxcclxuICAgICAgICAgICAgICB0ZXh0OiBmZWF0dXJlPy5sYWJlbCxcclxuICAgICAgICAgICAgICBpZDogZmVhdHVyZT8uaWQsXHJcbiAgICAgICAgICAgICAgc291cmNlSW5kZXg6IHBhcmFtcy5zb3VyY2VJbmRleCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyBQcm92aWRlIGEgZ2V0UmVzdWx0cyBtZXRob2QgdG8gZmluZFxyXG4gICAgICAvLyByZXN1bHRzIGZyb20gdGhlIHN1Z2dlc3Rpb25zXHJcbiAgICAgIGdldFJlc3VsdHM6IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIElmIHRoZSBTZWFyY2ggd2lkZ2V0IHBhc3NlcyB0aGUgY3VycmVudCBsb2NhdGlvbixcclxuICAgICAgICAvLyB5b3UgY2FuIHVzZSB0aGlzIGluIHlvdXIgb3duIGN1c3RvbSBzb3VyY2VcclxuICAgICAgICBsZXQgcXVlcnk6IGFueSA9IHt9O1xyXG4gICAgICAgIC8vIFlvdSBjYW4gcGVyZm9ybSBhIGRpZmZlcmVudCBxdWVyeSBpZiBhIGxvY2F0aW9uXHJcbiAgICAgICAgLy8gaXMgcHJvdmlkZWRcclxuICAgICAgICBpZiAocGFyYW1zLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICBxdWVyeS5sYXQgPSBwYXJhbXMubG9jYXRpb24ubGF0aXR1ZGU7XHJcbiAgICAgICAgICBxdWVyeS5sb24gPSBwYXJhbXMubG9jYXRpb24ubG9uZ2l0dWRlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxdWVyeS5xID0gcGFyYW1zLnN1Z2dlc3RSZXN1bHQudGV4dC5yZXBsYWNlKC8gL2csICcrJyk7XHJcbiAgICAgICAgICBxdWVyeS5saW1pdCA9IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbXMuc3VnZ2VzdFJlc3VsdC50ZXh0ID09ICcnKSB7XHJcbiAgICAgICAgICB2YXIgbGF0ID0gcGFyYW1zLmxvY2F0aW9uLnk7XHJcbiAgICAgICAgICB2YXIgbG9uID0gcGFyYW1zLmxvY2F0aW9uLng7XHJcblxyXG4gICAgICAgICAgdmlldy56b29tID0gMTU7XHJcbiAgICAgICAgICB2aWV3LmdvVG8oe1xyXG4gICAgICAgICAgICBjZW50ZXI6IG5ldyBQb2ludCh7XHJcbiAgICAgICAgICAgICAgeDogbG9uLFxyXG4gICAgICAgICAgICAgIHk6IGxhdCxcclxuICAgICAgICAgICAgICBzcGF0aWFsUmVmZXJlbmNlOiB7XHJcbiAgICAgICAgICAgICAgICB3a2lkOiAyMTkzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH0pIFxyXG4gICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbG9uLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogbGF0XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBZGRyZXNzQXBpVXJsICsgJ3JldmVyc2VnZW9jb2RlLmpzb24/YXBpX2tleT0nKyB0aGlzLmVudmlyb25tZW50LmNvcmVMb2dpY0FkZHJlc3NBcGlrZXkgKyAnJmxpbWl0PTEmZm9ybWF0dGVkPTEmc3JpZD0yMTkzJztcclxuICAgICAgICAgICBzZWxmLmNoZWNrb3V0U2VydmljZS5nZXRDbGlja0dlb0xvY2F0aW9uQWRkcmVzcyh1cmwsIGxvY2F0aW9uKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9jYXRpb24uc2VsZWN0ZWRBZGRyZXNzID0gcmVzcG9uc2U/LmRhdGFbMF0uYXR0cmlidXRlcz8ubGFiZWw7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGFmdGVyU2VhcmNoQ29tcGxldGVVcmwgPSB0aGlzLmVudmlyb25tZW50LmNvcmVMb2dpY0FkZHJlc3NBcGlVcmwgKyAnYWRkcmVzcy5qc29uP2FwaV9rZXk9JysgdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBZGRyZXNzQXBpa2V5ICsnJmlkPScgKyByZXNwb25zZT8uZGF0YVswXS5yZWxhdGlvbnNoaXBzPy5hZGRyZXNzPy5kYXRhPy5pZFxyXG4gICAgICAgICAgICAgIGxldCBxdWVyeTogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgcXVlcnkubGF0ID0gbGF0O1xyXG4gICAgICAgICAgICAgIHF1ZXJ5LmxvbiA9IGxvbjtcclxuICAgICAgICAgICAgICBlc3JpUmVxdWVzdChhZnRlclNlYXJjaENvbXBsZXRlVXJsLCB7IHF1ZXJ5OiBxdWVyeSwgcmVzcG9uc2VUeXBlOiAnanNvbicgfSkudGhlbigocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbWFwS2V5cyhyZXN1bHRzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBsb246IGZlYXR1cmU/Lmdlb21ldHJ5Py5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgICAgICAgICBsYXQ6IGZlYXR1cmU/Lmdlb21ldHJ5Py5jb29yZGluYXRlc1sxXVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHJlc3VsdHMgb2YgeW91ciBjdXN0b20gc2VhcmNoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVEYXRhKHJlc3VsdHMsIGxvY2F0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEdyYXBoaWMgdGhlIFNlYXJjaCB3aWRnZXQgY2FuIGRpc3BsYXlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbi5zZWxlY3RlZEFkZHJlc3MgPSBmZWF0dXJlPy5wcm9wZXJ0aWVzPy5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgdmlldy5ncmFwaGljcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjbGljayBvbiB0aGUgdmlld1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwb2ludCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAncG9pbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHg6IGZlYXR1cmU/Lmdlb21ldHJ5Py5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgICAgICAgICB5OiBmZWF0dXJlPy5nZW9tZXRyeT8uY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwb2ludEdyYXBoaWMgPSBuZXcgR3JhcGhpYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHBvaW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbDogc2ltcGxlTWFya2VyU3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgdmlldy5ncmFwaGljcy5hZGQocG9pbnRHcmFwaGljKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtRGlzYWJsZWQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FkZHJlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbmZpcm1lZENsaWNrKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFmdGVyU2VhcmNoQ29tcGxldGVVcmwgPSB0aGlzLmVudmlyb25tZW50LmNvcmVMb2dpY0FkZHJlc3NBcGlVcmwgKyAnYWRkcmVzcy5qc29uP2FwaV9rZXk9JysgdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBZGRyZXNzQXBpa2V5ICsnJmlkPScgKyBwYXJhbXM/LnN1Z2dlc3RSZXN1bHQ/LmlkO1xyXG5cclxuICAgICAgICAgIHJldHVybiBlc3JpUmVxdWVzdChhZnRlclNlYXJjaENvbXBsZXRlVXJsLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICB9KS50aGVuKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHJlc3VsdHMgb2YgeW91ciBjdXN0b20gc2VhcmNoXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBbcmVzdWx0cy5kYXRhXTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1EaXNhYmxlZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICAgIGxvbjogZGF0YVswXS5sb2NhdGlvbi53Z3M4NF9sb24sXHJcbiAgICAgICAgICAgICAgbGF0OiBkYXRhWzBdLmxvY2F0aW9uLndnczg0X2xhdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVEYXRhKHJlc3VsdHMsIGxvY2F0aW9uKVxyXG4gICAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZGF0YT8ubWFwKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgR3JhcGhpYyB0aGUgU2VhcmNoIHdpZGdldCBjYW4gZGlzcGxheVxyXG4gICAgICAgICAgICAgIGZlYXR1cmUgPSBtYXBLZXlzKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9jYXRpb24uc2VsZWN0ZWRBZGRyZXNzID0gZmVhdHVyZT8ucHJvcGVydGllcz8ubGFiZWw7XHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JhcGhpYyA9IG5ldyBHcmFwaGljKHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZXcgUG9pbnQoe1xyXG4gICAgICAgICAgICAgICAgICB4OiBmZWF0dXJlPy5nZW9tZXRyeT8uY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICAgIHk6IGZlYXR1cmU/Lmdlb21ldHJ5Py5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICAgICAgICAgICAgLy9zcGF0aWFsUmVmZXJlbmNlOiBzZWxmPy52aWV3LnNwYXRpYWxSZWZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgIHNwYXRpYWxSZWZlcmVuY2U6IFNwYXRpYWxSZWZlcmVuY2UuV0dTODQsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGZlYXR1cmU/LnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSwgeW91IGNhbiBwcm92aWRlIGFuIGV4dGVudCBmb3JcclxuICAgICAgICAgICAgICAvLyBhIHBvaW50IHJlc3VsdCwgc28gdGhlIHZpZXcgY2FuIHpvb20gdG8gaXRcclxuICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBnZW9tZXRyeUVuZ2luZS5nZW9kZXNpY0J1ZmZlcihcclxuICAgICAgICAgICAgICAgIGdyYXBoaWMuZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgICAxMDAsXHJcbiAgICAgICAgICAgICAgICAnbWV0ZXJzJ1xyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFJldHVybiBhIFNlYXJjaCBSZXN1bHRcclxuICAgICAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBleHRlbnQ6IGJ1ZmZlcj8uZXh0ZW50LFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZTogZ3JhcGhpYyxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZlYXR1cmU/LnByb3BlcnRpZXM/LmxhYmVsLnJlcGxhY2UoL251bGwvZywgJycpLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlYXJjaFJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gYW4gYXJyYXkgb2YgU2VhcmNoIFJlc3VsdHNcclxuICAgICAgICAgICAgcmV0dXJuIHNlYXJjaFJlc3VsdHM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWFyY2hXaWRnZXQgPSBuZXcgU2VhcmNoKHtcclxuICAgICAgdmlldzogdmlldyxcclxuICAgICAgc291cmNlczogW2N1c3RvbVNlYXJjaFNvdXJjZV0sXHJcbiAgICAgIGluY2x1ZGVEZWZhdWx0U291cmNlczogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIHdpZGdldCB0byB0aGUgdG9wLXJpZ2h0IGNvcm5lciBvZiB0aGUgdmlld1xyXG4gICAgdmlldy51aS5hZGQoc2VhcmNoV2lkZ2V0LCB7XHJcbiAgICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0JyxcclxuICAgICAgaW5kZXg6IDIsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xyXG5cclxuICAgIHNlYXJjaFdpZGdldC5vbignc2VhcmNoLWNvbXBsZXRlJywgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1Jlc3VsdHMgb2YgdGhlIHNlYXJjaDogJywgZXZlbnQpOyAvLyBQcm92aWRlcyB0aGUgcmVzdWx0cyBvbiBzZWFyY2ggQ29tcGxldGVcclxuICAgIH0pO1xyXG5cclxuICAgIHNlYXJjaFdpZGdldC5vbignc2VsZWN0LXJlc3VsdCcsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUaGUgc2VsZWN0ZWQgc2VhcmNoIHJlc3VsdDogJywgZXZlbnQpOyAvLyBQcm92aWRlcyB0aGUgc2VsZWN0ZWQgcmVzdWx0cyBvbiBzZWFyY2ggQ29tcGxldGUgYW5kIGFueSByZXN1bHQgaXMgc2VsZWN0ZWQgZnJvbSBkcm9wZG93blxyXG4gICAgfSk7XHJcblxyXG4gICAgdmlldy5vbignY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblxyXG4gICAgICB2YXIgbGF0ID0gZXZlbnQubWFwUG9pbnQueTtcclxuICAgICAgdmFyIGxvbiA9IGV2ZW50Lm1hcFBvaW50Lng7XHJcbiAgICAgIHZpZXcuZ29Ubyh7XHJcbiAgICAgICAgY2VudGVyOiBuZXcgUG9pbnQoe1xyXG4gICAgICAgICAgeDogbG9uLFxyXG4gICAgICAgICAgeTogbGF0LFxyXG4gICAgICAgICAgc3BhdGlhbFJlZmVyZW5jZToge1xyXG4gICAgICAgICAgICB3a2lkOiAyMTkzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBwb2ludCA9IHtcclxuICAgICAgICB0eXBlOiAncG9pbnQnLFxyXG4gICAgICAgIHg6IGxvbixcclxuICAgICAgICB5OiBsYXQsXHJcbiAgICAgICAgc3BhdGlhbFJlZmVyZW5jZToge1xyXG4gICAgICAgICAgd2tpZDogMjE5M1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcG9pbnRHcmFwaGljID0gbmV3IEdyYXBoaWMoe1xyXG4gICAgICAgIGdlb21ldHJ5OiBwb2ludCxcclxuICAgICAgICBzeW1ib2w6IHNpbXBsZU1hcmtlclN5bWJvbCxcclxuICAgICAgfSk7XHJcbiAgICAgIHZpZXcuZ3JhcGhpY3MgPSBbXTtcclxuICAgICAgdmlldy5ncmFwaGljcy5hZGQocG9pbnRHcmFwaGljKTtcclxuICAgICAgY29uc3QgbG9jYXRpb24gPSB7XHJcbiAgICAgICAgbG9uZ2l0dWRlOiBsb24sXHJcbiAgICAgICAgbGF0aXR1ZGU6IGxhdFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmVudmlyb25tZW50LmNvcmVMb2dpY0FkZHJlc3NBcGlVcmwgKyAncmV2ZXJzZWdlb2NvZGUuanNvbj9hcGlfa2V5PScrIHRoaXMuZW52aXJvbm1lbnQuY29yZUxvZ2ljQWRkcmVzc0FwaWtleSArICcmbGltaXQ9MSZmb3JtYXR0ZWQ9MSZzcmlkPTIxOTMnO1xyXG4gICAgICBzZWxmLmNoZWNrb3V0U2VydmljZVxyXG4gICAgICAgIC5nZXRDbGlja0dlb0xvY2F0aW9uQWRkcmVzcyh1cmwsIGxvY2F0aW9uKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UgIT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkgeyBcclxuICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybURpc2FibGVkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9jYXRpb24uc2VsZWN0ZWRBZGRyZXNzID0gcmVzcG9uc2U/LmRhdGFbMF0uYXR0cmlidXRlcz8ubGFiZWw7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGFmdGVyU2VhcmNoQ29tcGxldGVVcmwgPSB0aGlzLmVudmlyb25tZW50LmNvcmVMb2dpY0FkZHJlc3NBcGlVcmwgKyAnYWRkcmVzcy5qc29uP2FwaV9rZXk9JysgdGhpcy5lbnZpcm9ubWVudC5jb3JlTG9naWNBZGRyZXNzQXBpa2V5ICsnJmlkPScgKyByZXNwb25zZT8uZGF0YVswXS5yZWxhdGlvbnNoaXBzPy5hZGRyZXNzPy5kYXRhPy5pZDtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXJ5OiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICBxdWVyeS5sYXQgPSBsYXQ7XHJcbiAgICAgICAgICAgICAgcXVlcnkubG9uID0gbG9uO1xyXG4gICAgICAgICAgICAgIGVzcmlSZXF1ZXN0KGFmdGVyU2VhcmNoQ29tcGxldGVVcmwsIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1EaXNhYmxlZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hcEtleXMocmVzdWx0cy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9uOiBmZWF0dXJlPy5nZW9tZXRyeT8uY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGF0OiBmZWF0dXJlPy5nZW9tZXRyeT8uY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSByZXN1bHRzIG9mIHlvdXIgY3VzdG9tIHNlYXJjaFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlRGF0YShyZXN1bHRzLCBsb2NhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBHcmFwaGljIHRoZSBTZWFyY2ggd2lkZ2V0IGNhbiBkaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24uc2VsZWN0ZWRBZGRyZXNzID0gZmVhdHVyZT8ucHJvcGVydGllcz8ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHZpZXcuZ3JhcGhpY3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2xpY2sgb24gdGhlIHZpZXdcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3BvaW50JyxcclxuICAgICAgICAgICAgICAgICAgICB4OiBmZWF0dXJlPy5nZW9tZXRyeT8uY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZmVhdHVyZT8uZ2VvbWV0cnk/LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRHcmFwaGljID0gbmV3IEdyYXBoaWMoe1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBwb2ludCxcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHNpbXBsZU1hcmtlclN5bWJvbCxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHZpZXcuZ3JhcGhpY3MuYWRkKHBvaW50R3JhcGhpYyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvckluZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybURpc2FibGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ySW5kJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudmlldy53aGVuKCk7XHJcbiAgfVxyXG4gIG9uQ29uZmlybWVkQ2xpY2soKSB7XHJcbiAgICB0aGlzLmNvbmZpcm1lZEFkZHJlc3MgPSB0aGlzLmxvY2F0aW9uLnNlbGVjdGVkQWRkcmVzcy5yZXBsYWNlKC9udWxsL2csICcnKTtcclxuICAgIHRoaXMudXBkYXRlTmV3QWRkcmVzcy5lbWl0KHRoaXMubG9jYXRpb24pO1xyXG4gICAgdGhpcy5zaG93QWRkcmVzcy5uZXh0KHRydWUpO1xyXG4gIH1cclxuICBwb3B1bGF0ZURhdGEocmVzdWx0czogYW55LCBsb2NhdGlvbjogYW55KSB7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdHMuZGF0YTtcclxuICAgIGNvbnN0IG5ld0FkZHJlc3M6IGFueSA9IHtcclxuICAgICAgbGluZTE6IGRhdGEuZm9ybWF0dGVkX2FkZHJlc3M/LmxpbmUxLFxyXG4gICAgICBsaW5lMjogZGF0YS5mb3JtYXR0ZWRfYWRkcmVzcz8ubGluZTIsXHJcbiAgICAgIHRvd246IGRhdGEuc3RydWN0dXJlZF9hZGRyZXNzPy50b3duLFxyXG4gICAgICBzdWJ1cmI6IGRhdGEuc3RydWN0dXJlZF9hZGRyZXNzPy5zdWJ1cmIsXHJcbiAgICAgIHBvc3RhbENvZGU6IGRhdGEuc3RydWN0dXJlZF9hZGRyZXNzPy5wb3N0Y29kZSxcclxuICAgICAgbG9uZ2l0dWRlOiBsb2NhdGlvbi5sb24sXHJcbiAgICAgIGxhdGl0dWRlOiBsb2NhdGlvbi5sYXQsXHJcbiAgICB9XHJcbiAgICBuZXdBZGRyZXNzLnNlbGVjdGVkQWRkcmVzcyA9IHRoaXMubG9jYXRpb24uc2VsZWN0ZWRBZGRyZXNzO1xyXG4gICAgdGhpcy5sb2NhdGlvbiA9IG5ld0FkZHJlc3M7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlbG9naWMtbWFwXCIgI21hcFZpZXdOb2RlPjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY29uZmlybS1jbHNcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0NvbmZpcm1EaXNhYmxlZCB8IGFzeW5jXCIgKGNsaWNrKT1cIm9uQ29uZmlybWVkQ2xpY2soKVwiIGNsYXNzPVwiYnRuIHByaW1hcnktYnV0dG9uIG10LTRcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJzaG93QWRkcmVzcyB8IGFzeW5jXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q29uZmlybWVkIERlbGl2ZXJ5IEFkZHJlc3MgPC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtYXAtc2VsZWN0ZWQtYWRkcmVzc1wiICpuZ0lmPVwic2hvd0FkZHJlc3MgfCBhc3luY1wiIGlkPVwiYWRkcmVzc1wiPlxyXG4gICAgICAgIHt7Y29uZmlybWVkQWRkcmVzc319PC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiIGNvbC1zbS0xMiBhbGVydCBhbGVydC1kYW5nZXIganVzdGlmeS1jb250ZW50LXN0YXJ0IG10LTNcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cImVycm9ySW5kJCB8IGFzeW5jXCI+XHJcbiAgICA8aW1nIGNsYXNzPVwibXItM1wiIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvZXJyb3JpY29uLnN2Z1wiIGFsdD1cImFsZXJ0XCI+IFBsZWFzZSBzZWxlY3QgdmFsaWQgQWRkcmVzc1xyXG48L2Rpdj5cclxuIl19
|