ca-components 0.0.1 → 0.0.3

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 (383) hide show
  1. package/esm2022/assets/json/ca-table.json +59 -0
  2. package/esm2022/assets/json/ta-detail-dropdown.json +80 -0
  3. package/esm2022/lib/animation/in-out.animation.mjs +73 -0
  4. package/esm2022/lib/animations/accordion-animation.mjs +25 -0
  5. package/esm2022/lib/animations/animation.mjs +30 -0
  6. package/esm2022/lib/animations/close-form.animation.mjs +18 -0
  7. package/esm2022/lib/animations/expand-search-button.animation.mjs +17 -0
  8. package/esm2022/lib/animations/show.animation.mjs +20 -0
  9. package/esm2022/lib/animations/tabs-modal.animation.mjs +78 -0
  10. package/esm2022/lib/ca-components.module.mjs +127 -0
  11. package/esm2022/lib/components/ca-app-tooltip-v2/ca-app-tooltip-v2.component.mjs +53 -0
  12. package/esm2022/lib/components/ca-details-dropdown/ca-details-dropdown.component.mjs +116 -0
  13. package/esm2022/lib/components/ca-details-dropdown/models/detail-dropdown.model.mjs +2 -0
  14. package/esm2022/lib/components/ca-details-dropdown/utils/svg-routes/detail-dropdown-svg-routes.mjs +4 -0
  15. package/esm2022/lib/components/ca-dropdown/ca-dropdown.component.mjs +37 -0
  16. package/esm2022/lib/components/ca-filters/ca-filter.component.mjs +165 -0
  17. package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +541 -0
  18. package/esm2022/lib/components/ca-filters/components/ca-money-filter/config/ca-money-filter.config.mjs +75 -0
  19. package/esm2022/lib/components/ca-filters/components/ca-status-filter/ca-status-filter.component.mjs +191 -0
  20. package/esm2022/lib/components/ca-filters/components/ca-time-filter/ca-time-filter.component.mjs +131 -0
  21. package/esm2022/lib/components/ca-filters/utils/constants/status-filter.constants.mjs +19 -0
  22. package/esm2022/lib/components/ca-filters/utils/constants/time-filter.constants.mjs +45 -0
  23. package/esm2022/lib/components/ca-filters/utils/svg-routes/ca-filters-svg-routes.mjs +7 -0
  24. package/esm2022/lib/components/ca-filters/utils/svg-routes/ca-money-filter-svg-routes.mjs +4 -0
  25. package/esm2022/lib/components/ca-input/ca-input.component.mjs +179 -0
  26. package/esm2022/lib/components/ca-input/components/ca-input-clear/ca-input-clear.component.mjs +55 -0
  27. package/esm2022/lib/components/ca-input/components/ca-input-password/ca-input-password.component.mjs +63 -0
  28. package/esm2022/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +52 -0
  29. package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +2 -0
  30. package/esm2022/lib/components/ca-input/models/label-color.model.mjs +2 -0
  31. package/esm2022/lib/components/ca-input/pipes/input-class.pipe.mjs +89 -0
  32. package/esm2022/lib/components/ca-input/pipes/input-clear-class.pipe.mjs +76 -0
  33. package/esm2022/lib/components/ca-input/pipes/input-container-class.pipe.mjs +57 -0
  34. package/esm2022/lib/components/ca-input/pipes/input-error.pipe.mjs +85 -0
  35. package/esm2022/lib/components/ca-input/pipes/input-password-eye-class.pipe.mjs +37 -0
  36. package/esm2022/lib/components/ca-input/pipes/input-placeholder-icon.class.pipe.mjs +57 -0
  37. package/esm2022/lib/components/ca-input/pipes/input-type.pipe.mjs +25 -0
  38. package/esm2022/lib/components/ca-input/pipes/label-class.pipe.mjs +32 -0
  39. package/esm2022/lib/components/ca-input/pipes/show-clear.pipe.mjs +22 -0
  40. package/esm2022/lib/components/ca-input/pipes/show-invalid-danger-mark.pipe.mjs +27 -0
  41. package/esm2022/lib/components/ca-input/pipes/show-valid-check.pipe.mjs +27 -0
  42. package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +92 -0
  43. package/esm2022/lib/components/ca-input/utils/input-svg-routes.mjs +9 -0
  44. package/esm2022/lib/components/ca-input-radiobuttons/ca-input-radiobuttons.component.mjs +43 -0
  45. package/esm2022/lib/components/ca-map/ca-map.component.mjs +329 -0
  46. package/esm2022/lib/components/ca-map/enums/google-map.enum.mjs +6 -0
  47. package/esm2022/lib/components/ca-map/enums/toolbar-filter-string.enum.mjs +40 -0
  48. package/esm2022/lib/components/ca-map/models/map.model.mjs +2 -0
  49. package/esm2022/lib/components/ca-map/utils/helpers/map.helper.mjs +87 -0
  50. package/esm2022/lib/components/ca-map/utils/map-svg-routes/map-svg-routes.mjs +5 -0
  51. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +57 -0
  52. package/esm2022/lib/components/ca-map-dropdown/utils/svg-routes/map-dropdown-svg-routes.mjs +19 -0
  53. package/esm2022/lib/components/ca-note/ca-note.component.mjs +238 -0
  54. package/esm2022/lib/components/ca-note/utils/helper/copy-paste.helper.mjs +8 -0
  55. package/esm2022/lib/components/ca-note/utils/svg-routes/note-svg-routes.mjs +6 -0
  56. package/esm2022/lib/components/ca-note-container/ca-note-container.component.mjs +153 -0
  57. package/esm2022/lib/components/ca-note-container/enums/note-default-string.enum.mjs +11 -0
  58. package/esm2022/lib/components/ca-note-container/enums/note-selected-color.enum.mjs +6 -0
  59. package/esm2022/lib/components/ca-note-container/models/note-colors.model.mjs +2 -0
  60. package/esm2022/lib/components/ca-note-container/utils/constants/note-config.constant.mjs +61 -0
  61. package/esm2022/lib/components/ca-note-container/utils/svg-routes/note-container-svg-routes.mjs +9 -0
  62. package/esm2022/lib/components/ca-payroll-list-summary-overview/ca-payroll-list-summary-overview.component.mjs +53 -0
  63. package/esm2022/lib/components/ca-payroll-list-summary-overview/utils/svg-routes/payroll-list-summary-svg-routes.mjs +5 -0
  64. package/esm2022/lib/components/ca-payroll-list-summary-overview-table/ca-payroll-list-summary-overview-table.component.mjs +26 -0
  65. package/esm2022/lib/components/ca-pickup-delivery-block/ca-pickup-delivery-block.component.mjs +44 -0
  66. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/ca-load.component.mjs +93 -0
  67. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-list/ca-load-list.component.mjs +103 -0
  68. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.mjs +81 -0
  69. package/esm2022/lib/components/ca-pickup-delivery-block/models/adress-model.mjs +2 -0
  70. package/esm2022/lib/components/ca-pickup-delivery-block/models/animation-model.mjs +2 -0
  71. package/esm2022/lib/components/ca-pickup-delivery-block/models/broker-short-response.mjs +2 -0
  72. package/esm2022/lib/components/ca-pickup-delivery-block/models/dispatch-assigned-load-list-response.mjs +2 -0
  73. package/esm2022/lib/components/ca-pickup-delivery-block/models/enum-value.mjs +2 -0
  74. package/esm2022/lib/components/ca-pickup-delivery-block/models/load-short-response.mjs +2 -0
  75. package/esm2022/lib/components/ca-pickup-delivery-block/models/load-stop-short-response.mjs +2 -0
  76. package/esm2022/lib/components/ca-pickup-delivery-block/models/shipper-short-response.mjs +2 -0
  77. package/esm2022/lib/components/ca-pickup-delivery-block/models/status-types.enum.mjs +7 -0
  78. package/esm2022/lib/components/ca-pickup-delivery-block/utils/constants/animation-object-default.constants.mjs +8 -0
  79. package/esm2022/lib/components/ca-pickup-delivery-block/utils/constants/pickup-delivery-block.constants.mjs +25 -0
  80. package/esm2022/lib/components/ca-pickup-delivery-block/utils/helpers/pickup-delivery.helper.mjs +21 -0
  81. package/esm2022/lib/components/ca-pickup-delivery-block/utils/svg-routes/options-icon.routes.mjs +5 -0
  82. package/esm2022/lib/components/ca-pickup-delivery-block/utils/svg-routes/pickup-delivery-svg.routes.mjs +16 -0
  83. package/esm2022/lib/components/ca-pickup-delivery-block/utils/svg-routes/return-arrow.routes.mjs +5 -0
  84. package/esm2022/lib/components/ca-profile-image/ca-profile-image.component.mjs +5 -5
  85. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +209 -0
  86. package/esm2022/lib/components/ca-progress-bar/models/gps-progress.model.mjs +2 -0
  87. package/esm2022/lib/components/ca-progress-bar/utils/constants/progress-bar.constants.mjs +8 -0
  88. package/esm2022/lib/components/ca-progress-bar/utils/svg-routes/progress-bar-svg-routes.mjs +4 -0
  89. package/esm2022/lib/components/ca-search-multiple-states/ca-search-multiple-states.component.mjs +91 -0
  90. package/esm2022/lib/components/ca-search-multiple-states/utils/config/input-config.mjs +9 -0
  91. package/esm2022/lib/components/ca-search-multiple-states/utils/svg-routes/search-multiple-states.routes.mjs +7 -0
  92. package/esm2022/lib/components/ca-spinner/ca-spinner.component.mjs +40 -0
  93. package/esm2022/lib/components/ca-truck-trailer-progress-bar/ca-truck-trailer-progress-bar.component.mjs +97 -0
  94. package/esm2022/lib/components/ca-truck-trailer-progress-bar/models/progress-dropdown-data.model.mjs +2 -0
  95. package/esm2022/lib/constants/map.constant.mjs +436 -0
  96. package/esm2022/lib/directives/placeholder-directive.mjs +59 -0
  97. package/esm2022/lib/enums/load-filter-string.enum.mjs +23 -0
  98. package/esm2022/lib/enums/load-status.enum.mjs +58 -0
  99. package/esm2022/lib/models/array-status.model.mjs +2 -0
  100. package/esm2022/lib/models/card-models/card-table-data.model.mjs +2 -0
  101. package/esm2022/lib/models/color-response.mjs +2 -0
  102. package/esm2022/lib/models/dropdown.model.mjs +2 -0
  103. package/esm2022/lib/models/filter-output-params.model.mjs +2 -0
  104. package/esm2022/lib/models/filter-output.model.mjs +2 -0
  105. package/esm2022/lib/models/note-active-options.model.mjs +2 -0
  106. package/esm2022/lib/models/payroll-list-summary.model.mjs +2 -0
  107. package/esm2022/lib/models/table-models/table-body-color-label.model.mjs +2 -0
  108. package/esm2022/lib/models/time-filter.model.mjs +2 -0
  109. package/esm2022/lib/models/trailer-minimal-response.mjs +2 -0
  110. package/esm2022/lib/models/trailer-type-response.mjs +2 -0
  111. package/esm2022/lib/models/truck-minimal-response.mjs +2 -0
  112. package/esm2022/lib/models/truck-type-response.mjs +2 -0
  113. package/esm2022/lib/pipes/dropdown-load-status-color.pipe.mjs +164 -0
  114. package/esm2022/lib/pipes/format-currency.pipe.mjs +22 -0
  115. package/esm2022/lib/pipes/safe-html.pipe.mjs +18 -0
  116. package/esm2022/lib/pipes/ta-svg.pipe.mjs +30 -0
  117. package/esm2022/lib/pipes/thousand-separator.pipe.mjs +19 -0
  118. package/esm2022/lib/pipes/thousand-to-short-format-pipe.mjs +19 -0
  119. package/esm2022/lib/services/truckassist-table.service.mjs +20 -0
  120. package/esm2022/lib/utils/helpers/methods-calculations.helper.mjs +153 -0
  121. package/esm2022/public-api.mjs +21 -4
  122. package/fesm2022/ca-components.mjs +1876 -7
  123. package/fesm2022/ca-components.mjs.map +1 -1
  124. package/lib/animation/in-out.animation.d.ts +1 -0
  125. package/lib/animations/accordion-animation.d.ts +1 -0
  126. package/lib/animations/animation.d.ts +4 -0
  127. package/lib/animations/close-form.animation.d.ts +1 -0
  128. package/lib/animations/expand-search-button.animation.d.ts +1 -0
  129. package/lib/animations/show.animation.d.ts +1 -0
  130. package/lib/animations/tabs-modal.animation.d.ts +1 -0
  131. package/lib/ca-components.module.d.ts +25 -0
  132. package/lib/components/ca-app-tooltip-v2/ca-app-tooltip-v2.component.d.ts +19 -0
  133. package/lib/components/ca-details-dropdown/ca-details-dropdown.component.d.ts +35 -0
  134. package/lib/components/ca-details-dropdown/models/detail-dropdown.model.d.ts +19 -0
  135. package/lib/components/ca-details-dropdown/utils/svg-routes/detail-dropdown-svg-routes.d.ts +3 -0
  136. package/lib/components/ca-dropdown/ca-dropdown.component.d.ts +14 -0
  137. package/lib/components/ca-filters/ca-filter.component.d.ts +46 -0
  138. package/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.d.ts +78 -0
  139. package/lib/components/ca-filters/components/ca-money-filter/config/ca-money-filter.config.d.ts +11 -0
  140. package/lib/components/ca-filters/components/ca-status-filter/ca-status-filter.component.d.ts +62 -0
  141. package/lib/components/ca-filters/components/ca-time-filter/ca-time-filter.component.d.ts +33 -0
  142. package/lib/components/ca-filters/utils/constants/status-filter.constants.d.ts +9 -0
  143. package/lib/components/ca-filters/utils/constants/time-filter.constants.d.ts +8 -0
  144. package/lib/components/ca-filters/utils/svg-routes/ca-filters-svg-routes.d.ts +6 -0
  145. package/lib/components/ca-filters/utils/svg-routes/ca-money-filter-svg-routes.d.ts +3 -0
  146. package/lib/components/ca-input/ca-input.component.d.ts +46 -0
  147. package/lib/components/ca-input/components/ca-input-clear/ca-input-clear.component.d.ts +19 -0
  148. package/lib/components/ca-input/components/ca-input-password/ca-input-password.component.d.ts +20 -0
  149. package/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +16 -0
  150. package/lib/components/ca-input/config/ca-input.config.d.ts +136 -0
  151. package/lib/components/ca-input/models/label-color.model.d.ts +11 -0
  152. package/lib/components/ca-input/pipes/input-class.pipe.d.ts +13 -0
  153. package/lib/components/ca-input/pipes/input-clear-class.pipe.d.ts +11 -0
  154. package/lib/components/ca-input/pipes/input-container-class.pipe.d.ts +11 -0
  155. package/lib/components/ca-input/pipes/input-error.pipe.d.ts +7 -0
  156. package/lib/components/ca-input/pipes/input-password-eye-class.pipe.d.ts +11 -0
  157. package/lib/components/ca-input/pipes/input-placeholder-icon.class.pipe.d.ts +12 -0
  158. package/lib/components/ca-input/pipes/input-type.pipe.d.ts +7 -0
  159. package/lib/components/ca-input/pipes/label-class.pipe.d.ts +10 -0
  160. package/lib/components/ca-input/pipes/show-clear.pipe.d.ts +8 -0
  161. package/lib/components/ca-input/pipes/show-invalid-danger-mark.pipe.d.ts +9 -0
  162. package/lib/components/ca-input/pipes/show-valid-check.pipe.d.ts +9 -0
  163. package/lib/components/ca-input/services/ca-input-state.service.d.ts +24 -0
  164. package/lib/components/ca-input/utils/input-svg-routes.d.ts +8 -0
  165. package/lib/components/ca-input-radiobuttons/ca-input-radiobuttons.component.d.ts +21 -0
  166. package/lib/components/ca-map/ca-map.component.d.ts +56 -0
  167. package/lib/components/ca-map/enums/google-map.enum.d.ts +4 -0
  168. package/lib/components/ca-map/enums/toolbar-filter-string.enum.d.ts +33 -0
  169. package/lib/components/ca-map/models/map.model.d.ts +74 -0
  170. package/lib/components/ca-map/utils/helpers/map.helper.d.ts +9 -0
  171. package/lib/components/ca-map/utils/map-svg-routes/map-svg-routes.d.ts +4 -0
  172. package/lib/components/ca-map-dropdown/ca-map-dropdown.component.d.ts +43 -0
  173. package/lib/components/ca-map-dropdown/utils/svg-routes/map-dropdown-svg-routes.d.ts +18 -0
  174. package/lib/components/ca-note/ca-note.component.d.ts +56 -0
  175. package/lib/components/ca-note/utils/helper/copy-paste.helper.d.ts +3 -0
  176. package/lib/components/ca-note/utils/svg-routes/note-svg-routes.d.ts +5 -0
  177. package/lib/components/ca-note-container/ca-note-container.component.d.ts +38 -0
  178. package/lib/components/ca-note-container/enums/note-default-string.enum.d.ts +9 -0
  179. package/lib/components/ca-note-container/enums/note-selected-color.enum.d.ts +4 -0
  180. package/lib/components/ca-note-container/models/note-colors.model.d.ts +4 -0
  181. package/lib/components/ca-note-container/utils/constants/note-config.constant.d.ts +7 -0
  182. package/lib/components/ca-note-container/utils/svg-routes/note-container-svg-routes.d.ts +8 -0
  183. package/lib/components/ca-payroll-list-summary-overview/ca-payroll-list-summary-overview.component.d.ts +20 -0
  184. package/lib/components/ca-payroll-list-summary-overview/utils/svg-routes/payroll-list-summary-svg-routes.d.ts +4 -0
  185. package/lib/components/ca-payroll-list-summary-overview-table/ca-payroll-list-summary-overview-table.component.d.ts +20 -0
  186. package/lib/components/ca-pickup-delivery-block/ca-pickup-delivery-block.component.d.ts +19 -0
  187. package/lib/components/ca-pickup-delivery-block/components/ca-load/ca-load.component.d.ts +30 -0
  188. package/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-list/ca-load-list.component.d.ts +30 -0
  189. package/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.d.ts +23 -0
  190. package/lib/components/ca-pickup-delivery-block/models/adress-model.d.ts +12 -0
  191. package/lib/components/ca-pickup-delivery-block/models/animation-model.d.ts +7 -0
  192. package/lib/components/ca-pickup-delivery-block/models/broker-short-response.d.ts +13 -0
  193. package/lib/components/ca-pickup-delivery-block/models/dispatch-assigned-load-list-response.d.ts +6 -0
  194. package/lib/components/ca-pickup-delivery-block/models/enum-value.d.ts +4 -0
  195. package/lib/components/ca-pickup-delivery-block/models/load-short-response.d.ts +18 -0
  196. package/lib/components/ca-pickup-delivery-block/models/load-stop-short-response.d.ts +9 -0
  197. package/lib/components/ca-pickup-delivery-block/models/shipper-short-response.d.ts +8 -0
  198. package/lib/components/ca-pickup-delivery-block/models/status-types.enum.d.ts +5 -0
  199. package/lib/components/ca-pickup-delivery-block/utils/constants/animation-object-default.constants.d.ts +4 -0
  200. package/lib/components/ca-pickup-delivery-block/utils/constants/pickup-delivery-block.constants.d.ts +14 -0
  201. package/lib/components/ca-pickup-delivery-block/utils/helpers/pickup-delivery.helper.d.ts +9 -0
  202. package/lib/components/ca-pickup-delivery-block/utils/svg-routes/options-icon.routes.d.ts +4 -0
  203. package/lib/components/ca-pickup-delivery-block/utils/svg-routes/pickup-delivery-svg.routes.d.ts +15 -0
  204. package/lib/components/ca-pickup-delivery-block/utils/svg-routes/return-arrow.routes.d.ts +4 -0
  205. package/lib/components/ca-profile-image/ca-profile-image.component.d.ts +1 -1
  206. package/lib/components/ca-progress-bar/ca-progress-bar.component.d.ts +115 -0
  207. package/lib/components/ca-progress-bar/models/gps-progress.model.d.ts +8 -0
  208. package/lib/components/ca-progress-bar/utils/constants/progress-bar.constants.d.ts +7 -0
  209. package/lib/components/ca-progress-bar/utils/svg-routes/progress-bar-svg-routes.d.ts +3 -0
  210. package/lib/components/ca-search-multiple-states/ca-search-multiple-states.component.d.ts +24 -0
  211. package/lib/components/ca-search-multiple-states/utils/config/input-config.d.ts +2 -0
  212. package/lib/components/ca-search-multiple-states/utils/svg-routes/search-multiple-states.routes.d.ts +6 -0
  213. package/lib/components/ca-spinner/ca-spinner.component.d.ts +15 -0
  214. package/lib/components/ca-truck-trailer-progress-bar/ca-truck-trailer-progress-bar.component.d.ts +23 -0
  215. package/lib/components/ca-truck-trailer-progress-bar/models/progress-dropdown-data.model.d.ts +5 -0
  216. package/lib/constants/map.constant.d.ts +39 -0
  217. package/lib/directives/placeholder-directive.d.ts +15 -0
  218. package/lib/enums/load-filter-string.enum.d.ts +16 -0
  219. package/lib/enums/load-status.enum.d.ts +56 -0
  220. package/lib/models/array-status.model.d.ts +24 -0
  221. package/lib/models/card-models/card-table-data.model.d.ts +837 -0
  222. package/lib/models/color-response.d.ts +6 -0
  223. package/lib/models/dropdown.model.d.ts +4 -0
  224. package/lib/models/filter-output-params.model.d.ts +5 -0
  225. package/lib/models/filter-output.model.d.ts +6 -0
  226. package/lib/models/note-active-options.model.d.ts +6 -0
  227. package/lib/models/payroll-list-summary.model.d.ts +12 -0
  228. package/lib/models/table-models/table-body-color-label.model.d.ts +11 -0
  229. package/lib/models/time-filter.model.d.ts +7 -0
  230. package/lib/models/trailer-minimal-response.d.ts +11 -0
  231. package/lib/models/trailer-type-response.d.ts +7 -0
  232. package/lib/models/truck-minimal-response.d.ts +13 -0
  233. package/lib/models/truck-type-response.d.ts +6 -0
  234. package/lib/pipes/dropdown-load-status-color.pipe.d.ts +10 -0
  235. package/lib/pipes/format-currency.pipe.d.ts +7 -0
  236. package/lib/pipes/safe-html.pipe.d.ts +10 -0
  237. package/lib/pipes/ta-svg.pipe.d.ts +7 -0
  238. package/lib/pipes/thousand-separator.pipe.d.ts +7 -0
  239. package/lib/pipes/thousand-to-short-format-pipe.d.ts +7 -0
  240. package/lib/services/truckassist-table.service.d.ts +7 -0
  241. package/lib/utils/helpers/methods-calculations.helper.d.ts +15 -0
  242. package/package.json +1 -1
  243. package/public-api.d.ts +20 -1
  244. package/src/assets/global_style/styles.scss +45 -0
  245. package/src/assets/json/ca-dropdown.json +12 -0
  246. package/src/assets/json/ca-payroll-list-summary.json +71 -0
  247. package/src/assets/json/ca-table.json +59 -0
  248. package/src/assets/json/ta-detail-dropdown.json +80 -0
  249. package/src/assets/json/truck-trailer-progress-bar.json +1453 -0
  250. package/src/assets/json/usa-states.json +54 -0
  251. package/src/assets/kml/timezones.kml +1608 -0
  252. package/src/assets/kml/toll-roads/California.kml +55 -0
  253. package/src/assets/kml/toll-roads/Texas.kml +5079 -0
  254. package/src/assets/kml/toll-roads/florida.kml +2092 -0
  255. package/src/assets/lottie/ta-lottie-spinner/18px/black.json +1 -0
  256. package/src/assets/lottie/ta-lottie-spinner/18px/blueDark.json +1 -0
  257. package/src/assets/lottie/ta-lottie-spinner/18px/blueLight.json +1 -0
  258. package/src/assets/lottie/ta-lottie-spinner/18px/gray.json +1 -0
  259. package/src/assets/lottie/ta-lottie-spinner/18px/white.json +1 -0
  260. package/src/assets/lottie/ta-lottie-spinner/32px/black.json +1 -0
  261. package/src/assets/lottie/ta-lottie-spinner/32px/blueLight.json +1 -0
  262. package/src/assets/lottie/ta-lottie-spinner/32px/dark.json +1 -0
  263. package/src/assets/lottie/ta-lottie-spinner/32px/gray.json +1 -0
  264. package/src/assets/lottie/ta-lottie-spinner/32px/white.json +1 -0
  265. package/src/assets/scss/font-family.scss +2 -0
  266. package/src/assets/scss/font-weight.scss +36 -0
  267. package/src/assets/scss/popover.scss +112 -0
  268. package/src/assets/svg/common/calendar/arrow-left.svg +3 -0
  269. package/src/assets/svg/common/ic_confirm.svg +3 -0
  270. package/src/assets/svg/common/ic_search.svg +3 -0
  271. package/src/assets/svg/common/payroll-down-arrow.svg +3 -0
  272. package/src/assets/svg/common/payroll-up-arrow.svg +3 -0
  273. package/src/assets/svg/common/sortArrow_filter.svg +3 -0
  274. package/src/assets/svg/input/ic_confirm.svg +3 -0
  275. package/src/assets/svg/input/ic_danger.svg +3 -0
  276. package/src/assets/svg/input/ic_eye-hidden.svg +6 -0
  277. package/src/assets/svg/input/ic_eye-visible.svg +6 -0
  278. package/src/assets/svg/input/ic_password.svg +6 -0
  279. package/src/assets/svg/input/ic_remove_input.svg +7 -0
  280. package/src/assets/svg/input/ic_x.svg +4 -0
  281. package/src/assets/svg/map/18px_tooltip.svg +3 -0
  282. package/src/assets/svg/map/accident_calender.svg +3 -0
  283. package/src/assets/svg/map/accident_hazmat.svg +3 -0
  284. package/src/assets/svg/map/accident_injury.svg +3 -0
  285. package/src/assets/svg/map/accident_towing.svg +3 -0
  286. package/src/assets/svg/map/accident_vechile.svg +3 -0
  287. package/src/assets/svg/map/address.svg +3 -0
  288. package/src/assets/svg/map/arrow_corner_top.svg +3 -0
  289. package/src/assets/svg/map/calender_last_used.svg +3 -0
  290. package/src/assets/svg/map/check.svg +3 -0
  291. package/src/assets/svg/map/cluster_marker_4.svg +32 -0
  292. package/src/assets/svg/map/cluster_marker_6.svg +32 -0
  293. package/src/assets/svg/map/details_options.svg +10 -0
  294. package/src/assets/svg/map/details_options_2.svg +3 -0
  295. package/src/assets/svg/map/dislike.svg +3 -0
  296. package/src/assets/svg/map/email.svg +3 -0
  297. package/src/assets/svg/map/extended_stop_ignition.svg +11 -0
  298. package/src/assets/svg/map/gps-location.svg +4 -0
  299. package/src/assets/svg/map/gps_extended_status.svg +4 -0
  300. package/src/assets/svg/map/gps_full.svg +7 -0
  301. package/src/assets/svg/map/gps_parking_status.svg +4 -0
  302. package/src/assets/svg/map/gps_short_status.svg +4 -0
  303. package/src/assets/svg/map/gps_trailer_extended.svg +11 -0
  304. package/src/assets/svg/map/gps_trailer_moving.svg +16 -0
  305. package/src/assets/svg/map/gps_trailer_parking.svg +11 -0
  306. package/src/assets/svg/map/gps_trailer_short_stop.svg +11 -0
  307. package/src/assets/svg/map/ic_marker_office.svg +18 -0
  308. package/src/assets/svg/map/ic_pulse_circle.svg +1 -0
  309. package/src/assets/svg/map/like.svg +3 -0
  310. package/src/assets/svg/map/marker.svg +27 -0
  311. package/src/assets/svg/map/marker_2.svg +27 -0
  312. package/src/assets/svg/map/marker_3.svg +27 -0
  313. package/src/assets/svg/map/marker_4.svg +27 -0
  314. package/src/assets/svg/map/marker_5.svg +27 -0
  315. package/src/assets/svg/map/marker_cluster.svg +32 -0
  316. package/src/assets/svg/map/marker_cluster_2.svg +32 -0
  317. package/src/assets/svg/map/marker_dot.svg +18 -0
  318. package/src/assets/svg/map/marker_dot_2.svg +18 -0
  319. package/src/assets/svg/map/mask_group.svg +546 -0
  320. package/src/assets/svg/map/no_gps_status.svg +8 -0
  321. package/src/assets/svg/map/oss.svg +3 -0
  322. package/src/assets/svg/map/parking_ignition.svg +11 -0
  323. package/src/assets/svg/map/parking_trailer_ignition.svg +11 -0
  324. package/src/assets/svg/map/phone.svg +3 -0
  325. package/src/assets/svg/map/progress-marker-checked.svg +20 -0
  326. package/src/assets/svg/map/progress-marker-pickup-checked.svg +20 -0
  327. package/src/assets/svg/map/progress-marker-pickup.svg +20 -0
  328. package/src/assets/svg/map/progress_marker-pin-dark.svg +20 -0
  329. package/src/assets/svg/map/progress_marker.svg +20 -0
  330. package/src/assets/svg/map/progress_marker_reached.svg +20 -0
  331. package/src/assets/svg/map/review.svg +3 -0
  332. package/src/assets/svg/map/routing_marker.svg +19 -0
  333. package/src/assets/svg/map/short_stop_ignition.svg +11 -0
  334. package/src/assets/svg/map/short_stop_trailer_ignition.svg +16 -0
  335. package/src/assets/svg/map/telematic_marker.svg +19 -0
  336. package/src/assets/svg/map/telematic_marker_1.svg +19 -0
  337. package/src/assets/svg/map/telematic_marker_2.svg +18 -0
  338. package/src/assets/svg/map/unitView_marker.svg +20 -0
  339. package/src/assets/svg/note/Itallic.svg +3 -0
  340. package/src/assets/svg/note/Note.svg +3 -0
  341. package/src/assets/svg/note/Underline.svg +3 -0
  342. package/src/assets/svg/note/arrow.svg +3 -0
  343. package/src/assets/svg/note/bold.svg +3 -0
  344. package/src/assets/svg/note/color-picker-inverse.svg +10 -0
  345. package/src/assets/svg/note/note-empty-dark.svg +3 -0
  346. package/src/assets/svg/note/note-empty.svg +3 -0
  347. package/src/assets/svg/note/note-filled.svg +3 -0
  348. package/src/assets/svg/note/tick.svg +3 -0
  349. package/src/assets/svg/pickup-delivery/Miles.svg +3 -0
  350. package/src/assets/svg/pickup-delivery/Options.svg +3 -0
  351. package/src/assets/svg/pickup-delivery/arrowLeft.svg +10 -0
  352. package/src/assets/svg/pickup-delivery/arrowLeftHover.svg +10 -0
  353. package/src/assets/svg/pickup-delivery/arrowRight.svg +3 -0
  354. package/src/assets/svg/pickup-delivery/detailsOptions.svg +3 -0
  355. package/src/assets/svg/pickup-delivery/leftArrow.svg +3 -0
  356. package/src/assets/svg/pickup-delivery/mailIcon.svg +3 -0
  357. package/src/assets/svg/pickup-delivery/mapOptionsDark.svg +11 -0
  358. package/src/assets/svg/pickup-delivery/optionsVertical.svg +10 -0
  359. package/src/assets/svg/pickup-delivery/phoneIcon.svg +3 -0
  360. package/src/assets/svg/pickup-delivery/userIcon.svg +3 -0
  361. package/src/assets/svg/pickup-delivery/vector.svg +3 -0
  362. package/src/assets/svg/popup/Delete.svg +4 -0
  363. package/src/assets/svg/popup/Information.svg +3 -0
  364. package/src/assets/svg/popup/Minus.svg +3 -0
  365. package/src/assets/svg/popup/Print.svg +3 -0
  366. package/src/assets/svg/popup/Share.svg +3 -0
  367. package/src/assets/svg/popup/close-business-icon.svg +6 -0
  368. package/src/assets/svg/popup/delete-hover-new.svg +9 -0
  369. package/src/assets/svg/popup/edit-hover.svg +10 -0
  370. package/src/assets/svg/popup/ic_broker-user.svg +1 -0
  371. package/src/assets/svg/popup/ic_info.svg +6 -0
  372. package/src/assets/svg/popup/ic_print.svg +1 -0
  373. package/src/assets/svg/popup/resize-arrow.svg +1 -0
  374. package/src/assets/svg/popup/review-pen.svg +6 -0
  375. package/src/assets/svg/popup/share-icon.svg +6 -0
  376. package/src/assets/svg/popup/trash.svg +4 -0
  377. package/src/assets/svg/search-multiple-states/add.svg +4 -0
  378. package/src/assets/svg/search-multiple-states/clear-search.svg +4 -0
  379. package/src/assets/svg/search-multiple-states/focused-search-button.svg +3 -0
  380. package/src/assets/svg/search-multiple-states/search-button.svg +3 -0
  381. package/src/assets/svg/truckassist-table/x.svg +1 -0
  382. package/src/assets/theme/main.scss +193 -0
  383. package/src/assets/theme/variables.scss +361 -0
@@ -0,0 +1,541 @@
1
+ import { Subject, takeUntil } from "rxjs";
2
+ import { Component, Input, ViewEncapsulation, } from "@angular/core";
3
+ import { FormsModule, ReactiveFormsModule, } from "@angular/forms";
4
+ import { CommonModule } from "@angular/common";
5
+ import { HttpClientModule } from "@angular/common/http";
6
+ // modules
7
+ import { AngularSvgIconModule as SvgIconModule } from "angular-svg-icon";
8
+ import { NgbDropdownConfig, NgbModule } from "@ng-bootstrap/ng-bootstrap";
9
+ // pipes
10
+ import { ThousandSeparatorPipe as ThousandSeparator } from "@shared/pipes/thousand-separator.pipe";
11
+ import { TaSvgPipe as TaSvg } from "@shared/pipes/ta-svg.pipe";
12
+ // animations
13
+ import { showAnimation } from "@shared/animations/show.animation";
14
+ import { closeForm } from "@shared/animations/close-form.animation";
15
+ import { CaMoneyFilterSvgRoutes } from "@shared/components/ca-filters/utils/svg-routes/ca-money-filter-svg-routes";
16
+ // enums
17
+ import { ToolbarFilterStringEnum as ToolbarFilterString } from "@shared/components/ca-map/enums/toolbar-filter-string.enum";
18
+ // configs
19
+ import { CaMoneyFilterConfig } from "@shared/components/ca-filters/components/ca-money-filter/config/ca-money-filter.config";
20
+ // components
21
+ import { CaInputComponent } from "@shared/components/ca-input/ca-input.component";
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "@angular/forms";
24
+ import * as i2 from "@shared/pipes/thousand-separator.pipe";
25
+ import * as i3 from "@angular/common";
26
+ import * as i4 from "angular-svg-icon";
27
+ export class CaMoneyFilterComponent {
28
+ constructor(formBuilder,
29
+ // pipes
30
+ thousandSeparator) {
31
+ this.formBuilder = formBuilder;
32
+ this.thousandSeparator = thousandSeparator;
33
+ this.type = ToolbarFilterString.MONEY_FILTER;
34
+ this.subType = ToolbarFilterString.PENDING_STATUS;
35
+ this.moneyFilter = true;
36
+ this.fuelType = false;
37
+ this.loadType = true;
38
+ this.isRepairFilter = false;
39
+ this.isFilterActive = false;
40
+ this.destroy$ = new Subject();
41
+ this.showPart1 = true;
42
+ this.showPart2 = true;
43
+ this.showPart3 = true;
44
+ this.singleFormError = ToolbarFilterString.EMPTY_STRING_PLACEHOLDER;
45
+ this.multiFormFirstError = ToolbarFilterString.EMPTY_STRING_PLACEHOLDER;
46
+ this.multiFormSecondError = ToolbarFilterString.EMPTY_STRING_PLACEHOLDER;
47
+ this.multiFormThirdError = ToolbarFilterString.EMPTY_STRING_PLACEHOLDER;
48
+ this.moneyFilterStatus = false;
49
+ this.isButtonAvailable = false;
50
+ this.singleFromActive = 0;
51
+ this.singleToActive = 0;
52
+ this.multiFromFirstFromActive = 0;
53
+ this.multiFromFirstToActive = 0;
54
+ this.multiFormSecondFromActive = 0;
55
+ this.multiFormSecondToActive = 0;
56
+ this.multiFormThirdFromActive = 0;
57
+ this.multiFormThirdToActive = 0;
58
+ this.minValueRange = ToolbarFilterString.MIN_VALUE;
59
+ this.maxValueRange = ToolbarFilterString.MAX_VALUE;
60
+ this.activeFormNum = 0;
61
+ this.minValueSet = ToolbarFilterString.MIN_VALUE;
62
+ this.maxValueSet = ToolbarFilterString.MAX_VALUE;
63
+ this.filterActiveArray = [];
64
+ this.swipeActiveRange = 0;
65
+ this.totalFiltersNum = 0;
66
+ this.singleFormActive = false;
67
+ }
68
+ ngOnInit() {
69
+ this.createForm();
70
+ this.watchMoneyFormValueChanges();
71
+ }
72
+ ngOnDestroy() {
73
+ this.destroy$.next();
74
+ this.destroy$.complete();
75
+ }
76
+ get singleFormFrom() {
77
+ return CaMoneyFilterConfig.getSingleFormFrom();
78
+ }
79
+ get singleFormTo() {
80
+ return CaMoneyFilterConfig.getSingleFormTo();
81
+ }
82
+ get multiFormFirstFrom() {
83
+ return CaMoneyFilterConfig.getMultiFormFirstFrom();
84
+ }
85
+ get multiFormFirstTo() {
86
+ return CaMoneyFilterConfig.getMultiFormFirstTo();
87
+ }
88
+ get multiFormSecondFrom() {
89
+ return CaMoneyFilterConfig.getMultiFormSecondFrom();
90
+ }
91
+ get multiFormSecondTo() {
92
+ return CaMoneyFilterConfig.getMultiFormSecondTo();
93
+ }
94
+ get multiFormThirdFrom() {
95
+ return CaMoneyFilterConfig.getMultiFormThirdFrom();
96
+ }
97
+ get multiFormThirdTo() {
98
+ return CaMoneyFilterConfig.getMultiFormThirdTo();
99
+ }
100
+ createForm() {
101
+ this.moneyForm = this.formBuilder.group({
102
+ singleFrom: null,
103
+ singleTo: null,
104
+ multiFromFirstFrom: null,
105
+ multiFromFirstTo: null,
106
+ multiFormSecondFrom: null,
107
+ multiFormSecondTo: null,
108
+ multiFormThirdFrom: null,
109
+ multiFormThirdTo: null,
110
+ });
111
+ }
112
+ watchMoneyFormValueChanges() {
113
+ this.moneyForm.valueChanges
114
+ .pipe(takeUntil(this.destroy$))
115
+ .subscribe((changes) => {
116
+ if (changes.singleFrom || changes.singleTo) {
117
+ if (changes.singleTo) {
118
+ const to = parseInt(changes.singleTo);
119
+ const from = parseInt(changes.singleFrom);
120
+ if (from > to || from === to) {
121
+ this.singleFormError = true;
122
+ }
123
+ else {
124
+ this.singleFormError = false;
125
+ }
126
+ }
127
+ else {
128
+ this.singleFormError = false;
129
+ }
130
+ }
131
+ else {
132
+ this.singleFormError = false;
133
+ }
134
+ if (changes.multiFromFirstFrom || changes.multiFromFirstTo) {
135
+ if (changes.multiFromFirstTo) {
136
+ const to = parseInt(changes.multiFromFirstTo);
137
+ const from = parseInt(changes.multiFromFirstFrom);
138
+ if (from > to || from === to) {
139
+ this.multiFormFirstError = true;
140
+ }
141
+ else {
142
+ this.multiFormFirstError = false;
143
+ }
144
+ }
145
+ else {
146
+ this.multiFormFirstError = false;
147
+ }
148
+ }
149
+ else {
150
+ this.multiFormFirstError = false;
151
+ }
152
+ if (changes.multiFormSecondFrom || changes.multiFormSecondTo) {
153
+ if (changes.multiFormSecondTo) {
154
+ const to = parseInt(changes.multiFormSecondTo);
155
+ const from = parseInt(changes.multiFormSecondFrom);
156
+ if (from > to || from === to) {
157
+ this.multiFormSecondError = true;
158
+ }
159
+ else {
160
+ this.multiFormSecondError = false;
161
+ }
162
+ }
163
+ else {
164
+ this.multiFormSecondError = false;
165
+ }
166
+ }
167
+ if (changes.multiFormThirdFrom || changes.multiFormThirdTo) {
168
+ if (changes.multiFormThirdTo) {
169
+ const to = parseInt(changes.multiFormThirdTo);
170
+ const from = parseInt(changes.multiFormThirdFrom);
171
+ if (from > to || from === to) {
172
+ this.multiFormThirdError = true;
173
+ }
174
+ else {
175
+ this.multiFormThirdError = false;
176
+ }
177
+ }
178
+ else {
179
+ this.multiFormThirdError = false;
180
+ }
181
+ }
182
+ if (this.subType !== ToolbarFilterString.ALL) {
183
+ let toValueChanged = true;
184
+ let fromValueChanged = true;
185
+ const fromActive = this.singleFromActive && this.singleFromActive != "null"
186
+ ? this.singleFromActive
187
+ : 0;
188
+ const toActive = this.singleToActive && this.singleToActive != "null"
189
+ ? this.singleToActive
190
+ : 0;
191
+ let to = 0;
192
+ if (changes.singleTo) {
193
+ to = parseInt(changes.singleTo);
194
+ }
195
+ let from = 0;
196
+ if (changes.singleFrom) {
197
+ from = parseInt(changes.singleFrom);
198
+ }
199
+ if (toActive === to) {
200
+ toValueChanged = false;
201
+ }
202
+ if (fromActive === from) {
203
+ fromValueChanged = false;
204
+ }
205
+ if (toValueChanged || fromValueChanged) {
206
+ this.isButtonAvailable = true;
207
+ this.moneyFilterStatus = true;
208
+ }
209
+ else {
210
+ this.isButtonAvailable = false;
211
+ if (!to && !from) {
212
+ this.moneyFilterStatus = false;
213
+ }
214
+ }
215
+ }
216
+ else {
217
+ if (!this.multiFormFirstError &&
218
+ !this.multiFormSecondError &&
219
+ !this.multiFormThirdError) {
220
+ this.moneyFilterStatus = true;
221
+ this.checkMoneyMultiForm(changes);
222
+ }
223
+ else {
224
+ this.isButtonAvailable = false;
225
+ }
226
+ if (this.multiFormFirstError ||
227
+ this.multiFormSecondError ||
228
+ this.multiFormThirdError) {
229
+ this.isButtonAvailable = false;
230
+ }
231
+ }
232
+ if (this.singleFormError) {
233
+ this.moneyForm.get("singleTo")?.setErrors({ invalid: true });
234
+ }
235
+ else {
236
+ this.moneyForm.get("singleTo")?.setErrors(null);
237
+ }
238
+ if (this.multiFormFirstError) {
239
+ this.moneyForm.get("multiFromFirstTo")?.setErrors({ invalid: true });
240
+ }
241
+ else {
242
+ this.moneyForm.get("multiFromFirstTo")?.setErrors(null);
243
+ }
244
+ if (this.multiFormSecondError) {
245
+ this.moneyForm.get("multiFormSecondTo")?.setErrors({ invalid: true });
246
+ }
247
+ else {
248
+ this.moneyForm.get("multiFormSecondTo")?.setErrors(null);
249
+ }
250
+ if (this.multiFormThirdError) {
251
+ this.moneyForm.get("multiFormThirdTo")?.setErrors({ invalid: true });
252
+ }
253
+ else {
254
+ this.moneyForm.get("multiFormThirdTo")?.setErrors(null);
255
+ }
256
+ });
257
+ }
258
+ clearAll(event) {
259
+ if (event)
260
+ event.stopPropagation();
261
+ switch (this.type) {
262
+ case ToolbarFilterString.MONEY_FILTER:
263
+ if (!this.isRepairFilter) {
264
+ if (this.subType !== ToolbarFilterString.ALL) {
265
+ this.clearForm("singleForm");
266
+ }
267
+ else {
268
+ this.clearForm("clearAll");
269
+ }
270
+ }
271
+ else {
272
+ const maxNum = this.thousandSeparator.transform(this.maxValueRange);
273
+ this.maxValueSet = maxNum;
274
+ this.minValueSet = this.minValueRange;
275
+ }
276
+ this.activeFormNum = 0;
277
+ break;
278
+ case ToolbarFilterString.MILES_FILTER:
279
+ case ToolbarFilterString.PAY_FILTER:
280
+ case ToolbarFilterString.MONEY_FILTER:
281
+ if (this.type === ToolbarFilterString.MONEY_FILTER &&
282
+ !this.isRepairFilter) {
283
+ break;
284
+ }
285
+ const maxNum = this.thousandSeparator.transform(this.maxValueRange);
286
+ this.maxValueSet = maxNum;
287
+ this.minValueSet = this.minValueRange;
288
+ break;
289
+ default:
290
+ break;
291
+ }
292
+ this.isButtonAvailable = true;
293
+ this.moneyFilterStatus = false;
294
+ this.filterActiveArray = [];
295
+ this.swipeActiveRange = 0;
296
+ this.totalFiltersNum = 0;
297
+ this.singleFormActive = false;
298
+ const data = {
299
+ action: "Clear",
300
+ type: this.type,
301
+ filterType: this.type,
302
+ };
303
+ return data;
304
+ }
305
+ hideFormPart(mod) {
306
+ if (mod === "part1") {
307
+ this.showPart1 = !this.showPart1;
308
+ }
309
+ else if (mod === "part2") {
310
+ this.showPart2 = !this.showPart2;
311
+ }
312
+ else {
313
+ this.showPart3 = !this.showPart3;
314
+ }
315
+ }
316
+ clearForm(mod, event) {
317
+ event?.stopPropagation();
318
+ switch (mod) {
319
+ case "singleForm":
320
+ this.moneyForm
321
+ .get("singleFrom")
322
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
323
+ this.moneyForm
324
+ .get("singleTo")
325
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
326
+ this.singleFormError = false;
327
+ this.moneyFilterStatus = false;
328
+ this.singleToActive = 0;
329
+ this.singleFromActive = 0;
330
+ this.isButtonAvailable = false;
331
+ break;
332
+ case "multiFromFirst":
333
+ this.moneyForm
334
+ .get("multiFromFirstFrom")
335
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
336
+ this.moneyForm
337
+ .get("multiFromFirstTo")
338
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
339
+ this.multiFormFirstError = false;
340
+ break;
341
+ case "multiFormSecond":
342
+ this.moneyForm
343
+ .get("multiFormSecondFrom")
344
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
345
+ this.moneyForm
346
+ .get("multiFormSecondTo")
347
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
348
+ this.multiFormSecondError = false;
349
+ break;
350
+ case "multiFormThird":
351
+ this.moneyForm
352
+ .get("multiFormThirdFrom")
353
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
354
+ this.moneyForm
355
+ .get("multiFormThirdTo")
356
+ ?.setValue(ToolbarFilterString.EMPTY_STRING_PLACEHOLDER);
357
+ this.multiFormThirdError = false;
358
+ break;
359
+ case "clearAll":
360
+ this.multiFromFirstFromActive = 0;
361
+ this.multiFromFirstToActive = 0;
362
+ this.multiFormSecondFromActive = 0;
363
+ this.multiFormSecondToActive = 0;
364
+ this.multiFormThirdFromActive = 0;
365
+ this.multiFormThirdToActive = 0;
366
+ this.moneyForm.reset();
367
+ this.multiFormFirstError = false;
368
+ this.multiFormSecondError = false;
369
+ this.multiFormThirdError = false;
370
+ break;
371
+ default:
372
+ break;
373
+ }
374
+ }
375
+ setFilterValue(event) {
376
+ let queryParams = {};
377
+ let subType = ToolbarFilterString.EMPTY_STRING_PLACEHOLDER.toString();
378
+ this.isButtonAvailable = false;
379
+ if (this.type === ToolbarFilterString.TIME_FILTER) {
380
+ }
381
+ else if (this.type === ToolbarFilterString.MONEY_FILTER &&
382
+ !this.isRepairFilter) {
383
+ if (this.subType === ToolbarFilterString.ALL) {
384
+ this.multiFromFirstFromActive = (" " + this.moneyForm.get("multiFromFirstFrom")?.value).slice(1);
385
+ this.multiFromFirstToActive = (" " + this.moneyForm.get("multiFromFirstTo")?.value).slice(1);
386
+ this.multiFormSecondFromActive = (" " + this.moneyForm.get("multiFormSecondFrom")?.value).slice(1);
387
+ this.multiFormSecondToActive = (" " + this.moneyForm.get("multiFormSecondTo")?.value).slice(1);
388
+ this.multiFormThirdFromActive = (" " + this.moneyForm.get("multiFormThirdFrom")?.value).slice(1);
389
+ this.multiFormThirdToActive = (" " + this.moneyForm.get("multiFormThirdTo")?.value).slice(1);
390
+ queryParams = {
391
+ firstFormFrom: this.moneyForm.get("multiFromFirstFrom")?.value,
392
+ firstFormTo: this.moneyForm.get("multiFromFirstTo")?.value,
393
+ secondFormFrom: this.moneyForm.get("multiFormSecondFrom")?.value,
394
+ secondFormTo: this.moneyForm.get("multiFormSecondTo")?.value,
395
+ thirdFormFrom: this.moneyForm.get("multiFormThirdFrom")?.value,
396
+ thirdFormTo: this.moneyForm.get("multiFormThirdTo")?.value,
397
+ };
398
+ let formsActive = 0;
399
+ if (this.moneyForm.get("multiFromFirstFrom")?.value ||
400
+ this.moneyForm.get("multiFromFirstTo")?.value) {
401
+ formsActive = formsActive + 1;
402
+ }
403
+ if (this.moneyForm.get("multiFormSecondFrom")?.value ||
404
+ this.moneyForm.get("multiFormSecondTo")?.value) {
405
+ formsActive = formsActive + 1;
406
+ }
407
+ if (this.moneyForm.get("multiFormThirdFrom")?.value ||
408
+ this.moneyForm.get("multiFormThirdTo")?.value) {
409
+ formsActive = formsActive + 1;
410
+ }
411
+ this.activeFormNum = formsActive;
412
+ this.totalFiltersNum = formsActive;
413
+ }
414
+ else {
415
+ this.singleFromActive = (" " + this.moneyForm.get("singleFrom")?.value).slice(1);
416
+ this.singleToActive = (" " + this.moneyForm.get("singleTo")?.value).slice(1);
417
+ if (!this.moneyForm.get("singleFrom")?.value &&
418
+ !this.moneyForm.get("singleTo")?.value) {
419
+ this.clearAll(event);
420
+ return;
421
+ }
422
+ this.singleFormActive = true;
423
+ queryParams = {
424
+ singleFrom: this.moneyForm.get("singleFrom")?.value
425
+ ? parseInt(this.moneyForm.get("singleFrom")?.value)
426
+ : ToolbarFilterString.EMPTY_STRING_PLACEHOLDER,
427
+ singleTo: this.moneyForm.get("singleTo")?.value
428
+ ? parseInt(this.moneyForm.get("singleTo")?.value)
429
+ : ToolbarFilterString.EMPTY_STRING_PLACEHOLDER,
430
+ };
431
+ }
432
+ }
433
+ const data = {
434
+ filterType: this.type,
435
+ action: "Set",
436
+ queryParams: queryParams,
437
+ subType: subType,
438
+ };
439
+ return data;
440
+ }
441
+ checkMoneyMultiForm(data) {
442
+ let firstFormChanged = "none";
443
+ let secondFormChanged = "none";
444
+ let thirdFormChanged = "none";
445
+ const firstFromActive = this.multiFromFirstFromActive && this.multiFromFirstFromActive !== "null"
446
+ ? this.multiFromFirstFromActive
447
+ : 0;
448
+ const firstToActive = this.multiFromFirstToActive && this.multiFromFirstToActive != "null"
449
+ ? this.multiFromFirstToActive
450
+ : 0;
451
+ const secFromActive = this.multiFormSecondFromActive &&
452
+ this.multiFormSecondFromActive !== "null"
453
+ ? this.multiFormSecondFromActive
454
+ : 0;
455
+ const secToActive = this.multiFormSecondToActive && this.multiFormSecondToActive !== "null"
456
+ ? this.multiFormSecondToActive
457
+ : 0;
458
+ const thirdFromActive = this.multiFormThirdFromActive && this.multiFormThirdFromActive !== "null"
459
+ ? this.multiFormThirdFromActive
460
+ : 0;
461
+ const thirdToActive = this.multiFormThirdToActive && this.multiFormThirdToActive !== "null"
462
+ ? this.multiFormThirdToActive
463
+ : 0;
464
+ const firstFrom = data.multiFromFirstFrom && data.multiFromFirstFrom !== "null"
465
+ ? parseInt(data.multiFromFirstFrom)
466
+ : 0;
467
+ const firstTo = data.multiFromFirstTo && data.multiFromFirstTo !== "null"
468
+ ? parseInt(data.multiFromFirstTo)
469
+ : 0;
470
+ const secFrom = data.multiFormSecondFrom && data.multiFormSecondFrom !== "null"
471
+ ? parseInt(data.multiFormSecondFrom)
472
+ : 0;
473
+ const secTo = data.multiFormSecondTo && data.multiFormSecondTo !== "null"
474
+ ? parseInt(data.multiFormSecondTo)
475
+ : 0;
476
+ const thirdFrom = data.multiFormThirdFrom && data.multiFormThirdFrom !== "null"
477
+ ? parseInt(data.multiFormThirdFrom)
478
+ : 0;
479
+ const thirdTo = data.multiFormThirdTo && data.multiFormThirdTo !== "null"
480
+ ? parseInt(data.multiFormThirdTo)
481
+ : 0;
482
+ if (firstFrom !== firstFromActive || firstTo !== firstToActive) {
483
+ firstFormChanged = "changed";
484
+ }
485
+ if (secFrom !== secFromActive || secTo !== secToActive) {
486
+ secondFormChanged = "changed";
487
+ }
488
+ if (thirdFrom !== thirdFromActive || thirdTo !== thirdToActive) {
489
+ thirdFormChanged = "changed";
490
+ }
491
+ if (firstFormChanged === "changed" ||
492
+ secondFormChanged === "changed" ||
493
+ thirdFormChanged === "changed") {
494
+ this.isButtonAvailable = true;
495
+ }
496
+ else {
497
+ this.isButtonAvailable = false;
498
+ if (firstFrom || firstTo || secFrom || secTo || thirdFrom || thirdTo) {
499
+ this.moneyFilterStatus = true;
500
+ }
501
+ else {
502
+ this.moneyFilterStatus = false;
503
+ }
504
+ }
505
+ }
506
+ getSvgPath(propertyName) {
507
+ return CaMoneyFilterSvgRoutes[propertyName];
508
+ }
509
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaMoneyFilterComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.ThousandSeparatorPipe }], target: i0.ɵɵFactoryTarget.Component }); }
510
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CaMoneyFilterComponent, isStandalone: true, selector: "app-ca-money-filter", inputs: { type: "type", subType: "subType", moneyFilter: "moneyFilter", fuelType: "fuelType", loadType: "loadType", isRepairFilter: "isRepairFilter", isFilterActive: "isFilterActive" }, providers: [NgbDropdownConfig, ThousandSeparator, TaSvg], ngImport: i0, template: "<ng-container *ngIf=\"moneyFilter && !isRepairFilter\">\n <div [class.multiMoneyForm]=\"subType === 'all'\" [formGroup]=\"moneyForm\">\n <div class=\"border-filter money-top-border-magin\"></div>\n <ng-container *ngIf=\"subType !== 'all'; else showAll\">\n <div class=\"single-form-holder\">\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"singleFormError\"\n >\n <app-ca-input\n formControlName=\"singleFrom\"\n [inputConfig]=\"singleFormFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"singleFormError\"\n >\n <app-ca-input\n formControlName=\"singleTo\"\n [inputConfig]=\"singleFormTo\"\n ></app-ca-input>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #showAll>\n <div class=\"multi-form-holder\">\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart1\"\n (click)=\"hideFormPart('part1')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Invoice Ageing\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Last Price\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Rate\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFromFirstFrom &&\n moneyForm.value.multiFromFirstTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFromFirst', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart1,\n rotate_back: showPart1,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart1\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFromFirstFrom\"\n [inputConfig]=\"multiFormFirstFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormFirstError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFromFirstTo\"\n [inputConfig]=\"multiFormFirstTo\"\n ></app-ca-input>\n </div>\n </div>\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart1\"\n ></div>\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart2\"\n (click)=\"hideFormPart('part2')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Available Credit\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Price Per Gallon\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Paid\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFormSecondFrom &&\n moneyForm.value.multiFormSecondTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFormSecond', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart2,\n rotate_back: showPart2,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart2\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormSecondFrom\"\n [inputConfig]=\"multiFormSecondFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormSecondError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormSecondTo\"\n [inputConfig]=\"multiFormSecondTo\"\n ></app-ca-input>\n </div>\n </div>\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart2\"\n ></div>\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart3\"\n (click)=\"hideFormPart('part3')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Revenue\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Total Cost\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Due\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFormThirdFrom &&\n moneyForm.value.multiFormThirdTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFormThird', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart3,\n rotate_back: showPart3,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart3\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormThirdFrom\"\n [inputConfig]=\"multiFormThirdFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormThirdError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormThirdTo\"\n [inputConfig]=\"multiFormThirdTo\"\n ></app-ca-input>\n </div>\n </div>\n </div>\n </ng-template>\n\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart3\"\n ></div>\n </div>\n</ng-container>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.border-filter{width:100%;height:1px;border-radius:1px;margin:4px 0;background-color:#424242}.money-filter{padding:10px 6px 6px;width:300px}.money-filter .filter-header{padding-left:3px}.money-filter .filter-header .user-title-text{padding-left:0}.money-filter .money-main-holder{position:relative;width:100%;overflow:hidden}.money-filter .money-main-holder.single-money-main{margin-top:0}.money-filter .money-main-holder .money-value-holder{position:relative;width:141px;border-radius:2px;font-size:14px;color:#aaa;transition:transform .59s ease-in-out;padding-top:20px}.money-filter .money-main-holder .errorForm .input-custom-group .input-icon svg path{fill:#ef5350!important}.money-filter .buttons-holder{padding:0}.money-filter .buttons-holder .button-clear,.money-filter .buttons-holder .button-set{width:140px}.money-filter .single-form-holder{position:relative;padding:0 0 13px;width:100%}.money-filter .single-form-holder .clear-money-form{top:-4px;right:0}.money-filter .form-header{position:relative;width:100%;padding-left:4px;margin-bottom:4px;transition:all .52s ease-in;cursor:pointer}.money-filter .form-header .form-name{padding-left:2px;line-height:18px;font-size:14px;color:#dadada;-webkit-user-select:none;user-select:none}.money-filter .form-header .form-name-gray{font-size:11px;line-height:18px;color:#aaa;-webkit-user-select:none;user-select:none}.money-filter .form-header .hide-money-form{position:absolute;right:4px;top:0;height:13px;width:13px}.money-filter .form-header .hide-money-form svg-icon{height:8px;width:13px}.money-filter .form-header .hide-money-form svg-icon svg{height:8px;width:13px}.money-filter .form-header .hide-money-form svg-icon svg path{fill:#b7b7b7}.money-filter .form-header .svg_rotate svg{transform:rotate(180deg);transition:transform .2s ease-in-out}.money-filter .form-header .rotate_back svg{transform:rotate(0);transition:transform .2s ease-in-out}.money-filter .clear-money-form{position:absolute;right:28px;top:0;height:20px;width:54px;color:#dadada;font-size:11px;background-color:#fff3;border-radius:2px;cursor:pointer}.money-filter .clear-money-form:hover{background-color:#fff6;color:#dadada}.multiMoneyForm .money-top-border-magin{margin:8px 0 6px}.multiMoneyForm .money-bottom-border-magin{margin:18px 0 12px}.multiMoneyForm .form-border{margin:18px 0 6px}.multiMoneyForm .multi-form-holder{width:100%}.multiMoneyForm .hiddenFormTitle{margin-bottom:4px}.multiMoneyForm .hiddenFormBorder{margin:0 0 8px}\n"], dependencies: [{ kind: "ngmodule", type:
511
+ // modules
512
+ CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbModule }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: SvgIconModule }, { kind: "component", type: i4.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "component", type: CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "incorrectValue", "selectedDropdownLabelColor"], outputs: ["blurInput", "isFocusInput", "change"] }], animations: [showAnimation("showAnimation"), closeForm("closeForm")], encapsulation: i0.ViewEncapsulation.None }); }
513
+ }
514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaMoneyFilterComponent, decorators: [{
515
+ type: Component,
516
+ args: [{ selector: "app-ca-money-filter", standalone: true, imports: [
517
+ // modules
518
+ CommonModule,
519
+ FormsModule,
520
+ ReactiveFormsModule,
521
+ NgbModule,
522
+ HttpClientModule,
523
+ SvgIconModule,
524
+ CaInputComponent,
525
+ ], providers: [NgbDropdownConfig, ThousandSeparator, TaSvg], encapsulation: ViewEncapsulation.None, animations: [showAnimation("showAnimation"), closeForm("closeForm")], template: "<ng-container *ngIf=\"moneyFilter && !isRepairFilter\">\n <div [class.multiMoneyForm]=\"subType === 'all'\" [formGroup]=\"moneyForm\">\n <div class=\"border-filter money-top-border-magin\"></div>\n <ng-container *ngIf=\"subType !== 'all'; else showAll\">\n <div class=\"single-form-holder\">\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"singleFormError\"\n >\n <app-ca-input\n formControlName=\"singleFrom\"\n [inputConfig]=\"singleFormFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"singleFormError\"\n >\n <app-ca-input\n formControlName=\"singleTo\"\n [inputConfig]=\"singleFormTo\"\n ></app-ca-input>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #showAll>\n <div class=\"multi-form-holder\">\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart1\"\n (click)=\"hideFormPart('part1')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Invoice Ageing\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Last Price\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Rate\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFromFirstFrom &&\n moneyForm.value.multiFromFirstTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFromFirst', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart1,\n rotate_back: showPart1,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart1\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFromFirstFrom\"\n [inputConfig]=\"multiFormFirstFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormFirstError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFromFirstTo\"\n [inputConfig]=\"multiFormFirstTo\"\n ></app-ca-input>\n </div>\n </div>\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart1\"\n ></div>\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart2\"\n (click)=\"hideFormPart('part2')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Available Credit\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Price Per Gallon\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Paid\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFormSecondFrom &&\n moneyForm.value.multiFormSecondTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFormSecond', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart2,\n rotate_back: showPart2,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart2\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormSecondFrom\"\n [inputConfig]=\"multiFormSecondFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormSecondError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormSecondTo\"\n [inputConfig]=\"multiFormSecondTo\"\n ></app-ca-input>\n </div>\n </div>\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart2\"\n ></div>\n <div\n class=\"form-header\"\n [class.hiddenFormTitle]=\"!showPart3\"\n (click)=\"hideFormPart('part3')\"\n >\n <ng-container *ngIf=\"!fuelType && !loadType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Revenue\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"fuelType\">\n <div class=\"form-name fw-bold\" [@showAnimation]=\"!!isFilterActive\">\n Total Cost\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"loadType\">\n <div\n class=\"form-name-gray text-uppercase fw-bold\"\n [@showAnimation]=\"!!isFilterActive\"\n >\n Due\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n moneyForm.value.multiFormThirdFrom &&\n moneyForm.value.multiFormThirdTo\n \"\n >\n <div\n class=\"clear-money-form d-flex justify-content-center align-items-center fw-bold\"\n (click)=\"clearForm('multiFormThird', $event)\"\n >\n CLEAR\n </div>\n </ng-container>\n\n <div\n class=\"hide-money-form\"\n [ngClass]=\"{\n svg_rotate: !showPart3,\n rotate_back: showPart3,\n }\"\n >\n <svg-icon [src]=\"getSvgPath('arrowLeftSvgRoute')\"></svg-icon>\n </div>\n </div>\n <div\n class=\"money-main-holder d-flex justify-content-between align-items-center single-money-main\"\n [@closeForm]=\"showPart3\"\n >\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormThirdFrom\"\n [inputConfig]=\"multiFormThirdFrom\"\n ></app-ca-input>\n </div>\n <div\n class=\"money-value-holder d-flex justify-content-center align-items-center\"\n [class.errorForm]=\"multiFormThirdError\"\n >\n <app-ca-input\n [@showAnimation]=\"!!isFilterActive\"\n formControlName=\"multiFormThirdTo\"\n [inputConfig]=\"multiFormThirdTo\"\n ></app-ca-input>\n </div>\n </div>\n </div>\n </ng-template>\n\n <div\n class=\"border-filter money-bottom-border-magin form-border\"\n [class.hiddenFormBorder]=\"!showPart3\"\n ></div>\n </div>\n</ng-container>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.border-filter{width:100%;height:1px;border-radius:1px;margin:4px 0;background-color:#424242}.money-filter{padding:10px 6px 6px;width:300px}.money-filter .filter-header{padding-left:3px}.money-filter .filter-header .user-title-text{padding-left:0}.money-filter .money-main-holder{position:relative;width:100%;overflow:hidden}.money-filter .money-main-holder.single-money-main{margin-top:0}.money-filter .money-main-holder .money-value-holder{position:relative;width:141px;border-radius:2px;font-size:14px;color:#aaa;transition:transform .59s ease-in-out;padding-top:20px}.money-filter .money-main-holder .errorForm .input-custom-group .input-icon svg path{fill:#ef5350!important}.money-filter .buttons-holder{padding:0}.money-filter .buttons-holder .button-clear,.money-filter .buttons-holder .button-set{width:140px}.money-filter .single-form-holder{position:relative;padding:0 0 13px;width:100%}.money-filter .single-form-holder .clear-money-form{top:-4px;right:0}.money-filter .form-header{position:relative;width:100%;padding-left:4px;margin-bottom:4px;transition:all .52s ease-in;cursor:pointer}.money-filter .form-header .form-name{padding-left:2px;line-height:18px;font-size:14px;color:#dadada;-webkit-user-select:none;user-select:none}.money-filter .form-header .form-name-gray{font-size:11px;line-height:18px;color:#aaa;-webkit-user-select:none;user-select:none}.money-filter .form-header .hide-money-form{position:absolute;right:4px;top:0;height:13px;width:13px}.money-filter .form-header .hide-money-form svg-icon{height:8px;width:13px}.money-filter .form-header .hide-money-form svg-icon svg{height:8px;width:13px}.money-filter .form-header .hide-money-form svg-icon svg path{fill:#b7b7b7}.money-filter .form-header .svg_rotate svg{transform:rotate(180deg);transition:transform .2s ease-in-out}.money-filter .form-header .rotate_back svg{transform:rotate(0);transition:transform .2s ease-in-out}.money-filter .clear-money-form{position:absolute;right:28px;top:0;height:20px;width:54px;color:#dadada;font-size:11px;background-color:#fff3;border-radius:2px;cursor:pointer}.money-filter .clear-money-form:hover{background-color:#fff6;color:#dadada}.multiMoneyForm .money-top-border-magin{margin:8px 0 6px}.multiMoneyForm .money-bottom-border-magin{margin:18px 0 12px}.multiMoneyForm .form-border{margin:18px 0 6px}.multiMoneyForm .multi-form-holder{width:100%}.multiMoneyForm .hiddenFormTitle{margin-bottom:4px}.multiMoneyForm .hiddenFormBorder{margin:0 0 8px}\n"] }]
526
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.ThousandSeparatorPipe }]; }, propDecorators: { type: [{
527
+ type: Input
528
+ }], subType: [{
529
+ type: Input
530
+ }], moneyFilter: [{
531
+ type: Input
532
+ }], fuelType: [{
533
+ type: Input
534
+ }], loadType: [{
535
+ type: Input
536
+ }], isRepairFilter: [{
537
+ type: Input
538
+ }], isFilterActive: [{
539
+ type: Input
540
+ }] } });
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtbW9uZXktZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWZpbHRlcnMvY29tcG9uZW50cy9jYS1tb25leS1maWx0ZXIvY2EtbW9uZXktZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWZpbHRlcnMvY29tcG9uZW50cy9jYS1tb25leS1maWx0ZXIvY2EtbW9uZXktZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUdYLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG9CQUFvQixJQUFJLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRSxRQUFRO0FBQ1IsT0FBTyxFQUFFLHFCQUFxQixJQUFJLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsSUFBSSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRCxhQUFhO0FBQ2IsT0FBTyxFQUFFLGFB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QyxlQUFlLENBQUMsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7NklBRzNELElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uRGVzdHJveSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuXG4vLyBtb2R1bGVzXG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSBhcyBTdmdJY29uTW9kdWxlIH0gZnJvbSBcImFuZ3VsYXItc3ZnLWljb25cIjtcbmltcG9ydCB7IE5nYkRyb3Bkb3duQ29uZmlnLCBOZ2JNb2R1bGUgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcblxuLy8gcGlwZXNcbmltcG9ydCB7IFRob3VzYW5kU2VwYXJhdG9yUGlwZSBhcyBUaG91c2FuZFNlcGFyYXRvciB9IGZyb20gXCJAc2hhcmVkL3BpcGVzL3Rob3VzYW5kLXNlcGFyYXRvci5waXBlXCI7XG5pbXBvcnQgeyBUYVN2Z1BpcGUgYXMgVGFTdmcgfSBmcm9tIFwiQHNoYXJlZC9waXBlcy90YS1zdmcucGlwZVwiO1xuXG4vLyBhbmltYXRpb25zXG5pbXBvcnQgeyBzaG93QW5pbWF0aW9uIH0gZnJvbSBcIkBzaGFyZWQvYW5pbWF0aW9ucy9zaG93LmFuaW1hdGlvblwiO1xuaW1wb3J0IHsgY2xvc2VGb3JtIH0gZnJvbSBcIkBzaGFyZWQvYW5pbWF0aW9ucy9jbG9zZS1mb3JtLmFuaW1hdGlvblwiO1xuaW1wb3J0IHsgQ2FNb25leUZpbHRlclN2Z1JvdXRlcyB9IGZyb20gXCJAc2hhcmVkL2NvbXBvbmVudHMvY2EtZmlsdGVycy91dGlscy9zdmctcm91dGVzL2NhLW1vbmV5LWZpbHRlci1zdmctcm91dGVzXCI7XG5cbi8vIGVudW1zXG5pbXBvcnQgeyBUb29sYmFyRmlsdGVyU3RyaW5nRW51bSBhcyBUb29sYmFyRmlsdGVyU3RyaW5nIH0gZnJvbSBcIkBzaGFyZWQvY29tcG9uZW50cy9jYS1tYXAvZW51bXMvdG9vbGJhci1maWx0ZXItc3RyaW5nLmVudW1cIjtcblxuLy8gbW9kZWxzXG5pbXBvcnQgeyBBcnJheVN0YXR1cyB9IGZyb20gXCJAc2hhcmVkL21vZGVscy9hcnJheS1zdGF0dXMubW9kZWxcIjtcbmltcG9ydCB7IGZpbHRlck91dHB1dCB9IGZyb20gXCJAc2hhcmVkL21vZGVscy9maWx0ZXItb3V0cHV0Lm1vZGVsXCI7XG5pbXBvcnQgeyBmaWx0ZXJPdXRwdXRXaXRoUGFyYW1zIH0gZnJvbSBcIkBzaGFyZWQvbW9kZWxzL2ZpbHRlci1vdXRwdXQtcGFyYW1zLm1vZGVsXCI7XG5cbi8vIGNvbmZpZ3NcbmltcG9ydCB7IENhTW9uZXlGaWx0ZXJDb25maWcgfSBmcm9tIFwiQHNoYXJlZC9jb21wb25lbnRzL2NhLWZpbHRlcnMvY29tcG9uZW50cy9jYS1tb25leS1maWx0ZXIvY29uZmlnL2NhLW1vbmV5LWZpbHRlci5jb25maWdcIjtcbmltcG9ydCB7IElDYUlucHV0IH0gZnJvbSBcIkBzaGFyZWQvY29tcG9uZW50cy9jYS1pbnB1dC9jb25maWcvY2EtaW5wdXQuY29uZmlnXCI7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tIFwiQHNoYXJlZC9jb21wb25lbnRzL2NhLWlucHV0L2NhLWlucHV0LmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWNhLW1vbmV5LWZpbHRlclwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgLy8gbW9kdWxlc1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nYk1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIFN2Z0ljb25Nb2R1bGUsXG4gICAgQ2FJbnB1dENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9jYS1tb25leS1maWx0ZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NhLW1vbmV5LWZpbHRlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgcHJvdmlkZXJzOiBbTmdiRHJvcGRvd25Db25maWcsIFRob3VzYW5kU2VwYXJhdG9yLCBUYVN2Z10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtzaG93QW5pbWF0aW9uKFwic2hvd0FuaW1hdGlvblwiKSwgY2xvc2VGb3JtKFwiY2xvc2VGb3JtXCIpXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FNb25leUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gVG9vbGJhckZpbHRlclN0cmluZy5NT05FWV9GSUxURVI7XG4gIEBJbnB1dCgpIHN1YlR5cGU6IHN0cmluZyA9IFRvb2xiYXJGaWx0ZXJTdHJpbmcuUEVORElOR19TVEFUVVM7XG4gIEBJbnB1dCgpIG1vbmV5RmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZnVlbFR5cGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbG9hZFR5cGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpc1JlcGFpckZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0ZpbHRlckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBzaG93UGFydDE6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgc2hvd1BhcnQyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHNob3dQYXJ0MzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBtb25leUZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBzaW5nbGVGb3JtRXJyb3I6IHN0cmluZyB8IGJvb2xlYW4gPVxuICAgIFRvb2xiYXJGaWx0ZXJTdHJpbmcuRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSO1xuICBwdWJsaWMgbXVsdGlGb3JtRmlyc3RFcnJvcjogc3RyaW5nIHwgYm9vbGVhbiA9XG4gICAgVG9vbGJhckZpbHRlclN0cmluZy5FTVBUWV9TVFJJTkdfUExBQ0VIT0xERVI7XG4gIHB1YmxpYyBtdWx0aUZvcm1TZWNvbmRFcnJvcjogc3RyaW5nIHwgYm9vbGVhbiA9XG4gICAgVG9vbGJhckZpbHRlclN0cmluZy5FTVBUWV9TVFJJTkdfUExBQ0VIT0xERVI7XG4gIHB1YmxpYyBtdWx0aUZvcm1UaGlyZEVycm9yOiBzdHJpbmcgfCBib29sZWFuID1cbiAgICBUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUjtcbiAgcHVibGljIG1vbmV5RmlsdGVyU3RhdHVzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0J1dHRvbkF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzaW5nbGVGcm9tQWN0aXZlOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICBwdWJsaWMgc2luZ2xlVG9BY3RpdmU6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gIHB1YmxpYyBtdWx0aUZyb21GaXJzdEZyb21BY3RpdmU6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gIHB1YmxpYyBtdWx0aUZyb21GaXJzdFRvQWN0aXZlOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICBwdWJsaWMgbXVsdGlGb3JtU2Vjb25kRnJvbUFjdGl2ZTogbnVtYmVyIHwgc3RyaW5nID0gMDtcbiAgcHVibGljIG11bHRpRm9ybVNlY29uZFRvQWN0aXZlOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICBwdWJsaWMgbXVsdGlGb3JtVGhpcmRGcm9tQWN0aXZlOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICBwdWJsaWMgbXVsdGlGb3JtVGhpcmRUb0FjdGl2ZTogbnVtYmVyIHwgc3RyaW5nID0gMDtcblxuICBwdWJsaWMgbWluVmFsdWVSYW5nZTogc3RyaW5nID0gVG9vbGJhckZpbHRlclN0cmluZy5NSU5fVkFMVUU7XG4gIHB1YmxpYyBtYXhWYWx1ZVJhbmdlOiBzdHJpbmcgPSBUb29sYmFyRmlsdGVyU3RyaW5nLk1BWF9WQUxVRTtcblxuICBwdWJsaWMgYWN0aXZlRm9ybU51bTogbnVtYmVyID0gMDtcbiAgcHVibGljIG1pblZhbHVlU2V0OiBzdHJpbmcgPSBUb29sYmFyRmlsdGVyU3RyaW5nLk1JTl9WQUxVRTtcbiAgcHVibGljIG1heFZhbHVlU2V0OiBzdHJpbmcgPSBUb29sYmFyRmlsdGVyU3RyaW5nLk1BWF9WQUxVRTtcblxuICBwdWJsaWMgZmlsdGVyQWN0aXZlQXJyYXk6IEFycmF5U3RhdHVzW10gPSBbXTtcbiAgcHVibGljIHN3aXBlQWN0aXZlUmFuZ2U6IG51bWJlciA9IDA7XG4gIHB1YmxpYyB0b3RhbEZpbHRlcnNOdW06IG51bWJlciA9IDA7XG4gIHB1YmxpYyBzaW5nbGVGb3JtQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuXG4gICAgLy8gcGlwZXNcbiAgICBwcml2YXRlIHRob3VzYW5kU2VwYXJhdG9yOiBUaG91c2FuZFNlcGFyYXRvclxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gICAgdGhpcy53YXRjaE1vbmV5Rm9ybVZhbHVlQ2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZ2V0IHNpbmdsZUZvcm1Gcm9tKCk6IElDYUlucHV0IHtcbiAgICByZXR1cm4gQ2FNb25leUZpbHRlckNvbmZpZy5nZXRTaW5nbGVGb3JtRnJvbSgpO1xuICB9XG5cbiAgZ2V0IHNpbmdsZUZvcm1UbygpOiBJQ2FJbnB1dCB7XG4gICAgcmV0dXJuIENhTW9uZXlGaWx0ZXJDb25maWcuZ2V0U2luZ2xlRm9ybVRvKCk7XG4gIH1cblxuICBnZXQgbXVsdGlGb3JtRmlyc3RGcm9tKCk6IElDYUlucHV0IHtcbiAgICByZXR1cm4gQ2FNb25leUZpbHRlckNvbmZpZy5nZXRNdWx0aUZvcm1GaXJzdEZyb20oKTtcbiAgfVxuXG4gIGdldCBtdWx0aUZvcm1GaXJzdFRvKCk6IElDYUlucHV0IHtcbiAgICByZXR1cm4gQ2FNb25leUZpbHRlckNvbmZpZy5nZXRNdWx0aUZvcm1GaXJzdFRvKCk7XG4gIH1cblxuICBnZXQgbXVsdGlGb3JtU2Vjb25kRnJvbSgpOiBJQ2FJbnB1dCB7XG4gICAgcmV0dXJuIENhTW9uZXlGaWx0ZXJDb25maWcuZ2V0TXVsdGlGb3JtU2Vjb25kRnJvbSgpO1xuICB9XG5cbiAgZ2V0IG11bHRpRm9ybVNlY29uZFRvKCk6IElDYUlucHV0IHtcbiAgICByZXR1cm4gQ2FNb25leUZpbHRlckNvbmZpZy5nZXRNdWx0aUZvcm1TZWNvbmRUbygpO1xuICB9XG5cbiAgZ2V0IG11bHRpRm9ybVRoaXJkRnJvbSgpOiBJQ2FJbnB1dCB7XG4gICAgcmV0dXJuIENhTW9uZXlGaWx0ZXJDb25maWcuZ2V0TXVsdGlGb3JtVGhpcmRGcm9tKCk7XG4gIH1cblxuICBnZXQgbXVsdGlGb3JtVGhpcmRUbygpOiBJQ2FJbnB1dCB7XG4gICAgcmV0dXJuIENhTW9uZXlGaWx0ZXJDb25maWcuZ2V0TXVsdGlGb3JtVGhpcmRUbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMubW9uZXlGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzaW5nbGVGcm9tOiBudWxsLFxuICAgICAgc2luZ2xlVG86IG51bGwsXG4gICAgICBtdWx0aUZyb21GaXJzdEZyb206IG51bGwsXG4gICAgICBtdWx0aUZyb21GaXJzdFRvOiBudWxsLFxuICAgICAgbXVsdGlGb3JtU2Vjb25kRnJvbTogbnVsbCxcbiAgICAgIG11bHRpRm9ybVNlY29uZFRvOiBudWxsLFxuICAgICAgbXVsdGlGb3JtVGhpcmRGcm9tOiBudWxsLFxuICAgICAgbXVsdGlGb3JtVGhpcmRUbzogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hNb25leUZvcm1WYWx1ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5tb25leUZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNpbmdsZUZyb20gfHwgY2hhbmdlcy5zaW5nbGVUbykge1xuICAgICAgICAgIGlmIChjaGFuZ2VzLnNpbmdsZVRvKSB7XG4gICAgICAgICAgICBjb25zdCB0byA9IHBhcnNlSW50KGNoYW5nZXMuc2luZ2xlVG8pO1xuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHBhcnNlSW50KGNoYW5nZXMuc2luZ2xlRnJvbSk7XG4gICAgICAgICAgICBpZiAoZnJvbSA+IHRvIHx8IGZyb20gPT09IHRvKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2luZ2xlRm9ybUVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2luZ2xlRm9ybUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRm9ybUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2luZ2xlRm9ybUVycm9yID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5tdWx0aUZyb21GaXJzdEZyb20gfHwgY2hhbmdlcy5tdWx0aUZyb21GaXJzdFRvKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZXMubXVsdGlGcm9tRmlyc3RUbykge1xuICAgICAgICAgICAgY29uc3QgdG8gPSBwYXJzZUludChjaGFuZ2VzLm11bHRpRnJvbUZpcnN0VG8pO1xuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHBhcnNlSW50KGNoYW5nZXMubXVsdGlGcm9tRmlyc3RGcm9tKTtcblxuICAgICAgICAgICAgaWYgKGZyb20gPiB0byB8fCBmcm9tID09PSB0bykge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpRm9ybUZpcnN0RXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aUZvcm1GaXJzdEVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlGb3JtRmlyc3RFcnJvciA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm11bHRpRm9ybUZpcnN0RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLm11bHRpRm9ybVNlY29uZEZyb20gfHwgY2hhbmdlcy5tdWx0aUZvcm1TZWNvbmRUbykge1xuICAgICAgICAgIGlmIChjaGFuZ2VzLm11bHRpRm9ybVNlY29uZFRvKSB7XG4gICAgICAgICAgICBjb25zdCB0byA9IHBhcnNlSW50KGNoYW5nZXMubXVsdGlGb3JtU2Vjb25kVG8pO1xuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHBhcnNlSW50KGNoYW5nZXMubXVsdGlGb3JtU2Vjb25kRnJvbSk7XG5cbiAgICAgICAgICAgIGlmIChmcm9tID4gdG8gfHwgZnJvbSA9PT0gdG8pIHtcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpRm9ybVNlY29uZEVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlGb3JtU2Vjb25kRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5tdWx0aUZvcm1UaGlyZEZyb20gfHwgY2hhbmdlcy5tdWx0aUZvcm1UaGlyZFRvKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZXMubXVsdGlGb3JtVGhpcmRUbykge1xuICAgICAgICAgICAgY29uc3QgdG8gPSBwYXJzZUludChjaGFuZ2VzLm11bHRpRm9ybVRoaXJkVG8pO1xuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHBhcnNlSW50KGNoYW5nZXMubXVsdGlGb3JtVGhpcmRGcm9tKTtcbiAgICAgICAgICAgIGlmIChmcm9tID4gdG8gfHwgZnJvbSA9PT0gdG8pIHtcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlGb3JtVGhpcmRFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpRm9ybVRoaXJkRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdWJUeXBlICE9PSBUb29sYmFyRmlsdGVyU3RyaW5nLkFMTCkge1xuICAgICAgICAgIGxldCB0b1ZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgbGV0IGZyb21WYWx1ZUNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3QgZnJvbUFjdGl2ZSA9XG4gICAgICAgICAgICB0aGlzLnNpbmdsZUZyb21BY3RpdmUgJiYgdGhpcy5zaW5nbGVGcm9tQWN0aXZlICE9IFwibnVsbFwiXG4gICAgICAgICAgICAgID8gdGhpcy5zaW5nbGVGcm9tQWN0aXZlXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICBjb25zdCB0b0FjdGl2ZSA9XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVRvQWN0aXZlICYmIHRoaXMuc2luZ2xlVG9BY3RpdmUgIT0gXCJudWxsXCJcbiAgICAgICAgICAgICAgPyB0aGlzLnNpbmdsZVRvQWN0aXZlXG4gICAgICAgICAgICAgIDogMDtcblxuICAgICAgICAgIGxldCB0byA9IDA7XG4gICAgICAgICAgaWYgKGNoYW5nZXMuc2luZ2xlVG8pIHtcbiAgICAgICAgICAgIHRvID0gcGFyc2VJbnQoY2hhbmdlcy5zaW5nbGVUbyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgICAgIGlmIChjaGFuZ2VzLnNpbmdsZUZyb20pIHtcbiAgICAgICAgICAgIGZyb20gPSBwYXJzZUludChjaGFuZ2VzLnNpbmdsZUZyb20pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b0FjdGl2ZSA9PT0gdG8pIHtcbiAgICAgICAgICAgIHRvVmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZyb21BY3RpdmUgPT09IGZyb20pIHtcbiAgICAgICAgICAgIGZyb21WYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodG9WYWx1ZUNoYW5nZWQgfHwgZnJvbVZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5pc0J1dHRvbkF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1vbmV5RmlsdGVyU3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0J1dHRvbkF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0byAmJiAhZnJvbSkge1xuICAgICAgICAgICAgICB0aGlzLm1vbmV5RmlsdGVyU3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm11bHRpRm9ybUZpcnN0RXJyb3IgJiZcbiAgICAgICAgICAgICF0aGlzLm11bHRpRm9ybVNlY29uZEVycm9yICYmXG4gICAgICAgICAgICAhdGhpcy5tdWx0aUZvcm1UaGlyZEVycm9yXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1vbmV5RmlsdGVyU3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tNb25leU11bHRpRm9ybShjaGFuZ2VzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0J1dHRvbkF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubXVsdGlGb3JtRmlyc3RFcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRFcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZEVycm9yXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmlzQnV0dG9uQXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlRm9ybUVycm9yKSB7XG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlVG9cIik/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlVG9cIik/LnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpRm9ybUZpcnN0RXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZyb21GaXJzdFRvXCIpPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRnJvbUZpcnN0VG9cIik/LnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpRm9ybVNlY29uZEVycm9yKSB7XG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtU2Vjb25kVG9cIik/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtU2Vjb25kVG9cIik/LnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpRm9ybVRoaXJkRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZvcm1UaGlyZFRvXCIpPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRm9ybVRoaXJkVG9cIik/LnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJBbGwoZXZlbnQ/OiBFdmVudCk6IGZpbHRlck91dHB1dCB8IGZpbHRlck91dHB1dFdpdGhQYXJhbXMge1xuICAgIGlmIChldmVudCkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUb29sYmFyRmlsdGVyU3RyaW5nLk1PTkVZX0ZJTFRFUjpcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVwYWlyRmlsdGVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3ViVHlwZSAhPT0gVG9vbGJhckZpbHRlclN0cmluZy5BTEwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKFwic2luZ2xlRm9ybVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oXCJjbGVhckFsbFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWF4TnVtID0gdGhpcy50aG91c2FuZFNlcGFyYXRvci50cmFuc2Zvcm0odGhpcy5tYXhWYWx1ZVJhbmdlKTtcblxuICAgICAgICAgIHRoaXMubWF4VmFsdWVTZXQgPSBtYXhOdW07XG4gICAgICAgICAgdGhpcy5taW5WYWx1ZVNldCA9IHRoaXMubWluVmFsdWVSYW5nZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZUZvcm1OdW0gPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVG9vbGJhckZpbHRlclN0cmluZy5NSUxFU19GSUxURVI6XG4gICAgICBjYXNlIFRvb2xiYXJGaWx0ZXJTdHJpbmcuUEFZX0ZJTFRFUjpcbiAgICAgIGNhc2UgVG9vbGJhckZpbHRlclN0cmluZy5NT05FWV9GSUxURVI6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09IFRvb2xiYXJGaWx0ZXJTdHJpbmcuTU9ORVlfRklMVEVSICYmXG4gICAgICAgICAgIXRoaXMuaXNSZXBhaXJGaWx0ZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4TnVtID0gdGhpcy50aG91c2FuZFNlcGFyYXRvci50cmFuc2Zvcm0odGhpcy5tYXhWYWx1ZVJhbmdlKTtcblxuICAgICAgICB0aGlzLm1heFZhbHVlU2V0ID0gbWF4TnVtO1xuICAgICAgICB0aGlzLm1pblZhbHVlU2V0ID0gdGhpcy5taW5WYWx1ZVJhbmdlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdXR0b25BdmFpbGFibGUgPSB0cnVlO1xuICAgIHRoaXMubW9uZXlGaWx0ZXJTdGF0dXMgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlckFjdGl2ZUFycmF5ID0gW107XG4gICAgdGhpcy5zd2lwZUFjdGl2ZVJhbmdlID0gMDtcbiAgICB0aGlzLnRvdGFsRmlsdGVyc051bSA9IDA7XG4gICAgdGhpcy5zaW5nbGVGb3JtQWN0aXZlID0gZmFsc2U7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJDbGVhclwiLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgZmlsdGVyVHlwZTogdGhpcy50eXBlLFxuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwdWJsaWMgaGlkZUZvcm1QYXJ0KG1vZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKG1vZCA9PT0gXCJwYXJ0MVwiKSB7XG4gICAgICB0aGlzLnNob3dQYXJ0MSA9ICF0aGlzLnNob3dQYXJ0MTtcbiAgICB9IGVsc2UgaWYgKG1vZCA9PT0gXCJwYXJ0MlwiKSB7XG4gICAgICB0aGlzLnNob3dQYXJ0MiA9ICF0aGlzLnNob3dQYXJ0MjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93UGFydDMgPSAhdGhpcy5zaG93UGFydDM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsZWFyRm9ybShtb2Q6IHN0cmluZywgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHN3aXRjaCAobW9kKSB7XG4gICAgICBjYXNlIFwic2luZ2xlRm9ybVwiOlxuICAgICAgICB0aGlzLm1vbmV5Rm9ybVxuICAgICAgICAgIC5nZXQoXCJzaW5nbGVGcm9tXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMubW9uZXlGb3JtXG4gICAgICAgICAgLmdldChcInNpbmdsZVRvXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMuc2luZ2xlRm9ybUVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9uZXlGaWx0ZXJTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaW5nbGVUb0FjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMuc2luZ2xlRnJvbUFjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMuaXNCdXR0b25BdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibXVsdGlGcm9tRmlyc3RcIjpcbiAgICAgICAgdGhpcy5tb25leUZvcm1cbiAgICAgICAgICAuZ2V0KFwibXVsdGlGcm9tRmlyc3RGcm9tXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMubW9uZXlGb3JtXG4gICAgICAgICAgLmdldChcIm11bHRpRnJvbUZpcnN0VG9cIilcbiAgICAgICAgICA/LnNldFZhbHVlKFRvb2xiYXJGaWx0ZXJTdHJpbmcuRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1GaXJzdEVycm9yID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm11bHRpRm9ybVNlY29uZFwiOlxuICAgICAgICB0aGlzLm1vbmV5Rm9ybVxuICAgICAgICAgIC5nZXQoXCJtdWx0aUZvcm1TZWNvbmRGcm9tXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMubW9uZXlGb3JtXG4gICAgICAgICAgLmdldChcIm11bHRpRm9ybVNlY29uZFRvXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMubXVsdGlGb3JtU2Vjb25kRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibXVsdGlGb3JtVGhpcmRcIjpcbiAgICAgICAgdGhpcy5tb25leUZvcm1cbiAgICAgICAgICAuZ2V0KFwibXVsdGlGb3JtVGhpcmRGcm9tXCIpXG4gICAgICAgICAgPy5zZXRWYWx1ZShUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUik7XG4gICAgICAgIHRoaXMubW9uZXlGb3JtXG4gICAgICAgICAgLmdldChcIm11bHRpRm9ybVRoaXJkVG9cIilcbiAgICAgICAgICA/LnNldFZhbHVlKFRvb2xiYXJGaWx0ZXJTdHJpbmcuRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZEVycm9yID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNsZWFyQWxsXCI6XG4gICAgICAgIHRoaXMubXVsdGlGcm9tRmlyc3RGcm9tQWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5tdWx0aUZyb21GaXJzdFRvQWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRGcm9tQWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRUb0FjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMubXVsdGlGb3JtVGhpcmRGcm9tQWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZFRvQWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5tb25leUZvcm0ucmVzZXQoKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1GaXJzdEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMubXVsdGlGb3JtU2Vjb25kRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZEVycm9yID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZpbHRlclZhbHVlKFxuICAgIGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZFxuICApOiBmaWx0ZXJPdXRwdXQgfCBmaWx0ZXJPdXRwdXRXaXRoUGFyYW1zIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICBsZXQgc3ViVHlwZSA9IFRvb2xiYXJGaWx0ZXJTdHJpbmcuRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSLnRvU3RyaW5nKCk7XG5cbiAgICB0aGlzLmlzQnV0dG9uQXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUb29sYmFyRmlsdGVyU3RyaW5nLlRJTUVfRklMVEVSKSB7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gVG9vbGJhckZpbHRlclN0cmluZy5NT05FWV9GSUxURVIgJiZcbiAgICAgICF0aGlzLmlzUmVwYWlyRmlsdGVyXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zdWJUeXBlID09PSBUb29sYmFyRmlsdGVyU3RyaW5nLkFMTCkge1xuICAgICAgICB0aGlzLm11bHRpRnJvbUZpcnN0RnJvbUFjdGl2ZSA9IChcbiAgICAgICAgICBcIiBcIiArIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRnJvbUZpcnN0RnJvbVwiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcbiAgICAgICAgdGhpcy5tdWx0aUZyb21GaXJzdFRvQWN0aXZlID0gKFxuICAgICAgICAgIFwiIFwiICsgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGcm9tRmlyc3RUb1wiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRGcm9tQWN0aXZlID0gKFxuICAgICAgICAgIFwiIFwiICsgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtU2Vjb25kRnJvbVwiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1TZWNvbmRUb0FjdGl2ZSA9IChcbiAgICAgICAgICBcIiBcIiArIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRm9ybVNlY29uZFRvXCIpPy52YWx1ZVxuICAgICAgICApLnNsaWNlKDEpO1xuICAgICAgICB0aGlzLm11bHRpRm9ybVRoaXJkRnJvbUFjdGl2ZSA9IChcbiAgICAgICAgICBcIiBcIiArIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRm9ybVRoaXJkRnJvbVwiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcbiAgICAgICAgdGhpcy5tdWx0aUZvcm1UaGlyZFRvQWN0aXZlID0gKFxuICAgICAgICAgIFwiIFwiICsgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtVGhpcmRUb1wiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcblxuICAgICAgICBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICBmaXJzdEZvcm1Gcm9tOiB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZyb21GaXJzdEZyb21cIik/LnZhbHVlLFxuICAgICAgICAgIGZpcnN0Rm9ybVRvOiB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZyb21GaXJzdFRvXCIpPy52YWx1ZSxcbiAgICAgICAgICBzZWNvbmRGb3JtRnJvbTogdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtU2Vjb25kRnJvbVwiKT8udmFsdWUsXG4gICAgICAgICAgc2Vjb25kRm9ybVRvOiB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZvcm1TZWNvbmRUb1wiKT8udmFsdWUsXG4gICAgICAgICAgdGhpcmRGb3JtRnJvbTogdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtVGhpcmRGcm9tXCIpPy52YWx1ZSxcbiAgICAgICAgICB0aGlyZEZvcm1UbzogdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtVGhpcmRUb1wiKT8udmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGZvcm1zQWN0aXZlID0gMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGcm9tRmlyc3RGcm9tXCIpPy52YWx1ZSB8fFxuICAgICAgICAgIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRnJvbUZpcnN0VG9cIik/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1zQWN0aXZlID0gZm9ybXNBY3RpdmUgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRm9ybVNlY29uZEZyb21cIik/LnZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5tb25leUZvcm0uZ2V0KFwibXVsdGlGb3JtU2Vjb25kVG9cIik/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1zQWN0aXZlID0gZm9ybXNBY3RpdmUgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMubW9uZXlGb3JtLmdldChcIm11bHRpRm9ybVRoaXJkRnJvbVwiKT8udmFsdWUgfHxcbiAgICAgICAgICB0aGlzLm1vbmV5Rm9ybS5nZXQoXCJtdWx0aUZvcm1UaGlyZFRvXCIpPy52YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3Jtc0FjdGl2ZSA9IGZvcm1zQWN0aXZlICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlRm9ybU51bSA9IGZvcm1zQWN0aXZlO1xuICAgICAgICB0aGlzLnRvdGFsRmlsdGVyc051bSA9IGZvcm1zQWN0aXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaW5nbGVGcm9tQWN0aXZlID0gKFxuICAgICAgICAgIFwiIFwiICsgdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlRnJvbVwiKT8udmFsdWVcbiAgICAgICAgKS5zbGljZSgxKTtcbiAgICAgICAgdGhpcy5zaW5nbGVUb0FjdGl2ZSA9IChcbiAgICAgICAgICBcIiBcIiArIHRoaXMubW9uZXlGb3JtLmdldChcInNpbmdsZVRvXCIpPy52YWx1ZVxuICAgICAgICApLnNsaWNlKDEpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlRnJvbVwiKT8udmFsdWUgJiZcbiAgICAgICAgICAhdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlVG9cIik/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGwoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2luZ2xlRm9ybUFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHNpbmdsZUZyb206IHRoaXMubW9uZXlGb3JtLmdldChcInNpbmdsZUZyb21cIik/LnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMubW9uZXlGb3JtLmdldChcInNpbmdsZUZyb21cIik/LnZhbHVlKVxuICAgICAgICAgICAgOiBUb29sYmFyRmlsdGVyU3RyaW5nLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUixcbiAgICAgICAgICBzaW5nbGVUbzogdGhpcy5tb25leUZvcm0uZ2V0KFwic2luZ2xlVG9cIik/LnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMubW9uZXlGb3JtLmdldChcInNpbmdsZVRvXCIpPy52YWx1ZSlcbiAgICAgICAgICAgIDogVG9vbGJhckZpbHRlclN0cmluZy5FTVBUWV9TVFJJTkdfUExBQ0VIT0xERVIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YTogZmlsdGVyT3V0cHV0IHwgZmlsdGVyT3V0cHV0V2l0aFBhcmFtcyA9IHtcbiAgICAgIGZpbHRlclR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFjdGlvbjogXCJTZXRcIixcbiAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyxcbiAgICAgIHN1YlR5cGU6IHN1YlR5cGUsXG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja01vbmV5TXVsdGlGb3JtKGRhdGE6IHtcbiAgICBzaW5nbGVGb3JtOiBzdHJpbmc7XG4gICAgc2luZ2xlVG86IHN0cmluZztcbiAgICBtdWx0aUZyb21GaXJzdEZyb206IHN0cmluZztcbiAgICBtdWx0aUZyb21GaXJzdFRvOiBzdHJpbmc7XG4gICAgbXVsdGlGb3JtU2Vjb25kRnJvbTogc3RyaW5nO1xuICAgIG11bHRpRm9ybVNlY29uZFRvOiBzdHJpbmc7XG4gICAgbXVsdGlGb3JtVGhpcmRGcm9tOiBzdHJpbmc7XG4gICAgbXVsdGlGb3JtVGhpcmRUbzogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgbGV0IGZpcnN0Rm9ybUNoYW5nZWQgPSBcIm5vbmVcIjtcbiAgICBsZXQgc2Vjb25kRm9ybUNoYW5nZWQgPSBcIm5vbmVcIjtcbiAgICBsZXQgdGhpcmRGb3JtQ2hhbmdlZCA9IFwibm9uZVwiO1xuXG4gICAgY29uc3QgZmlyc3RGcm9tQWN0aXZlID1cbiAgICAgIHRoaXMubXVsdGlGcm9tRmlyc3RGcm9tQWN0aXZlICYmIHRoaXMubXVsdGlGcm9tRmlyc3RGcm9tQWN0aXZlICE9PSBcIm51bGxcIlxuICAgICAgICA/IHRoaXMubXVsdGlGcm9tRmlyc3RGcm9tQWN0aXZlXG4gICAgICAgIDogMDtcbiAgICBjb25zdCBmaXJzdFRvQWN0aXZlID1cbiAgICAgIHRoaXMubXVsdGlGcm9tRmlyc3RUb0FjdGl2ZSAmJiB0aGlzLm11bHRpRnJvbUZpcnN0VG9BY3RpdmUgIT0gXCJudWxsXCJcbiAgICAgICAgPyB0aGlzLm11bHRpRnJvbUZpcnN0VG9BY3RpdmVcbiAgICAgICAgOiAwO1xuXG4gICAgY29uc3Qgc2VjRnJvbUFjdGl2ZSA9XG4gICAgICB0aGlzLm11bHRpRm9ybVNlY29uZEZyb21BY3RpdmUgJiZcbiAgICAgIHRoaXMubXVsdGlGb3JtU2Vjb25kRnJvbUFjdGl2ZSAhPT0gXCJudWxsXCJcbiAgICAgICAgPyB0aGlzLm11bHRpRm9ybVNlY29uZEZyb21BY3RpdmVcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IHNlY1RvQWN0aXZlID1cbiAgICAgIHRoaXMubXVsdGlGb3JtU2Vjb25kVG9BY3RpdmUgJiYgdGhpcy5tdWx0aUZvcm1TZWNvbmRUb0FjdGl2ZSAhPT0gXCJudWxsXCJcbiAgICAgICAgPyB0aGlzLm11bHRpRm9ybVNlY29uZFRvQWN0aXZlXG4gICAgICAgIDogMDtcblxuICAgIGNvbnN0IHRoaXJkRnJvbUFjdGl2ZSA9XG4gICAgICB0aGlzLm11bHRpRm9ybVRoaXJkRnJvbUFjdGl2ZSAmJiB0aGlzLm11bHRpRm9ybVRoaXJkRnJvbUFjdGl2ZSAhPT0gXCJudWxsXCJcbiAgICAgICAgPyB0aGlzLm11bHRpRm9ybVRoaXJkRnJvbUFjdGl2ZVxuICAgICAgICA6IDA7XG4gICAgY29uc3QgdGhpcmRUb0FjdGl2ZSA9XG4gICAgICB0aGlzLm11bHRpRm9ybVRoaXJkVG9BY3RpdmUgJiYgdGhpcy5tdWx0aUZvcm1UaGlyZFRvQWN0aXZlICE9PSBcIm51bGxcIlxuICAgICAgICA/IHRoaXMubXVsdGlGb3JtVGhpcmRUb0FjdGl2ZVxuICAgICAgICA6IDA7XG5cbiAgICBjb25zdCBmaXJzdEZyb20gPVxuICAgICAgZGF0YS5tdWx0aUZyb21GaXJzdEZyb20gJiYgZGF0YS5tdWx0aUZyb21GaXJzdEZyb20gIT09IFwibnVsbFwiXG4gICAgICAgID8gcGFyc2VJbnQoZGF0YS5tdWx0aUZyb21GaXJzdEZyb20pXG4gICAgICAgIDogMDtcbiAgICBjb25zdCBmaXJzdFRvID1cbiAgICAgIGRhdGEubXVsdGlGcm9tRmlyc3RUbyAmJiBkYXRhLm11bHRpRnJvbUZpcnN0VG8gIT09IFwibnVsbFwiXG4gICAgICAgID8gcGFyc2VJbnQoZGF0YS5tdWx0aUZyb21GaXJzdFRvKVxuICAgICAgICA6IDA7XG5cbiAgICBjb25zdCBzZWNGcm9tID1cbiAgICAgIGRhdGEubXVsdGlGb3JtU2Vjb25kRnJvbSAmJiBkYXRhLm11bHRpRm9ybVNlY29uZEZyb20gIT09IFwibnVsbFwiXG4gICAgICAgID8gcGFyc2VJbnQoZGF0YS5tdWx0aUZvcm1TZWNvbmRGcm9tKVxuICAgICAgICA6IDA7XG4gICAgY29uc3Qgc2VjVG8gPVxuICAgICAgZGF0YS5tdWx0aUZvcm1TZWNvbmRUbyAmJiBkYXRhLm11bHRpRm9ybVNlY29uZFRvICE9PSBcIm51bGxcIlxuICAgICAgICA/IHBhcnNlSW50KGRhdGEubXVsdGlGb3JtU2Vjb25kVG8pXG4gICAgICAgIDogMDtcblxuICAgIGNvbnN0IHRoaXJkRnJvbSA9XG4gICAgICBkYXRhLm11bHRpRm9ybVRoaXJkRnJvbSAmJiBkYXRhLm11bHRpRm9ybVRoaXJkRnJvbSAhPT0gXCJudWxsXCJcbiAgICAgICAgPyBwYXJzZUludChkYXRhLm11bHRpRm9ybVRoaXJkRnJvbSlcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IHRoaXJkVG8gPVxuICAgICAgZGF0YS5tdWx0aUZvcm1UaGlyZFRvICYmIGRhdGEubXVsdGlGb3JtVGhpcmRUbyAhPT0gXCJudWxsXCJcbiAgICAgICAgPyBwYXJzZUludChkYXRhLm11bHRpRm9ybVRoaXJkVG8pXG4gICAgICAgIDogMDtcblxuICAgIGlmIChmaXJzdEZyb20gIT09IGZpcnN0RnJvbUFjdGl2ZSB8fCBmaXJzdFRvICE9PSBmaXJzdFRvQWN0aXZlKSB7XG4gICAgICBmaXJzdEZvcm1DaGFuZ2VkID0gXCJjaGFuZ2VkXCI7XG4gICAgfVxuXG4gICAgaWYgKHNlY0Zyb20gIT09IHNlY0Zyb21BY3RpdmUgfHwgc2VjVG8gIT09IHNlY1RvQWN0aXZlKSB7XG4gICAgICBzZWNvbmRGb3JtQ2hhbmdlZCA9IFwiY2hhbmdlZFwiO1xuICAgIH1cblxuICAgIGlmICh0aGlyZEZyb20gIT09IHRoaXJkRnJvbUFjdGl2ZSB8fCB0aGlyZFRvICE9PSB0aGlyZFRvQWN0aXZlKSB7XG4gICAgICB0aGlyZEZvcm1DaGFuZ2VkID0gXCJjaGFuZ2VkXCI7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmlyc3RGb3JtQ2hhbmdlZCA9PT0gXCJjaGFuZ2VkXCIgfHxcbiAgICAgIHNlY29uZEZvcm1DaGFuZ2VkID09PSBcImNoYW5nZWRcIiB8fFxuICAgICAgdGhpcmRGb3JtQ2hhbmdlZCA9PT0gXCJjaGFuZ2VkXCJcbiAgICApIHtcbiAgICAgIHRoaXMuaXNCdXR0b25BdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQnV0dG9uQXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoZmlyc3RGcm9tIHx8IGZpcnN0VG8gfHwgc2VjRnJvbSB8fCBzZWNUbyB8fCB0aGlyZEZyb20gfHwgdGhpcmRUbykge1xuICAgICAgICB0aGlzLm1vbmV5RmlsdGVyU3RhdHVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9uZXlGaWx0ZXJTdGF0dXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U3ZnUGF0aChwcm9wZXJ0eU5hbWU6IGtleW9mIHR5cGVvZiBDYU1vbmV5RmlsdGVyU3ZnUm91dGVzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQ2FNb25leUZpbHRlclN2Z1JvdXRlc1twcm9wZXJ0eU5hbWVdIGFzIHN0cmluZztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vbmV5RmlsdGVyICYmICFpc1JlcGFpckZpbHRlclwiPlxuICA8ZGl2IFtjbGFzcy5tdWx0aU1vbmV5Rm9ybV09XCJzdWJUeXBlID09PSAnYWxsJ1wiIFtmb3JtR3JvdXBdPVwibW9uZXlGb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1maWx0ZXIgbW9uZXktdG9wLWJvcmRlci1tYWdpblwiPjwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJUeXBlICE9PSAnYWxsJzsgZWxzZSBzaG93QWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZvcm0taG9sZGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm1vbmV5LW1haW4taG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgc2luZ2xlLW1vbmV5LW1haW5cIlxuICAgICAgICAgIFtAc2hvd0FuaW1hdGlvbl09XCIhIWlzRmlsdGVyQWN0aXZlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JGb3JtXT1cInNpbmdsZUZvcm1FcnJvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFwcC1jYS1pbnB1dFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaW5nbGVGcm9tXCJcbiAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cInNpbmdsZUZvcm1Gcm9tXCJcbiAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1vbmV5LXZhbHVlLWhvbGRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmVycm9yRm9ybV09XCJzaW5nbGVGb3JtRXJyb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2luZ2xlVG9cIlxuICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwic2luZ2xlRm9ybVRvXCJcbiAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3Nob3dBbGw+XG4gICAgICA8ZGl2IGNsYXNzPVwibXVsdGktZm9ybS1ob2xkZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1oZWFkZXJcIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5Gb3JtVGl0bGVdPVwiIXNob3dQYXJ0MVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhpZGVGb3JtUGFydCgncGFydDEnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZ1ZWxUeXBlICYmICFsb2FkVHlwZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbmFtZSBmdy1ib2xkXCIgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIj5cbiAgICAgICAgICAgICAgSW52b2ljZSBBZ2VpbmdcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZ1ZWxUeXBlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1uYW1lIGZ3LWJvbGRcIiBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiPlxuICAgICAgICAgICAgICBMYXN0IFByaWNlXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkVHlwZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tbmFtZS1ncmF5IHRleHQtdXBwZXJjYXNlIGZ3LWJvbGRcIlxuICAgICAgICAgICAgICBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJhdGVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgbW9uZXlGb3JtLnZhbHVlLm11bHRpRnJvbUZpcnN0RnJvbSAmJlxuICAgICAgICAgICAgICBtb25leUZvcm0udmFsdWUubXVsdGlGcm9tRmlyc3RUb1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2xlYXItbW9uZXktZm9ybSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZnctYm9sZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZvcm0oJ211bHRpRnJvbUZpcnN0JywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENMRUFSXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGlkZS1tb25leS1mb3JtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgc3ZnX3JvdGF0ZTogIXNob3dQYXJ0MSxcbiAgICAgICAgICAgICAgcm90YXRlX2JhY2s6IHNob3dQYXJ0MSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ2Fycm93TGVmdFN2Z1JvdXRlJylcIj48L3N2Zy1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9uZXktbWFpbi1ob2xkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBzaW5nbGUtbW9uZXktbWFpblwiXG4gICAgICAgICAgW0BjbG9zZUZvcm1dPVwic2hvd1BhcnQxXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFwcC1jYS1pbnB1dFxuICAgICAgICAgICAgICBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm11bHRpRnJvbUZpcnN0RnJvbVwiXG4gICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJtdWx0aUZvcm1GaXJzdEZyb21cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JGb3JtXT1cIm11bHRpRm9ybUZpcnN0RXJyb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtdWx0aUZyb21GaXJzdFRvXCJcbiAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cIm11bHRpRm9ybUZpcnN0VG9cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWZpbHRlciBtb25leS1ib3R0b20tYm9yZGVyLW1hZ2luIGZvcm0tYm9yZGVyXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuRm9ybUJvcmRlcl09XCIhc2hvd1BhcnQxXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbkZvcm1UaXRsZV09XCIhc2hvd1BhcnQyXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGlkZUZvcm1QYXJ0KCdwYXJ0MicpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZnVlbFR5cGUgJiYgIWxvYWRUeXBlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1uYW1lIGZ3LWJvbGRcIiBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiPlxuICAgICAgICAgICAgICBBdmFpbGFibGUgQ3JlZGl0XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmdWVsVHlwZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbmFtZSBmdy1ib2xkXCIgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIj5cbiAgICAgICAgICAgICAgUHJpY2UgUGVyIEdhbGxvblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZFR5cGVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW5hbWUtZ3JheSB0ZXh0LXVwcGVyY2FzZSBmdy1ib2xkXCJcbiAgICAgICAgICAgICAgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBQYWlkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIG1vbmV5Rm9ybS52YWx1ZS5tdWx0aUZvcm1TZWNvbmRGcm9tICYmXG4gICAgICAgICAgICAgIG1vbmV5Rm9ybS52YWx1ZS5tdWx0aUZvcm1TZWNvbmRUb1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2xlYXItbW9uZXktZm9ybSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZnctYm9sZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZvcm0oJ211bHRpRm9ybVNlY29uZCcsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDTEVBUlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImhpZGUtbW9uZXktZm9ybVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgIHN2Z19yb3RhdGU6ICFzaG93UGFydDIsXG4gICAgICAgICAgICAgIHJvdGF0ZV9iYWNrOiBzaG93UGFydDIsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnLWljb24gW3NyY109XCJnZXRTdmdQYXRoKCdhcnJvd0xlZnRTdmdSb3V0ZScpXCI+PC9zdmctaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm1vbmV5LW1haW4taG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgc2luZ2xlLW1vbmV5LW1haW5cIlxuICAgICAgICAgIFtAY2xvc2VGb3JtXT1cInNob3dQYXJ0MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1vbmV5LXZhbHVlLWhvbGRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtdWx0aUZvcm1TZWNvbmRGcm9tXCJcbiAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cIm11bHRpRm9ybVNlY29uZEZyb21cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JGb3JtXT1cIm11bHRpRm9ybVNlY29uZEVycm9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLWNhLWlucHV0XG4gICAgICAgICAgICAgIFtAc2hvd0FuaW1hdGlvbl09XCIhIWlzRmlsdGVyQWN0aXZlXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibXVsdGlGb3JtU2Vjb25kVG9cIlxuICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwibXVsdGlGb3JtU2Vjb25kVG9cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWZpbHRlciBtb25leS1ib3R0b20tYm9yZGVyLW1hZ2luIGZvcm0tYm9yZGVyXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuRm9ybUJvcmRlcl09XCIhc2hvd1BhcnQyXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbkZvcm1UaXRsZV09XCIhc2hvd1BhcnQzXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGlkZUZvcm1QYXJ0KCdwYXJ0MycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZnVlbFR5cGUgJiYgIWxvYWRUeXBlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1uYW1lIGZ3LWJvbGRcIiBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiPlxuICAgICAgICAgICAgICBSZXZlbnVlXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmdWVsVHlwZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbmFtZSBmdy1ib2xkXCIgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIj5cbiAgICAgICAgICAgICAgVG90YWwgQ29zdFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZFR5cGVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW5hbWUtZ3JheSB0ZXh0LXVwcGVyY2FzZSBmdy1ib2xkXCJcbiAgICAgICAgICAgICAgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBEdWVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgbW9uZXlGb3JtLnZhbHVlLm11bHRpRm9ybVRoaXJkRnJvbSAmJlxuICAgICAgICAgICAgICBtb25leUZvcm0udmFsdWUubXVsdGlGb3JtVGhpcmRUb1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2xlYXItbW9uZXktZm9ybSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZnctYm9sZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZvcm0oJ211bHRpRm9ybVRoaXJkJywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENMRUFSXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGlkZS1tb25leS1mb3JtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgc3ZnX3JvdGF0ZTogIXNob3dQYXJ0MyxcbiAgICAgICAgICAgICAgcm90YXRlX2JhY2s6IHNob3dQYXJ0MyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ2Fycm93TGVmdFN2Z1JvdXRlJylcIj48L3N2Zy1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9uZXktbWFpbi1ob2xkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBzaW5nbGUtbW9uZXktbWFpblwiXG4gICAgICAgICAgW0BjbG9zZUZvcm1dPVwic2hvd1BhcnQzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFwcC1jYS1pbnB1dFxuICAgICAgICAgICAgICBbQHNob3dBbmltYXRpb25dPVwiISFpc0ZpbHRlckFjdGl2ZVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm11bHRpRm9ybVRoaXJkRnJvbVwiXG4gICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJtdWx0aUZvcm1UaGlyZEZyb21cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9uZXktdmFsdWUtaG9sZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JGb3JtXT1cIm11bHRpRm9ybVRoaXJkRXJyb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgW0BzaG93QW5pbWF0aW9uXT1cIiEhaXNGaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtdWx0aUZvcm1UaGlyZFRvXCJcbiAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cIm11bHRpRm9ybVRoaXJkVG9cIlxuICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJvcmRlci1maWx0ZXIgbW9uZXktYm90dG9tLWJvcmRlci1tYWdpbiBmb3JtLWJvcmRlclwiXG4gICAgICBbY2xhc3MuaGlkZGVuRm9ybUJvcmRlcl09XCIhc2hvd1BhcnQzXCJcbiAgICA+PC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=