@colijnit/transaction 12.1.8 → 12.1.11

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 (302) hide show
  1. package/bundles/colijnit-transaction.umd.js +6370 -3457
  2. package/bundles/colijnit-transaction.umd.js.map +1 -1
  3. package/colijnit-transaction.d.ts +84 -23
  4. package/colijnit-transaction.metadata.json +1 -1
  5. package/esm2015/colijnit-transaction.js +85 -24
  6. package/esm2015/lib/assets/dictionary/text.properties.js +118 -8
  7. package/esm2015/lib/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +1 -1
  8. package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +120 -288
  9. package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +279 -112
  10. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +2 -2
  11. package/esm2015/lib/component/checkout/checkout.component.js +64 -34
  12. package/esm2015/lib/component/checkout/checkout.module.js +11 -2
  13. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.component.js +17 -3
  14. package/esm2015/lib/component/core/base/default-ok-cancel-buttons.component.js +41 -0
  15. package/esm2015/lib/component/core/base/transaction-base.component.js +7 -9
  16. package/esm2015/lib/component/core/core.module.js +6 -3
  17. package/esm2015/lib/component/core/enum/app-popup-type.enum.js +8 -0
  18. package/esm2015/lib/component/core/relation/customer-groups.component.js +4 -3
  19. package/esm2015/lib/component/core/stock-status-indicator/stock-status-indicator.component.js +1 -1
  20. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.component.js +40 -0
  21. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.module.js +26 -0
  22. package/esm2015/lib/component/order-confirmation-grid.component/order-confirmation-grid.component.js +70 -0
  23. package/esm2015/lib/component/order-confirmation-grid.component/order-confirmation-grid.module.js +29 -0
  24. package/esm2015/lib/component/order-grid/order-grid.component.js +99 -0
  25. package/esm2015/lib/component/order-grid/order-grid.module.js +28 -0
  26. package/esm2015/lib/component/payment/payment.component.js +73 -0
  27. package/esm2015/lib/component/payment/payment.module.js +27 -0
  28. package/esm2015/lib/component/payment-tile/payment-tile.component.js +32 -0
  29. package/esm2015/lib/component/payment-tile/payment-tile.module.js +25 -0
  30. package/esm2015/lib/component/relation-address-select/relation-address-select.component.js +1 -1
  31. package/esm2015/lib/component/relation-address-tile/relation-address-tile.component.js +12 -24
  32. package/esm2015/lib/component/relation-address-tile/relation-address-tile.module.js +4 -2
  33. package/esm2015/lib/component/seller-information/seller-information.component.js +61 -0
  34. package/esm2015/lib/component/seller-information/seller-information.module.js +21 -0
  35. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.module.js +1 -1
  36. package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.component.js +7 -3
  37. package/esm2015/lib/component/stepper/component/stepper-step.component.js +3 -3
  38. package/esm2015/lib/component/stepper/stepper.component.js +39 -41
  39. package/esm2015/lib/component/stepper/stepper.module.js +6 -3
  40. package/esm2015/lib/component/tile/tile.component.js +32 -0
  41. package/esm2015/lib/component/tile/tile.module.js +19 -0
  42. package/esm2015/lib/component/transaction/transaction.component.js +72 -14
  43. package/esm2015/lib/component/transaction/transaction.module.js +10 -2
  44. package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.component.js +46 -0
  45. package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.module.js +27 -0
  46. package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.js +28 -0
  47. package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.module.js +27 -0
  48. package/esm2015/lib/component/transaction-header/transaction-header.component.js +14 -4
  49. package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.component.js +5 -2
  50. package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.component.js +47 -0
  51. package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.module.js +27 -0
  52. package/esm2015/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.js +36 -0
  53. package/esm2015/lib/component/transaction-history-grid-status/transaction-history-grid-status.module.js +23 -0
  54. package/esm2015/lib/component/transaction-line/transaction-line.component.js +36 -4
  55. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.component.js +49 -0
  56. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.module.js +23 -0
  57. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-date.component.js +40 -0
  58. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-date.module.js +23 -0
  59. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.component.js +48 -0
  60. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.module.js +23 -0
  61. package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-amount.component.js +50 -0
  62. package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-amount.module.js +23 -0
  63. package/esm2015/lib/component/transaction-line-fields/transaction-line-fields-base.component.js +22 -0
  64. package/esm2015/lib/component/transaction-line-fields/transaction-line-line-discount.component.js +50 -0
  65. package/esm2015/lib/component/transaction-line-fields/transaction-line-line-discount.module.js +23 -0
  66. package/esm2015/lib/component/transaction-line-fields/transaction-line-price-list.component.js +49 -0
  67. package/esm2015/lib/component/transaction-line-fields/transaction-line-price-list.module.js +23 -0
  68. package/esm2015/lib/component/transaction-line-fields/transaction-line-price.component.js +49 -0
  69. package/esm2015/lib/component/transaction-line-fields/transaction-line-price.module.js +23 -0
  70. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantity.component.js +36 -0
  71. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantity.module.js +23 -0
  72. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantum-discount.component.js +50 -0
  73. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantum-discount.module.js +23 -0
  74. package/esm2015/lib/component/transaction-line-fields/transaction-line-reference.component.js +48 -0
  75. package/esm2015/lib/component/transaction-line-fields/transaction-line-reference.module.js +23 -0
  76. package/esm2015/lib/component/transaction-line-fields/transaction-line-special-discount.component.js +50 -0
  77. package/esm2015/lib/component/transaction-line-fields/transaction-line-special-discount.module.js +23 -0
  78. package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.component.js +49 -0
  79. package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.module.js +23 -0
  80. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse.component.js +49 -0
  81. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse.module.js +24 -0
  82. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.js +91 -0
  83. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.js +36 -0
  84. package/esm2015/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.component.js +134 -0
  85. package/esm2015/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.module.js +56 -0
  86. package/esm2015/lib/component/transaction-lines/transaction-lines.component.js +14 -3
  87. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.component.js +16 -11
  88. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.module.js +4 -3
  89. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.js +29 -0
  90. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.component.js +65 -0
  91. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.module.js +26 -0
  92. package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.js +39 -0
  93. package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.module.js +25 -0
  94. package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.js +28 -0
  95. package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.module.js +27 -0
  96. package/esm2015/lib/enum/icon.enum.js +12 -1
  97. package/esm2015/lib/enum/status-type.enum.js +5 -0
  98. package/esm2015/lib/enum/tab-category.enum.js +10 -0
  99. package/esm2015/lib/model/delivery-type.js +3 -0
  100. package/esm2015/lib/model/icon-svg.js +13 -2
  101. package/esm2015/lib/pipe/date-duration.pipe.js +1 -1
  102. package/esm2015/lib/pipe/delivery-time.pipe.js +4 -1
  103. package/esm2015/lib/pipe/localize.pipe.js +1 -1
  104. package/esm2015/lib/pipe/safe-html.pipe.js +1 -1
  105. package/esm2015/lib/pipe/safe-style.pipe.js +1 -1
  106. package/esm2015/lib/service/dialog.service.js +14 -3
  107. package/esm2015/lib/service/dictionary.service.js +1 -1
  108. package/esm2015/lib/service/ione-connector-adapter.service.js +273 -15
  109. package/esm2015/lib/service/pending-reason.service.js +21 -9
  110. package/esm2015/lib/service/transaction.service.js +195 -29
  111. package/fesm2015/colijnit-transaction.js +4156 -1296
  112. package/fesm2015/colijnit-transaction.js.map +1 -1
  113. package/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.d.ts +8 -45
  114. package/lib/component/checkout/checkout-overview-delivery-edit/style/_layout.scss +13 -6
  115. package/lib/component/checkout/checkout-overview-delivery-edit/style/material.scss +1 -2
  116. package/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.d.ts +31 -3
  117. package/lib/component/checkout/checkout-overview-relation-edit/style/_layout.scss +28 -0
  118. package/lib/component/checkout/checkout-overview-relation-edit/style/_material-definition.scss +1 -0
  119. package/lib/component/checkout/checkout-overview-relation-edit/style/material.scss +4 -0
  120. package/lib/component/checkout/checkout-relation-suggestions-list/style/_layout.scss +1 -0
  121. package/lib/component/checkout/checkout.component.d.ts +10 -1
  122. package/lib/component/checkout/style/_layout.scss +25 -0
  123. package/lib/component/checkout/style/_material-definition.scss +5 -0
  124. package/lib/component/checkout/style/material.scss +2 -0
  125. package/lib/component/confirmation-dialog/confirmation-dialog.component.d.ts +4 -0
  126. package/lib/component/confirmation-dialog/style/material.scss +1 -0
  127. package/lib/component/core/base/default-ok-cancel-buttons.component.d.ts +13 -0
  128. package/lib/component/core/enum/app-popup-type.enum.d.ts +6 -0
  129. package/lib/component/core/image-display/style/_layout.scss +2 -4
  130. package/lib/component/core/relation/relation-customer-groups.component.scss +6 -0
  131. package/lib/component/delivery-type-tile/delivery-type-tile.component.d.ts +10 -0
  132. package/lib/component/delivery-type-tile/delivery-type-tile.module.d.ts +2 -0
  133. package/lib/component/delivery-type-tile/style/_layout.scss +35 -0
  134. package/lib/component/delivery-type-tile/style/_material-definition.scss +16 -0
  135. package/lib/component/delivery-type-tile/style/_theme.scss +6 -0
  136. package/lib/component/delivery-type-tile/style/material.scss +5 -0
  137. package/lib/component/order-confirmation-create/style/_layout.scss +5 -0
  138. package/lib/component/order-confirmation-create/style/_material-definition.scss +1 -0
  139. package/lib/component/order-confirmation-create/style/_theme.scss +5 -0
  140. package/lib/component/order-confirmation-create/style/material.scss +4 -0
  141. package/lib/component/order-confirmation-grid.component/order-confirmation-grid.component.d.ts +15 -0
  142. package/lib/component/order-confirmation-grid.component/order-confirmation-grid.module.d.ts +2 -0
  143. package/lib/component/order-confirmation-grid.component/style/_layout.scss +5 -0
  144. package/lib/component/order-confirmation-grid.component/style/_material-definition.scss +1 -0
  145. package/lib/component/order-confirmation-grid.component/style/_theme.scss +5 -0
  146. package/lib/component/order-confirmation-grid.component/style/material.scss +4 -0
  147. package/lib/component/order-grid/order-grid.component.d.ts +23 -0
  148. package/lib/component/order-grid/order-grid.module.d.ts +2 -0
  149. package/lib/component/order-grid/style/_layout.scss +21 -0
  150. package/lib/component/order-grid/style/_material-definition.scss +2 -0
  151. package/lib/component/order-grid/style/_theme.scss +6 -0
  152. package/lib/component/order-grid/style/material.scss +4 -0
  153. package/lib/component/payment/payment.component.d.ts +18 -0
  154. package/lib/component/payment/payment.module.d.ts +2 -0
  155. package/lib/component/payment/style/_layout.scss +54 -0
  156. package/lib/component/payment/style/_material-definition.scss +17 -0
  157. package/lib/component/payment/style/_theme.scss +16 -0
  158. package/lib/component/payment/style/material.scss +5 -0
  159. package/lib/component/payment-tile/payment-tile.component.d.ts +9 -0
  160. package/lib/component/payment-tile/payment-tile.module.d.ts +2 -0
  161. package/lib/component/payment-tile/style/_layout.scss +22 -0
  162. package/lib/component/{service-order/transaction-edit-article-text/transaction-edit-article-text.component.scss → payment-tile/style/_material-definition.scss} +0 -0
  163. package/lib/component/payment-tile/style/_theme.scss +6 -0
  164. package/lib/component/payment-tile/style/material.scss +5 -0
  165. package/lib/component/relation-address/style/_layout.scss +5 -0
  166. package/lib/component/relation-address-tile/relation-address-tile.component.d.ts +1 -0
  167. package/lib/component/relation-address-tile/style/_layout.scss +0 -21
  168. package/lib/component/relation-address-tile/style/_material-definition.scss +2 -1
  169. package/lib/component/relation-address-tile/style/_theme.scss +0 -30
  170. package/lib/component/relation-address-tile/style/material.scss +1 -0
  171. package/lib/component/seller-information/seller-information.component.d.ts +13 -0
  172. package/lib/component/seller-information/seller-information.module.d.ts +2 -0
  173. package/lib/component/seller-information/style/_layout.scss +21 -0
  174. package/lib/component/seller-information/style/_material-definition.scss +2 -0
  175. package/lib/component/seller-information/style/_theme.scss +7 -0
  176. package/lib/component/seller-information/style/material.scss +4 -0
  177. package/lib/component/shopping-cart-preview/shopping-cart-preview.component.d.ts +2 -0
  178. package/lib/component/shopping-cart-preview/style/_layout.scss +6 -2
  179. package/lib/component/shopping-cart-preview/style/_material-definition.scss +1 -1
  180. package/lib/component/stepper/component/stepper-step.component.d.ts +1 -1
  181. package/lib/component/stepper/stepper.component.d.ts +10 -5
  182. package/lib/component/stepper/style/_layout.scss +52 -20
  183. package/lib/component/stepper/style/_material-definition.scss +9 -2
  184. package/lib/component/stepper/style/_theme.scss +36 -0
  185. package/lib/component/tile/style/_layout.scss +36 -0
  186. package/lib/component/tile/style/_material-definition.scss +16 -0
  187. package/lib/component/tile/style/_theme.scss +36 -0
  188. package/lib/component/tile/style/material.scss +4 -0
  189. package/lib/component/tile/tile.component.d.ts +6 -0
  190. package/lib/component/tile/tile.module.d.ts +2 -0
  191. package/lib/component/transaction/style/_layout.scss +6 -0
  192. package/lib/component/transaction/style/material.scss +3 -0
  193. package/lib/component/transaction/transaction.component.d.ts +16 -1
  194. package/lib/component/transaction-commit-bar/style/_layout.scss +16 -0
  195. package/lib/component/transaction-commit-bar/style/_material-definition.scss +1 -0
  196. package/lib/component/transaction-commit-bar/style/_theme.scss +7 -0
  197. package/lib/component/transaction-commit-bar/style/material.scss +4 -0
  198. package/lib/component/transaction-commit-bar/transaction-commit-bar.component.d.ts +11 -0
  199. package/lib/component/transaction-commit-bar/transaction-commit-bar.module.d.ts +2 -0
  200. package/lib/component/transaction-confirmation-history/style/_layout.scss +7 -0
  201. package/lib/component/transaction-confirmation-history/style/_material-definition.scss +1 -0
  202. package/lib/component/transaction-confirmation-history/style/_theme.scss +7 -0
  203. package/lib/component/transaction-confirmation-history/style/material.scss +4 -0
  204. package/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.d.ts +5 -0
  205. package/lib/component/transaction-confirmation-history/transaction-confirmation-history.module.d.ts +2 -0
  206. package/lib/component/transaction-header/transaction-header.component.d.ts +4 -1
  207. package/lib/component/transaction-history-grid/style/_layout.scss +7 -0
  208. package/lib/component/transaction-history-grid/style/_material-definition.scss +0 -0
  209. package/lib/component/transaction-history-grid/style/_theme.scss +7 -0
  210. package/lib/component/transaction-history-grid/style/material.scss +4 -0
  211. package/lib/component/transaction-history-grid/transaction-history-grid.component.d.ts +14 -0
  212. package/lib/component/transaction-history-grid/transaction-history-grid.module.d.ts +2 -0
  213. package/lib/component/transaction-history-grid-status/style/_layout.scss +28 -0
  214. package/lib/component/{service-order/transaction-sidebar/transaction-line-accordion.component.scss → transaction-history-grid-status/style/_material-definition.scss} +0 -0
  215. package/lib/component/transaction-history-grid-status/style/_theme.scss +7 -0
  216. package/lib/component/transaction-history-grid-status/style/material.scss +4 -0
  217. package/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.d.ts +9 -0
  218. package/lib/component/transaction-history-grid-status/transaction-history-grid-status.module.d.ts +2 -0
  219. package/lib/component/transaction-line/style/_theme.scss +5 -0
  220. package/lib/component/transaction-line/style/material.scss +1 -0
  221. package/lib/component/transaction-line/transaction-line.component.d.ts +8 -2
  222. package/lib/component/transaction-line-fields/transaction-line-commission-code.component.d.ts +12 -0
  223. package/lib/component/transaction-line-fields/transaction-line-commission-code.module.d.ts +2 -0
  224. package/lib/component/transaction-line-fields/transaction-line-delivery-date.component.d.ts +7 -0
  225. package/lib/component/transaction-line-fields/transaction-line-delivery-date.module.d.ts +2 -0
  226. package/lib/component/transaction-line-fields/transaction-line-delivery-method.component.d.ts +12 -0
  227. package/lib/component/transaction-line-fields/transaction-line-delivery-method.module.d.ts +2 -0
  228. package/lib/component/transaction-line-fields/transaction-line-discount-amount.component.d.ts +10 -0
  229. package/lib/component/transaction-line-fields/transaction-line-discount-amount.module.d.ts +2 -0
  230. package/lib/component/transaction-line-fields/transaction-line-fields-base.component.d.ts +6 -0
  231. package/lib/component/transaction-line-fields/transaction-line-line-discount.component.d.ts +10 -0
  232. package/lib/component/transaction-line-fields/transaction-line-line-discount.module.d.ts +2 -0
  233. package/lib/component/transaction-line-fields/transaction-line-price-list.component.d.ts +12 -0
  234. package/lib/component/transaction-line-fields/transaction-line-price-list.module.d.ts +2 -0
  235. package/lib/component/transaction-line-fields/transaction-line-price.component.d.ts +10 -0
  236. package/lib/component/transaction-line-fields/transaction-line-price.module.d.ts +2 -0
  237. package/lib/component/transaction-line-fields/transaction-line-quantity.component.d.ts +7 -0
  238. package/lib/component/transaction-line-fields/transaction-line-quantity.module.d.ts +2 -0
  239. package/lib/component/transaction-line-fields/transaction-line-quantum-discount.component.d.ts +10 -0
  240. package/lib/component/transaction-line-fields/transaction-line-quantum-discount.module.d.ts +2 -0
  241. package/lib/component/transaction-line-fields/transaction-line-reference.component.d.ts +10 -0
  242. package/lib/component/transaction-line-fields/transaction-line-reference.module.d.ts +2 -0
  243. package/lib/component/transaction-line-fields/transaction-line-special-discount.component.d.ts +10 -0
  244. package/lib/component/transaction-line-fields/transaction-line-special-discount.module.d.ts +2 -0
  245. package/lib/component/transaction-line-fields/transaction-line-vat.component.d.ts +12 -0
  246. package/lib/component/transaction-line-fields/transaction-line-vat.module.d.ts +2 -0
  247. package/lib/component/transaction-line-fields/transaction-line-warehouse.component.d.ts +12 -0
  248. package/lib/component/transaction-line-fields/transaction-line-warehouse.module.d.ts +2 -0
  249. package/lib/component/transaction-line-side-panel/style/_layout.scss +64 -0
  250. package/lib/component/transaction-line-side-panel/style/_material-definition.scss +8 -0
  251. package/lib/component/transaction-line-side-panel/style/_theme.scss +9 -0
  252. package/lib/component/transaction-line-side-panel/style/material.scss +9 -0
  253. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.d.ts +18 -0
  254. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.d.ts +2 -0
  255. package/lib/component/transaction-line-side-panel-default/style/_layout.scss +29 -0
  256. package/lib/component/transaction-line-side-panel-default/style/_material-definition.scss +10 -0
  257. package/lib/component/transaction-line-side-panel-default/style/_theme.scss +7 -0
  258. package/lib/component/transaction-line-side-panel-default/style/material.scss +4 -0
  259. package/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.component.d.ts +16 -0
  260. package/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.module.d.ts +2 -0
  261. package/lib/component/transaction-lines/transaction-lines.component.d.ts +6 -0
  262. package/lib/component/transaction-lines-grid/transaction-lines-grid.component.d.ts +4 -1
  263. package/lib/component/transaction-nav-bar/style/_layout.scss +13 -0
  264. package/lib/component/transaction-nav-bar/style/_material-definition.scss +1 -0
  265. package/lib/component/transaction-nav-bar/style/_theme.scss +7 -0
  266. package/lib/component/transaction-nav-bar/style/material.scss +4 -0
  267. package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.d.ts +14 -0
  268. package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.scss +23 -0
  269. package/lib/component/transaction-nav-bar/transaction-nav-bar.component.d.ts +18 -0
  270. package/lib/component/transaction-nav-bar/transaction-nav-bar.module.d.ts +2 -0
  271. package/lib/component/transaction-receiving-goods-details/style/_layout.scss +38 -0
  272. package/lib/component/transaction-receiving-goods-details/style/_material-definition.scss +1 -0
  273. package/lib/component/transaction-receiving-goods-details/style/_theme.scss +7 -0
  274. package/lib/component/transaction-receiving-goods-details/style/material.scss +4 -0
  275. package/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.d.ts +6 -0
  276. package/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.module.d.ts +2 -0
  277. package/lib/component/transaction-receiving-goods-history/style/_layout.scss +7 -0
  278. package/lib/component/transaction-receiving-goods-history/style/_material-definition.scss +1 -0
  279. package/lib/component/transaction-receiving-goods-history/style/_theme.scss +7 -0
  280. package/lib/component/transaction-receiving-goods-history/style/material.scss +4 -0
  281. package/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.d.ts +5 -0
  282. package/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.module.d.ts +2 -0
  283. package/lib/enum/icon.enum.d.ts +12 -1
  284. package/lib/enum/status-type.enum.d.ts +3 -0
  285. package/lib/enum/tab-category.enum.d.ts +8 -0
  286. package/lib/model/delivery-type.d.ts +7 -0
  287. package/lib/service/dialog.service.d.ts +1 -0
  288. package/lib/service/ione-connector-adapter.service.d.ts +27 -8
  289. package/lib/service/pending-reason.service.d.ts +3 -2
  290. package/lib/service/transaction.service.d.ts +25 -9
  291. package/lib/style/_variables.scss +10 -2
  292. package/package.json +2 -2
  293. package/lib/component/service-order/service-order.component.scss +0 -154
  294. package/lib/component/service-order/summary/transaction-delivery-summary.component.scss +0 -22
  295. package/lib/component/service-order/summary/transaction-summary-block.component.scss +0 -109
  296. package/lib/component/service-order/transaction-manager/transaction-manager.component.scss +0 -54
  297. package/lib/component/service-order/transaction-order-line-view/transaction-order-line-view.component.scss +0 -90
  298. package/lib/component/service-order/transaction-order-lines/transaction-order-lines.component.scss +0 -85
  299. package/lib/component/service-order/transaction-order-totals/transaction-order-totals.component.scss +0 -26
  300. package/lib/component/service-order/transaction-relation/transaction-relation-edit.component.scss +0 -24
  301. package/lib/component/service-order/transaction-sidebar/transaction-sidebar-right.component.scss +0 -17
  302. package/lib/component/service-order/warehouse/warehouse.component.scss +0 -54
