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.
Files changed (293) hide show
  1. package/README.md +24 -0
  2. package/assets/fonts/arial-webfont.woff +0 -0
  3. package/assets/fonts/arial-webfont.woff2 +0 -0
  4. package/assets/fonts/arialblack-webfont.woff +0 -0
  5. package/assets/fonts/arialblack-webfont.woff2 +0 -0
  6. package/assets/fonts/arialbold-webfont.woff +0 -0
  7. package/assets/fonts/arialbold-webfont.woff2 +0 -0
  8. package/assets/fonts/helveticaneue.woff +0 -0
  9. package/assets/fonts/helveticaneue.woff2 +0 -0
  10. package/assets/fonts/helveticaneuemedium-webfont.woff +0 -0
  11. package/assets/fonts/helveticaneuemedium-webfont.woff2 +0 -0
  12. package/assets/fonts/helveticaneuethin-webfont.woff +0 -0
  13. package/assets/fonts/helveticaneuethin-webfont.woff2 +0 -0
  14. package/assets/fonts/icomoon.ttf +0 -0
  15. package/assets/fonts/icomoon.woff +0 -0
  16. package/assets/images/ActivateIcon.svg +14 -0
  17. package/assets/images/AlertIcon.svg +3 -0
  18. package/assets/images/DisableIcon.svg +3 -0
  19. package/assets/images/Divider line.svg +3 -0
  20. package/assets/images/EditIconEnabled.svg +6 -0
  21. package/assets/images/EditIcondisabled.svg +6 -0
  22. package/assets/images/Grid-dark.svg +8 -0
  23. package/assets/images/Grid-light.svg +8 -0
  24. package/assets/images/Hamburger_icon_white.png +0 -0
  25. package/assets/images/Icon-awesome-user-alt-white.svg +13 -0
  26. package/assets/images/Icon-ionic-ios-arrow-down.svg +3 -0
  27. package/assets/images/Icon-ionic-ios-help-circle.svg +6 -0
  28. package/assets/images/Icon-ionic-ios-home.svg +6 -0
  29. package/assets/images/Icon-ionic-ios-settings.svg +6 -0
  30. package/assets/images/Icon-material-shopping-cart.svg +7 -0
  31. package/assets/images/Invited.svg +4 -0
  32. package/assets/images/List-dark.svg +3 -0
  33. package/assets/images/List-light.svg +3 -0
  34. package/assets/images/PDP-add-more.svg +3 -0
  35. package/assets/images/PDP-colour-selected.svg +7 -0
  36. package/assets/images/PDP-quote-exists.svg +12 -0
  37. package/assets/images/PDP-remove-icon.svg +3 -0
  38. package/assets/images/Selected icon.svg +3 -0
  39. package/assets/images/Selected-icon.svg +3 -0
  40. package/assets/images/banner-image.png +0 -0
  41. package/assets/images/br_down.png +0 -0
  42. package/assets/images/cart-shopping-fast.svg +6 -0
  43. package/assets/images/check-square.svg +3 -0
  44. package/assets/images/checkmark-circle-outline.svg +4 -0
  45. package/assets/images/closegrey.svg +71 -0
  46. package/assets/images/dashboard.svg +35 -0
  47. package/assets/images/delivery.svg +11 -0
  48. package/assets/images/download-icon.svg +7 -0
  49. package/assets/images/downloads-dark.svg +6 -0
  50. package/assets/images/downloads-light.svg +6 -0
  51. package/assets/images/erroricon.svg +3 -0
  52. package/assets/images/home-icon.svg +6 -0
  53. package/assets/images/home_banner.png +0 -0
  54. package/assets/images/ic_calender.svg +15 -0
  55. package/assets/images/icon-clock-icon.svg +10 -0
  56. package/assets/images/icon-feather-edit.svg +6 -0
  57. package/assets/images/icon-flashing-black.svg +3 -0
  58. package/assets/images/icon-flashing-white.svg +3 -0
  59. package/assets/images/icon-ionic-ios-search.svg +3 -0
  60. package/assets/images/icon-logout.svg +6 -0
  61. package/assets/images/icon-mail-icon.svg +7 -0
  62. package/assets/images/icon-metro-info.svg +3 -0
  63. package/assets/images/ionic-arrow-back.svg +3 -0
  64. package/assets/images/ionic-ios-feather-phone.svg +3 -0
  65. package/assets/images/ionic-ios-help-circle-outline.svg +6 -0
  66. package/assets/images/ionic-ios-location-outline.svg +3 -0
  67. package/assets/images/ionic-ios-my-location.svg +3 -0
  68. package/assets/images/ionic-ios-users-outline.svg +3 -0
  69. package/assets/images/ionic-trash.svg +3 -0
  70. package/assets/images/logo-black.svg +16 -0
  71. package/assets/images/logo-dark.svg +48 -0
  72. package/assets/images/logo.svg +16 -0
  73. package/assets/images/my-account.svg +21 -0
  74. package/assets/images/my-list.svg +43 -0
  75. package/assets/images/my-team.svg +17 -0
  76. package/assets/images/newsfeed-banner.jpg +0 -0
  77. package/assets/images/newtab.svg +11 -0
  78. package/assets/images/no-saved-cart.svg +3 -0
  79. package/assets/images/open-account-logout.png +0 -0
  80. package/assets/images/orders.svg +23 -0
  81. package/assets/images/pdf-icon.svg +45 -0
  82. package/assets/images/pdp-noimage.svg +21 -0
  83. package/assets/images/pickup.svg +8 -0
  84. package/assets/images/plp-grid-noimage.svg +22 -0
  85. package/assets/images/plp-list-noimage.svg +16 -0
  86. package/assets/images/product-banner.png +0 -0
  87. package/assets/images/product-details-dark.svg +10 -0
  88. package/assets/images/product-details-light.svg +10 -0
  89. package/assets/images/products.svg +34 -0
  90. package/assets/images/quotes.svg +12 -0
  91. package/assets/images/related-products-dark.svg +9 -0
  92. package/assets/images/related-products-light.svg +9 -0
  93. package/assets/images/search-noimage.svg +16 -0
  94. package/assets/images/see-more-bg-hover.svg +1 -0
  95. package/assets/images/see-more-bg.svg +1 -0
  96. package/assets/images/shopping-cart-icon.svg +14 -0
  97. package/assets/images/slash-small-white.svg +3 -0
  98. package/assets/images/warningicon.svg +3 -0
  99. package/assets/images/why-dimond.svg +7 -0
  100. package/buildingproduct-library-0.2.7.tgz +0 -0
  101. package/buildingproduct-library.d.ts +5 -0
  102. package/bundles/buildingproduct-library.umd.js +10979 -0
  103. package/bundles/buildingproduct-library.umd.js.map +1 -0
  104. package/esm2015/buildingproduct-library.js +5 -0
  105. package/esm2015/lib/account-dropdown/account-dropdown.component.js +159 -0
  106. package/esm2015/lib/account-dropdown/account-dropdown.module.js +59 -0
  107. package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
  108. package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +442 -0
  109. package/esm2015/lib/checkout/checkout.module.js +149 -0
  110. package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +348 -0
  111. package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +37 -0
  112. package/esm2015/lib/checkout/order-review/delivery-information/delivery-information.component.js +32 -0
  113. package/esm2015/lib/checkout/order-review/order-review-grid/order-review-grid.component.js +162 -0
  114. package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +151 -0
  115. package/esm2015/lib/checkout/order-review/order-review.component.js +123 -0
  116. package/esm2015/lib/constants/general.js +57 -0
  117. package/esm2015/lib/contact-us/contact-us.component.js +38 -0
  118. package/esm2015/lib/contact-us/contact-us.module.js +41 -0
  119. package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +48 -0
  120. package/esm2015/lib/custom-cart/custom-cart.component.js +70 -0
  121. package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
  122. package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +27 -0
  123. package/esm2015/lib/custom-header-logo/custom-header-logo.module.js +54 -0
  124. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.component.js +24 -0
  125. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.module.js +48 -0
  126. package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +239 -0
  127. package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +64 -0
  128. package/esm2015/lib/custom-navigation/custom-navigation.component.js +122 -0
  129. package/esm2015/lib/custom-navigation/custom-navigation.module.js +79 -0
  130. package/esm2015/lib/custom-order-details/custom-order-details.component.js +205 -0
  131. package/esm2015/lib/custom-order-details/custom-order-details.module.js +99 -0
  132. package/esm2015/lib/custom-order-details/download-popup/download-popup.component.js +34 -0
  133. package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +191 -0
  134. package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +169 -0
  135. package/esm2015/lib/custom-order-history/custom-order-history.component.js +680 -0
  136. package/esm2015/lib/custom-order-history/custom-order-history.module.js +105 -0
  137. package/esm2015/lib/custom-order-history/slider-progress/slider-progress.component.js +62 -0
  138. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +108 -0
  139. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.js +125 -0
  140. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +91 -0
  141. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +56 -0
  142. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +51 -0
  143. package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +114 -0
  144. package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +89 -0
  145. package/esm2015/lib/custom-saved-cart/save-cart.service.js +67 -0
  146. package/esm2015/lib/custom-saved-cart/saved-cart-general.js +49 -0
  147. package/esm2015/lib/custom-saved-cart/saved-cart.service.js +48 -0
  148. package/esm2015/lib/custom-search/custom-search.component.js +132 -0
  149. package/esm2015/lib/custom-search/custom-search.module.js +46 -0
  150. package/esm2015/lib/custom-user-account/custom-user-account.component.js +92 -0
  151. package/esm2015/lib/custom-user-account/custom-user-account.module.js +63 -0
  152. package/esm2015/lib/directives/custom-directives.module.js +22 -0
  153. package/esm2015/lib/directives/custom-paginatior.directive.js +197 -0
  154. package/esm2015/lib/environments/environment.js +24 -0
  155. package/esm2015/lib/find-store/find-store.component.js +94 -0
  156. package/esm2015/lib/find-store/find-store.module.js +66 -0
  157. package/esm2015/lib/help-support/help-support.component.js +24 -0
  158. package/esm2015/lib/help-support/help-support.module.js +38 -0
  159. package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +133 -0
  160. package/esm2015/lib/my-account/account-statements/account-statements.component.js +57 -0
  161. package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +379 -0
  162. package/esm2015/lib/my-account/my-account.component.js +95 -0
  163. package/esm2015/lib/my-account/my-account.module.js +99 -0
  164. package/esm2015/lib/my-team/my-team.component.js +445 -0
  165. package/esm2015/lib/my-team/my-team.module.js +100 -0
  166. package/esm2015/lib/my-team/team-member.service.js +95 -0
  167. package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
  168. package/esm2015/lib/services/account-dropdown-state.service.js +21 -0
  169. package/esm2015/lib/services/cart.service.js +70 -0
  170. package/esm2015/lib/services/checkout.service.js +69 -0
  171. package/esm2015/lib/services/endPointURL.js +192 -0
  172. package/esm2015/lib/services/find-store.service.js +50 -0
  173. package/esm2015/lib/services/logout.service.js +50 -0
  174. package/esm2015/lib/services/my-account.service.js +68 -0
  175. package/esm2015/lib/services/order-history.service.js +65 -0
  176. package/esm2015/lib/services/order.review.js +38 -0
  177. package/esm2015/lib/services/search.service.js +42 -0
  178. package/esm2015/lib/services/user-account-detail-service.service.js +207 -0
  179. package/esm2015/lib/shared/CustomProduct.js +48 -0
  180. package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +116 -0
  181. package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +102 -0
  182. package/esm2015/lib/shared/custom-cart-detail/custom-cart-detail.component.js +95 -0
  183. package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +477 -0
  184. package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +431 -0
  185. package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +622 -0
  186. package/esm2015/lib/shared/custom-cart-detail/split.pipe.js +17 -0
  187. package/esm2015/lib/shared/date-range-picker/date-range-picker.component.js +173 -0
  188. package/esm2015/lib/shared/regEx.validator.js +17 -0
  189. package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +83 -0
  190. package/esm2015/lib/shared/shared-components.module.js +119 -0
  191. package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +220 -0
  192. package/esm2015/lib/spa-custom-header.component.js +26 -0
  193. package/esm2015/lib/spa-custom-header.module.js +145 -0
  194. package/esm2015/lib/spa-custom-header.service.js +14 -0
  195. package/esm2015/lib/utils/utils.js +27 -0
  196. package/esm2015/lib/utils.js +27 -0
  197. package/esm2015/public-api.js +35 -0
  198. package/fesm2015/buildingproduct-library.js +10197 -0
  199. package/fesm2015/buildingproduct-library.js.map +1 -0
  200. package/lib/account-dropdown/account-dropdown.component.d.ts +24 -0
  201. package/lib/account-dropdown/account-dropdown.module.d.ts +11 -0
  202. package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
  203. package/lib/checkout/add-new-address/add-new-address.component.d.ts +30 -0
  204. package/lib/checkout/checkout.module.d.ts +28 -0
  205. package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +77 -0
  206. package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +23 -0
  207. package/lib/checkout/order-review/delivery-information/delivery-information.component.d.ts +13 -0
  208. package/lib/checkout/order-review/order-review-grid/order-review-grid.component.d.ts +33 -0
  209. package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +31 -0
  210. package/lib/checkout/order-review/order-review.component.d.ts +41 -0
  211. package/lib/constants/general.d.ts +50 -0
  212. package/lib/contact-us/contact-us.component.d.ts +13 -0
  213. package/lib/contact-us/contact-us.module.d.ts +9 -0
  214. package/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.d.ts +18 -0
  215. package/lib/custom-cart/custom-cart.component.d.ts +22 -0
  216. package/lib/custom-cart/custom-cart.module.d.ts +15 -0
  217. package/lib/custom-header-logo/custom-header-logo.component.d.ts +11 -0
  218. package/lib/custom-header-logo/custom-header-logo.module.d.ts +11 -0
  219. package/lib/custom-header-paragraph/custom-header-paragraph.component.d.ts +11 -0
  220. package/lib/custom-header-paragraph/custom-header-paragraph.module.d.ts +10 -0
  221. package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +62 -0
  222. package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +13 -0
  223. package/lib/custom-navigation/custom-navigation.component.d.ts +37 -0
  224. package/lib/custom-navigation/custom-navigation.module.d.ts +21 -0
  225. package/lib/custom-order-details/custom-order-details.component.d.ts +63 -0
  226. package/lib/custom-order-details/custom-order-details.module.d.ts +19 -0
  227. package/lib/custom-order-details/download-popup/download-popup.component.d.ts +15 -0
  228. package/lib/custom-order-details/order-detail-grid/order-detail-grid.component.d.ts +40 -0
  229. package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +35 -0
  230. package/lib/custom-order-history/custom-order-history.component.d.ts +99 -0
  231. package/lib/custom-order-history/custom-order-history.module.d.ts +19 -0
  232. package/lib/custom-order-history/slider-progress/slider-progress.component.d.ts +15 -0
  233. package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +33 -0
  234. package/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.d.ts +20 -0
  235. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.d.ts +65 -0
  236. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.d.ts +31 -0
  237. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +19 -0
  238. package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +59 -0
  239. package/lib/custom-saved-cart/custom-saved-cart.module.d.ts +16 -0
  240. package/lib/custom-saved-cart/save-cart.service.d.ts +17 -0
  241. package/lib/custom-saved-cart/saved-cart-general.d.ts +88 -0
  242. package/lib/custom-saved-cart/saved-cart.service.d.ts +12 -0
  243. package/lib/custom-search/custom-search.component.d.ts +35 -0
  244. package/lib/custom-search/custom-search.module.d.ts +10 -0
  245. package/lib/custom-user-account/custom-user-account.component.d.ts +35 -0
  246. package/lib/custom-user-account/custom-user-account.module.d.ts +12 -0
  247. package/lib/directives/custom-directives.module.d.ts +8 -0
  248. package/lib/directives/custom-paginatior.directive.d.ts +29 -0
  249. package/lib/environments/environment.d.ts +12 -0
  250. package/lib/find-store/find-store.component.d.ts +34 -0
  251. package/lib/find-store/find-store.module.d.ts +12 -0
  252. package/lib/help-support/help-support.component.d.ts +11 -0
  253. package/lib/help-support/help-support.module.d.ts +9 -0
  254. package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +34 -0
  255. package/lib/my-account/account-statements/account-statements.component.d.ts +24 -0
  256. package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +66 -0
  257. package/lib/my-account/my-account.component.d.ts +26 -0
  258. package/lib/my-account/my-account.module.d.ts +20 -0
  259. package/lib/my-team/my-team.component.d.ts +103 -0
  260. package/lib/my-team/my-team.module.d.ts +18 -0
  261. package/lib/my-team/team-member.service.d.ts +17 -0
  262. package/lib/pipes/custom-date-pipe.pipe.d.ts +11 -0
  263. package/lib/services/account-dropdown-state.service.d.ts +10 -0
  264. package/lib/services/cart.service.d.ts +15 -0
  265. package/lib/services/checkout.service.d.ts +17 -0
  266. package/lib/services/endPointURL.d.ts +156 -0
  267. package/lib/services/find-store.service.d.ts +14 -0
  268. package/lib/services/logout.service.d.ts +11 -0
  269. package/lib/services/my-account.service.d.ts +16 -0
  270. package/lib/services/order-history.service.d.ts +14 -0
  271. package/lib/services/order.review.d.ts +11 -0
  272. package/lib/services/search.service.d.ts +11 -0
  273. package/lib/services/user-account-detail-service.service.d.ts +40 -0
  274. package/lib/shared/CustomProduct.d.ts +28 -0
  275. package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +58 -0
  276. package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +30 -0
  277. package/lib/shared/custom-cart-detail/custom-cart-detail.component.d.ts +32 -0
  278. package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +81 -0
  279. package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +72 -0
  280. package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +100 -0
  281. package/lib/shared/custom-cart-detail/split.pipe.d.ts +7 -0
  282. package/lib/shared/date-range-picker/date-range-picker.component.d.ts +39 -0
  283. package/lib/shared/regEx.validator.d.ts +10 -0
  284. package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
  285. package/lib/shared/shared-components.module.d.ts +26 -0
  286. package/lib/shared/shared-download-order/shared-download-order.component.d.ts +40 -0
  287. package/lib/spa-custom-header.component.d.ts +11 -0
  288. package/lib/spa-custom-header.module.d.ts +27 -0
  289. package/lib/spa-custom-header.service.d.ts +6 -0
  290. package/lib/utils/utils.d.ts +6 -0
  291. package/lib/utils.d.ts +5 -0
  292. package/package.json +92 -0
  293. 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