@colijnit/transaction 12.1.6 → 12.1.9

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 (508) hide show
  1. package/README.md +10 -13
  2. package/bundles/colijnit-transaction.umd.js +5786 -7155
  3. package/bundles/colijnit-transaction.umd.js.map +1 -1
  4. package/colijnit-transaction.d.ts +57 -57
  5. package/colijnit-transaction.metadata.json +1 -1
  6. package/esm2015/colijnit-transaction.js +58 -58
  7. package/esm2015/lib/assets/dictionary/text.properties.js +418 -0
  8. package/esm2015/lib/component/checkout/checkout-login/checkout-login.component.js +106 -0
  9. package/esm2015/lib/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +47 -0
  10. package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +275 -0
  11. package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +538 -0
  12. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +30 -0
  13. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +31 -0
  14. package/esm2015/lib/component/checkout/checkout.component.js +132 -0
  15. package/esm2015/lib/component/checkout/checkout.module.js +86 -0
  16. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.component.js +38 -0
  17. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.module.js +24 -0
  18. package/esm2015/lib/component/core/base/dialog-base.component.js +6 -0
  19. package/esm2015/lib/component/core/base/transaction-base.component.js +96 -0
  20. package/esm2015/lib/component/core/core.module.js +36 -0
  21. package/esm2015/lib/component/core/enum/app-popup-button-type.enum.js +11 -0
  22. package/esm2015/lib/component/core/icon/icon.component.js +31 -0
  23. package/esm2015/lib/component/core/image-display/image-display.component.js +29 -0
  24. package/esm2015/lib/component/core/relation/customer-groups.component.js +41 -0
  25. package/esm2015/lib/component/core/stock-status-indicator/stock-status-indicator.component.js +24 -0
  26. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.component.js +40 -0
  27. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.module.js +26 -0
  28. package/esm2015/lib/component/discount/discount.component.js +107 -0
  29. package/esm2015/lib/component/discount/discount.module.js +29 -0
  30. package/esm2015/lib/component/payment/payment.component.js +73 -0
  31. package/esm2015/lib/component/payment/payment.module.js +27 -0
  32. package/esm2015/lib/component/payment-tile/payment-tile.component.js +32 -0
  33. package/esm2015/lib/component/payment-tile/payment-tile.module.js +25 -0
  34. package/esm2015/lib/component/relation-address/relation-address.component.js +125 -0
  35. package/esm2015/lib/component/relation-address/relation-address.module.js +28 -0
  36. package/esm2015/lib/component/relation-address-select/relation-address-select.component.js +146 -0
  37. package/esm2015/lib/component/relation-address-select/relation-address-select.module.js +33 -0
  38. package/esm2015/lib/component/relation-address-tile/relation-address-tile.component.js +61 -0
  39. package/esm2015/lib/component/relation-address-tile/relation-address-tile.module.js +32 -0
  40. package/esm2015/lib/component/seller-information/seller-information.component.js +61 -0
  41. package/esm2015/lib/component/seller-information/seller-information.module.js +21 -0
  42. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.component.js +118 -0
  43. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.module.js +31 -0
  44. package/esm2015/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.component.js +129 -0
  45. package/esm2015/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.module.js +34 -0
  46. package/esm2015/lib/component/shopping-cart/shopping-cart.component.js +57 -0
  47. package/esm2015/lib/component/shopping-cart/shopping-cart.module.js +27 -0
  48. package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.component.js +55 -0
  49. package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.module.js +29 -0
  50. package/esm2015/lib/component/stepper/component/stepper-step.component.js +40 -0
  51. package/esm2015/lib/component/stepper/stepper.component.js +124 -0
  52. package/esm2015/lib/component/stepper/stepper.module.js +29 -0
  53. package/esm2015/lib/component/tile/tile.component.js +32 -0
  54. package/esm2015/lib/component/tile/tile.module.js +19 -0
  55. package/esm2015/lib/component/transaction/transaction.component.js +96 -0
  56. package/esm2015/lib/component/transaction/transaction.module.js +39 -0
  57. package/esm2015/lib/component/transaction-header/transaction-header.component.js +36 -0
  58. package/esm2015/lib/component/transaction-header/transaction-header.module.js +27 -0
  59. package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.component.js +34 -0
  60. package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.module.js +19 -0
  61. package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.component.js +57 -0
  62. package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.module.js +21 -0
  63. package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.component.js +35 -0
  64. package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.module.js +19 -0
  65. package/esm2015/lib/component/transaction-line/transaction-line.component.js +278 -0
  66. package/esm2015/lib/component/transaction-line/transaction-line.module.js +32 -0
  67. package/esm2015/lib/component/transaction-line-grid/transaction-line-grid.component.js +23 -0
  68. package/esm2015/lib/component/transaction-line-grid/transaction-line-grid.module.js +21 -0
  69. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.js +163 -0
  70. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.js +30 -0
  71. package/esm2015/lib/component/transaction-lines/transaction-lines.component.js +122 -0
  72. package/esm2015/lib/component/transaction-lines/transaction-lines.module.js +31 -0
  73. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.component.js +58 -0
  74. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.module.js +26 -0
  75. package/esm2015/lib/component/transaction-totals/transaction-totals.component.js +44 -0
  76. package/esm2015/lib/component/transaction-totals/transaction-totals.module.js +23 -0
  77. package/esm2015/lib/enum/content-view-mode.enum.js +10 -0
  78. package/esm2015/lib/enum/icon.enum.js +24 -0
  79. package/esm2015/lib/enum/language-code.enum.js +8 -0
  80. package/esm2015/lib/enum/order-discount-type.enum.js +7 -0
  81. package/esm2015/lib/enum/time-size.type.js +10 -0
  82. package/esm2015/lib/factory/business-object-factory.js +120 -0
  83. package/esm2015/lib/factory/decorators/boolean.decorator.js +102 -0
  84. package/esm2015/lib/factory/decorators/complex-array.decorator.js +55 -0
  85. package/esm2015/lib/factory/decorators/complex-field.decorator.js +57 -0
  86. package/esm2015/lib/factory/decorators/date-field.decorator.js +36 -0
  87. package/esm2015/lib/factory/decorators/string-number.decorator.js +43 -0
  88. package/esm2015/lib/model/business-object.js +81 -0
  89. package/esm2015/lib/model/delivery-type.js +3 -0
  90. package/esm2015/lib/model/icon-svg.js +23 -0
  91. package/esm2015/lib/model/standard-text.js +3 -0
  92. package/esm2015/lib/model/text-value-container.js +3 -0
  93. package/esm2015/lib/pipe/append.pipe.js +17 -0
  94. package/esm2015/lib/pipe/co-currency.pipe.js +47 -0
  95. package/esm2015/lib/pipe/date-duration.pipe.js +57 -0
  96. package/esm2015/lib/pipe/delivery-time.pipe.js +33 -0
  97. package/esm2015/lib/pipe/localize.pipe.js +28 -0
  98. package/esm2015/lib/pipe/pipe.module.js +37 -0
  99. package/esm2015/lib/pipe/safe-html.pipe.js +19 -0
  100. package/esm2015/lib/pipe/safe-style.pipe.js +19 -0
  101. package/esm2015/lib/service/dialog.service.js +65 -0
  102. package/esm2015/lib/service/dictionary.service.js +76 -0
  103. package/esm2015/lib/service/icon-cache.service.js +51 -0
  104. package/esm2015/lib/service/ione-connector-adapter.service.js +591 -0
  105. package/esm2015/lib/service/options.service.js +69 -0
  106. package/esm2015/lib/service/pending-reason.service.js +172 -0
  107. package/esm2015/lib/service/transaction.service.js +521 -0
  108. package/esm2015/lib/utils/array-utils.js +183 -0
  109. package/esm2015/lib/utils/is-nill.function.js +5 -0
  110. package/esm2015/lib/utils/string-utils.js +64 -0
  111. package/esm2015/public_api.js +28 -10
  112. package/fesm2015/colijnit-transaction.js +5913 -7162
  113. package/fesm2015/colijnit-transaction.js.map +1 -1
  114. package/{assets → lib/assets}/dictionary/text.properties.d.ts +0 -0
  115. package/{app → lib}/component/checkout/checkout-login/checkout-login.component.d.ts +0 -0
  116. package/lib/component/checkout/checkout-login/checkout-login.component.scss +35 -0
  117. package/{app → lib}/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.d.ts +0 -0
  118. package/lib/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.scss +0 -0
  119. package/{app → lib}/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.d.ts +23 -36
  120. package/lib/component/checkout/checkout-overview-delivery-edit/style/_layout.scss +98 -0
  121. package/lib/component/checkout/checkout-overview-delivery-edit/style/_material-definition.scss +12 -0
  122. package/lib/component/checkout/checkout-overview-delivery-edit/style/_theme.scss +17 -0
  123. package/lib/component/checkout/checkout-overview-delivery-edit/style/material.scss +7 -0
  124. package/{app → lib}/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.d.ts +41 -14
  125. package/lib/component/checkout/checkout-overview-relation-edit/style/_layout.scss +125 -0
  126. package/lib/component/checkout/checkout-overview-relation-edit/style/_material-definition.scss +18 -0
  127. package/lib/component/checkout/checkout-overview-relation-edit/style/_theme.scss +9 -0
  128. package/lib/component/checkout/checkout-overview-relation-edit/style/material.scss +10 -0
  129. package/{app → lib}/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.d.ts +2 -3
  130. package/lib/component/checkout/checkout-relation-suggestions-list/style/_layout.scss +8 -0
  131. package/lib/component/checkout/checkout-relation-suggestions-list/style/_material-definition.scss +0 -0
  132. package/lib/component/checkout/checkout-relation-suggestions-list/style/_theme.scss +6 -0
  133. package/lib/component/checkout/checkout-relation-suggestions-list/style/material.scss +5 -0
  134. package/lib/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.d.ts +8 -0
  135. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_layout.scss +34 -0
  136. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_material-definition.scss +8 -0
  137. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_theme.scss +6 -0
  138. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/material.scss +4 -0
  139. package/lib/component/checkout/checkout.component.d.ts +36 -0
  140. package/lib/component/checkout/checkout.module.d.ts +2 -0
  141. package/lib/component/checkout/style/_layout.scss +31 -0
  142. package/lib/component/checkout/style/_material-definition.scss +5 -0
  143. package/lib/component/checkout/style/_theme.scss +8 -0
  144. package/lib/component/checkout/style/material.scss +10 -0
  145. package/lib/component/confirmation-dialog/confirmation-dialog.component.d.ts +8 -0
  146. package/lib/component/confirmation-dialog/confirmation-dialog.module.d.ts +2 -0
  147. package/lib/component/confirmation-dialog/style/_layout.scss +22 -0
  148. package/lib/component/confirmation-dialog/style/_material-definition.scss +2 -0
  149. package/lib/component/confirmation-dialog/style/_theme.scss +6 -0
  150. package/lib/component/confirmation-dialog/style/material.scss +5 -0
  151. package/lib/component/core/base/dialog-base.component.d.ts +4 -0
  152. package/lib/component/core/base/style/_layout.scss +7 -0
  153. package/lib/component/core/base/style/_material-definition.scss +0 -0
  154. package/lib/component/core/base/style/_theme.scss +6 -0
  155. package/lib/component/core/base/style/material.scss +4 -0
  156. package/{app → lib}/component/core/base/transaction-base.component.d.ts +7 -23
  157. package/lib/component/core/characteristic-answer/characteristic-answer.component.scss +20 -0
  158. package/{app → lib}/component/core/core.module.d.ts +0 -0
  159. package/lib/component/core/enum/app-popup-button-type.enum.d.ts +9 -0
  160. package/{app → lib}/component/core/icon/icon.component.d.ts +3 -2
  161. package/lib/component/core/icon/icon.component.scss +87 -0
  162. package/lib/component/core/image-display/image-display.component.d.ts +5 -0
  163. package/lib/component/core/image-display/style/_layout.scss +57 -0
  164. package/lib/component/core/image-display/style/_material-definition.scss +4 -0
  165. package/lib/component/core/image-display/style/_theme.scss +6 -0
  166. package/lib/component/core/image-display/style/material.scss +4 -0
  167. package/lib/component/core/relation/customer-groups.component.d.ts +13 -0
  168. package/lib/component/core/relation/relation-customer-groups.component.scss +6 -0
  169. package/{app → lib}/component/core/stock-status-indicator/stock-status-indicator.component.d.ts +0 -0
  170. package/lib/component/core/stock-status-indicator/stock-status-indicator.component.scss +47 -0
  171. package/lib/component/delivery-type-tile/delivery-type-tile.component.d.ts +10 -0
  172. package/lib/component/delivery-type-tile/delivery-type-tile.module.d.ts +2 -0
  173. package/lib/component/delivery-type-tile/style/_layout.scss +35 -0
  174. package/lib/component/delivery-type-tile/style/_material-definition.scss +16 -0
  175. package/lib/component/delivery-type-tile/style/_theme.scss +6 -0
  176. package/lib/component/delivery-type-tile/style/material.scss +5 -0
  177. package/lib/component/discount/discount.component.d.ts +19 -0
  178. package/lib/component/discount/discount.module.d.ts +2 -0
  179. package/lib/component/discount/style/_layout.scss +0 -0
  180. package/lib/component/discount/style/_material-definition.scss +0 -0
  181. package/lib/component/discount/style/_theme.scss +0 -0
  182. package/lib/component/discount/style/material.scss +0 -0
  183. package/lib/component/payment/payment.component.d.ts +18 -0
  184. package/lib/component/payment/payment.module.d.ts +2 -0
  185. package/lib/component/payment/style/_layout.scss +54 -0
  186. package/lib/component/payment/style/_material-definition.scss +17 -0
  187. package/lib/component/payment/style/_theme.scss +16 -0
  188. package/lib/component/payment/style/material.scss +5 -0
  189. package/lib/component/payment-tile/payment-tile.component.d.ts +9 -0
  190. package/lib/component/payment-tile/payment-tile.module.d.ts +2 -0
  191. package/lib/component/payment-tile/style/_layout.scss +22 -0
  192. package/lib/component/payment-tile/style/_material-definition.scss +0 -0
  193. package/lib/component/payment-tile/style/_theme.scss +6 -0
  194. package/lib/component/payment-tile/style/material.scss +5 -0
  195. package/lib/component/relation-address/relation-address.component.d.ts +28 -0
  196. package/lib/component/relation-address/relation-address.module.d.ts +2 -0
  197. package/lib/component/relation-address/style/_layout.scss +25 -0
  198. package/lib/component/relation-address/style/_material-definition.scss +3 -0
  199. package/lib/component/relation-address/style/_theme.scss +7 -0
  200. package/lib/component/relation-address/style/material.scss +5 -0
  201. package/lib/component/relation-address-select/relation-address-select.component.d.ts +33 -0
  202. package/lib/component/relation-address-select/relation-address-select.module.d.ts +2 -0
  203. package/lib/component/relation-address-select/style/_layout.scss +85 -0
  204. package/lib/component/relation-address-select/style/_material-definition.scss +4 -0
  205. package/lib/component/relation-address-select/style/_theme.scss +6 -0
  206. package/lib/component/relation-address-select/style/material.scss +5 -0
  207. package/lib/component/relation-address-tile/relation-address-tile.component.d.ts +14 -0
  208. package/lib/component/relation-address-tile/relation-address-tile.module.d.ts +2 -0
  209. package/lib/component/relation-address-tile/style/_layout.scss +42 -0
  210. package/lib/component/relation-address-tile/style/_material-definition.scss +16 -0
  211. package/lib/component/relation-address-tile/style/_theme.scss +21 -0
  212. package/lib/component/relation-address-tile/style/material.scss +5 -0
  213. package/lib/component/sell-order/sell-order-side-panel/sell-order-side-panel.component.scss +49 -0
  214. package/lib/component/sell-order/sell-order.component.scss +15 -0
  215. package/lib/component/seller-information/seller-information.component.d.ts +13 -0
  216. package/lib/component/seller-information/seller-information.module.d.ts +2 -0
  217. package/lib/component/seller-information/style/_layout.scss +21 -0
  218. package/lib/component/seller-information/style/_material-definition.scss +2 -0
  219. package/lib/component/seller-information/style/_theme.scss +7 -0
  220. package/lib/component/seller-information/style/material.scss +4 -0
  221. package/lib/component/service-order/service-order.component.scss +154 -0
  222. package/lib/component/service-order/summary/transaction-delivery-summary.component.scss +22 -0
  223. package/lib/component/service-order/summary/transaction-summary-block.component.scss +109 -0
  224. package/lib/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.scss +0 -0
  225. package/lib/component/service-order/transaction-manager/transaction-manager.component.scss +54 -0
  226. package/lib/component/service-order/transaction-order-line-view/transaction-order-line-view.component.scss +90 -0
  227. package/lib/component/service-order/transaction-order-lines/transaction-order-lines.component.scss +85 -0
  228. package/lib/component/service-order/transaction-order-totals/transaction-order-totals.component.scss +26 -0
  229. package/lib/component/service-order/transaction-relation/transaction-relation-edit.component.scss +24 -0
  230. package/lib/component/service-order/transaction-sidebar/transaction-line-accordion.component.scss +0 -0
  231. package/lib/component/service-order/transaction-sidebar/transaction-sidebar-right.component.scss +17 -0
  232. package/lib/component/service-order/warehouse/warehouse.component.scss +54 -0
  233. package/lib/component/shared/transaction-article-text/style/_layout.scss +42 -0
  234. package/lib/component/shared/transaction-article-text/style/_material-definition.scss +7 -0
  235. package/lib/component/shared/transaction-article-text/style/_theme.scss +11 -0
  236. package/lib/component/shared/transaction-article-text/style/material.scss +5 -0
  237. package/lib/component/shared/transaction-article-text/transaction-article-text.component.d.ts +31 -0
  238. package/lib/component/shared/transaction-article-text/transaction-article-text.module.d.ts +2 -0
  239. package/lib/component/shared/transaction-article-text-overview/style/_layout.scss +56 -0
  240. package/lib/component/shared/transaction-article-text-overview/style/_material-definition.scss +9 -0
  241. package/lib/component/shared/transaction-article-text-overview/style/_theme.scss +9 -0
  242. package/lib/component/shared/transaction-article-text-overview/style/material.scss +4 -0
  243. package/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.component.d.ts +30 -0
  244. package/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.module.d.ts +2 -0
  245. package/lib/component/shopping-cart/shopping-cart.component.d.ts +15 -0
  246. package/lib/component/shopping-cart/shopping-cart.module.d.ts +2 -0
  247. package/lib/component/shopping-cart/style/_layout.scss +33 -0
  248. package/lib/component/shopping-cart/style/_material-definition.scss +10 -0
  249. package/lib/component/shopping-cart/style/_theme.scss +14 -0
  250. package/lib/component/shopping-cart/style/material.scss +4 -0
  251. package/lib/component/shopping-cart-OLD/shopping-cart-manager/shopping-cart-manager.component.scss +54 -0
  252. package/lib/component/shopping-cart-preview/shopping-cart-preview.component.d.ts +13 -0
  253. package/lib/component/shopping-cart-preview/shopping-cart-preview.module.d.ts +2 -0
  254. package/lib/component/shopping-cart-preview/style/_layout.scss +48 -0
  255. package/lib/component/shopping-cart-preview/style/_material-definition.scss +20 -0
  256. package/lib/component/shopping-cart-preview/style/_theme.scss +17 -0
  257. package/lib/component/shopping-cart-preview/style/material.scss +4 -0
  258. package/lib/component/stepper/component/stepper-step.component.d.ts +12 -0
  259. package/lib/component/stepper/stepper.component.d.ts +35 -0
  260. package/lib/component/stepper/stepper.module.d.ts +2 -0
  261. package/lib/component/stepper/style/_layout.scss +107 -0
  262. package/lib/component/stepper/style/_material-definition.scss +18 -0
  263. package/lib/component/stepper/style/_theme.scss +43 -0
  264. package/lib/component/stepper/style/material.scss +4 -0
  265. package/lib/component/tile/style/_layout.scss +36 -0
  266. package/lib/component/tile/style/_material-definition.scss +16 -0
  267. package/lib/component/tile/style/_theme.scss +36 -0
  268. package/lib/component/tile/style/material.scss +4 -0
  269. package/lib/component/tile/tile.component.d.ts +6 -0
  270. package/lib/component/tile/tile.module.d.ts +2 -0
  271. package/lib/component/transaction/style/_layout.scss +25 -0
  272. package/lib/component/transaction/style/_material-definition.scss +7 -0
  273. package/lib/component/transaction/style/_theme.scss +24 -0
  274. package/lib/component/transaction/style/material.scss +8 -0
  275. package/lib/component/transaction/transaction.component.d.ts +24 -0
  276. package/lib/component/transaction/transaction.module.d.ts +2 -0
  277. package/lib/component/transaction-header/style/_layout.scss +38 -0
  278. package/lib/component/transaction-header/style/_material-definition.scss +8 -0
  279. package/lib/component/transaction-header/style/_theme.scss +11 -0
  280. package/lib/component/transaction-header/style/material.scss +7 -0
  281. package/lib/component/transaction-header/transaction-header.component.d.ts +9 -0
  282. package/lib/component/transaction-header/transaction-header.module.d.ts +2 -0
  283. package/lib/component/transaction-header-contact/style/_layout.scss +25 -0
  284. package/lib/component/transaction-header-contact/style/_material-definition.scss +7 -0
  285. package/lib/component/transaction-header-contact/style/_theme.scss +11 -0
  286. package/lib/component/transaction-header-contact/style/material.scss +4 -0
  287. package/lib/component/transaction-header-contact/transaction-header-contact.component.d.ts +4 -0
  288. package/lib/component/transaction-header-contact/transaction-header-contact.module.d.ts +2 -0
  289. package/lib/component/transaction-header-delivery/style/_layout.scss +54 -0
  290. package/lib/component/transaction-header-delivery/style/_material-definition.scss +12 -0
  291. package/lib/component/transaction-header-delivery/style/_theme.scss +24 -0
  292. package/lib/component/transaction-header-delivery/style/material.scss +4 -0
  293. package/lib/component/transaction-header-delivery/transaction-header-delivery.component.d.ts +13 -0
  294. package/lib/component/transaction-header-delivery/transaction-header-delivery.module.d.ts +2 -0
  295. package/lib/component/transaction-header-relation/style/_layout.scss +25 -0
  296. package/lib/component/transaction-header-relation/style/_material-definition.scss +7 -0
  297. package/lib/component/transaction-header-relation/style/_theme.scss +11 -0
  298. package/lib/component/transaction-header-relation/style/material.scss +4 -0
  299. package/lib/component/transaction-header-relation/transaction-header-relation.component.d.ts +4 -0
  300. package/lib/component/transaction-header-relation/transaction-header-relation.module.d.ts +2 -0
  301. package/lib/component/transaction-line/style/_layout.scss +143 -0
  302. package/lib/component/transaction-line/style/_material-definition.scss +29 -0
  303. package/lib/component/transaction-line/style/_theme.scss +41 -0
  304. package/lib/component/transaction-line/style/material.scss +9 -0
  305. package/lib/component/transaction-line/transaction-line.component.d.ts +51 -0
  306. package/lib/component/transaction-line/transaction-line.module.d.ts +2 -0
  307. package/lib/component/transaction-line-grid/style/_layout.scss +6 -0
  308. package/lib/component/transaction-line-grid/style/_material-definition.scss +0 -0
  309. package/lib/component/transaction-line-grid/style/_theme.scss +6 -0
  310. package/lib/component/transaction-line-grid/style/material.scss +4 -0
  311. package/lib/component/transaction-line-grid/transaction-line-grid.component.d.ts +5 -0
  312. package/lib/component/transaction-line-grid/transaction-line-grid.module.d.ts +2 -0
  313. package/lib/component/transaction-line-side-panel/style/_layout.scss +47 -0
  314. package/lib/component/transaction-line-side-panel/style/_material-definition.scss +10 -0
  315. package/lib/component/transaction-line-side-panel/style/_theme.scss +7 -0
  316. package/lib/component/transaction-line-side-panel/style/material.scss +4 -0
  317. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.d.ts +20 -0
  318. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.d.ts +2 -0
  319. package/lib/component/transaction-lines/style/_layout.scss +33 -0
  320. package/lib/component/transaction-lines/style/_material-definition.scss +3 -0
  321. package/lib/component/transaction-lines/style/_theme.scss +19 -0
  322. package/lib/component/transaction-lines/style/material.scss +7 -0
  323. package/lib/component/transaction-lines/transaction-lines.component.d.ts +32 -0
  324. package/lib/component/transaction-lines/transaction-lines.module.d.ts +2 -0
  325. package/lib/component/transaction-lines-grid/style/_layout.scss +37 -0
  326. package/lib/component/transaction-lines-grid/style/_material-definition.scss +19 -0
  327. package/lib/component/transaction-lines-grid/style/_theme.scss +15 -0
  328. package/lib/component/transaction-lines-grid/style/material.scss +5 -0
  329. package/lib/component/transaction-lines-grid/transaction-lines-grid.component.d.ts +17 -0
  330. package/lib/component/transaction-lines-grid/transaction-lines-grid.module.d.ts +2 -0
  331. package/lib/component/transaction-totals/style/_layout.scss +35 -0
  332. package/lib/component/transaction-totals/style/_material-definition.scss +15 -0
  333. package/lib/component/transaction-totals/style/_theme.scss +10 -0
  334. package/lib/component/transaction-totals/style/material.scss +4 -0
  335. package/lib/component/transaction-totals/transaction-totals.component.d.ts +9 -0
  336. package/lib/component/transaction-totals/transaction-totals.module.d.ts +2 -0
  337. package/{app → lib}/enum/content-view-mode.enum.d.ts +0 -0
  338. package/lib/enum/icon.enum.d.ts +22 -0
  339. package/{app → lib}/enum/language-code.enum.d.ts +0 -0
  340. package/{app → lib}/enum/order-discount-type.enum.d.ts +0 -0
  341. package/{app → lib}/enum/time-size.type.d.ts +0 -0
  342. package/{factory → lib/factory}/business-object-factory.d.ts +1 -1
  343. package/{factory → lib/factory}/decorators/boolean.decorator.d.ts +0 -0
  344. package/{factory → lib/factory}/decorators/complex-array.decorator.d.ts +0 -0
  345. package/{factory → lib/factory}/decorators/complex-field.decorator.d.ts +0 -0
  346. package/{factory → lib/factory}/decorators/date-field.decorator.d.ts +0 -0
  347. package/{factory → lib/factory}/decorators/string-number.decorator.d.ts +0 -0
  348. package/{app → lib}/model/business-object.d.ts +0 -0
  349. package/lib/model/delivery-type.d.ts +7 -0
  350. package/lib/model/icon-svg.d.ts +4 -0
  351. package/{app → lib}/model/standard-text.d.ts +0 -0
  352. package/{app → lib}/model/text-value-container.d.ts +0 -0
  353. package/{app → lib}/pipe/append.pipe.d.ts +0 -0
  354. package/{app → lib}/pipe/co-currency.pipe.d.ts +0 -0
  355. package/{app → lib}/pipe/date-duration.pipe.d.ts +0 -0
  356. package/{app → lib}/pipe/delivery-time.pipe.d.ts +0 -0
  357. package/{app → lib}/pipe/localize.pipe.d.ts +0 -0
  358. package/lib/pipe/pipe.module.d.ts +2 -0
  359. package/lib/pipe/safe-html.pipe.d.ts +7 -0
  360. package/{app/pipe/safe-style-pipe.d.ts → lib/pipe/safe-style.pipe.d.ts} +0 -0
  361. package/lib/service/dialog.service.d.ts +11 -0
  362. package/{app → lib}/service/dictionary.service.d.ts +0 -0
  363. package/lib/service/icon-cache.service.d.ts +18 -0
  364. package/{app → lib}/service/ione-connector-adapter.service.d.ts +15 -8
  365. package/lib/service/options.service.d.ts +12 -0
  366. package/lib/service/pending-reason.service.d.ts +31 -0
  367. package/{app → lib}/service/transaction.service.d.ts +16 -47
  368. package/lib/style/_mixin.scss +9 -0
  369. package/lib/style/_variables.scss +101 -0
  370. package/{utils → lib/utils}/array-utils.d.ts +0 -0
  371. package/{utils → lib/utils}/is-nill.function.d.ts +0 -0
  372. package/{app → lib}/utils/string-utils.d.ts +0 -0
  373. package/package.json +27 -34
  374. package/public_api.d.ts +27 -6
  375. package/app/component/checkout/checkout/checkout.component.d.ts +0 -32
  376. package/app/component/checkout/checkout-overview/checkout-overview.component.d.ts +0 -42
  377. package/app/component/checkout/checkout-overview-block/checkout-overview-block.component.d.ts +0 -12
  378. package/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.d.ts +0 -22
  379. package/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.d.ts +0 -12
  380. package/app/component/checkout/checkout-transaction/checkout-transaction.component.d.ts +0 -13
  381. package/app/component/checkout/ione-checkout.component.d.ts +0 -39
  382. package/app/component/checkout/ione-checkout.module.d.ts +0 -2
  383. package/app/component/core/base/default-ok-cancel-buttons.component.d.ts +0 -13
  384. package/app/component/core/characteristic-answer/characteristic-answer.component.d.ts +0 -22
  385. package/app/component/core/directive/template-wrapper.directive.d.ts +0 -13
  386. package/app/component/core/image-display/image-display.component.d.ts +0 -13
  387. package/app/component/core/no-image-display/no-image-display.component.d.ts +0 -5
  388. package/app/component/service-order/ione-service-order-module.d.ts +0 -2
  389. package/app/component/service-order/ione-service-order.component.d.ts +0 -25
  390. package/app/component/service-order/service-order.component.d.ts +0 -52
  391. package/app/component/service-order/summary/transaction-article-summary.component.d.ts +0 -17
  392. package/app/component/service-order/summary/transaction-delivery-summary.component.d.ts +0 -20
  393. package/app/component/service-order/summary/transaction-order-summary.component.d.ts +0 -16
  394. package/app/component/service-order/summary/transaction-payment-info.component.d.ts +0 -14
  395. package/app/component/service-order/summary/transaction-product-contract-summary.component.d.ts +0 -7
  396. package/app/component/service-order/summary/transaction-product-summary.component.d.ts +0 -15
  397. package/app/component/service-order/summary/transaction-service-status.component.d.ts +0 -15
  398. package/app/component/service-order/summary/transaction-service-summary.component.d.ts +0 -15
  399. package/app/component/service-order/summary/transaction-summary-block.component.d.ts +0 -16
  400. package/app/component/service-order/transaction-article-text/transaction-article-text.component.d.ts +0 -33
  401. package/app/component/service-order/transaction-article-text-overview/transaction-article-text-overview.component.d.ts +0 -23
  402. package/app/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.d.ts +0 -19
  403. package/app/component/service-order/transaction-header-block/transaction-header-block.component.d.ts +0 -15
  404. package/app/component/service-order/transaction-manager/transaction-manager.component.d.ts +0 -64
  405. package/app/component/service-order/transaction-order-line-view/transaction-order-line-view.component.d.ts +0 -16
  406. package/app/component/service-order/transaction-order-lines/transaction-order-lines.component.d.ts +0 -25
  407. package/app/component/service-order/transaction-order-totals/transaction-order-totals.component.d.ts +0 -6
  408. package/app/component/service-order/transaction-relation/transaction-relation-address.component.d.ts +0 -22
  409. package/app/component/service-order/transaction-relation/transaction-relation-edit.component.d.ts +0 -29
  410. package/app/component/service-order/transaction-sidebar/transaction-line-accordion.component.d.ts +0 -11
  411. package/app/component/service-order/transaction-sidebar/transaction-sidebar-right.component.d.ts +0 -26
  412. package/app/component/service-order/warehouse/warehouse.component.d.ts +0 -35
  413. package/app/component/shopping-cart/ione-shopping-cart.component.d.ts +0 -71
  414. package/app/component/shopping-cart/ione-shopping-cart.module.d.ts +0 -2
  415. package/app/component/shopping-cart/shopping-cart/shopping-cart.component.d.ts +0 -61
  416. package/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.d.ts +0 -34
  417. package/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.d.ts +0 -91
  418. package/app/enum/checkout-steps.enum.d.ts +0 -7
  419. package/app/enum/direction.enum.d.ts +0 -6
  420. package/app/enum/position-grid-row.enum.d.ts +0 -4
  421. package/app/model/transaction-add-text-line-request.d.ts +0 -9
  422. package/app/service/options.service.d.ts +0 -14
  423. package/app/service/transaction-event.service.d.ts +0 -53
  424. package/css/styles.css +0 -38
  425. package/esm2015/app/component/checkout/checkout/checkout.component.js +0 -149
  426. package/esm2015/app/component/checkout/checkout-login/checkout-login.component.js +0 -106
  427. package/esm2015/app/component/checkout/checkout-overview/checkout-overview.component.js +0 -185
  428. package/esm2015/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +0 -47
  429. package/esm2015/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +0 -47
  430. package/esm2015/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +0 -420
  431. package/esm2015/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +0 -115
  432. package/esm2015/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +0 -396
  433. package/esm2015/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -33
  434. package/esm2015/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -53
  435. package/esm2015/app/component/checkout/checkout-transaction/checkout-transaction.component.js +0 -53
  436. package/esm2015/app/component/checkout/ione-checkout.component.js +0 -135
  437. package/esm2015/app/component/checkout/ione-checkout.module.js +0 -76
  438. package/esm2015/app/component/core/base/default-ok-cancel-buttons.component.js +0 -39
  439. package/esm2015/app/component/core/base/transaction-base.component.js +0 -146
  440. package/esm2015/app/component/core/characteristic-answer/characteristic-answer.component.js +0 -100
  441. package/esm2015/app/component/core/core.module.js +0 -43
  442. package/esm2015/app/component/core/directive/template-wrapper.directive.js +0 -69
  443. package/esm2015/app/component/core/icon/icon.component.js +0 -32
  444. package/esm2015/app/component/core/image-display/image-display.component.js +0 -41
  445. package/esm2015/app/component/core/no-image-display/no-image-display.component.js +0 -26
  446. package/esm2015/app/component/core/stock-status-indicator/stock-status-indicator.component.js +0 -24
  447. package/esm2015/app/component/service-order/ione-service-order-module.js +0 -114
  448. package/esm2015/app/component/service-order/ione-service-order.component.js +0 -96
  449. package/esm2015/app/component/service-order/service-order.component.js +0 -199
  450. package/esm2015/app/component/service-order/summary/transaction-article-summary.component.js +0 -55
  451. package/esm2015/app/component/service-order/summary/transaction-delivery-summary.component.js +0 -59
  452. package/esm2015/app/component/service-order/summary/transaction-order-summary.component.js +0 -43
  453. package/esm2015/app/component/service-order/summary/transaction-payment-info.component.js +0 -35
  454. package/esm2015/app/component/service-order/summary/transaction-product-contract-summary.component.js +0 -38
  455. package/esm2015/app/component/service-order/summary/transaction-product-summary.component.js +0 -41
  456. package/esm2015/app/component/service-order/summary/transaction-service-status.component.js +0 -37
  457. package/esm2015/app/component/service-order/summary/transaction-service-summary.component.js +0 -38
  458. package/esm2015/app/component/service-order/summary/transaction-summary-block.component.js +0 -53
  459. package/esm2015/app/component/service-order/transaction-article-text/transaction-article-text.component.js +0 -140
  460. package/esm2015/app/component/service-order/transaction-article-text-overview/transaction-article-text-overview.component.js +0 -105
  461. package/esm2015/app/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.js +0 -73
  462. package/esm2015/app/component/service-order/transaction-header-block/transaction-header-block.component.js +0 -83
  463. package/esm2015/app/component/service-order/transaction-manager/transaction-manager.component.js +0 -314
  464. package/esm2015/app/component/service-order/transaction-order-line-view/transaction-order-line-view.component.js +0 -76
  465. package/esm2015/app/component/service-order/transaction-order-lines/transaction-order-lines.component.js +0 -71
  466. package/esm2015/app/component/service-order/transaction-order-totals/transaction-order-totals.component.js +0 -36
  467. package/esm2015/app/component/service-order/transaction-relation/transaction-relation-address.component.js +0 -116
  468. package/esm2015/app/component/service-order/transaction-relation/transaction-relation-edit.component.js +0 -225
  469. package/esm2015/app/component/service-order/transaction-sidebar/transaction-line-accordion.component.js +0 -172
  470. package/esm2015/app/component/service-order/transaction-sidebar/transaction-sidebar-right.component.js +0 -120
  471. package/esm2015/app/component/service-order/warehouse/warehouse.component.js +0 -133
  472. package/esm2015/app/component/shopping-cart/ione-shopping-cart.component.js +0 -185
  473. package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +0 -62
  474. package/esm2015/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +0 -294
  475. package/esm2015/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +0 -172
  476. package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +0 -451
  477. package/esm2015/app/enum/checkout-steps.enum.js +0 -10
  478. package/esm2015/app/enum/content-view-mode.enum.js +0 -10
  479. package/esm2015/app/enum/direction.enum.js +0 -9
  480. package/esm2015/app/enum/language-code.enum.js +0 -8
  481. package/esm2015/app/enum/order-discount-type.enum.js +0 -7
  482. package/esm2015/app/enum/position-grid-row.enum.js +0 -6
  483. package/esm2015/app/enum/time-size.type.js +0 -10
  484. package/esm2015/app/model/business-object.js +0 -81
  485. package/esm2015/app/model/standard-text.js +0 -3
  486. package/esm2015/app/model/text-value-container.js +0 -3
  487. package/esm2015/app/model/transaction-add-text-line-request.js +0 -11
  488. package/esm2015/app/pipe/append.pipe.js +0 -17
  489. package/esm2015/app/pipe/co-currency.pipe.js +0 -47
  490. package/esm2015/app/pipe/date-duration.pipe.js +0 -57
  491. package/esm2015/app/pipe/delivery-time.pipe.js +0 -33
  492. package/esm2015/app/pipe/localize.pipe.js +0 -28
  493. package/esm2015/app/pipe/safe-style-pipe.js +0 -19
  494. package/esm2015/app/service/dictionary.service.js +0 -76
  495. package/esm2015/app/service/ione-connector-adapter.service.js +0 -553
  496. package/esm2015/app/service/options.service.js +0 -92
  497. package/esm2015/app/service/transaction-event.service.js +0 -26
  498. package/esm2015/app/service/transaction.service.js +0 -572
  499. package/esm2015/app/utils/string-utils.js +0 -64
  500. package/esm2015/assets/dictionary/text.properties.js +0 -332
  501. package/esm2015/factory/business-object-factory.js +0 -120
  502. package/esm2015/factory/decorators/boolean.decorator.js +0 -102
  503. package/esm2015/factory/decorators/complex-array.decorator.js +0 -55
  504. package/esm2015/factory/decorators/complex-field.decorator.js +0 -57
  505. package/esm2015/factory/decorators/date-field.decorator.js +0 -36
  506. package/esm2015/factory/decorators/string-number.decorator.js +0 -43
  507. package/esm2015/utils/array-utils.js +0 -183
  508. package/esm2015/utils/is-nill.function.js +0 -5
@@ -0,0 +1,521 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from "@angular/core";
3
+ import { NULL_CUSTOMER_FULL_OBJECT } from "@colijnit/transactionapi/build/model/nul-relation-object";
4
+ import { TransactionKind } from "@colijnit/transactionapi/build/enum/transaction-kind.enum";
5
+ import { SequenceName } from "@colijnit/transactionapi/build/enum/sequence-name.enum";
6
+ import { TransactionLineType } from "@colijnit/transactionapi/build/enum/transaction-line-type.enum";
7
+ import { PendingReasonType } from "@colijnit/transactionapi/build/enum/pending-reason-type.enum";
8
+ import { throwError } from "rxjs";
9
+ import { AddressType } from "@colijnit/transactionapi/build/enum/address-type.enum";
10
+ import { PendingReasonService } from "./pending-reason.service";
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./dialog.service";
13
+ import * as i2 from "./options.service";
14
+ import * as i3 from "./ione-connector-adapter.service";
15
+ export class TransactionService extends PendingReasonService {
16
+ // public get currentLines(): TransactionLineInfo[] {
17
+ // return this._currentLines;
18
+ // }
19
+ //
20
+ // public set currentLines(value: TransactionLineInfo[]) {
21
+ // this._currentLines = value;
22
+ // this.articleAmount = ArrayUtils.FindAll(this._currentLines, line => line.isArticle).length;
23
+ // }
24
+ //
25
+ // public set currentTotals(value: TransactionTotal) {
26
+ // this._currentTotals = value;
27
+ // }
28
+ //
29
+ // public get currentTotals(): TransactionTotal {
30
+ // return this._currentTotals;
31
+ // }
32
+ //
33
+ // public get currentRelation(): RelationAnyType {
34
+ // return this._currentRelation;
35
+ // }
36
+ //
37
+ // public get currentTransaction(): TransactionInfo {
38
+ // return this._currentTransaction;
39
+ // }
40
+ //
41
+ // public set currentLineOperationStatuses(values: LineOperationStatus[]) {
42
+ // this._currentLineOperationStatuses = values;
43
+ // }
44
+ //
45
+ // public get currentLineOperationStatuses(): LineOperationStatus[] {
46
+ // return this._currentLineOperationStatuses;
47
+ // }
48
+ //
49
+ // public set currentLineOperationStatus(value: LineOperationStatus) {
50
+ // this._currentLineOperationStatus = value;
51
+ // }
52
+ //
53
+ // public get currentLineOperationStatus(): LineOperationStatus | undefined {
54
+ // const status: LineOperationStatus = this.currentLineOperationStatuses.find(line => line.pendingReasonType !== PendingReasonType.NONE
55
+ // && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
56
+ // return status;
57
+ // }
58
+ //
59
+ // public articleAmount: number = 0;
60
+ // private _currentLines: TransactionLineInfo[] = [];
61
+ // private _currentTotals: TransactionTotal = new TransactionTotal();
62
+ // private _currentRelation: RelationAnyType; // = NULL_RELATION_OBJECT;
63
+ // private _currentTransaction: TransactionInfo = new TransactionInfo();
64
+ // private _currentLineOperationStatus: LineOperationStatus = new LineOperationStatus();
65
+ // private _currentLineOperationStatuses: LineOperationStatus[] = [];
66
+ pendingLineOperationStatus(lineOperationStatuses) {
67
+ const status = lineOperationStatuses.find(line => line.pendingReasonType !== PendingReasonType.NONE
68
+ && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
69
+ return status;
70
+ }
71
+ getArticleFullObject(goodId) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ return yield this.connector.getArticleFullObject(goodId);
74
+ });
75
+ }
76
+ getDocumentContent(id) {
77
+ return this.connector.getDocumentContent(id);
78
+ }
79
+ getGoodIdFromArticleNr(sku) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ return yield this.connector.getGoodIdFromArticleNr(sku);
82
+ });
83
+ }
84
+ getCountry(countryCode) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ return yield this.connector.getCountry(countryCode);
87
+ });
88
+ }
89
+ getCashRegisters() {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ return this.connector.getCashRegisters(undefined, 1);
92
+ });
93
+ }
94
+ getRelationNumber(relationId) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ return this.connector.getRelationNumber(relationId);
97
+ });
98
+ }
99
+ saveRelation() {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ // this._cleanRelationBeforeSave();
102
+ if (!this.relation.relationId) {
103
+ this.relation = yield this.connector.insertCustomer(this.relation);
104
+ }
105
+ else {
106
+ this.relation = yield this.connector.updateCustomer(this.relation);
107
+ }
108
+ return yield this.addRelationToTransaction(this.relation.relationId);
109
+ });
110
+ }
111
+ getSequenceValue() {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ return yield this.connector.getSequenceValue(SequenceName.RelationId);
114
+ });
115
+ }
116
+ getRelationPrivacySettings() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ return yield this.connector.getRelationPrivacySettings();
119
+ });
120
+ }
121
+ getArticleBoundTextLinesOfArticleLine(articleLineUuid) {
122
+ return this.connector.getArticleBoundTextLinesOfArticleLine(articleLineUuid);
123
+ }
124
+ createTransaction() {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ return new Promise((resolve, reject) => {
127
+ this.connector.createTransaction(TransactionKind.SalesOrder, "1").then((response) => {
128
+ this._rememberCurrentTransaction(response);
129
+ resolve(true);
130
+ }, (error) => {
131
+ reject(error);
132
+ }).catch((reason) => {
133
+ reject(false);
134
+ });
135
+ });
136
+ });
137
+ }
138
+ getTransaction(transactionNo) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ return yield this.openExistingTransaction(TransactionKind.SalesOrder, transactionNo);
141
+ });
142
+ }
143
+ openExistingTransaction(kind, transactionNr) {
144
+ return new Promise((resolve, reject) => {
145
+ this.connector.getTransactionByNrAndKind(kind, transactionNr)
146
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
147
+ if (response.isSuccess) {
148
+ this.transactionUpdated.next(response);
149
+ resolve(true);
150
+ }
151
+ else {
152
+ reject(false);
153
+ }
154
+ }))
155
+ .catch((reason) => {
156
+ reject(false);
157
+ });
158
+ });
159
+ }
160
+ getTransactionById(transactionId) {
161
+ return new Promise((resolve, reject) => {
162
+ this.connector.getTransactionById(transactionId)
163
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
164
+ if (response.isSuccess) {
165
+ this.transactionUpdated.next(response);
166
+ resolve(true);
167
+ }
168
+ else {
169
+ reject(false);
170
+ }
171
+ }))
172
+ .catch((reason) => {
173
+ reject(false);
174
+ });
175
+ });
176
+ }
177
+ commit() {
178
+ return this.connector.commit();
179
+ }
180
+ saveTransaction(close = false) {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ const response = yield this.connector.saveTransaction(this.currentTransaction.transactionInfo.uuid);
183
+ if (response.isSuccess) {
184
+ this._rememberCurrentTransaction(response);
185
+ }
186
+ return response;
187
+ });
188
+ }
189
+ saveTransactionByUuid(transactionUuid) {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ return new Promise((resolve, reject) => {
192
+ this.connector.saveTransaction(transactionUuid)
193
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
194
+ if (response.isSuccess) {
195
+ this.transactionUpdated.next(response);
196
+ resolve(true);
197
+ }
198
+ else {
199
+ reject(false);
200
+ }
201
+ }))
202
+ .catch((reason) => {
203
+ if (reason) {
204
+ this.dialogService.showError(reason.getFullErrorString());
205
+ }
206
+ reject(false);
207
+ });
208
+ });
209
+ });
210
+ }
211
+ addRelationToTransaction(relationId) {
212
+ return __awaiter(this, void 0, void 0, function* () {
213
+ yield this._checkAndCreateTransaction();
214
+ const result = yield this.connector.addRelationToTransaction(this.currentTransaction.transactionInfo.uuid, relationId);
215
+ if (result.isSuccess) {
216
+ this._rememberCurrentTransaction(result);
217
+ return true;
218
+ }
219
+ else {
220
+ return false;
221
+ }
222
+ });
223
+ }
224
+ getCommissionCodes(languageCode) {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ return yield this.connector.getCommissionCodes(languageCode);
227
+ });
228
+ }
229
+ getInOutCollection(languageCode) {
230
+ return __awaiter(this, void 0, void 0, function* () {
231
+ return yield this.connector.getInOutCollection(languageCode);
232
+ });
233
+ }
234
+ getTransactionArticleWarehouses(goodId) {
235
+ return __awaiter(this, void 0, void 0, function* () {
236
+ return this.connector.getTransactionArticleWarehouses(goodId);
237
+ });
238
+ }
239
+ getMarketingCodes() {
240
+ return __awaiter(this, void 0, void 0, function* () {
241
+ return yield this.connector.getMarketingCodes();
242
+ });
243
+ }
244
+ insertCustomer(relation) {
245
+ return __awaiter(this, void 0, void 0, function* () {
246
+ return yield this.connector.insertCustomer(relation);
247
+ });
248
+ }
249
+ updateCustomer(relation) {
250
+ return __awaiter(this, void 0, void 0, function* () {
251
+ return new Promise((resolve, reject) => {
252
+ this.connector.updateCustomer(relation).then((response) => __awaiter(this, void 0, void 0, function* () {
253
+ // this.currentTransaction.transactionInfo.relation = relation;
254
+ resolve(response);
255
+ }))
256
+ .catch((response) => {
257
+ resolve(response);
258
+ });
259
+ });
260
+ });
261
+ }
262
+ getDeliveryMethods() {
263
+ return __awaiter(this, void 0, void 0, function* () {
264
+ return yield this.connector.getDeliveryMethods();
265
+ });
266
+ }
267
+ getDeliveryOptions() {
268
+ return __awaiter(this, void 0, void 0, function* () {
269
+ return yield this.connector.getDeliveryOptions();
270
+ });
271
+ }
272
+ setTransactionDeliveryOptions() {
273
+ return __awaiter(this, void 0, void 0, function* () {
274
+ // const transactionDeliveryOptionsRequest: SetTransactionDeliveryOptionsRequest = this._getTransactionDeliveryOptions();
275
+ if (!this.deliveryOptions.transactionUuid) {
276
+ this.deliveryOptions.transactionUuid = this.currentTransaction.transactionInfo.uuid;
277
+ }
278
+ const response = yield this.connector.setTransactionDeliveryOptions(this.deliveryOptions)
279
+ .catch(() => {
280
+ return undefined;
281
+ });
282
+ return response && response.isSuccess;
283
+ });
284
+ }
285
+ getRelationListObjects(relationRequest) {
286
+ return __awaiter(this, void 0, void 0, function* () {
287
+ return yield this.connector.getRelationListObjects(relationRequest);
288
+ });
289
+ }
290
+ retrieveLineImage(line) {
291
+ return __awaiter(this, void 0, void 0, function* () {
292
+ return yield this.getArticleImageByArticleNumber(line.articleNumber);
293
+ });
294
+ }
295
+ getArticleImageByArticleNumber(articleNumber) {
296
+ return __awaiter(this, void 0, void 0, function* () {
297
+ const goodId = yield this.connector.getGoodIdFromArticleNr(articleNumber);
298
+ return this.getArticleImageByGoodId(goodId);
299
+ });
300
+ }
301
+ getArticleImageByGoodId(goodId) {
302
+ return __awaiter(this, void 0, void 0, function* () {
303
+ if (!isNaN(goodId)) {
304
+ return this.connector.getSingleImage(goodId, 1, true, true);
305
+ }
306
+ else {
307
+ return "";
308
+ }
309
+ });
310
+ }
311
+ addArticle(articleNo, amount = 1, warehouseNo = 1, commissionCode = "2", isReturn = false, aboveLineNr = 0, belowLineNr = 0) {
312
+ return __awaiter(this, void 0, void 0, function* () {
313
+ yield this._checkAndCreateTransaction();
314
+ const response = yield this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr);
315
+ if (yield this.handleLineOperationStatuses(response)) {
316
+ this._rememberCurrentTransaction(response);
317
+ }
318
+ return true;
319
+ });
320
+ }
321
+ // public async addArticleToTransaction(transactionUuid: string, articleNo: string, amount: number = 1, warehouseNo: number = 1, commissionCode: string = "2", isReturn: boolean = false, aboveLineNr: number = 0, belowLineNr: number = 0): Promise<LineOperationResponse> {
322
+ // await this._checkAndCreateTransaction();
323
+ // return new Promise<LineOperationResponse>((resolve, reject) => {
324
+ // this.connector.addTransactionLine(transactionUuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
325
+ // .then(async( response: LineOperationResponse) => {
326
+ // resolve(response);
327
+ // }, (error) => {
328
+ // this._prompt.showError(error);
329
+ // reject(error);
330
+ // })
331
+ // .catch((reason: ValidationResult) => {
332
+ // this._prompt.showError(reason.getFullErrorString());
333
+ // resolve(null);
334
+ // });
335
+ // });
336
+ // }
337
+ addTransactionLine(lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr, remember = true) {
338
+ return __awaiter(this, void 0, void 0, function* () {
339
+ yield this._checkAndCreateTransaction();
340
+ return new Promise((resolve, reject) => {
341
+ this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid, lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
342
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
343
+ this._rememberResponse(remember, response);
344
+ resolve(response);
345
+ }), (error) => {
346
+ reject(error);
347
+ })
348
+ .catch((reason) => {
349
+ resolve(null);
350
+ });
351
+ });
352
+ });
353
+ }
354
+ addTextLine(showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr, remember = true) {
355
+ return __awaiter(this, void 0, void 0, function* () {
356
+ yield this._checkAndCreateTransaction();
357
+ return new Promise((resolve, reject) => {
358
+ this.connector.addTextLineToTransaction(this.currentTransaction.transactionInfo.uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr)
359
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
360
+ this._rememberResponse(remember, response);
361
+ resolve(response);
362
+ }), (error) => {
363
+ reject(error);
364
+ })
365
+ .catch((reason) => {
366
+ resolve(null);
367
+ });
368
+ });
369
+ });
370
+ }
371
+ addTextLineToTransaction(transactionUuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr) {
372
+ return __awaiter(this, void 0, void 0, function* () {
373
+ yield this._checkAndCreateTransaction();
374
+ return new Promise((resolve, reject) => {
375
+ this.connector.addTextLineToTransaction(transactionUuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr)
376
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
377
+ resolve(response);
378
+ }), (error) => {
379
+ reject(error);
380
+ })
381
+ .catch((reason) => {
382
+ resolve(null);
383
+ });
384
+ });
385
+ });
386
+ }
387
+ changeLineSequence(lineUuid, aboveLineNr, belowLineNr, remember = true) {
388
+ return new Promise((resolve, reject) => {
389
+ this.connector.changeLineSequence(this.currentTransaction.transactionInfo.uuid, lineUuid, aboveLineNr, belowLineNr)
390
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
391
+ this._rememberResponse(remember, response);
392
+ resolve(response);
393
+ }), (error) => {
394
+ reject(error);
395
+ })
396
+ .catch((reason) => {
397
+ resolve(null);
398
+ });
399
+ });
400
+ }
401
+ deleteTransactionLine(transactionUuid, TransactionLineUuid, remember = true) {
402
+ return __awaiter(this, void 0, void 0, function* () {
403
+ return new Promise((resolve, reject) => {
404
+ this.connector.deleteTransactionLine(transactionUuid, TransactionLineUuid)
405
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
406
+ this._rememberResponse(remember, response);
407
+ if (response.isSuccess) {
408
+ resolve(response);
409
+ }
410
+ else {
411
+ reject(response);
412
+ }
413
+ }))
414
+ .catch((reason) => {
415
+ resolve(null);
416
+ });
417
+ });
418
+ });
419
+ }
420
+ changeTransactionLineQuantity(lineUuid, newQuantity, remember = true) {
421
+ return __awaiter(this, void 0, void 0, function* () {
422
+ return new Promise((resolve) => {
423
+ this.connector.changeTransactionLineQuantity(this.currentTransaction.transactionInfo.uuid, lineUuid, newQuantity)
424
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
425
+ if (response.isSuccess) {
426
+ this._rememberResponse(remember, response);
427
+ }
428
+ resolve(response);
429
+ })).catch((reason) => {
430
+ resolve(null);
431
+ });
432
+ });
433
+ });
434
+ }
435
+ setRelationByUser(username, password) {
436
+ return __awaiter(this, void 0, void 0, function* () {
437
+ return new Promise((resolve) => {
438
+ this.connector.setRelationByUser(this.currentTransaction.transactionInfo.uuid, username, password)
439
+ .then((isSuccess) => __awaiter(this, void 0, void 0, function* () {
440
+ resolve(isSuccess);
441
+ })).catch((reason) => {
442
+ resolve(false);
443
+ });
444
+ });
445
+ });
446
+ }
447
+ getCustomerFullObjectByRelationId(relationId) {
448
+ return __awaiter(this, void 0, void 0, function* () {
449
+ const relationNr = yield this.connector.getRelationNumber(relationId);
450
+ if (relationNr) {
451
+ return yield this.connector.getCustomerFullObject(Number(relationNr));
452
+ }
453
+ return NULL_CUSTOMER_FULL_OBJECT;
454
+ });
455
+ }
456
+ // public async setRelationByUser(username: string, password: string): Promise<boolean> {
457
+ // const response: boolean = await this.connector.setRelationByUser(this.currentTransaction.uuid, username, password);
458
+ // return response;
459
+ // }
460
+ getTextTypes(languageCode) {
461
+ return __awaiter(this, void 0, void 0, function* () {
462
+ return yield this.connector.getTextTypes(languageCode);
463
+ });
464
+ }
465
+ getStandardTexts(languageCode) {
466
+ return __awaiter(this, void 0, void 0, function* () {
467
+ return yield this.connector.getStandardTexts(languageCode);
468
+ });
469
+ }
470
+ getFirstAddress(relation) {
471
+ if (!relation || !relation.addresses.length) {
472
+ return;
473
+ }
474
+ return relation.getFirstAvailableAddress([
475
+ AddressType.DeliveryAddress,
476
+ AddressType.BillingAddress,
477
+ AddressType.VisitingAddress,
478
+ AddressType.MailingAddress,
479
+ AddressType.NursingAddress
480
+ ]);
481
+ }
482
+ // private _cleanRelationBeforeSave(): void {
483
+ // ArrayUtils.RemoveElementsByFilter(this.currentTransaction.transactionInfo.relation.contactOptions, ((item: ContactOption) => {
484
+ // return isNill(item.value);
485
+ // }));
486
+ // }
487
+ _checkAndCreateTransaction() {
488
+ return __awaiter(this, void 0, void 0, function* () {
489
+ if (!this.currentTransaction || !this.currentTransaction.transactionInfo || !this.currentTransaction.transactionInfo.transactionNr) {
490
+ if (!(yield this.createTransaction())) {
491
+ throwError("Failed to create transaction");
492
+ }
493
+ }
494
+ });
495
+ }
496
+ _rememberCurrentTransactionLineStatus(value) {
497
+ // this._currentLineOperationStatus.uuid = value.lineUuid;
498
+ // this._currentLineOperationStatus.pendingReason = value.pendingReason;
499
+ // this._currentLineOperationStatus.pendingReasonType = value.pendingReasonType;
500
+ }
501
+ // private async _updateRelation(): Promise<void> {
502
+ // if (this.currentTransaction && this.currentTransaction.relation && this.currentTransaction.relation.relationId) {
503
+ // if (!this._currentRelation || this._currentRelation.relationId !== this.currentTransaction.relation.relationId) {
504
+ // this._currentRelation = await this.getCustomerFullObjectByRelationId(this.currentTransaction.relation.relationId);
505
+ // }
506
+ // }
507
+ // }
508
+ _rememberResponse(remember, response) {
509
+ if (remember) {
510
+ this._rememberCurrentTransaction(response);
511
+ this._rememberCurrentTransactionLineStatus(response);
512
+ }
513
+ }
514
+ }
515
+ TransactionService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TransactionService_Factory() { return new TransactionService(i0.ɵɵinject(i1.DialogService), i0.ɵɵinject(i2.OptionsService), i0.ɵɵinject(i3.IOneConnectorAdapterService)); }, token: TransactionService, providedIn: "root" });
516
+ TransactionService.decorators = [
517
+ { type: Injectable, args: [{
518
+ providedIn: "root"
519
+ },] }
520
+ ];
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRW5HLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUcxRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFPcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFRbkcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFHL0YsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBTTlELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxvQkFBb0I7SUFFMUQscURBQXFEO0lBQ3JELCtCQUErQjtJQUMvQixJQUFJO0lBQ0osRUFBRTtJQUNGLDBEQUEwRDtJQUMxRCxnQ0FBZ0M7SUFDaEMsZ0dBQWdHO0lBQ2hHLElBQUk7SUFDSixFQUFFO0lBQ0Ysc0RBQXNEO0lBQ3RELGlDQUFpQztJQUNqQyxJQUFJO0lBQ0osRUFBRTtJQUNGLGlEQUFpRDtJQUNqRCxnQ0FBZ0M7SUFDaEMsSUFBSTtJQUNKLEVBQUU7SUFDRixrREFBa0Q7SUFDbEQsa0NBQWtDO0lBQ2xDLElBQUk7SUFDSixFQUFFO0lBQ0YscURBQXFEO0lBQ3JELHFDQUFxQztJQUNyQyxJQUFJO0lBQ0osRUFBRTtJQUNGLDJFQUEyRTtJQUMzRSxpREFBaUQ7SUFDakQsSUFBSTtJQUNKLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsK0NBQStDO0lBQy9DLElBQUk7SUFDSixFQUFFO0lBQ0Ysc0VBQXNFO0lBQ3RFLDhDQUE4QztJQUM5QyxJQUFJO0lBQ0osRUFBRTtJQUNGLDZFQUE2RTtJQUM3RSx5SUFBeUk7SUFDekkscUZBQXFGO0lBQ3JGLG1CQUFtQjtJQUNuQixJQUFJO0lBQ0osRUFBRTtJQUNGLG9DQUFvQztJQUVwQyxxREFBcUQ7SUFDckQscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsd0ZBQXdGO0lBQ3hGLHFFQUFxRTtJQUU5RCwwQkFBMEIsQ0FBQyxxQkFBNEM7UUFDNUUsTUFBTSxNQUFNLEdBQXdCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO2VBQ25ILElBQUksQ0FBQyxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFWSxvQkFBb0IsQ0FBQyxNQUFjOztZQUM5QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxDQUFDO0tBQUE7SUFFTSxrQkFBa0IsQ0FBQyxFQUFVO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVksc0JBQXNCLENBQUMsR0FBVzs7WUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsQ0FBQztLQUFBO0lBRVksVUFBVSxDQUFDLFdBQW1COztZQUN6QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRVksZ0JBQWdCOztZQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7S0FBQTtJQUVZLGlCQUFpQixDQUFDLFVBQWtCOztZQUMvQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRVksWUFBWTs7WUFDdkIsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7S0FBQTtJQUVZLGdCQUFnQjs7WUFDM0IsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7S0FBQTtJQUVZLDBCQUEwQjs7WUFDckMsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMzRCxDQUFDO0tBQUE7SUFFTSxxQ0FBcUMsQ0FBQyxlQUF1QjtRQUNsRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUNBQXFDLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVZLGlCQUFpQjs7WUFDNUIsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQWlCLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO2dCQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBaUMsRUFBRSxFQUFFO29CQUMzRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxhQUFxQjs7WUFDL0MsT0FBTyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7S0FBQTtJQUVNLHVCQUF1QixDQUFDLElBQXFCLEVBQUUsYUFBcUI7UUFDekUsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQWlCLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztpQkFDMUQsSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDZjtxQkFBTTtvQkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLENBQUEsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdNLGtCQUFrQixDQUFDLGFBQXFCO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztpQkFDN0MsSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDZjtxQkFBTTtvQkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLENBQUEsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVZLGVBQWUsQ0FBQyxRQUFpQixLQUFLOztZQUNqRCxNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdILElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztLQUFBO0lBRVkscUJBQXFCLENBQUMsZUFBdUI7O1lBQ3hELE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO3FCQUM1QyxJQUFJLENBQUMsQ0FBTyxRQUFpQyxFQUFFLEVBQUU7b0JBQ2hELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNmO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDZjtnQkFDSCxDQUFDLENBQUEsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ2xDLElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7cUJBQzNEO29CQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLHdCQUF3QixDQUFDLFVBQWtCOztZQUN0RCxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUE0QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEosSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUNwQixJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUM7S0FBQTtJQUVZLGtCQUFrQixDQUFDLFlBQW9COztZQUNsRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRCxDQUFDO0tBQUE7SUFFWSxrQkFBa0IsQ0FBQyxZQUFvQjs7WUFDbEQsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsQ0FBQztLQUFBO0lBRVksK0JBQStCLENBQUMsTUFBYzs7WUFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLENBQUM7S0FBQTtJQUVZLGlCQUFpQjs7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0tBQUE7SUFFWSxjQUFjLENBQUMsUUFBNEI7O1lBQ3RELE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDO0tBQUE7SUFFWSxjQUFjLENBQUMsUUFBNEI7O1lBQ3RELE9BQU8sSUFBSSxPQUFPLENBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBTyxRQUE0QixFQUFFLEVBQUU7b0JBQ2xGLCtEQUErRDtvQkFDL0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUEsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxRQUE0QixFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLGtCQUFrQjs7WUFDN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0tBQUE7SUFFWSxrQkFBa0I7O1lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsQ0FBQztLQUFBO0lBRVksNkJBQTZCOztZQUN4Qyx5SEFBeUg7WUFDekgsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzthQUNyRjtZQUNELE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDL0csS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDeEMsQ0FBQztLQUFBO0lBRVksc0JBQXNCLENBQUMsZUFBZ0M7O1lBQ2xFLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7S0FBQTtJQUVZLGlCQUFpQixDQUFDLElBQXlCOztZQUN0RCxPQUFPLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RSxDQUFDO0tBQUE7SUFFWSw4QkFBOEIsQ0FBQyxhQUFxQjs7WUFDL0QsTUFBTSxNQUFNLEdBQVcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7S0FBQTtJQUVZLHVCQUF1QixDQUFDLE1BQWM7O1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0Q7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUM7YUFDWDtRQUNILENBQUM7S0FBQTtJQUVZLFVBQVUsQ0FDckIsU0FBaUIsRUFDakIsU0FBaUIsQ0FBQyxFQUNsQixjQUFzQixDQUFDLEVBQ3ZCLGlCQUF5QixHQUFHLEVBQzVCLFdBQW9CLEtBQUssRUFDekIsY0FBc0IsQ0FBQyxFQUN2QixjQUFzQixDQUFDOztZQUV2QixNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQy9FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNySyxJQUFJLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTtJQUVELDZRQUE2UTtJQUM3USw2Q0FBNkM7SUFDN0MscUVBQXFFO0lBQ3JFLDhLQUE4SztJQUM5SywyREFBMkQ7SUFDM0QsNkJBQTZCO0lBQzdCLHdCQUF3QjtJQUN4Qix5Q0FBeUM7SUFDekMseUJBQXlCO0lBQ3pCLFdBQVc7SUFDWCwrQ0FBK0M7SUFDL0MsK0RBQStEO0lBQy9ELHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osUUFBUTtJQUNSLElBQUk7SUFFUyxrQkFBa0IsQ0FBQyxRQUE2QixFQUM3QixTQUFpQixFQUNqQixNQUFjLEVBQ2QsV0FBb0IsRUFDcEIsY0FBdUIsRUFDdkIsUUFBa0IsRUFDbEIsV0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsV0FBb0IsSUFBSTs7WUFDdEQsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUN4QyxPQUFPLElBQUksT0FBTyxDQUF3QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO3FCQUMxSyxJQUFJLENBQUMsQ0FBTyxRQUErQixFQUFFLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLFdBQVcsQ0FDVixlQUF1QixFQUN2QixJQUFZLEVBQ1osTUFBYyxFQUNkLFlBQXFCLEVBQ3JCLGdCQUF3QixFQUN4QixXQUFvQixFQUNwQixXQUFvQixFQUNwQixXQUFvQixJQUFJOztZQUNwQyxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQXdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO3FCQUMzSyxJQUFJLENBQUMsQ0FBTyxRQUErQixFQUFFLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDWCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLHdCQUF3QixDQUNuQyxlQUF1QixFQUN2QixlQUF1QixFQUN2QixJQUFZLEVBQ1osTUFBYyxFQUNkLFlBQXFCLEVBQ3JCLGdCQUF3QixFQUN4QixXQUFvQixFQUNwQixXQUFvQjs7WUFDcEIsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUN4QyxPQUFPLElBQUksT0FBTyxDQUF3QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7cUJBQzlJLElBQUksQ0FBQyxDQUFPLFFBQStCLEVBQUUsRUFBRTtvQkFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRU0sa0JBQWtCLENBQ3ZCLFFBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLFdBQW9CLEVBQ3BCLFdBQW9CLElBQUk7UUFDeEIsT0FBTyxJQUFJLE9BQU8sQ0FBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztpQkFDaEgsSUFBSSxDQUFDLENBQU8sUUFBK0IsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVkscUJBQXFCLENBQUMsZUFBdUIsRUFBRSxtQkFBMkIsRUFBRSxXQUFvQixJQUFJOztZQUMvRyxPQUFPLElBQUksT0FBTyxDQUF3QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUM7cUJBQ3ZFLElBQUksQ0FBQyxDQUFPLFFBQStCLEVBQUUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO3dCQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ25CO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDbEI7Z0JBQ0gsQ0FBQyxDQUFBLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSw2QkFBNkIsQ0FBQyxRQUFnQixFQUFFLFdBQW1CLEVBQUUsV0FBb0IsSUFBSTs7WUFDeEcsT0FBTyxJQUFJLE9BQU8sQ0FBd0IsQ0FBQyxPQUFpQixFQUFFLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztxQkFDOUcsSUFBSSxDQUFDLENBQU8sUUFBK0IsRUFBRSxFQUFFO29CQUM5QyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQzVDO29CQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7O1lBQy9ELE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFpQixFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztxQkFDL0YsSUFBSSxDQUFDLENBQU8sU0FBa0IsRUFBRSxFQUFFO29CQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSxpQ0FBaUMsQ0FBQyxVQUFrQjs7WUFDL0QsTUFBTSxVQUFVLEdBQVcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlFLElBQUksVUFBVSxFQUFFO2dCQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsT0FBTyx5QkFBeUIsQ0FBQztRQUNuQyxDQUFDO0tBQUE7SUFFRCx5RkFBeUY7SUFDekYsd0hBQXdIO0lBQ3hILHFCQUFxQjtJQUNyQixJQUFJO0lBRVMsWUFBWSxDQUFDLFlBQW9COztZQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsQ0FBQztLQUFBO0lBRVksZ0JBQWdCLENBQUMsWUFBb0I7O1lBQ2hELE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUM7S0FBQTtJQUVNLGVBQWUsQ0FBQyxRQUF5QjtRQUM5QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUQsT0FBTyxRQUFRLENBQUMsd0JBQXdCLENBQUM7WUFDdkMsV0FBVyxDQUFDLGVBQWU7WUFDM0IsV0FBVyxDQUFDLGNBQWM7WUFDMUIsV0FBVyxDQUFDLGVBQWU7WUFDM0IsV0FBVyxDQUFDLGNBQWM7WUFDMUIsV0FBVyxDQUFDLGNBQWM7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxtSUFBbUk7SUFDbkksaUNBQWlDO0lBQ2pDLFNBQVM7SUFDVCxJQUFJO0lBRVUsMEJBQTBCOztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFO2dCQUNsSSxJQUFJLENBQUMsQ0FBQSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBLEVBQUU7b0JBQ25DLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRU8scUNBQXFDLENBQUMsS0FBNEI7UUFDeEUsMERBQTBEO1FBQzFELHdFQUF3RTtRQUN4RSxnRkFBZ0Y7SUFDbEYsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxzSEFBc0g7SUFDdEgsd0hBQXdIO0lBQ3hILDJIQUEySDtJQUMzSCxRQUFRO0lBQ1IsTUFBTTtJQUNOLElBQUk7SUFFSSxpQkFBaUIsQ0FBQyxRQUFpQixFQUFFLFFBQStCO1FBQzFFLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7Ozs7WUFoZ0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvXCI7XG5pbXBvcnQge05VTExfQ1VTVE9NRVJfRlVMTF9PQkpFQ1R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbnVsLXJlbGF0aW9uLW9iamVjdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bVwiO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtDb3VudHJ5fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvdW50cnkuYm9cIjtcbmltcG9ydCB7VmFsaWRhdGlvblJlc3VsdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW1cIjtcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblN0YXR1c30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1zdGF0dXMuYm9cIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblJlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2xpbmUtb3BlcmF0aW9uLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uUmVzcG9uc2VCYXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXJlc3BvbnNlLWJhc2UuYm9cIjtcbmltcG9ydCB7UGVuZGluZ1JlYXNvblR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9wZW5kaW5nLXJlYXNvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7U3RhbmRhcmRUZXh0fSBmcm9tIFwiLi4vbW9kZWwvc3RhbmRhcmQtdGV4dFwiO1xuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YVwiO1xuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtBZGRyZXNzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FkZHJlc3MuYm9cIjtcbmltcG9ydCB7QWRkcmVzc1R5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9hZGRyZXNzLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtSZWxhdGlvbkFueVR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tYW55LXR5cGVcIjtcbmltcG9ydCB7UGVuZGluZ1JlYXNvblNlcnZpY2V9IGZyb20gXCIuL3BlbmRpbmctcmVhc29uLnNlcnZpY2VcIjtcbmltcG9ydCB7Q2FzaFJlZ2lzdGVyfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtcmVnaXN0ZXJcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIlxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblNlcnZpY2UgZXh0ZW5kcyBQZW5kaW5nUmVhc29uU2VydmljZSB7XG5cbiAgLy8gcHVibGljIGdldCBjdXJyZW50TGluZXMoKTogVHJhbnNhY3Rpb25MaW5lSW5mb1tdIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fY3VycmVudExpbmVzO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBzZXQgY3VycmVudExpbmVzKHZhbHVlOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10pIHtcbiAgLy8gICB0aGlzLl9jdXJyZW50TGluZXMgPSB2YWx1ZTtcbiAgLy8gICB0aGlzLmFydGljbGVBbW91bnQgPSBBcnJheVV0aWxzLkZpbmRBbGwodGhpcy5fY3VycmVudExpbmVzLCBsaW5lID0+IGxpbmUuaXNBcnRpY2xlKS5sZW5ndGg7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIHNldCBjdXJyZW50VG90YWxzKHZhbHVlOiBUcmFuc2FjdGlvblRvdGFsKSB7XG4gIC8vICAgdGhpcy5fY3VycmVudFRvdGFscyA9IHZhbHVlO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudFRvdGFscygpOiBUcmFuc2FjdGlvblRvdGFsIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fY3VycmVudFRvdGFscztcbiAgLy8gfVxuICAvL1xuICAvLyBwdWJsaWMgZ2V0IGN1cnJlbnRSZWxhdGlvbigpOiBSZWxhdGlvbkFueVR5cGUge1xuICAvLyAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVsYXRpb247XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25JbmZvIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBzZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcyh2YWx1ZXM6IExpbmVPcGVyYXRpb25TdGF0dXNbXSkge1xuICAvLyAgIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXMgPSB2YWx1ZXM7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzKCk6IExpbmVPcGVyYXRpb25TdGF0dXNbXSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXM7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIHNldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cyh2YWx1ZTogTGluZU9wZXJhdGlvblN0YXR1cykge1xuICAvLyAgIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzID0gdmFsdWU7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cygpOiBMaW5lT3BlcmF0aW9uU3RhdHVzIHwgdW5kZWZpbmVkIHtcbiAgLy8gICBjb25zdCBzdGF0dXM6IExpbmVPcGVyYXRpb25TdGF0dXMgPSB0aGlzLmN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXMuZmluZChsaW5lID0+IGxpbmUucGVuZGluZ1JlYXNvblR5cGUgIT09IFBlbmRpbmdSZWFzb25UeXBlLk5PTkVcbiAgLy8gICAgICYmIGxpbmUucGVuZGluZ1JlYXNvblR5cGUgIT09IFBlbmRpbmdSZWFzb25UeXBlLk5PTl9DUklUSUNBTF9ESVNDT05USU5VQVRJT04pO1xuICAvLyAgIHJldHVybiBzdGF0dXM7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIGFydGljbGVBbW91bnQ6IG51bWJlciA9IDA7XG5cbiAgLy8gcHJpdmF0ZSBfY3VycmVudExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSBbXTtcbiAgLy8gcHJpdmF0ZSBfY3VycmVudFRvdGFsczogVHJhbnNhY3Rpb25Ub3RhbCA9IG5ldyBUcmFuc2FjdGlvblRvdGFsKCk7XG4gIC8vIHByaXZhdGUgX2N1cnJlbnRSZWxhdGlvbjogUmVsYXRpb25BbnlUeXBlOyAvLyA9IE5VTExfUkVMQVRJT05fT0JKRUNUO1xuICAvLyBwcml2YXRlIF9jdXJyZW50VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uSW5mbyA9IG5ldyBUcmFuc2FjdGlvbkluZm8oKTtcbiAgLy8gcHJpdmF0ZSBfY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXM6IExpbmVPcGVyYXRpb25TdGF0dXMgPSBuZXcgTGluZU9wZXJhdGlvblN0YXR1cygpO1xuICAvLyBwcml2YXRlIF9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10gPSBbXTtcblxuICBwdWJsaWMgcGVuZGluZ0xpbmVPcGVyYXRpb25TdGF0dXMobGluZU9wZXJhdGlvblN0YXR1c2VzOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10pOiBMaW5lT3BlcmF0aW9uU3RhdHVzIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0dXM6IExpbmVPcGVyYXRpb25TdGF0dXMgPSBsaW5lT3BlcmF0aW9uU3RhdHVzZXMuZmluZChsaW5lID0+IGxpbmUucGVuZGluZ1JlYXNvblR5cGUgIT09IFBlbmRpbmdSZWFzb25UeXBlLk5PTkVcbiAgICAgICYmIGxpbmUucGVuZGluZ1JlYXNvblR5cGUgIT09IFBlbmRpbmdSZWFzb25UeXBlLk5PTl9DUklUSUNBTF9ESVNDT05USU5VQVRJT04pO1xuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9jdW1lbnRDb250ZW50KGlkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXREb2N1bWVudENvbnRlbnQoaWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENhc2hSZWdpc3RlcnMoKTogUHJvbWlzZTxDYXNoUmVnaXN0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoUmVnaXN0ZXJzKHVuZGVmaW5lZCwgMSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVJlbGF0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIHRoaXMuX2NsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcbiAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5pbnNlcnRDdXN0b21lcih0aGlzLnJlbGF0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWxhdGlvbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnVwZGF0ZUN1c3RvbWVyKHRoaXMucmVsYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXF1ZW5jZVZhbHVlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlcXVlbmNlVmFsdWUoU2VxdWVuY2VOYW1lLlJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8UmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25MaW5lSW5mb1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVUcmFuc2FjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVUcmFuc2FjdGlvbihUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgXCIxXCIpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25ObzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3BlbkV4aXN0aW5nVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIHRyYW5zYWN0aW9uTm8pO1xuICB9XG5cbiAgcHVibGljIG9wZW5FeGlzdGluZ1RyYW5zYWN0aW9uKGtpbmQ6IFRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25OcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZChraW5kLCB0cmFuc2FjdGlvbk5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KCk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY29tbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uKGNsb3NlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2F2ZVRyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKTtcbiAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb25CeVV1aWQodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25VdWlkKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVhc29uKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKHJlYXNvbi5nZXRGdWxsRXJyb3JTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbihyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgcmVsYXRpb25JZCk7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3VsdCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRNYXJrZXRpbmdDb2RlcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluc2VydEN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5pbnNlcnRDdXN0b21lcihyZWxhdGlvbik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ3VzdG9tZXIocmVsYXRpb246IEN1c3RvbWVyRnVsbE9iamVjdCk6IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IudXBkYXRlQ3VzdG9tZXIocmVsYXRpb24pLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcbiAgICAgICAgLy8gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uID0gcmVsYXRpb247XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlNZXRob2RzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8RGVsaXZlcnlPcHRpb25bXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zdCB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Q6IFNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCA9IHRoaXMuX2dldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKCk7XG4gICAgaWYgKCF0aGlzLmRlbGl2ZXJ5T3B0aW9ucy50cmFuc2FjdGlvblV1aWQpIHtcbiAgICAgIHRoaXMuZGVsaXZlcnlPcHRpb25zLnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25SZXNwb25zZUJhc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh0aGlzLmRlbGl2ZXJ5T3B0aW9ucylcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0OiBSZWxhdGlvblJlcXVlc3QpOiBQcm9taXNlPFJlbGF0aW9uTGlzdE9iamVjdFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXRyaWV2ZUxpbmVJbWFnZShsaW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIobGluZS5hcnRpY2xlTnVtYmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIoYXJ0aWNsZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoYXJ0aWNsZU51bWJlcik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJ0aWNsZUltYWdlQnlHb29kSWQoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlSW1hZ2VCeUdvb2RJZChnb29kSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc05hTihnb29kSWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2luZ2xlSW1hZ2UoZ29vZElkLCAxLCB0cnVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEFydGljbGUoXG4gICAgYXJ0aWNsZU5vOiBzdHJpbmcsXG4gICAgYW1vdW50OiBudW1iZXIgPSAxLFxuICAgIHdhcmVob3VzZU5vOiBudW1iZXIgPSAxLFxuICAgIGNvbW1pc3Npb25Db2RlOiBzdHJpbmcgPSBcIjJcIixcbiAgICBpc1JldHVybjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGFib3ZlTGluZU5yOiBudW1iZXIgPSAwLFxuICAgIGJlbG93TGluZU5yOiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUoXG4gICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4sIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcik7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKSkge1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHB1YmxpYyBhc3luYyBhZGRBcnRpY2xlVG9UcmFuc2FjdGlvbih0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgYXJ0aWNsZU5vOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyID0gMSwgd2FyZWhvdXNlTm86IG51bWJlciA9IDEsIGNvbW1pc3Npb25Db2RlOiBzdHJpbmcgPSBcIjJcIiwgaXNSZXR1cm46IGJvb2xlYW4gPSBmYWxzZSwgYWJvdmVMaW5lTnI6IG51bWJlciA9IDAsIGJlbG93TGluZU5yOiBudW1iZXIgPSAwKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgLy8gICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gIC8vICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAvLyAgICAgdGhpcy5jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4sIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgLy8gICAgICAgLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgLy8gICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgLy8gICAgICAgfSwgKGVycm9yKSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5fcHJvbXB0LnNob3dFcnJvcihlcnJvcik7XG4gIC8vICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgLy8gICAgICAgICB0aGlzLl9wcm9tcHQuc2hvd0Vycm9yKHJlYXNvbi5nZXRGdWxsRXJyb3JTdHJpbmcoKSk7XG4gIC8vICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgLy8gICAgICAgfSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVUeXBlOiBUcmFuc2FjdGlvbkxpbmVUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGljbGVObzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZU5vPzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pc3Npb25Db2RlPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmV0dXJuPzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZUxpbmVOcj86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvd0xpbmVOcj86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1lbWJlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIGxpbmVUeXBlLCBhcnRpY2xlTm8sIGFtb3VudCwgd2FyZWhvdXNlTm8sIGNvbW1pc3Npb25Db2RlLCBpc1JldHVybiwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUmVzcG9uc2UocmVtZW1iZXIsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUZXh0TGluZShcbiAgICAgICAgICAgICAgICBzaG93T25Eb2N1bWVudHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYXJ0aWNsZUJvdW5kOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHJlZkFydGljbGVMaW5lTnI6IG51bWJlcixcbiAgICAgICAgICAgICAgICBhYm92ZUxpbmVOcj86IG51bWJlcixcbiAgICAgICAgICAgICAgICBiZWxvd0xpbmVOcj86IG51bWJlcixcbiAgICAgICAgICAgICAgICByZW1lbWJlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHNob3dPbkRvY3VtZW50cywgdGV4dCwgYW1vdW50LCBhcnRpY2xlQm91bmQsIHJlZkFydGljbGVMaW5lTnIsIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlclJlc3BvbnNlKHJlbWVtYmVyLCByZXNwb25zZSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nLFxuICAgIHNob3dPbkRvY3VtZW50czogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICBhcnRpY2xlQm91bmQ6IGJvb2xlYW4sXG4gICAgcmVmQXJ0aWNsZUxpbmVOcjogbnVtYmVyLFxuICAgIGFib3ZlTGluZU5yPzogbnVtYmVyLFxuICAgIGJlbG93TGluZU5yPzogbnVtYmVyKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uVXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0LCBhbW91bnQsIGFydGljbGVCb3VuZCwgcmVmQXJ0aWNsZUxpbmVOciwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUxpbmVTZXF1ZW5jZShcbiAgICBsaW5lVXVpZDogc3RyaW5nLFxuICAgIGFib3ZlTGluZU5yPzogbnVtYmVyLFxuICAgIGJlbG93TGluZU5yPzogbnVtYmVyLFxuICAgIHJlbWVtYmVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBsaW5lVXVpZCwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUmVzcG9uc2UocmVtZW1iZXIsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVUcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIFRyYW5zYWN0aW9uTGluZVV1aWQ6IHN0cmluZywgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5kZWxldGVUcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkLCBUcmFuc2FjdGlvbkxpbmVVdWlkKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUmVzcG9uc2UocmVtZW1iZXIsIHJlc3BvbnNlKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkobGluZVV1aWQ6IHN0cmluZywgbmV3UXVhbnRpdHk6IG51bWJlciwgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBsaW5lVXVpZCwgbmV3UXVhbnRpdHkpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fcmVtZW1iZXJSZXNwb25zZShyZW1lbWJlciwgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3Iuc2V0UmVsYXRpb25CeVVzZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKGlzU3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHJlc29sdmUoaXNTdWNjZXNzKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1c3RvbWVyRnVsbE9iamVjdEJ5UmVsYXRpb25JZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIGNvbnN0IHJlbGF0aW9uTnI6IHN0cmluZyA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uSWQpO1xuICAgIGlmIChyZWxhdGlvbk5yKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KE51bWJlcihyZWxhdGlvbk5yKSk7XG4gICAgfVxuICAgIHJldHVybiBOVUxMX0NVU1RPTUVSX0ZVTExfT0JKRUNUO1xuICB9XG5cbiAgLy8gcHVibGljIGFzeW5jIHNldFJlbGF0aW9uQnlVc2VyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICBjb25zdCByZXNwb25zZTogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gIC8vICAgcmV0dXJuIHJlc3BvbnNlO1xuICAvLyB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRleHRUeXBlcyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRleHRUeXBlcyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN0YW5kYXJkVGV4dHMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFN0YW5kYXJkVGV4dFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFN0YW5kYXJkVGV4dHMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaXJzdEFkZHJlc3MocmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSk6IEFkZHJlc3Mge1xuICAgIGlmICghcmVsYXRpb24gfHwgIXJlbGF0aW9uLmFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsYXRpb24uZ2V0Rmlyc3RBdmFpbGFibGVBZGRyZXNzKFtcbiAgICAgIEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcyxcbiAgICAgIEFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzLFxuICAgICAgQWRkcmVzc1R5cGUuVmlzaXRpbmdBZGRyZXNzLFxuICAgICAgQWRkcmVzc1R5cGUuTWFpbGluZ0FkZHJlc3MsXG4gICAgICBBZGRyZXNzVHlwZS5OdXJzaW5nQWRkcmVzc1xuICAgIF0pO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBfY2xlYW5SZWxhdGlvbkJlZm9yZVNhdmUoKTogdm9pZCB7XG4gIC8vICAgQXJyYXlVdGlscy5SZW1vdmVFbGVtZW50c0J5RmlsdGVyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbi5jb250YWN0T3B0aW9ucywgKChpdGVtOiBDb250YWN0T3B0aW9uKSA9PiB7XG4gIC8vICAgICByZXR1cm4gaXNOaWxsKGl0ZW0udmFsdWUpO1xuICAvLyAgIH0pKTtcbiAgLy8gfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiB8fCAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvIHx8ICF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25Ocikge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLmNyZWF0ZVRyYW5zYWN0aW9uKCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgdHJhbnNhY3Rpb25cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHZhbHVlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy51dWlkID0gdmFsdWUubGluZVV1aWQ7XG4gICAgLy8gdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXMucGVuZGluZ1JlYXNvbiA9IHZhbHVlLnBlbmRpbmdSZWFzb247XG4gICAgLy8gdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXMucGVuZGluZ1JlYXNvblR5cGUgPSB2YWx1ZS5wZW5kaW5nUmVhc29uVHlwZTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgYXN5bmMgX3VwZGF0ZVJlbGF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gIC8vICAgICBpZiAoIXRoaXMuX2N1cnJlbnRSZWxhdGlvbiB8fCB0aGlzLl9jdXJyZW50UmVsYXRpb24ucmVsYXRpb25JZCAhPT0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb24ucmVsYXRpb25JZCkge1xuICAvLyAgICAgICB0aGlzLl9jdXJyZW50UmVsYXRpb24gPSBhd2FpdCB0aGlzLmdldEN1c3RvbWVyRnVsbE9iamVjdEJ5UmVsYXRpb25JZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuICBwcml2YXRlIF9yZW1lbWJlclJlc3BvbnNlKHJlbWVtYmVyOiBib29sZWFuLCByZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKTogdm9pZCB7XG4gICAgaWYgKHJlbWVtYmVyKSB7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXMocmVzcG9uc2UpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=