@@ -9,16 +9,19 @@ import { AddressType } from "@colijnit/transactionapi/build/enum/address-type.en
9
9
  import { GenderType } from "@colijnit/transactionapi/build/enum/gender-type.enum";
10
10
  import { TransactionService } from "../../../service/transaction.service";
11
11
  import { BusinessObjectUtils } from "@colijnit/transactionapi/build/utils/business-object-utils";
12
- import { FormComponent } from "@colijnit/corecomponents_v12";
12
+ import { FormComponent, FormMasterService } from "@colijnit/corecomponents_v12";
13
13
  import { FunctionUtils } from "@colijnit/transactionapi/build/utils/function-utils";
14
14
  import { ObjectUtils } from "@colijnit/transactionapi/build/utils/object-utils";
15
15
  import { Address } from "@colijnit/transactionapi/build/model/address.bo";
16
16
  import { animate, state, style, transition, trigger } from "@angular/animations";
17
- import { FormMasterService } from "@colijnit/corecomponents_v12";
17
+ import { BusinessObjectFactory } from "../../../factory/business-object-factory";
18
+ import { Icon } from "../../../enum/icon.enum";
18
19
  export class CheckoutOverviewRelationEditComponent {
19
- constructor(_service, _formMaster) {
20
+ constructor(_service, _formMaster, _boFactory) {
20
21
  this._service = _service;
21
22
  this._formMaster = _formMaster;
23
+ this._boFactory = _boFactory;
24
+ this.icons = Icon;
22
25
  this.validSubmit = new EventEmitter();
23
26
  this.invalidSubmit = new EventEmitter();
24
27
  this.relationChange = new EventEmitter();
@@ -30,6 +33,13 @@ export class CheckoutOverviewRelationEditComponent {
30
33
  this.relationSuggestions = [];
31
34
  this.showRelationSidebar = false;
32
35
  this.inviteToAccount = false;
36
+ this.addresses = [];
37
+ this.deliveryAddressIdx = 0;
38
+ this.invoiceAddressIdx = 0;
39
+ this.invoiceAddressSameAsDeliveryAddress = true;
40
+ this.editAddressType = AddressType.DeliveryAddress;
41
+ this.showSelectAddressDialog = false;
42
+ this.showCreateAddressDialog = false;
33
43
  this.relType = RelationNameKind;
34
44
  this.genderType = GenderType;
35
45
  this._relation = NULL_RELATION_OBJECT;
@@ -82,6 +92,70 @@ export class CheckoutOverviewRelationEditComponent {
82
92
  // return this.relationForm.submit();
83
93
  return this._formMaster.submitSlaves();
84
94
  }
95
+ showNewAddressDialog(deliveryAddress = true) {
96
+ this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
97
+ this.showCreateAddressDialog = true;
98
+ }
99
+ showEditAddressDialog(deliveryAddress = true) {
100
+ this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
101
+ this.showSelectAddressDialog = true;
102
+ }
103
+ setIndexDeliveryAddress(idx) {
104
+ this.deliveryAddressIdx = idx;
105
+ this.editAddressType = AddressType.DeliveryAddress;
106
+ this.selectAddress(this.relation.addresses[idx]);
107
+ }
108
+ setIndexInvoiceAddress(idx) {
109
+ this.invoiceAddressIdx = idx;
110
+ this.editAddressType = AddressType.BillingAddress;
111
+ this.selectAddress(this.relation.addresses[idx]);
112
+ }
113
+ editAddress(addr) {
114
+ this.addressToEdit = this._boFactory.makeWithRawBackendData(Address, addr);
115
+ this.showEditAddressDialog();
116
+ }
117
+ checkSameAddress(checked) {
118
+ if (checked) {
119
+ this.editAddressType = AddressType.DeliveryAddress;
120
+ this.selectAddress(this.deliveryAddress);
121
+ }
122
+ }
123
+ saveNewAddress(address) {
124
+ address.addressType = this.editAddressType;
125
+ this.relation.addresses.push(address);
126
+ this.selectAddress(address);
127
+ this.showCreateAddressDialog = false;
128
+ }
129
+ saveAddress(address) {
130
+ const idx = this.relation.addresses.findIndex(a => a.nawNr === address.nawNr);
131
+ if (idx > -1) {
132
+ this.relation.addresses[idx] = this._boFactory.makeWithRawBackendData(Address, address);
133
+ }
134
+ this.showSelectAddressDialog = false;
135
+ }
136
+ selectAddress(address) {
137
+ if (!this.deliveryOptionsRequest) {
138
+ return;
139
+ }
140
+ if (!address) {
141
+ address = this._service.getFirstAddress(this.relation);
142
+ }
143
+ if (!address) {
144
+ return;
145
+ }
146
+ this._setCountryNameToAddress(address);
147
+ if (this.editAddressType === AddressType.DeliveryAddress) {
148
+ this.deliveryOptionsRequest.transactionAddress = address.nawNr;
149
+ this.deliveryAddress = address;
150
+ this.deliveryAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.deliveryAddress.nawNr);
151
+ }
152
+ if (this.invoiceAddressSameAsDeliveryAddress || this.editAddressType !== AddressType.DeliveryAddress) {
153
+ this.deliveryOptionsRequest.invoiceAddress = address.nawNr;
154
+ this.invoiceAddress = address;
155
+ this.invoiceAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.invoiceAddress.nawNr);
156
+ }
157
+ this.showSelectAddressDialog = false;
158
+ }
85
159
  preparePrimaryEmail() {
86
160
  if (this._relation) {
87
161
  this.emailAddress = this._relation.getLowestSequenceOfContactOptionsWithType(CommunicationType.Email);
@@ -142,6 +216,11 @@ export class CheckoutOverviewRelationEditComponent {
142
216
  }
143
217
  this._relationNameChangeHandler.call(this);
144
218
  }
219
+ checkVisibilitySuggestions() {
220
+ if (this._relation.firstName && this._relation.familyName) {
221
+ this.hideSidebar();
222
+ }
223
+ }
145
224
  onRelationSuggestionClick(relationSuggested) {
146
225
  return __awaiter(this, void 0, void 0, function* () {
147
226
  if (relationSuggested) {
@@ -164,8 +243,11 @@ export class CheckoutOverviewRelationEditComponent {
164
243
  showSidebar() {
165
244
  this.showRelationSidebar = true;
166
245
  }
246
+ // Hide sidebar with a little timeout to prevent missing the click
167
247
  hideSidebar() {
168
- this.showRelationSidebar = false;
248
+ setTimeout(() => {
249
+ this.showRelationSidebar = false;
250
+ }, 200);
169
251
  }
170
252
  _initForm() {
171
253
  if (this.relationForm) {
@@ -194,133 +276,197 @@ export class CheckoutOverviewRelationEditComponent {
194
276
  this.relationSuggestions = yield this._service.getRelationListObjects(relationRequest);
195
277
  });
196
278
  }
279
+ _setCountryNameToAddress(address) {
280
+ return __awaiter(this, void 0, void 0, function* () {
281
+ if (address.countryId && !address.countryName) {
282
+ const country = yield this._service.getCountry(address.countryId);
283
+ address.countryName = country.description;
284
+ }
285
+ });
286
+ }
197
287
  }
198
288
  CheckoutOverviewRelationEditComponent.decorators = [
199
289
  { type: Component, args: [{
200
290
  selector: "co-checkout-overview-relation-edit",
201
291
  template: `
202
- <co-form>
203
- <div class="checkout-form-wrapper">
204
- <div class="checkout-label-column">
205
- <span>01</span>
206
- <span class="label" [textContent]="'PERSONAL_DATA' | localize"></span>
207
- </div>
208
- <div class="checkout-data-column">
209
- <div class="checkout-data-row">
210
- <co-input-radio-button class="default-width"
211
- [name]="'type'"
212
- [label]="'PRIVATE_PERSON' | localize"
213
- [value]="relType.Private"
214
- [checked]="relation.type === relType.Private"
215
- (modelChange)="changeRelationType(relType.Private)"
216
- ></co-input-radio-button>
217
- <co-input-radio-button class="default-width"
218
- [name]="'type'"
219
- [label]="'COMPANY' | localize"
220
- [value]="relType.Company"
221
- [(model)]="relation.type"
222
- [checked]="relation.type === relType.Company"
223
- (modelChange)="changeRelationType(relType.Company)"
224
- ></co-input-radio-button>
292
+ <div class="relation-edit-content">
293
+ <co-form>
294
+ <div class="checkout-form-wrapper">
295
+ <div class="checkout-label-column">
296
+ <span>01</span>
297
+ <span class="label" [textContent]="'PERSONAL_DATA' | localize"></span>
225
298
  </div>
226
- <div class="checkout-data-row">
227
- <relation-customer-groups [(model)]="relation.customerGroup" required></relation-customer-groups>
228
- </div>
229
- <div *ngIf="relation.type === relType.Private" class="collapseable" @showHidePrivateRelationFields>
230
- <div class="checkout-data-row">
231
- <co-input-text
232
- class="checkout-first-name"
233
- [(model)]="relation.firstName"
234
- [placeholder]="'FIRST_NAME' | localize"
235
- (modelChange)="firstNameChange($event)"
236
- [required]="true"
237
- ></co-input-text>
238
- <co-input-text
239
- class="checkout-prefix-name default-width"
240
- [(model)]="relation.prefix"
241
- [placeholder]="'PREFIX' | localize"
242
- ></co-input-text>
243
- <co-input-text
244
- class="checkout-last-name"
245
- [(model)]="relation.familyName"
246
- [placeholder]="'LAST_NAME' | localize"
247
- (modelChange)="familyNameChange($event)"
248
- [required]="true"></co-input-text>
249
- </div>
299
+ <div class="checkout-data-column">
250
300
  <div class="checkout-data-row">
251
301
  <co-input-radio-button class="default-width"
252
- [name]="'gender'"
253
- [label]="'MALE' | localize"
254
- [value]="genderType.Male"
255
- [checked]="relation.gender === genderType.Male"
256
- (modelChange)="changeGenderType(genderType.Male)"
257
- ></co-input-radio-button>
258
- <co-input-radio-button class="default-width"
259
- [name]="'gender'"
260
- [label]="'FEMALE' | localize "
261
- [value]="genderType.Female"
262
- [checked]="relation.gender === genderType.Female"
263
- (modelChange)="changeGenderType(genderType.Female)"
302
+ [name]="'type'"
303
+ [label]="'PRIVATE_PERSON' | localize"
304
+ [value]="relType.Private"
305
+ [checked]="relation.type === relType.Private"
306
+ (modelChange)="changeRelationType(relType.Private)"
264
307
  ></co-input-radio-button>
265
308
  <co-input-radio-button class="default-width"
266
- [name]="'gender'"
267
- [label]="'UNKNOWN' | localize"
268
- [value]="genderType.Unspecified"
269
- [checked]="relation.gender === genderType.Unspecified"
270
- (modelChange)="changeGenderType(genderType.Unspecified)"
309
+ [name]="'type'"
310
+ [label]="'COMPANY' | localize"
311
+ [value]="relType.Company"
312
+ [(model)]="relation.type"
313
+ [checked]="relation.type === relType.Company"
314
+ (modelChange)="changeRelationType(relType.Company)"
271
315
  ></co-input-radio-button>
272
316
  </div>
273
317
  <div class="checkout-data-row">
274
- <co-input-date [placeholder]="'DATE_OF_BIRTH' | localize " [(model)]="dateOfBirth" [required]="true"></co-input-date>
275
- <co-input-text [(model)]="phoneNumber.value" [placeholder]="'PHONE_NO' | localize " [required]="true"></co-input-text>
318
+ <relation-customer-groups [(model)]="relation.customerGroup" required></relation-customer-groups>
319
+ </div>
320
+ <div *ngIf="relation.type === relType.Private" class="collapseable" @showHidePrivateRelationFields>
321
+ <div class="checkout-data-row">
322
+ <co-input-text
323
+ class="checkout-first-name"
324
+ [(model)]="relation.firstName"
325
+ [placeholder]="'FIRST_NAME' | localize"
326
+ (modelChange)="firstNameChange($event)"
327
+ (blur)="checkVisibilitySuggestions()"
328
+ [required]="true"
329
+ ></co-input-text>
330
+ <co-input-text
331
+ class="checkout-prefix-name default-width"
332
+ [(model)]="relation.prefix"
333
+ [placeholder]="'PREFIX' | localize"
334
+ ></co-input-text>
335
+ <co-input-text
336
+ class="checkout-last-name"
337
+ [(model)]="relation.familyName"
338
+ [placeholder]="'LAST_NAME' | localize"
339
+ (modelChange)="familyNameChange($event)"
340
+ (blur)="checkVisibilitySuggestions()"
341
+ [required]="true"></co-input-text>
342
+ </div>
343
+ <div class="checkout-data-row">
344
+ <co-input-radio-button class="default-width"
345
+ [name]="'gender'"
346
+ [label]="'MALE' | localize"
347
+ [value]="genderType.Male"
348
+ [checked]="relation.gender === genderType.Male"
349
+ (modelChange)="changeGenderType(genderType.Male)"
350
+ ></co-input-radio-button>
351
+ <co-input-radio-button class="default-width"
352
+ [name]="'gender'"
353
+ [label]="'FEMALE' | localize "
354
+ [value]="genderType.Female"
355
+ [checked]="relation.gender === genderType.Female"
356
+ (modelChange)="changeGenderType(genderType.Female)"
357
+ ></co-input-radio-button>
358
+ <co-input-radio-button class="default-width"
359
+ [name]="'gender'"
360
+ [label]="'UNKNOWN' | localize"
361
+ [value]="genderType.Unspecified"
362
+ [checked]="relation.gender === genderType.Unspecified"
363
+ (modelChange)="changeGenderType(genderType.Unspecified)"
364
+ ></co-input-radio-button>
365
+ </div>
366
+ <div class="checkout-data-row">
367
+ <co-input-date [placeholder]="'DATE_OF_BIRTH' | localize " [(model)]="dateOfBirth" [required]="true"></co-input-date>
368
+ </div>
369
+ </div>
370
+ <div *ngIf="relation?.type === relType.Company" class="checkout-data-row collapseable" @showHideCompanyRelationFields>
371
+ <co-input-text [(model)]="relation.familyName" [placeholder]="'COMPANY_NAME' | localize" [required]="true"></co-input-text>
276
372
  </div>
373
+ <co-relation-address [address]="editFirstAddress" [showButtons]="false"></co-relation-address>
277
374
  </div>
278
- <div *ngIf="relation?.type === relType.Company" class="checkout-data-row collapseable" @showHideCompanyRelationFields>
279
- <co-input-text [(model)]="relation.familyName" [placeholder]="'COMPANY_NAME' | localize" [required]="true"></co-input-text>
375
+ <div class="checkout-data-column">
376
+ <div class="checkout-data-row">
377
+ <co-carousel-3d *ngIf="relation.addresses && relation.addresses.length > 1"
378
+ [tileWidth]="200"
379
+ [tileHeight]="100"
380
+ [selectedIndex]="deliveryAddressIdx"
381
+ (indexSelected)="setIndexDeliveryAddress($event)">
382
+ <co-relation-address-tile #carouselItem *ngFor="let address of relation.addresses; let index = index"
383
+ [address]="address"
384
+ [selected]="deliveryAddressIdx === index"
385
+ (editAddressClicked)="editAddress($event)"
386
+ ></co-relation-address-tile>
387
+ </co-carousel-3d>
388
+ </div>
389
+ <div class="checkout-data-row">
390
+ <div class="relation-address-new">
391
+ <icon class="relation-address-icon" [icon]="icons.ArrowPointRight"></icon>
392
+ <div [textContent]="'ADDRESS_ADD' | localize" (click)="showNewAddressDialog()"></div>
393
+ </div>
394
+ </div>
280
395
  </div>
281
- </div>
282
- <div class="checkout-label-column">
283
- <span>02</span>
284
- <span class="label" [textContent]="'DELIVERY_ADDRESS' | localize"></span>
285
- </div>
286
- <div class="checkout-data-column">
287
- <co-relation-address [address]="editFirstAddress" [showButtons]="false"></co-relation-address>
288
- </div>
289
- <div class="checkout-label-column">
290
- <span>03</span>
291
- <span class="label" [textContent]="'LOGIN_DETAILS' | localize"></span>
292
- <span class="label-description" [textContent]="'ACCOUNT_EXPLANATION' | localize"></span>
293
- </div>
294
- <div class="checkout-data-column">
295
- <div class="checkout-data-row">
296
- <co-input-text [(model)]="emailAddress.value" [placeholder]="'EMAIL_ADDRESS' | localize " [type]="'email'" [required]="true"></co-input-text>
396
+
397
+ <div class="checkout-label-column">
398
+ <span>02</span>
399
+ <span class="label" [textContent]="'INVOICE_ADDRESS' | localize"></span>
297
400
  </div>
298
- <div *ngIf="!applicationUser" class="checkout-data-row">
299
- <co-input-text [(model)]="accountPassword" [placeholder]="'PASSWORD' | localize " [type]="'password'" [required]="true"></co-input-text>
401
+ <div class="checkout-data-column">
402
+ <div class="checkout-data-row">
403
+ <co-input-checkbox [(model)]="invoiceAddressSameAsDeliveryAddress" (modelChange)="checkSameAddress($event)" [label]="'SAME_AS_DELIVERY' | localize"></co-input-checkbox>
404
+ </div>
405
+ <div class="overview-delivery-invoice-address" *ngIf="!invoiceAddressSameAsDeliveryAddress" @showHideInvoiceAddress>
406
+ <div class="checkout-data-row">
407
+ <co-carousel-3d *ngIf="relation.addresses && relation.addresses.length > 1"
408
+ [tileWidth]="200"
409
+ [tileHeight]="100"
410
+ [selectedIndex]="invoiceAddressIdx"
411
+ (indexSelected)="setIndexInvoiceAddress($event)">
412
+ <co-relation-address-tile #carouselItem *ngFor="let address of relation.addresses; let index = index"
413
+ [address]="address"
414
+ [selected]="invoiceAddressIdx === index"
415
+ (editAddressClicked)="editAddress($event)"
416
+ ></co-relation-address-tile>
417
+ </co-carousel-3d>
418
+ </div>
419
+ <div class="checkout-data-row">
420
+ <div class="relation-address-new">
421
+ <icon class="relation-address-icon" [icon]="icons.ArrowPointRight"></icon>
422
+ <div [textContent]="'ADDRESS_ADD' | localize" (click)="showNewAddressDialog()"></div>
423
+ </div>
424
+ </div>
425
+ </div>
300
426
  </div>
301
- <div *ngIf="applicationUser" class="checkout-data-row">
302
- <co-input-checkbox [label]="'INVITE_TO_ACCOUNT' | localize" [(model)]="inviteToAccount"></co-input-checkbox>
427
+ <div class="checkout-label-column">
428
+ <span>03</span>
429
+ <span class="label" [textContent]="'CONTACT_DETAILS' | localize"></span>
303
430
  </div>
304
- </div>
305
- <div class="checkout-label-column">
306
- <span>04</span>
307
- <span class="label" [textContent]="'PRIVACY_PREFERENCES' | localize"></span>
308
- </div>
309
- <div class="checkout-data-column">
310
- <div class="two-column-grid">
311
- <ng-container *ngFor="let privacySetting of privacySettings">
312
- <co-input-checkbox class="first-column"
313
- [label]="privacySetting.description"
314
- [model]="isShared(privacySetting)"
315
- (modelChange)="changePrivacySetting(privacySetting, $event)"
316
- ></co-input-checkbox>
317
- <span class="second-column" [textContent]="privacySetting.explanation"></span>
318
- </ng-container>
431
+ <div class="checkout-data-column">
432
+ <div class="checkout-data-row">
433
+ <co-input-text [(model)]="phoneNumber.value" [placeholder]="'PHONE_NO' | localize " [required]="true"></co-input-text>
434
+ </div>
435
+ <div class="checkout-data-row">
436
+ <co-input-text [(model)]="emailAddress.value" [placeholder]="'EMAIL_ADDRESS' | localize " [type]="'email'" [required]="true"></co-input-text>
437
+ </div>
438
+ <!--
439
+ </div>
440
+ <div class="checkout-label-column">
441
+ <span>04</span>
442
+ <span class="label" [textContent]="'PASSWORD' | localize"></span>
443
+ <span class="label-description" [textContent]="'ACCOUNT_EXPLANATION' | localize"></span>
444
+ </div>
445
+ <div class="checkout-data-column">
446
+ -->
447
+ <div class="checkout-data-row">
448
+ <co-input-checkbox [label]="'INVITE_TO_ACCOUNT' | localize" [(model)]="inviteToAccount"></co-input-checkbox>
449
+ </div>
450
+ </div>
451
+ <div class="checkout-label-column">
452
+ <span>04</span>
453
+ <span class="label" [textContent]="'PRIVACY_PREFERENCES' | localize"></span>
454
+ </div>
455
+ <div class="checkout-data-column">
456
+ <div class="two-column-grid">
457
+ <ng-container *ngFor="let privacySetting of privacySettings">
458
+ <co-input-checkbox class="first-column"
459
+ [label]="privacySetting.description"
460
+ [model]="isShared(privacySetting)"
461
+ (modelChange)="changePrivacySetting(privacySetting, $event)"
462
+ ></co-input-checkbox>
463
+ <span class="second-column" [textContent]="privacySetting.explanation"></span>
464
+ </ng-container>
465
+ </div>
319
466
  </div>
320
467
  </div>
321
- </div>
322
- </co-form>
323
-
468
+ </co-form>
469
+ </div>
324
470
  <div class="suggestions-sidebar" *ngIf="showRelationSidebar" @showHideSidebar>
325
471
  <div class="relation-sidebar-header">
326
472
  <label class="checkout-label-h3" [textContent]="'SUGGESTIONS' | localize"></label>
@@ -330,6 +476,19 @@ CheckoutOverviewRelationEditComponent.decorators = [
330
476
  (suggestionSelected)="onRelationSuggestionClick($event)"
331
477
  ></co-checkout-relation-suggestions-list>
332
478
  </div>
479
+ <co-dialog *ngIf="showCreateAddressDialog">
480
+ <co-relation-address
481
+ (saveClick)="saveNewAddress($event)"
482
+ (cancelClick)="showCreateAddressDialog = false"
483
+ ></co-relation-address>
484
+ </co-dialog>
485
+ <co-dialog *ngIf="showSelectAddressDialog && addressToEdit">
486
+ <co-relation-address
487
+ [address]="addressToEdit"
488
+ (saveClick)="saveAddress($event)"
489
+ (cancelClick)="showSelectAddressDialog = false"
490
+ ></co-relation-address>
491
+ </co-dialog>
333
492
  `,
334
493
  providers: [
335
494
  FormMasterService
@@ -351,6 +510,12 @@ CheckoutOverviewRelationEditComponent.decorators = [
351
510
  state("void", style({ transform: "translateX(100%)" })),
352
511
  state("*", style({ transform: "translateX(0)" })),
353
512
  transition("void <=> *", animate("200ms ease-in-out"))
513
+ ]),
514
+ trigger("showHideInvoiceAddress", [
515
+ state("void", style({ height: 0, opacity: 0 })),
516
+ state("*", style({ height: "*", opacity: 1 })),
517
+ transition("void => *", animate("200ms ease-in-out")),
518
+ transition("* => void", animate("200ms ease-out"))
354
519
  ])
355
520
  ],
356
521
  encapsulation: ViewEncapsulation.None
@@ -358,14 +523,16 @@ CheckoutOverviewRelationEditComponent.decorators = [
358
523
  ];
359
524
  CheckoutOverviewRelationEditComponent.ctorParameters = () => [
360
525
  { type: TransactionService },
361
- { type: FormMasterService }
526
+ { type: FormMasterService },
527
+ { type: BusinessObjectFactory }
362
528
  ];
363
529
  CheckoutOverviewRelationEditComponent.propDecorators = {
364
530
  relationForm: [{ type: ViewChild, args: [FormComponent, { static: true },] }],
365
531
  relation: [{ type: Input }],
532
+ deliveryOptionsRequest: [{ type: Input }],
366
533
  validSubmit: [{ type: Output }],
367
534
  invalidSubmit: [{ type: Output }],
368
535
  relationChange: [{ type: Output }],
369
536
  showClass: [{ type: HostBinding, args: ["class.co-checkout-overview-relation-edit",] }]
370
537
  };
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFOUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUM3RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDbEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBRzlF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RSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUExS08sa0JBQWtCO1lBVWxCLGlCQUFpQjs7OzJCQWtLdEIsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7dUJBR3ZDLEtBQUs7MEJBUUwsTUFBTTs0QkFHTixNQUFNOzZCQUdOLE1BQU07d0JBR04sV0FBVyxTQUFDLDBDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1JlbGF0aW9uQW55VHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZVwiO1xuaW1wb3J0IHtOVUxMX1JFTEFUSU9OX09CSkVDVH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9udWwtcmVsYXRpb24tb2JqZWN0XCI7XG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ib1wiO1xuaW1wb3J0IHtDb21tdW5pY2F0aW9uVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2NvbW11bmljYXRpb24tdHlwZS5lbnVtXCI7XG5pbXBvcnQge0NvbnRhY3RPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY29udGFjdC1vcHRpb24uYm9cIjtcbmltcG9ydCB7aXNOaWxsfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb25cIjtcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3JlbGF0aW9uLW5hbWUta2luZC5lbnVtXCI7XG5pbXBvcnQge0FkZHJlc3NUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vYWRkcmVzcy10eXBlLmVudW1cIjtcbmltcG9ydCB7UmVsYXRpb25Qcml2YWN5U2V0dGluZ30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1wcml2YWN5LXNldHRpbmcuYm9cIjtcbmltcG9ydCB7R2VuZGVyVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2dlbmRlci10eXBlLmVudW1cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0VXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvYnVzaW5lc3Mtb2JqZWN0LXV0aWxzXCI7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyXCI7XG5pbXBvcnQge0Z1bmN0aW9uVXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvZnVuY3Rpb24tdXRpbHNcIjtcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvb2JqZWN0LXV0aWxzXCI7XG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtBZGRyZXNzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FkZHJlc3MuYm9cIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtGb3JtTWFzdGVyU2VydmljZX0gZnJvbSBcIkBjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvLWNoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8Y28tZm9ybT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1mb3JtLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgIDxzcGFuPjAxPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ1BFUlNPTkFMX0RBVEEnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gY2xhc3M9XCJkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3R5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidQUklWQVRFX1BFUlNPTicgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZWxUeXBlLlByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi50eXBlID09PSByZWxUeXBlLlByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiY2hhbmdlUmVsYXRpb25UeXBlKHJlbFR5cGUuUHJpdmF0ZSlcIlxuICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIndHlwZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NPTVBBTlknIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmVsVHlwZS5Db21wYW55XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicmVsYXRpb24udHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLnR5cGUgPT09IHJlbFR5cGUuQ29tcGFueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VSZWxhdGlvblR5cGUocmVsVHlwZS5Db21wYW55KVwiXG4gICAgICAgICAgICA+PC9jby1pbnB1dC1yYWRpby1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICA8cmVsYXRpb24tY3VzdG9tZXItZ3JvdXBzIFsobW9kZWwpXT1cInJlbGF0aW9uLmN1c3RvbWVyR3JvdXBcIiByZXF1aXJlZD48L3JlbGF0aW9uLWN1c3RvbWVyLWdyb3Vwcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVsYXRpb24udHlwZSA9PT0gcmVsVHlwZS5Qcml2YXRlXCIgY2xhc3M9XCJjb2xsYXBzZWFibGVcIiBAc2hvd0hpZGVQcml2YXRlUmVsYXRpb25GaWVsZHM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrb3V0LWZpcnN0LW5hbWVcIlxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInJlbGF0aW9uLmZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGSVJTVF9OQU1FJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiZmlyc3ROYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrb3V0LXByZWZpeC1uYW1lIGRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInJlbGF0aW9uLnByZWZpeFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQUkVGSVgnIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tvdXQtbGFzdC1uYW1lXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJyZWxhdGlvbi5mYW1pbHlOYW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0xBU1RfTkFNRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImZhbWlseU5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZGVmYXVsdC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2dlbmRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInTUFMRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdlbmRlclR5cGUuTWFsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicmVsYXRpb24uZ2VuZGVyID09PSBnZW5kZXJUeXBlLk1hbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VHZW5kZXJUeXBlKGdlbmRlclR5cGUuTWFsZSlcIlxuICAgICAgICAgICAgICA+PC9jby1pbnB1dC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gY2xhc3M9XCJkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInZ2VuZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGRU1BTEUnIHwgbG9jYWxpemUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2VuZGVyVHlwZS5GZW1hbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLmdlbmRlciA9PT0gZ2VuZGVyVHlwZS5GZW1hbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VHZW5kZXJUeXBlKGdlbmRlclR5cGUuRmVtYWxlKVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidnZW5kZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VOS05PV04nIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZW5kZXJUeXBlLlVuc3BlY2lmaWVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi5nZW5kZXIgPT09IGdlbmRlclR5cGUuVW5zcGVjaWZpZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VHZW5kZXJUeXBlKGdlbmRlclR5cGUuVW5zcGVjaWZpZWQpXCJcbiAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWRhdGUgW3BsYWNlaG9sZGVyXT1cIidEQVRFX09GX0JJUlRIJyB8IGxvY2FsaXplIFwiIFsobW9kZWwpXT1cImRhdGVPZkJpcnRoXCIgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LWRhdGU+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFsobW9kZWwpXT1cInBob25lTnVtYmVyLnZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cIidQSE9ORV9OTycgfCBsb2NhbGl6ZSBcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZWxhdGlvbj8udHlwZSA9PT0gcmVsVHlwZS5Db21wYW55XCIgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvdyBjb2xsYXBzZWFibGVcIiBAc2hvd0hpZGVDb21wYW55UmVsYXRpb25GaWVsZHM+XG4gICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJyZWxhdGlvbi5mYW1pbHlOYW1lXCIgW3BsYWNlaG9sZGVyXT1cIidDT01QQU5ZX05BTUUnIHwgbG9jYWxpemVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICA8c3Bhbj4wMjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidERUxJVkVSWV9BRERSRVNTJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3MgW2FkZHJlc3NdPVwiZWRpdEZpcnN0QWRkcmVzc1wiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiPjwvY28tcmVsYXRpb24tYWRkcmVzcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICA8c3Bhbj4wMzwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidMT0dJTl9ERVRBSUxTJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ0FDQ09VTlRfRVhQTEFOQVRJT04nIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFsobW9kZWwpXT1cImVtYWlsQWRkcmVzcy52YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCInRU1BSUxfQUREUkVTUycgfCBsb2NhbGl6ZSBcIiBbdHlwZV09XCInZW1haWwnXCIgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFhcHBsaWNhdGlvblVzZXJcIiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJhY2NvdW50UGFzc3dvcmRcIiBbcGxhY2Vob2xkZXJdPVwiJ1BBU1NXT1JEJyB8IGxvY2FsaXplIFwiIFt0eXBlXT1cIidwYXNzd29yZCdcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwbGljYXRpb25Vc2VyXCIgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFtsYWJlbF09XCInSU5WSVRFX1RPX0FDQ09VTlQnIHwgbG9jYWxpemVcIiBbKG1vZGVsKV09XCJpbnZpdGVUb0FjY291bnRcIj48L2NvLWlucHV0LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgIDxzcGFuPjA0PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ1BSSVZBQ1lfUFJFRkVSRU5DRVMnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHdvLWNvbHVtbi1ncmlkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcml2YWN5U2V0dGluZyBvZiBwcml2YWN5U2V0dGluZ3NcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IGNsYXNzPVwiZmlyc3QtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJwcml2YWN5U2V0dGluZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiaXNTaGFyZWQocHJpdmFjeVNldHRpbmcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VQcml2YWN5U2V0dGluZyhwcml2YWN5U2V0dGluZywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY29uZC1jb2x1bW5cIiBbdGV4dENvbnRlbnRdPVwicHJpdmFjeVNldHRpbmcuZXhwbGFuYXRpb25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2NvLWZvcm0+XG5cbiAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbnMtc2lkZWJhclwiICpuZ0lmPVwic2hvd1JlbGF0aW9uU2lkZWJhclwiIEBzaG93SGlkZVNpZGViYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tc2lkZWJhci1oZWFkZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtaDNcIiBbdGV4dENvbnRlbnRdPVwiJ1NVR0dFU1RJT05TJyB8IGxvY2FsaXplXCI+PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGNvLWNoZWNrb3V0LXJlbGF0aW9uLXN1Z2dlc3Rpb25zLWxpc3RcbiAgICAgICAgW3N1Z2dlc3Rpb25zXT1cInJlbGF0aW9uU3VnZ2VzdGlvbnNcIlxuICAgICAgICAoc3VnZ2VzdGlvblNlbGVjdGVkKT1cIm9uUmVsYXRpb25TdWdnZXN0aW9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9jby1jaGVja291dC1yZWxhdGlvbi1zdWdnZXN0aW9ucy1saXN0PlxuICAgIDwvZGl2PlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICBGb3JtTWFzdGVyU2VydmljZVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInNob3dIaWRlUHJpdmF0ZVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlQ29tcGFueVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlU2lkZWJhclwiLCBbXG4gICAgICBzdGF0ZShcInZvaWRcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDEwMCUpXCJ9KSksXG4gICAgICBzdGF0ZShcIipcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCJ9KSksXG4gICAgICB0cmFuc2l0aW9uKFwidm9pZCA8PT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpXG4gICAgXSlcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dE92ZXJ2aWV3UmVsYXRpb25FZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZChGb3JtQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHJlbGF0aW9uRm9ybTogRm9ybUNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlbGF0aW9uKHZhbHVlOiBSZWxhdGlvbkFueVR5cGUpIHtcbiAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xuXG4gICAgdGhpcy5wcmVwYXJlUHJpbWFyeUVtYWlsKCk7XG4gICAgdGhpcy5wcmVwYXJlUHJpbWFyeVBob25lKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIHZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWxhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4oKTtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5jby1jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0XCIpXG4gIHB1YmxpYyBzaG93Q2xhc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybVJlbGF0aW9uOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGRhdGVPZkJpcnRoOiBEYXRlO1xuICBwdWJsaWMgYWNjb3VudFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgaGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBnZW5kZXI6IEdlbmRlclR5cGUgPSBHZW5kZXJUeXBlLlVuc3BlY2lmaWVkO1xuICBwdWJsaWMgZW1haWxBZGRyZXNzOiBDb250YWN0T3B0aW9uID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgcHVibGljIHBob25lTnVtYmVyOiBDb250YWN0T3B0aW9uID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgcHVibGljIHByaXZhY3lTZXR0aW5nczogUmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdO1xuICBwdWJsaWMgcmVsYXRpb25TdWdnZXN0aW9uczogUmVsYXRpb25MaXN0T2JqZWN0W10gPSBbXTtcbiAgcHVibGljIHNob3dSZWxhdGlvblNpZGViYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGludml0ZVRvQWNjb3VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSByZWxUeXBlOiB0eXBlb2YgUmVsYXRpb25OYW1lS2luZCA9IFJlbGF0aW9uTmFtZUtpbmQ7XG4gIHB1YmxpYyByZWFkb25seSBnZW5kZXJUeXBlOiB0eXBlb2YgR2VuZGVyVHlwZSA9IEdlbmRlclR5cGU7XG5cbiAgcHVibGljIGdldCByZWxhdGlvbigpOiBSZWxhdGlvbkFueVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVsYXRpb25Bc0N1c3RvbWVyKCk6IEN1c3RvbWVyRnVsbE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uICYmIHRoaXMuX3JlbGF0aW9uIGFzIEN1c3RvbWVyRnVsbE9iamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZWRpdEZpcnN0QWRkcmVzcygpOiBBZGRyZXNzIHtcbiAgICBjb25zdCBmaXJzdEFkZHJlc3M6IEFkZHJlc3MgPSB0aGlzLl9zZXJ2aWNlLmdldEZpcnN0QWRkcmVzcyh0aGlzLnJlbGF0aW9uKTtcbiAgICBpZiAoZmlyc3RBZGRyZXNzKSB7XG4gICAgICByZXR1cm4gZmlyc3RBZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZHJlc3M6IEFkZHJlc3MgPSBuZXcgQWRkcmVzcygpO1xuICAgICAgYWRkcmVzcy5hZGRyZXNzVHlwZSA9IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcztcbiAgICAgIGFkZHJlc3Muc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGFkZHJlc3Muc2VxdWVuY2UgPSB0aGlzLl9yZWxhdGlvbi5nZXROZXh0QWRkcmVzc1NlcXVlbmNlKCk7XG4gICAgICB0aGlzLl9yZWxhdGlvbi5hZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb25Vc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlLmFwcGxpY2F0aW9uVXNlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBOVUxMX1JFTEFUSU9OX09CSkVDVDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBUcmFuc2FjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybU1hc3RlcjogRm9ybU1hc3RlclNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9pbml0Rm9ybSgpO1xuICAgIHRoaXMuX3JlbGF0aW9uLnR5cGUgPSB0aGlzLnJlbFR5cGUuUHJpdmF0ZTtcbiAgICB0aGlzLl9yZWxhdGlvbi5nZW5kZXIgPSB0aGlzLmdlbmRlcjtcbiAgICBhd2FpdCB0aGlzLmxvYWRQcml2YWN5U2V0dGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgLy8gcmV0dXJuIHRoaXMucmVsYXRpb25Gb3JtLnN1Ym1pdCgpO1xuICAgIHJldHVybiB0aGlzLl9mb3JtTWFzdGVyLnN1Ym1pdFNsYXZlcygpO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVQcmltYXJ5RW1haWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gICAgICB0aGlzLmVtYWlsQWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmdldExvd2VzdFNlcXVlbmNlT2ZDb250YWN0T3B0aW9uc1dpdGhUeXBlKENvbW11bmljYXRpb25UeXBlLkVtYWlsKTtcbiAgICAgIGlmIChpc05pbGwodGhpcy5lbWFpbEFkZHJlc3MpKSB7XG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgICAgICAgdGhpcy5lbWFpbEFkZHJlc3MudHlwZSA9IENvbW11bmljYXRpb25UeXBlLkVtYWlsO1xuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcy5zZXF1ZW5jZSA9IDA7XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uLmFkZENvbnRhY3RPcHRpb24odGhpcy5lbWFpbEFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHRoaXMuX3RyYW5zYWN0aW9uU2VydmljZS5lbWFpbEFkZHJlc3MpIHtcbiAgICAgIC8vICAgdGhpcy5lbWFpbEFkZHJlc3MudmFsdWUgPSB0aGlzLl90cmFuc2FjdGlvblNlcnZpY2UuZW1haWxBZGRyZXNzO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlUHJpbWFyeVBob25lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5waG9uZU51bWJlciA9IHRoaXMuX3JlbGF0aW9uLmdldExvd2VzdFNlcXVlbmNlT2ZDb250YWN0T3B0aW9uc1dpdGhUeXBlKENvbW11bmljYXRpb25UeXBlLlRlbGVwaG9uZSk7XG4gICAgICBpZiAoaXNOaWxsKHRoaXMucGhvbmVOdW1iZXIpKSB7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSBuZXcgQ29udGFjdE9wdGlvbigpO1xuICAgICAgICB0aGlzLnBob25lTnVtYmVyLnR5cGUgPSBDb21tdW5pY2F0aW9uVHlwZS5UZWxlcGhvbmU7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIuc2VxdWVuY2UgPSAwO1xuICAgICAgICB0aGlzLl9yZWxhdGlvbi5hZGRDb250YWN0T3B0aW9uKHRoaXMucGhvbmVOdW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJpdmFjeVNldHRpbmdzID0gYXdhaXQgdGhpcy5fc2VydmljZS5nZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRNYXJrZXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fc2VydmljZS5nZXRNYXJrZXRpbmdDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGlzU2hhcmVkKHJlbGF0aW9uUHJpdmFjeVNldHRpbmc6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvd25TZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nID0gQnVzaW5lc3NPYmplY3RVdGlscy5GaW5kSXRlbUJ5SWQodGhpcy5yZWxhdGlvbkFzQ3VzdG9tZXIucmVsYXRpb25Qcml2YWN5U2V0dGluZ3MsIHJlbGF0aW9uUHJpdmFjeVNldHRpbmcuZ2V0SWQoKSk7XG4gICAgaWYgKG93blNldHRpbmcpIHtcbiAgICAgIHJldHVybiBvd25TZXR0aW5nLmFsbG93VG9TaGFyZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVJlbGF0aW9uVHlwZSh2YWx1ZTogUmVsYXRpb25OYW1lS2luZCk6IHZvaWQge1xuICAgIHRoaXMucmVsYXRpb24udHlwZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUdlbmRlclR5cGUodmFsdWU6IEdlbmRlclR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGF0aW9uLmdlbmRlciA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGZpcnN0TmFtZUNoYW5nZShmaXJzdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5fcmVsYXRpb24uZmlyc3ROYW1lID0gZmlyc3ROYW1lO1xuICAgIH1cbiAgICB0aGlzLl9yZWxhdGlvbk5hbWVDaGFuZ2VIYW5kbGVyLmNhbGwodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgZmFtaWx5TmFtZUNoYW5nZShmYW1pbHlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIHRoaXMuX3JlbGF0aW9uLmZhbWlseU5hbWUgPSBmYW1pbHlOYW1lO1xuICAgIH1cbiAgICB0aGlzLl9yZWxhdGlvbk5hbWVDaGFuZ2VIYW5kbGVyLmNhbGwodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25SZWxhdGlvblN1Z2dlc3Rpb25DbGljayhyZWxhdGlvblN1Z2dlc3RlZDogUmVsYXRpb25MaXN0T2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlbGF0aW9uU3VnZ2VzdGVkKSB7XG4gICAgICB0aGlzLmhpZGVTaWRlYmFyKCk7XG4gICAgICAvLyBhd2FpdCB0aGlzLl9zZXJ2aWNlLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbihyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbklkKTtcbiAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLl9zZXJ2aWNlLmdldEN1c3RvbWVyRnVsbE9iamVjdEJ5UmVsYXRpb25JZChyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbklkKTtcbiAgICAgIHRoaXMucmVsYXRpb25DaGFuZ2UubmV4dCh0aGlzLnJlbGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUHJpdmFjeVNldHRpbmcocmVsYXRpb25Qcml2YWN5U2V0dGluZzogUmVsYXRpb25Qcml2YWN5U2V0dGluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBvd25TZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nID0gQnVzaW5lc3NPYmplY3RVdGlscy5GaW5kSXRlbUJ5SWQodGhpcy5yZWxhdGlvbkFzQ3VzdG9tZXIucmVsYXRpb25Qcml2YWN5U2V0dGluZ3MsIHJlbGF0aW9uUHJpdmFjeVNldHRpbmcuZ2V0SWQoKSk7XG4gICAgaWYgKG93blNldHRpbmcpIHtcbiAgICAgIG93blNldHRpbmcuYWxsb3dUb1NoYXJlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsYXRpb25Bc0N1c3RvbWVyLnJlbGF0aW9uUHJpdmFjeVNldHRpbmdzLnB1c2gocmVsYXRpb25Qcml2YWN5U2V0dGluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1JlbGF0aW9uU2lkZWJhciA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaGlkZVNpZGViYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVsYXRpb25TaWRlYmFyID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9pbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxhdGlvbkZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybVJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbkZvcm0uZm9ybUdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZldGNoZXMgcmVsYXRpb24gc3VnZ2VzdGlvbnNcbiAgcHJpdmF0ZSBfcmVsYXRpb25OYW1lQ2hhbmdlSGFuZGxlcjogRnVuY3Rpb24gPSBGdW5jdGlvblV0aWxzLlRocm90dGxlKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25OYW1lQ2hhbmdlZEhhbmRsZXJGbigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gIH0sIDYwMCk7XG5cbiAgLy8gbG9hZCBzdWdnZXN0aW9uc1xuICBwcml2YXRlIGFzeW5jIF9yZWxhdGlvbk5hbWVDaGFuZ2VkSGFuZGxlckZuKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZmlyc3ROYW1lOiBzdHJpbmcgPSBPYmplY3RVdGlscy5WYWx1ZU9yRGVmYXVsdCh0aGlzLl9yZWxhdGlvbi5maXJzdE5hbWUpO1xuICAgIGNvbnN0IHNlY29uZE5hbWU6IHN0cmluZyA9IE9iamVjdFV0aWxzLlZhbHVlT3JEZWZhdWx0KHRoaXMuX3JlbGF0aW9uLmZhbWlseU5hbWUpO1xuXG4gICAgaWYgKCFmaXJzdE5hbWUgJiYgIXNlY29uZE5hbWUpIHtcbiAgICAgIHRoaXMucmVsYXRpb25TdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uUmVxdWVzdDogUmVsYXRpb25SZXF1ZXN0ID0ge307XG4gICAgcmVsYXRpb25SZXF1ZXN0LnJlbGF0aW9uVHlwZSA9IHRoaXMuX3JlbGF0aW9uLnJlbGF0aW9uVHlwZTtcbiAgICBpZiAoZmlyc3ROYW1lKSB7XG4gICAgICByZWxhdGlvblJlcXVlc3QuZmlyc3ROYW1lID0gZmlyc3ROYW1lO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmROYW1lKSB7XG4gICAgICByZWxhdGlvblJlcXVlc3QuZmFtaWx5TmFtZSA9IHNlY29uZE5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U2lkZWJhcigpO1xuICAgIHRoaXMucmVsYXRpb25TdWdnZXN0aW9ucyA9IGF3YWl0IHRoaXMuX3NlcnZpY2UuZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3QpO1xuICB9XG59XG4iXX0=
538
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFOUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUM3RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDbEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1EQUFt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Q0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7cUJBQ25ELENBQUM7aUJBQ0g7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQXhQTyxrQkFBa0I7WUFFSCxpQkFBaUI7WUFRaEMscUJBQXFCOzs7MkJBa1AxQixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzt1QkFHdkMsS0FBSztxQ0FRTCxLQUFLOzBCQUdMLE1BQU07NEJBR04sTUFBTTs2QkFHTixNQUFNO3dCQUdOLFdBQVcsU0FBQywwQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtSZWxhdGlvbkFueVR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tYW55LXR5cGVcIjtcbmltcG9ydCB7TlVMTF9SRUxBVElPTl9PQkpFQ1R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbnVsLXJlbGF0aW9uLW9iamVjdFwiO1xuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZnVsbC1vYmplY3QuYm9cIjtcbmltcG9ydCB7Q29tbXVuaWNhdGlvblR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9jb21tdW5pY2F0aW9uLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtDb250YWN0T3B0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvbnRhY3Qtb3B0aW9uLmJvXCI7XG5pbXBvcnQge2lzTmlsbH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uXCI7XG5pbXBvcnQge1JlbGF0aW9uTmFtZUtpbmR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1uYW1lLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtBZGRyZXNzVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2FkZHJlc3MtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge0dlbmRlclR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9nZW5kZXItdHlwZS5lbnVtXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtCdXNpbmVzc09iamVjdFV0aWxzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3V0aWxzL2J1c2luZXNzLW9iamVjdC11dGlsc1wiO1xuaW1wb3J0IHtGb3JtQ29tcG9uZW50LCBGb3JtTWFzdGVyU2VydmljZX0gZnJvbSBcIkBjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTJcIjtcbmltcG9ydCB7RnVuY3Rpb25VdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9mdW5jdGlvbi11dGlsc1wiO1xuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9vYmplY3QtdXRpbHNcIjtcbmltcG9ydCB7UmVsYXRpb25MaXN0T2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWxpc3Qtb2JqZWN0LmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1yZXF1ZXN0XCI7XG5pbXBvcnQge0FkZHJlc3N9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWRkcmVzcy5ib1wiO1xuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge0Zvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIi4uLy4uLy4uL2ZhY3RvcnkvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcbmltcG9ydCB7Q291bnRyeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvXCI7XG5pbXBvcnQge1NldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9zZXQtdHJhbnNhY3Rpb24tZGVsaXZlcnktb3B0aW9ucy1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge0ljb259IGZyb20gXCIuLi8uLi8uLi9lbnVtL2ljb24uZW51bVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY28tY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdFwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGlvbi1lZGl0LWNvbnRlbnRcIj5cbiAgICAgIDxjby1mb3JtPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZm9ybS13cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDE8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidQRVJTT05BTF9EQVRBJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gY2xhc3M9XCJkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIndHlwZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUFJJVkFURV9QRVJTT04nIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZWxUeXBlLlByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLnR5cGUgPT09IHJlbFR5cGUuUHJpdmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZVJlbGF0aW9uVHlwZShyZWxUeXBlLlByaXZhdGUpXCJcbiAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZGVmYXVsdC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3R5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NPTVBBTlknIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZWxUeXBlLkNvbXBhbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInJlbGF0aW9uLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLnR5cGUgPT09IHJlbFR5cGUuQ29tcGFueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZVJlbGF0aW9uVHlwZShyZWxUeXBlLkNvbXBhbnkpXCJcbiAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPHJlbGF0aW9uLWN1c3RvbWVyLWdyb3VwcyBbKG1vZGVsKV09XCJyZWxhdGlvbi5jdXN0b21lckdyb3VwXCIgcmVxdWlyZWQ+PC9yZWxhdGlvbi1jdXN0b21lci1ncm91cHM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZWxhdGlvbi50eXBlID09PSByZWxUeXBlLlByaXZhdGVcIiBjbGFzcz1cImNvbGxhcHNlYWJsZVwiIEBzaG93SGlkZVByaXZhdGVSZWxhdGlvbkZpZWxkcz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tvdXQtZmlyc3QtbmFtZVwiXG4gICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJyZWxhdGlvbi5maXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGSVJTVF9OQU1FJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJmaXJzdE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJjaGVja1Zpc2liaWxpdHlTdWdnZXN0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrb3V0LXByZWZpeC1uYW1lIGRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicmVsYXRpb24ucHJlZml4XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUFJFRklYJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrb3V0LWxhc3QtbmFtZVwiXG4gICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJyZWxhdGlvbi5mYW1pbHlOYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInTEFTVF9OQU1FJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJmYW1pbHlOYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiY2hlY2tWaXNpYmlsaXR5U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gY2xhc3M9XCJkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidnZW5kZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInTUFMRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2VuZGVyVHlwZS5NYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLmdlbmRlciA9PT0gZ2VuZGVyVHlwZS5NYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VHZW5kZXJUeXBlKGdlbmRlclR5cGUuTWFsZSlcIlxuICAgICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZGVmYXVsdC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInZ2VuZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZFTUFMRScgfCBsb2NhbGl6ZSBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdlbmRlclR5cGUuRmVtYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLmdlbmRlciA9PT0gZ2VuZGVyVHlwZS5GZW1hbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZUdlbmRlclR5cGUoZ2VuZGVyVHlwZS5GZW1hbGUpXCJcbiAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2dlbmRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVTktOT1dOJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZW5kZXJUeXBlLlVuc3BlY2lmaWVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJlbGF0aW9uLmdlbmRlciA9PT0gZ2VuZGVyVHlwZS5VbnNwZWNpZmllZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiY2hhbmdlR2VuZGVyVHlwZShnZW5kZXJUeXBlLlVuc3BlY2lmaWVkKVwiXG4gICAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgPGNvLWlucHV0LWRhdGUgW3BsYWNlaG9sZGVyXT1cIidEQVRFX09GX0JJUlRIJyB8IGxvY2FsaXplIFwiIFsobW9kZWwpXT1cImRhdGVPZkJpcnRoXCIgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LWRhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVsYXRpb24/LnR5cGUgPT09IHJlbFR5cGUuQ29tcGFueVwiIGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3cgY29sbGFwc2VhYmxlXCIgQHNob3dIaWRlQ29tcGFueVJlbGF0aW9uRmllbGRzPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJyZWxhdGlvbi5mYW1pbHlOYW1lXCIgW3BsYWNlaG9sZGVyXT1cIidDT01QQU5ZX05BTUUnIHwgbG9jYWxpemVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3MgW2FkZHJlc3NdPVwiZWRpdEZpcnN0QWRkcmVzc1wiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiPjwvY28tcmVsYXRpb24tYWRkcmVzcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28tY2Fyb3VzZWwtM2QgKm5nSWY9XCJyZWxhdGlvbi5hZGRyZXNzZXMgJiYgcmVsYXRpb24uYWRkcmVzc2VzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVXaWR0aF09XCIyMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVIZWlnaHRdPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEluZGV4XT1cImRlbGl2ZXJ5QWRkcmVzc0lkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhTZWxlY3RlZCk9XCJzZXRJbmRleERlbGl2ZXJ5QWRkcmVzcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3MtdGlsZSAjY2Fyb3VzZWxJdGVtICpuZ0Zvcj1cImxldCBhZGRyZXNzIG9mIHJlbGF0aW9uLmFkZHJlc3NlczsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiZGVsaXZlcnlBZGRyZXNzSWR4ID09PSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdEFkZHJlc3NDbGlja2VkKT1cImVkaXRBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3MtdGlsZT5cbiAgICAgICAgICAgICAgPC9jby1jYXJvdXNlbC0zZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGlvbi1hZGRyZXNzLW5ld1wiPlxuICAgICAgICAgICAgICAgIDxpY29uIGNsYXNzPVwicmVsYXRpb24tYWRkcmVzcy1pY29uXCIgW2ljb25dPVwiaWNvbnMuQXJyb3dQb2ludFJpZ2h0XCI+PC9pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgW3RleHRDb250ZW50XT1cIidBRERSRVNTX0FERCcgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJzaG93TmV3QWRkcmVzc0RpYWxvZygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3Bhbj4wMjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ0lOVk9JQ0VfQUREUkVTUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggWyhtb2RlbCldPVwiaW52b2ljZUFkZHJlc3NTYW1lQXNEZWxpdmVyeUFkZHJlc3NcIiAobW9kZWxDaGFuZ2UpPVwiY2hlY2tTYW1lQWRkcmVzcygkZXZlbnQpXCIgW2xhYmVsXT1cIidTQU1FX0FTX0RFTElWRVJZJyB8IGxvY2FsaXplXCI+PC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJ2aWV3LWRlbGl2ZXJ5LWludm9pY2UtYWRkcmVzc1wiICpuZ0lmPVwiIWludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlBZGRyZXNzXCIgQHNob3dIaWRlSW52b2ljZUFkZHJlc3M+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjby1jYXJvdXNlbC0zZCAqbmdJZj1cInJlbGF0aW9uLmFkZHJlc3NlcyAmJiByZWxhdGlvbi5hZGRyZXNzZXMubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aWxlV2lkdGhdPVwiMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVIZWlnaHRdPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkSW5kZXhdPVwiaW52b2ljZUFkZHJlc3NJZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhTZWxlY3RlZCk9XCJzZXRJbmRleEludm9pY2VBZGRyZXNzKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzLXRpbGUgI2Nhcm91c2VsSXRlbSAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiByZWxhdGlvbi5hZGRyZXNzZXM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpbnZvaWNlQWRkcmVzc0lkeCA9PT0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdEFkZHJlc3NDbGlja2VkKT1cImVkaXRBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgPjwvY28tcmVsYXRpb24tYWRkcmVzcy10aWxlPlxuICAgICAgICAgICAgICAgIDwvY28tY2Fyb3VzZWwtM2Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tYWRkcmVzcy1uZXdcIj5cbiAgICAgICAgICAgICAgICAgIDxpY29uIGNsYXNzPVwicmVsYXRpb24tYWRkcmVzcy1pY29uXCIgW2ljb25dPVwiaWNvbnMuQXJyb3dQb2ludFJpZ2h0XCI+PC9pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbdGV4dENvbnRlbnRdPVwiJ0FERFJFU1NfQUREJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cInNob3dOZXdBZGRyZXNzRGlhbG9nKClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3Bhbj4wMzwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ0NPTlRBQ1RfREVUQUlMUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJwaG9uZU51bWJlci52YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCInUEhPTkVfTk8nIHwgbG9jYWxpemUgXCIgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJlbWFpbEFkZHJlc3MudmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwiJ0VNQUlMX0FERFJFU1MnIHwgbG9jYWxpemUgXCIgW3R5cGVdPVwiJ2VtYWlsJ1wiIFtyZXF1aXJlZF09XCJ0cnVlXCI+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG48IS0tXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidQQVNTV09SRCcgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ0FDQ09VTlRfRVhQTEFOQVRJT04nIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4tLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggW2xhYmVsXT1cIidJTlZJVEVfVE9fQUNDT1VOVCcgfCBsb2NhbGl6ZVwiIFsobW9kZWwpXT1cImludml0ZVRvQWNjb3VudFwiPjwvY28taW5wdXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3Bhbj4wNDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ1BSSVZBQ1lfUFJFRkVSRU5DRVMnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHdvLWNvbHVtbi1ncmlkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByaXZhY3lTZXR0aW5nIG9mIHByaXZhY3lTZXR0aW5nc1wiPlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveCBjbGFzcz1cImZpcnN0LWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJwcml2YWN5U2V0dGluZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJpc1NoYXJlZChwcml2YWN5U2V0dGluZylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJpdmFjeVNldHRpbmcocHJpdmFjeVNldHRpbmcsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2NvLWlucHV0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vjb25kLWNvbHVtblwiIFt0ZXh0Q29udGVudF09XCJwcml2YWN5U2V0dGluZy5leHBsYW5hdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2NvLWZvcm0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb25zLXNpZGViYXJcIiAqbmdJZj1cInNob3dSZWxhdGlvblNpZGViYXJcIiBAc2hvd0hpZGVTaWRlYmFyPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aW9uLXNpZGViYXItaGVhZGVyXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWgzXCIgW3RleHRDb250ZW50XT1cIidTVUdHRVNUSU9OUycgfCBsb2NhbGl6ZVwiPjwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjby1jaGVja291dC1yZWxhdGlvbi1zdWdnZXN0aW9ucy1saXN0XG4gICAgICAgIFtzdWdnZXN0aW9uc109XCJyZWxhdGlvblN1Z2dlc3Rpb25zXCJcbiAgICAgICAgKHN1Z2dlc3Rpb25TZWxlY3RlZCk9XCJvblJlbGF0aW9uU3VnZ2VzdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvY28tY2hlY2tvdXQtcmVsYXRpb24tc3VnZ2VzdGlvbnMtbGlzdD5cbiAgICA8L2Rpdj5cbiAgICA8Y28tZGlhbG9nICpuZ0lmPVwic2hvd0NyZWF0ZUFkZHJlc3NEaWFsb2dcIj5cbiAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzXG4gICAgICAgIChzYXZlQ2xpY2spPVwic2F2ZU5ld0FkZHJlc3MoJGV2ZW50KVwiXG4gICAgICAgIChjYW5jZWxDbGljayk9XCJzaG93Q3JlYXRlQWRkcmVzc0RpYWxvZyA9IGZhbHNlXCJcbiAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3M+XG4gICAgPC9jby1kaWFsb2c+XG4gICAgPGNvLWRpYWxvZyAqbmdJZj1cInNob3dTZWxlY3RBZGRyZXNzRGlhbG9nICYmIGFkZHJlc3NUb0VkaXRcIj5cbiAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzXG4gICAgICAgIFthZGRyZXNzXT1cImFkZHJlc3NUb0VkaXRcIlxuICAgICAgICAoc2F2ZUNsaWNrKT1cInNhdmVBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAoY2FuY2VsQ2xpY2spPVwic2hvd1NlbGVjdEFkZHJlc3NEaWFsb2cgPSBmYWxzZVwiXG4gICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzPlxuICAgIDwvY28tZGlhbG9nPlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICBGb3JtTWFzdGVyU2VydmljZVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInNob3dIaWRlUHJpdmF0ZVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlQ29tcGFueVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlU2lkZWJhclwiLCBbXG4gICAgICBzdGF0ZShcInZvaWRcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDEwMCUpXCJ9KSksXG4gICAgICBzdGF0ZShcIipcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCJ9KSksXG4gICAgICB0cmFuc2l0aW9uKFwidm9pZCA8PT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlSW52b2ljZUFkZHJlc3NcIiwgW1xuICAgICAgc3RhdGUoXCJ2b2lkXCIsIHN0eWxlKHtoZWlnaHQ6IDAsIG9wYWNpdHk6IDB9KSksXG4gICAgICBzdGF0ZShcIipcIiwgc3R5bGUoe2hlaWdodDogXCIqXCIsIG9wYWNpdHk6IDF9KSksXG4gICAgICB0cmFuc2l0aW9uKFwidm9pZCA9PiAqXCIsIGFuaW1hdGUoXCIyMDBtcyBlYXNlLWluLW91dFwiKSksXG4gICAgICB0cmFuc2l0aW9uKFwiKiA9PiB2b2lkXCIsIGFuaW1hdGUoXCIyMDBtcyBlYXNlLW91dFwiKSlcbiAgICBdKVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0T3ZlcnZpZXdSZWxhdGlvbkVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcblxuICBAVmlld0NoaWxkKEZvcm1Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgcmVsYXRpb25Gb3JtOiBGb3JtQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uQW55VHlwZSkge1xuICAgIHRoaXMuX3JlbGF0aW9uID0gdmFsdWU7XG5cbiAgICB0aGlzLnByZXBhcmVQcmltYXJ5RW1haWwoKTtcbiAgICB0aGlzLnByZXBhcmVQcmltYXJ5UGhvbmUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWxpdmVyeU9wdGlvbnNSZXF1ZXN0OiBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Q7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB2YWxpZFN1Ym1pdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaW52YWxpZFN1Ym1pdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVsYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWxhdGlvbkFueVR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWxhdGlvbkFueVR5cGU+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdFwiKVxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGZvcm1SZWxhdGlvbjogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBkYXRlT2ZCaXJ0aDogRGF0ZTtcbiAgcHVibGljIGFjY291bnRQYXNzd29yZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGhpZGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZ2VuZGVyOiBHZW5kZXJUeXBlID0gR2VuZGVyVHlwZS5VbnNwZWNpZmllZDtcbiAgcHVibGljIGVtYWlsQWRkcmVzczogQ29udGFjdE9wdGlvbiA9IG5ldyBDb250YWN0T3B0aW9uKCk7XG4gIHB1YmxpYyBwaG9uZU51bWJlcjogQ29udGFjdE9wdGlvbiA9IG5ldyBDb250YWN0T3B0aW9uKCk7XG4gIHB1YmxpYyBwcml2YWN5U2V0dGluZ3M6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXTtcbiAgcHVibGljIHJlbGF0aW9uU3VnZ2VzdGlvbnM6IFJlbGF0aW9uTGlzdE9iamVjdFtdID0gW107XG4gIHB1YmxpYyBzaG93UmVsYXRpb25TaWRlYmFyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpbnZpdGVUb0FjY291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgYWRkcmVzc2VzOiBBZGRyZXNzW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkQWRkcmVzczogQWRkcmVzcztcbiAgcHVibGljIGRlbGl2ZXJ5QWRkcmVzczogQWRkcmVzcztcbiAgcHVibGljIGludm9pY2VBZGRyZXNzOiBBZGRyZXNzO1xuICBwdWJsaWMgZGVsaXZlcnlBZGRyZXNzSWR4OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgaW52b2ljZUFkZHJlc3NJZHg6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5QWRkcmVzczogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBlZGl0QWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICBwdWJsaWMgYWRkcmVzc1RvRWRpdDogQWRkcmVzcztcbiAgcHVibGljIHNob3dTZWxlY3RBZGRyZXNzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Q3JlYXRlQWRkcmVzc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSByZWxUeXBlOiB0eXBlb2YgUmVsYXRpb25OYW1lS2luZCA9IFJlbGF0aW9uTmFtZUtpbmQ7XG4gIHB1YmxpYyByZWFkb25seSBnZW5kZXJUeXBlOiB0eXBlb2YgR2VuZGVyVHlwZSA9IEdlbmRlclR5cGU7XG5cbiAgcHVibGljIGdldCByZWxhdGlvbigpOiBSZWxhdGlvbkFueVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVsYXRpb25Bc0N1c3RvbWVyKCk6IEN1c3RvbWVyRnVsbE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uICYmIHRoaXMuX3JlbGF0aW9uIGFzIEN1c3RvbWVyRnVsbE9iamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZWRpdEZpcnN0QWRkcmVzcygpOiBBZGRyZXNzIHtcbiAgICBjb25zdCBmaXJzdEFkZHJlc3M6IEFkZHJlc3MgPSB0aGlzLl9zZXJ2aWNlLmdldEZpcnN0QWRkcmVzcyh0aGlzLnJlbGF0aW9uKTtcbiAgICBpZiAoZmlyc3RBZGRyZXNzKSB7XG4gICAgICByZXR1cm4gZmlyc3RBZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZHJlc3M6IEFkZHJlc3MgPSBuZXcgQWRkcmVzcygpO1xuICAgICAgYWRkcmVzcy5hZGRyZXNzVHlwZSA9IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcztcbiAgICAgIGFkZHJlc3Muc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGFkZHJlc3Muc2VxdWVuY2UgPSB0aGlzLl9yZWxhdGlvbi5nZXROZXh0QWRkcmVzc1NlcXVlbmNlKCk7XG4gICAgICB0aGlzLl9yZWxhdGlvbi5hZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb25Vc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlLmFwcGxpY2F0aW9uVXNlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBOVUxMX1JFTEFUSU9OX09CSkVDVDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBUcmFuc2FjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybU1hc3RlcjogRm9ybU1hc3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3RvcnlcbiAgKSB7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9pbml0Rm9ybSgpO1xuICAgIHRoaXMuX3JlbGF0aW9uLnR5cGUgPSB0aGlzLnJlbFR5cGUuUHJpdmF0ZTtcbiAgICB0aGlzLl9yZWxhdGlvbi5nZW5kZXIgPSB0aGlzLmdlbmRlcjtcbiAgICBhd2FpdCB0aGlzLmxvYWRQcml2YWN5U2V0dGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgLy8gcmV0dXJuIHRoaXMucmVsYXRpb25Gb3JtLnN1Ym1pdCgpO1xuICAgIHJldHVybiB0aGlzLl9mb3JtTWFzdGVyLnN1Ym1pdFNsYXZlcygpO1xuICB9XG5cbiAgcHVibGljIHNob3dOZXdBZGRyZXNzRGlhbG9nKGRlbGl2ZXJ5QWRkcmVzczogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRBZGRyZXNzVHlwZSA9IGRlbGl2ZXJ5QWRkcmVzcyA/IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcyA6IEFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzO1xuICAgIHRoaXMuc2hvd0NyZWF0ZUFkZHJlc3NEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHNob3dFZGl0QWRkcmVzc0RpYWxvZyhkZWxpdmVyeUFkZHJlc3M6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0QWRkcmVzc1R5cGUgPSBkZWxpdmVyeUFkZHJlc3MgPyBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3MgOiBBZGRyZXNzVHlwZS5CaWxsaW5nQWRkcmVzcztcbiAgICB0aGlzLnNob3dTZWxlY3RBZGRyZXNzRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmRleERlbGl2ZXJ5QWRkcmVzcyhpZHg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzSWR4ID0gaWR4O1xuICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlc1tpZHhdKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmRleEludm9pY2VBZGRyZXNzKGlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5pbnZvaWNlQWRkcmVzc0lkeCA9IGlkeDtcbiAgICB0aGlzLmVkaXRBZGRyZXNzVHlwZSA9IEFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlc1tpZHhdKTtcbiAgfVxuXG4gIHB1YmxpYyBlZGl0QWRkcmVzcyhhZGRyOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5hZGRyZXNzVG9FZGl0ID0gPEFkZHJlc3M+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQWRkcmVzcywgYWRkcik7XG4gICAgdGhpcy5zaG93RWRpdEFkZHJlc3NEaWFsb2coKVxuICB9XG5cbiAgcHVibGljIGNoZWNrU2FtZUFkZHJlc3MoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmVkaXRBZGRyZXNzVHlwZSA9IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcztcbiAgICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLmRlbGl2ZXJ5QWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmVOZXdBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICBhZGRyZXNzLmFkZHJlc3NUeXBlID0gdGhpcy5lZGl0QWRkcmVzc1R5cGU7XG4gICAgdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICB0aGlzLnNlbGVjdEFkZHJlc3MoYWRkcmVzcyk7XG4gICAgdGhpcy5zaG93Q3JlYXRlQWRkcmVzc0RpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNhdmVBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMucmVsYXRpb24uYWRkcmVzc2VzLmZpbmRJbmRleChhID0+IGEubmF3TnIgPT09IGFkZHJlc3MubmF3TnIpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXNbaWR4XSA9IDxBZGRyZXNzPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFkZHJlc3MsIGFkZHJlc3MpO1xuICAgIH1cbiAgICB0aGlzLnNob3dTZWxlY3RBZGRyZXNzRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWRkcmVzcyhhZGRyZXNzPzogQWRkcmVzcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWxpdmVyeU9wdGlvbnNSZXF1ZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgYWRkcmVzcyA9IHRoaXMuX3NlcnZpY2UuZ2V0Rmlyc3RBZGRyZXNzKHRoaXMucmVsYXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0Q291bnRyeU5hbWVUb0FkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKHRoaXMuZWRpdEFkZHJlc3NUeXBlID09PSBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3MpIHtcbiAgICAgIHRoaXMuZGVsaXZlcnlPcHRpb25zUmVxdWVzdC50cmFuc2FjdGlvbkFkZHJlc3MgPSBhZGRyZXNzLm5hd05yO1xuICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NJZHggPSB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcy5maW5kSW5kZXgoYSA9PiBhLm5hd05yID09PSB0aGlzLmRlbGl2ZXJ5QWRkcmVzcy5uYXdOcik7XG4gICAgfVxuICAgIGlmICh0aGlzLmludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlBZGRyZXNzIHx8IHRoaXMuZWRpdEFkZHJlc3NUeXBlICE9PSBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3MpIHtcbiAgICAgIHRoaXMuZGVsaXZlcnlPcHRpb25zUmVxdWVzdC5pbnZvaWNlQWRkcmVzcyA9IGFkZHJlc3MubmF3TnI7XG4gICAgICB0aGlzLmludm9pY2VBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuaW52b2ljZUFkZHJlc3NJZHggPSB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcy5maW5kSW5kZXgoYSA9PiBhLm5hd05yID09PSB0aGlzLmludm9pY2VBZGRyZXNzLm5hd05yKTtcbiAgICB9XG4gICAgdGhpcy5zaG93U2VsZWN0QWRkcmVzc0RpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVQcmltYXJ5RW1haWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gICAgICB0aGlzLmVtYWlsQWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmdldExvd2VzdFNlcXVlbmNlT2ZDb250YWN0T3B0aW9uc1dpdGhUeXBlKENvbW11bmljYXRpb25UeXBlLkVtYWlsKTtcbiAgICAgIGlmIChpc05pbGwodGhpcy5lbWFpbEFkZHJlc3MpKSB7XG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgICAgICAgdGhpcy5lbWFpbEFkZHJlc3MudHlwZSA9IENvbW11bmljYXRpb25UeXBlLkVtYWlsO1xuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcy5zZXF1ZW5jZSA9IDA7XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uLmFkZENvbnRhY3RPcHRpb24odGhpcy5lbWFpbEFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHRoaXMuX3RyYW5zYWN0aW9uU2VydmljZS5lbWFpbEFkZHJlc3MpIHtcbiAgICAgIC8vICAgdGhpcy5lbWFpbEFkZHJlc3MudmFsdWUgPSB0aGlzLl90cmFuc2FjdGlvblNlcnZpY2UuZW1haWxBZGRyZXNzO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlUHJpbWFyeVBob25lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5waG9uZU51bWJlciA9IHRoaXMuX3JlbGF0aW9uLmdldExvd2VzdFNlcXVlbmNlT2ZDb250YWN0T3B0aW9uc1dpdGhUeXBlKENvbW11bmljYXRpb25UeXBlLlRlbGVwaG9uZSk7XG4gICAgICBpZiAoaXNOaWxsKHRoaXMucGhvbmVOdW1iZXIpKSB7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSBuZXcgQ29udGFjdE9wdGlvbigpO1xuICAgICAgICB0aGlzLnBob25lTnVtYmVyLnR5cGUgPSBDb21tdW5pY2F0aW9uVHlwZS5UZWxlcGhvbmU7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIuc2VxdWVuY2UgPSAwO1xuICAgICAgICB0aGlzLl9yZWxhdGlvbi5hZGRDb250YWN0T3B0aW9uKHRoaXMucGhvbmVOdW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJpdmFjeVNldHRpbmdzID0gYXdhaXQgdGhpcy5fc2VydmljZS5nZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRNYXJrZXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fc2VydmljZS5nZXRNYXJrZXRpbmdDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGlzU2hhcmVkKHJlbGF0aW9uUHJpdmFjeVNldHRpbmc6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvd25TZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nID0gQnVzaW5lc3NPYmplY3RVdGlscy5GaW5kSXRlbUJ5SWQodGhpcy5yZWxhdGlvbkFzQ3VzdG9tZXIucmVsYXRpb25Qcml2YWN5U2V0dGluZ3MsIHJlbGF0aW9uUHJpdmFjeVNldHRpbmcuZ2V0SWQoKSk7XG4gICAgaWYgKG93blNldHRpbmcpIHtcbiAgICAgIHJldHVybiBvd25TZXR0aW5nLmFsbG93VG9TaGFyZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVJlbGF0aW9uVHlwZSh2YWx1ZTogUmVsYXRpb25OYW1lS2luZCk6IHZvaWQge1xuICAgIHRoaXMucmVsYXRpb24udHlwZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUdlbmRlclR5cGUodmFsdWU6IEdlbmRlclR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGF0aW9uLmdlbmRlciA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGZpcnN0TmFtZUNoYW5nZShmaXJzdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5fcmVsYXRpb24uZmlyc3ROYW1lID0gZmlyc3ROYW1lO1xuICAgIH1cbiAgICB0aGlzLl9yZWxhdGlvbk5hbWVDaGFuZ2VIYW5kbGVyLmNhbGwodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgZmFtaWx5TmFtZUNoYW5nZShmYW1pbHlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIHRoaXMuX3JlbGF0aW9uLmZhbWlseU5hbWUgPSBmYW1pbHlOYW1lO1xuICAgIH1cbiAgICB0aGlzLl9yZWxhdGlvbk5hbWVDaGFuZ2VIYW5kbGVyLmNhbGwodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tWaXNpYmlsaXR5U3VnZ2VzdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uLmZpcnN0TmFtZSAmJiB0aGlzLl9yZWxhdGlvbi5mYW1pbHlOYW1lKSB7XG4gICAgICB0aGlzLmhpZGVTaWRlYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uUmVsYXRpb25TdWdnZXN0aW9uQ2xpY2socmVsYXRpb25TdWdnZXN0ZWQ6IFJlbGF0aW9uTGlzdE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZWxhdGlvblN1Z2dlc3RlZCkge1xuICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgLy8gYXdhaXQgdGhpcy5fc2VydmljZS5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24ocmVsYXRpb25TdWdnZXN0ZWQucmVsYXRpb25JZCk7XG4gICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy5fc2VydmljZS5nZXRDdXN0b21lckZ1bGxPYmplY3RCeVJlbGF0aW9uSWQocmVsYXRpb25TdWdnZXN0ZWQucmVsYXRpb25JZCk7XG4gICAgICB0aGlzLnJlbGF0aW9uQ2hhbmdlLm5leHQodGhpcy5yZWxhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZVByaXZhY3lTZXR0aW5nKHJlbGF0aW9uUHJpdmFjeVNldHRpbmc6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgb3duU2V0dGluZzogUmVsYXRpb25Qcml2YWN5U2V0dGluZyA9IEJ1c2luZXNzT2JqZWN0VXRpbHMuRmluZEl0ZW1CeUlkKHRoaXMucmVsYXRpb25Bc0N1c3RvbWVyLnJlbGF0aW9uUHJpdmFjeVNldHRpbmdzLCByZWxhdGlvblByaXZhY3lTZXR0aW5nLmdldElkKCkpO1xuICAgIGlmIChvd25TZXR0aW5nKSB7XG4gICAgICBvd25TZXR0aW5nLmFsbG93VG9TaGFyZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbGF0aW9uQXNDdXN0b21lci5yZWxhdGlvblByaXZhY3lTZXR0aW5ncy5wdXNoKHJlbGF0aW9uUHJpdmFjeVNldHRpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93U2lkZWJhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZWxhdGlvblNpZGViYXIgPSB0cnVlO1xuICB9XG5cbiAgLy8gSGlkZSBzaWRlYmFyIHdpdGggYSBsaXR0bGUgdGltZW91dCB0byBwcmV2ZW50IG1pc3NpbmcgdGhlIGNsaWNrXG4gIHB1YmxpYyBoaWRlU2lkZWJhcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd1JlbGF0aW9uU2lkZWJhciA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxhdGlvbkZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybVJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbkZvcm0uZm9ybUdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZldGNoZXMgcmVsYXRpb24gc3VnZ2VzdGlvbnNcbiAgcHJpdmF0ZSBfcmVsYXRpb25OYW1lQ2hhbmdlSGFuZGxlcjogRnVuY3Rpb24gPSBGdW5jdGlvblV0aWxzLlRocm90dGxlKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25OYW1lQ2hhbmdlZEhhbmRsZXJGbigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gIH0sIDYwMCk7XG5cbiAgLy8gbG9hZCBzdWdnZXN0aW9uc1xuICBwcml2YXRlIGFzeW5jIF9yZWxhdGlvbk5hbWVDaGFuZ2VkSGFuZGxlckZuKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZmlyc3ROYW1lOiBzdHJpbmcgPSBPYmplY3RVdGlscy5WYWx1ZU9yRGVmYXVsdCh0aGlzLl9yZWxhdGlvbi5maXJzdE5hbWUpO1xuICAgIGNvbnN0IHNlY29uZE5hbWU6IHN0cmluZyA9IE9iamVjdFV0aWxzLlZhbHVlT3JEZWZhdWx0KHRoaXMuX3JlbGF0aW9uLmZhbWlseU5hbWUpO1xuXG4gICAgaWYgKCFmaXJzdE5hbWUgJiYgIXNlY29uZE5hbWUpIHtcbiAgICAgIHRoaXMucmVsYXRpb25TdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uUmVxdWVzdDogUmVsYXRpb25SZXF1ZXN0ID0ge307XG4gICAgcmVsYXRpb25SZXF1ZXN0LnJlbGF0aW9uVHlwZSA9IHRoaXMuX3JlbGF0aW9uLnJlbGF0aW9uVHlwZTtcbiAgICBpZiAoZmlyc3ROYW1lKSB7XG4gICAgICByZWxhdGlvblJlcXVlc3QuZmlyc3ROYW1lID0gZmlyc3ROYW1lO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmROYW1lKSB7XG4gICAgICByZWxhdGlvblJlcXVlc3QuZmFtaWx5TmFtZSA9IHNlY29uZE5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U2lkZWJhcigpO1xuICAgIHRoaXMucmVsYXRpb25TdWdnZXN0aW9ucyA9IGF3YWl0IHRoaXMuX3NlcnZpY2UuZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2V0Q291bnRyeU5hbWVUb0FkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChhZGRyZXNzLmNvdW50cnlJZCAmJiAhYWRkcmVzcy5jb3VudHJ5TmFtZSkge1xuICAgICAgY29uc3QgY291bnRyeTogQ291bnRyeSA9IGF3YWl0IHRoaXMuX3NlcnZpY2UuZ2V0Q291bnRyeShhZGRyZXNzLmNvdW50cnlJZCk7XG4gICAgICBhZGRyZXNzLmNvdW50cnlOYW1lID0gY291bnRyeS5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxufVxuIl19