ca-components 1.3.33 → 1.3.34

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 (298) hide show
  1. package/esm2022/lib/ca-components.module.mjs +11 -5
  2. package/esm2022/lib/components/ca-chart/ca-chart.component.mjs +12 -11
  3. package/esm2022/lib/components/ca-checkbox/ca-checkbox.component.mjs +134 -0
  4. package/esm2022/lib/components/ca-checkbox/interfaces/column-check-action.interface.mjs +2 -0
  5. package/esm2022/lib/components/ca-checkbox/interfaces/index.mjs +2 -0
  6. package/esm2022/lib/components/ca-checkbox/utils/svg-routes/checkbox-svg-routes.mjs +7 -0
  7. package/esm2022/lib/components/ca-checkbox/utils/svg-routes/index.mjs +2 -0
  8. package/esm2022/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.mjs +95 -24
  9. package/esm2022/lib/components/ca-dropdown-menu/enums/dropdown-menu.enum.mjs +19 -0
  10. package/esm2022/lib/components/ca-dropdown-menu/enums/index.mjs +2 -2
  11. package/esm2022/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-item.interface.mjs +2 -0
  12. package/esm2022/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-option-emit.interface.mjs +2 -0
  13. package/esm2022/lib/components/ca-dropdown-menu/interfaces/index.mjs +3 -0
  14. package/esm2022/lib/components/ca-dropdown-menu/pipes/dropdown-menu-placement-class.pipe.mjs +4 -4
  15. package/esm2022/lib/components/ca-dropdown-menu/pipes/group-item-checked-state.pipe.mjs +21 -0
  16. package/esm2022/lib/components/ca-dropdown-menu/pipes/index.mjs +2 -1
  17. package/esm2022/lib/components/ca-input/directives/command-visible.directive.mjs +48 -0
  18. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +266 -0
  19. package/esm2022/lib/components/ca-input/mixins/input-command.mixin.mjs +127 -0
  20. package/esm2022/lib/components/ca-input/mixins/input-helper.mixin.mjs +49 -0
  21. package/esm2022/lib/components/ca-input/models/base.model.mjs +2 -0
  22. package/esm2022/lib/components/ca-main-table/ca-main-table.component.mjs +5 -3
  23. package/esm2022/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.mjs +1 -1
  24. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.mjs +1 -1
  25. package/esm2022/lib/components/ca-tooltip-list/ca-tooltip-list.component.mjs +3 -3
  26. package/esm2022/lib/enums/dropdown-menu.enum.mjs +20 -0
  27. package/esm2022/lib/pipes/row-class.pipe.mjs +26 -0
  28. package/esm2022/lib/utils/constants/dropdown-menu-content.constants.mjs +26 -26
  29. package/esm2022/lib/utils/helpers/dropdown-menu-content-conditional-items.helper.mjs +4 -4
  30. package/esm2022/lib/utils/helpers/dropdown-menu-content.helper.mjs +6 -6
  31. package/esm2022/public-api.mjs +3 -4
  32. package/fesm2022/ca-components.mjs +1792 -6057
  33. package/fesm2022/ca-components.mjs.map +1 -1
  34. package/lib/ca-components.module.d.ts +3 -2
  35. package/lib/components/ca-checkbox/ca-checkbox.component.d.ts +39 -0
  36. package/lib/components/ca-checkbox/interfaces/column-check-action.interface.d.ts +6 -0
  37. package/lib/components/ca-checkbox/interfaces/index.d.ts +1 -0
  38. package/lib/components/ca-checkbox/utils/svg-routes/checkbox-svg-routes.d.ts +6 -0
  39. package/lib/components/ca-checkbox/utils/svg-routes/index.d.ts +1 -0
  40. package/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.d.ts +16 -7
  41. package/lib/components/ca-dropdown-menu/enums/{dropdown-menu-string.enum.d.ts → dropdown-menu.enum.d.ts} +5 -2
  42. package/lib/components/ca-dropdown-menu/enums/index.d.ts +1 -1
  43. package/lib/components/ca-dropdown-menu/{models/dropdown-menu-item.model.d.ts → interfaces/dropdown-menu-item.interface.d.ts} +7 -1
  44. package/lib/components/ca-dropdown-menu/{models/dropdown-menu-option-emit.model.d.ts → interfaces/dropdown-menu-option-emit.interface.d.ts} +1 -1
  45. package/lib/components/ca-dropdown-menu/interfaces/index.d.ts +2 -0
  46. package/lib/components/ca-dropdown-menu/pipes/group-item-checked-state.pipe.d.ts +8 -0
  47. package/lib/components/ca-dropdown-menu/pipes/index.d.ts +1 -0
  48. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  49. package/lib/components/{ca-input-test → ca-input/input-test}/input-test.component.d.ts +12 -13
  50. package/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.d.ts +4 -4
  51. package/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.d.ts +3 -3
  52. package/lib/enums/{dropdown-menu-string.enum.d.ts → dropdown-menu.enum.d.ts} +1 -1
  53. package/lib/pipes/row-class.pipe.d.ts +7 -0
  54. package/lib/utils/constants/dropdown-menu-content.constants.d.ts +3 -3
  55. package/lib/utils/helpers/dropdown-menu-content-conditional-items.helper.d.ts +3 -3
  56. package/lib/utils/helpers/dropdown-menu-content.helper.d.ts +3 -3
  57. package/package.json +1 -1
  58. package/public-api.d.ts +2 -3
  59. package/src/assets/ca-components/svg/common/ic_carriera-logo-active.svg +4 -0
  60. package/src/assets/ca-components/svg/common/ic_carriera-logo-inactive.svg +4 -0
  61. package/src/assets/ca-components/svg/common/ic_columns.svg +8 -0
  62. package/src/assets/ca-components/svg/common/ic_disable.svg +3 -0
  63. package/assets/scss/input-dropdown-test.scss +0 -2030
  64. package/esm2022/lib/components/ca-dropdown-menu/enums/dropdown-menu-string.enum.mjs +0 -14
  65. package/esm2022/lib/components/ca-dropdown-menu/models/dropdown-menu-item.model.mjs +0 -2
  66. package/esm2022/lib/components/ca-dropdown-menu/models/dropdown-menu-option-emit.model.mjs +0 -2
  67. package/esm2022/lib/components/ca-dropdown-menu/models/index.mjs +0 -3
  68. package/esm2022/lib/components/ca-input-address-dropdown-test/ca-input-address-dropdown-test.component.mjs +0 -351
  69. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-basic-string.enum.mjs +0 -6
  70. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-commands-string.enum.mjs +0 -8
  71. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-layers-string.enum.mjs +0 -6
  72. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-stop-types-string.enum.mjs +0 -6
  73. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-type-string.enum.mjs +0 -7
  74. package/esm2022/lib/components/ca-input-address-dropdown-test/models/address-data.model.mjs +0 -2
  75. package/esm2022/lib/components/ca-input-address-dropdown-test/models/address-list.model.mjs +0 -2
  76. package/esm2022/lib/components/ca-input-address-dropdown-test/models/command-properties.model.mjs +0 -2
  77. package/esm2022/lib/components/ca-input-address-dropdown-test/models/commands-handler.model.mjs +0 -2
  78. package/esm2022/lib/components/ca-input-address-dropdown-test/models/input-address-commands-string.model.mjs +0 -2
  79. package/esm2022/lib/components/ca-input-address-dropdown-test/models/long-lat.model.mjs +0 -2
  80. package/esm2022/lib/components/ca-input-address-dropdown-test/models/sent-address-data.model.mjs +0 -2
  81. package/esm2022/lib/components/ca-input-address-dropdown-test/validators/ca-input-address-value.validations.mjs +0 -11
  82. package/esm2022/lib/components/ca-input-dropdown-test/animations/index.mjs +0 -2
  83. package/esm2022/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.mjs +0 -11
  84. package/esm2022/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.mjs +0 -692
  85. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.mjs +0 -62
  86. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.mjs +0 -72
  87. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.mjs +0 -60
  88. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.mjs +0 -62
  89. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.mjs +0 -76
  90. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.mjs +0 -58
  91. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.mjs +0 -76
  92. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.mjs +0 -41
  93. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.mjs +0 -64
  94. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.mjs +0 -38
  95. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.mjs +0 -62
  96. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.mjs +0 -37
  97. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.mjs +0 -61
  98. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.mjs +0 -49
  99. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +0 -60
  100. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.mjs +0 -49
  101. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +0 -65
  102. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.mjs +0 -58
  103. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.mjs +0 -62
  104. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.mjs +0 -63
  105. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +0 -72
  106. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.mjs +0 -56
  107. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +0 -77
  108. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.mjs +0 -58
  109. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.mjs +0 -62
  110. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.mjs +0 -6
  111. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.mjs +0 -23
  112. package/esm2022/lib/components/ca-input-dropdown-test/enums/index.mjs +0 -3
  113. package/esm2022/lib/components/ca-input-dropdown-test/models/index.mjs +0 -4
  114. package/esm2022/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.mjs +0 -2
  115. package/esm2022/lib/components/ca-input-dropdown-test/models/load-modal-status.model.mjs +0 -2
  116. package/esm2022/lib/components/ca-input-dropdown-test/models/status-order.model.mjs +0 -2
  117. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.mjs +0 -29
  118. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.mjs +0 -73
  119. package/esm2022/lib/components/ca-input-dropdown-test/pipes/index.mjs +0 -10
  120. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.mjs +0 -27
  121. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.mjs +0 -22
  122. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.mjs +0 -18
  123. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.mjs +0 -27
  124. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.mjs +0 -25
  125. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.mjs +0 -23
  126. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.mjs +0 -25
  127. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.mjs +0 -23
  128. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/index.mjs +0 -2
  129. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.mjs +0 -13
  130. package/esm2022/lib/components/ca-input-test/base-classes/ca-input-event-manager.mjs +0 -24
  131. package/esm2022/lib/components/ca-input-test/components/ca-input-clear/ca-input-clear.component.mjs +0 -66
  132. package/esm2022/lib/components/ca-input-test/components/ca-input-commands/ca-input-commands.component.mjs +0 -48
  133. package/esm2022/lib/components/ca-input-test/components/ca-input-password/ca-input-password.component.mjs +0 -63
  134. package/esm2022/lib/components/ca-input-test/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +0 -85
  135. package/esm2022/lib/components/ca-input-test/config/ca-input.config.mjs +0 -2
  136. package/esm2022/lib/components/ca-input-test/config/index.mjs +0 -2
  137. package/esm2022/lib/components/ca-input-test/directives/caps-lock.directive.mjs +0 -50
  138. package/esm2022/lib/components/ca-input-test/directives/command-visible.directive.mjs +0 -48
  139. package/esm2022/lib/components/ca-input-test/directives/index.mjs +0 -6
  140. package/esm2022/lib/components/ca-input-test/directives/input-max-value.directive.mjs +0 -53
  141. package/esm2022/lib/components/ca-input-test/directives/min-max-value.directive.mjs +0 -41
  142. package/esm2022/lib/components/ca-input-test/directives/price_format.directive.mjs +0 -41
  143. package/esm2022/lib/components/ca-input-test/directives/restrict-input.directive.mjs +0 -94
  144. package/esm2022/lib/components/ca-input-test/enums/index.mjs +0 -5
  145. package/esm2022/lib/components/ca-input-test/enums/input-commands-action.enum.mjs +0 -11
  146. package/esm2022/lib/components/ca-input-test/enums/input-commands-type.enum.mjs +0 -8
  147. package/esm2022/lib/components/ca-input-test/enums/input-config-name-string.enum.mjs +0 -9
  148. package/esm2022/lib/components/ca-input-test/enums/input-string.enum.mjs +0 -114
  149. package/esm2022/lib/components/ca-input-test/enums/input-text-transform.enum.mjs +0 -9
  150. package/esm2022/lib/components/ca-input-test/input-test.component.mjs +0 -273
  151. package/esm2022/lib/components/ca-input-test/mixins/input-command.mixin.mjs +0 -127
  152. package/esm2022/lib/components/ca-input-test/mixins/input-helper.mixin.mjs +0 -49
  153. package/esm2022/lib/components/ca-input-test/mixins/restriction-pipe.mixin.mjs +0 -34
  154. package/esm2022/lib/components/ca-input-test/models/base.model.mjs +0 -2
  155. package/esm2022/lib/components/ca-input-test/models/command-click.model.mjs +0 -2
  156. package/esm2022/lib/components/ca-input-test/models/commands-event.model.mjs +0 -2
  157. package/esm2022/lib/components/ca-input-test/models/index.mjs +0 -4
  158. package/esm2022/lib/components/ca-input-test/models/label-color.model.mjs +0 -2
  159. package/esm2022/lib/components/ca-input-test/pipes/color-finder.pipe.mjs +0 -62
  160. package/esm2022/lib/components/ca-input-test/pipes/form-control.pipe.mjs +0 -17
  161. package/esm2022/lib/components/ca-input-test/pipes/index.mjs +0 -20
  162. package/esm2022/lib/components/ca-input-test/pipes/input-class.pipe.mjs +0 -155
  163. package/esm2022/lib/components/ca-input-test/pipes/input-clear-class.pipe.mjs +0 -87
  164. package/esm2022/lib/components/ca-input-test/pipes/input-container-class.pipe.mjs +0 -58
  165. package/esm2022/lib/components/ca-input-test/pipes/input-datetime-picker-class.pipe.mjs +0 -77
  166. package/esm2022/lib/components/ca-input-test/pipes/input-dropdown-arrow-class.pipe.mjs +0 -61
  167. package/esm2022/lib/components/ca-input-test/pipes/input-error.pipe.mjs +0 -88
  168. package/esm2022/lib/components/ca-input-test/pipes/input-password-eye-class.pipe.mjs +0 -37
  169. package/esm2022/lib/components/ca-input-test/pipes/input-pattern.pipe.mjs +0 -326
  170. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-icon-right.pipe.mjs +0 -46
  171. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-icon.class.pipe.mjs +0 -58
  172. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-text-class.pipe.mjs +0 -45
  173. package/esm2022/lib/components/ca-input-test/pipes/input-type.pipe.mjs +0 -25
  174. package/esm2022/lib/components/ca-input-test/pipes/label-class.pipe.mjs +0 -38
  175. package/esm2022/lib/components/ca-input-test/pipes/show-clear.pipe.mjs +0 -22
  176. package/esm2022/lib/components/ca-input-test/pipes/show-dropdown-arrow.pipe.mjs +0 -26
  177. package/esm2022/lib/components/ca-input-test/pipes/show-invalid-danger-mark.pipe.mjs +0 -27
  178. package/esm2022/lib/components/ca-input-test/pipes/show-placeholder-text.pipe.mjs +0 -24
  179. package/esm2022/lib/components/ca-input-test/pipes/show-valid-check.pipe.mjs +0 -27
  180. package/esm2022/lib/components/ca-input-test/utils/index.mjs +0 -3
  181. package/esm2022/lib/components/ca-input-test/utils/input-change-value.type.mjs +0 -2
  182. package/esm2022/lib/components/ca-input-test/utils/input-svg-routes.mjs +0 -17
  183. package/esm2022/lib/enums/dropdown-menu-string.enum.mjs +0 -20
  184. package/lib/components/ca-dropdown-menu/models/index.d.ts +0 -2
  185. package/lib/components/ca-input-address-dropdown-test/ca-input-address-dropdown-test.component.d.ts +0 -74
  186. package/lib/components/ca-input-address-dropdown-test/enums/input-address-basic-string.enum.d.ts +0 -4
  187. package/lib/components/ca-input-address-dropdown-test/enums/input-address-commands-string.enum.d.ts +0 -6
  188. package/lib/components/ca-input-address-dropdown-test/enums/input-address-layers-string.enum.d.ts +0 -4
  189. package/lib/components/ca-input-address-dropdown-test/enums/input-address-stop-types-string.enum.d.ts +0 -4
  190. package/lib/components/ca-input-address-dropdown-test/enums/input-address-type-string.enum.d.ts +0 -5
  191. package/lib/components/ca-input-address-dropdown-test/models/address-data.model.d.ts +0 -10
  192. package/lib/components/ca-input-address-dropdown-test/models/address-list.model.d.ts +0 -5
  193. package/lib/components/ca-input-address-dropdown-test/models/command-properties.model.d.ts +0 -7
  194. package/lib/components/ca-input-address-dropdown-test/models/commands-handler.model.d.ts +0 -7
  195. package/lib/components/ca-input-address-dropdown-test/models/input-address-commands-string.model.d.ts +0 -1
  196. package/lib/components/ca-input-address-dropdown-test/models/long-lat.model.d.ts +0 -4
  197. package/lib/components/ca-input-address-dropdown-test/models/sent-address-data.model.d.ts +0 -6
  198. package/lib/components/ca-input-address-dropdown-test/validators/ca-input-address-value.validations.d.ts +0 -2
  199. package/lib/components/ca-input-dropdown-test/animations/index.d.ts +0 -1
  200. package/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.d.ts +0 -1
  201. package/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.d.ts +0 -125
  202. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.d.ts +0 -20
  203. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.d.ts +0 -22
  204. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.d.ts +0 -19
  205. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.d.ts +0 -20
  206. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.d.ts +0 -27
  207. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.d.ts +0 -18
  208. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.d.ts +0 -24
  209. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.d.ts +0 -10
  210. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.d.ts +0 -18
  211. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.d.ts +0 -11
  212. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.d.ts +0 -18
  213. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.d.ts +0 -11
  214. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.d.ts +0 -18
  215. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.d.ts +0 -14
  216. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.d.ts +0 -20
  217. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.d.ts +0 -14
  218. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.d.ts +0 -20
  219. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.d.ts +0 -18
  220. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.d.ts +0 -20
  221. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.d.ts +0 -20
  222. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.d.ts +0 -22
  223. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.d.ts +0 -15
  224. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.d.ts +0 -22
  225. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.d.ts +0 -18
  226. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.d.ts +0 -20
  227. package/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.d.ts +0 -4
  228. package/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.d.ts +0 -21
  229. package/lib/components/ca-input-dropdown-test/enums/index.d.ts +0 -2
  230. package/lib/components/ca-input-dropdown-test/models/index.d.ts +0 -3
  231. package/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.d.ts +0 -95
  232. package/lib/components/ca-input-dropdown-test/models/load-modal-status.model.d.ts +0 -5
  233. package/lib/components/ca-input-dropdown-test/models/status-order.model.d.ts +0 -4
  234. package/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.d.ts +0 -7
  235. package/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.d.ts +0 -10
  236. package/lib/components/ca-input-dropdown-test/pipes/index.d.ts +0 -9
  237. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.d.ts +0 -11
  238. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.d.ts +0 -10
  239. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.d.ts +0 -9
  240. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.d.ts +0 -11
  241. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.d.ts +0 -10
  242. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.d.ts +0 -11
  243. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.d.ts +0 -10
  244. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.d.ts +0 -11
  245. package/lib/components/ca-input-dropdown-test/utils/svg-routes/index.d.ts +0 -1
  246. package/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.d.ts +0 -12
  247. package/lib/components/ca-input-test/base-classes/ca-input-event-manager.d.ts +0 -16
  248. package/lib/components/ca-input-test/components/ca-input-clear/ca-input-clear.component.d.ts +0 -20
  249. package/lib/components/ca-input-test/components/ca-input-commands/ca-input-commands.component.d.ts +0 -16
  250. package/lib/components/ca-input-test/components/ca-input-password/ca-input-password.component.d.ts +0 -20
  251. package/lib/components/ca-input-test/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +0 -26
  252. package/lib/components/ca-input-test/config/ca-input.config.d.ts +0 -168
  253. package/lib/components/ca-input-test/config/index.d.ts +0 -1
  254. package/lib/components/ca-input-test/directives/caps-lock.directive.d.ts +0 -14
  255. package/lib/components/ca-input-test/directives/index.d.ts +0 -5
  256. package/lib/components/ca-input-test/directives/input-max-value.directive.d.ts +0 -12
  257. package/lib/components/ca-input-test/directives/min-max-value.directive.d.ts +0 -13
  258. package/lib/components/ca-input-test/directives/price_format.directive.d.ts +0 -11
  259. package/lib/components/ca-input-test/directives/restrict-input.directive.d.ts +0 -27
  260. package/lib/components/ca-input-test/enums/index.d.ts +0 -4
  261. package/lib/components/ca-input-test/enums/input-commands-action.enum.d.ts +0 -9
  262. package/lib/components/ca-input-test/enums/input-commands-type.enum.d.ts +0 -6
  263. package/lib/components/ca-input-test/enums/input-config-name-string.enum.d.ts +0 -7
  264. package/lib/components/ca-input-test/enums/input-string.enum.d.ts +0 -112
  265. package/lib/components/ca-input-test/enums/input-text-transform.enum.d.ts +0 -6
  266. package/lib/components/ca-input-test/mixins/restriction-pipe.mixin.d.ts +0 -12
  267. package/lib/components/ca-input-test/models/command-click.model.d.ts +0 -5
  268. package/lib/components/ca-input-test/models/commands-event.model.d.ts +0 -5
  269. package/lib/components/ca-input-test/models/index.d.ts +0 -3
  270. package/lib/components/ca-input-test/models/label-color.model.d.ts +0 -11
  271. package/lib/components/ca-input-test/pipes/color-finder.pipe.d.ts +0 -7
  272. package/lib/components/ca-input-test/pipes/form-control.pipe.d.ts +0 -8
  273. package/lib/components/ca-input-test/pipes/index.d.ts +0 -19
  274. package/lib/components/ca-input-test/pipes/input-class.pipe.d.ts +0 -13
  275. package/lib/components/ca-input-test/pipes/input-clear-class.pipe.d.ts +0 -11
  276. package/lib/components/ca-input-test/pipes/input-container-class.pipe.d.ts +0 -11
  277. package/lib/components/ca-input-test/pipes/input-datetime-picker-class.pipe.d.ts +0 -11
  278. package/lib/components/ca-input-test/pipes/input-dropdown-arrow-class.pipe.d.ts +0 -11
  279. package/lib/components/ca-input-test/pipes/input-error.pipe.d.ts +0 -7
  280. package/lib/components/ca-input-test/pipes/input-password-eye-class.pipe.d.ts +0 -11
  281. package/lib/components/ca-input-test/pipes/input-pattern.pipe.d.ts +0 -38
  282. package/lib/components/ca-input-test/pipes/input-placeholder-icon-right.pipe.d.ts +0 -11
  283. package/lib/components/ca-input-test/pipes/input-placeholder-icon.class.pipe.d.ts +0 -12
  284. package/lib/components/ca-input-test/pipes/input-placeholder-text-class.pipe.d.ts +0 -11
  285. package/lib/components/ca-input-test/pipes/input-type.pipe.d.ts +0 -7
  286. package/lib/components/ca-input-test/pipes/label-class.pipe.d.ts +0 -10
  287. package/lib/components/ca-input-test/pipes/show-clear.pipe.d.ts +0 -8
  288. package/lib/components/ca-input-test/pipes/show-dropdown-arrow.pipe.d.ts +0 -8
  289. package/lib/components/ca-input-test/pipes/show-invalid-danger-mark.pipe.d.ts +0 -9
  290. package/lib/components/ca-input-test/pipes/show-placeholder-text.pipe.d.ts +0 -9
  291. package/lib/components/ca-input-test/pipes/show-valid-check.pipe.d.ts +0 -9
  292. package/lib/components/ca-input-test/utils/index.d.ts +0 -2
  293. package/lib/components/ca-input-test/utils/input-change-value.type.d.ts +0 -1
  294. package/lib/components/ca-input-test/utils/input-svg-routes.d.ts +0 -16
  295. /package/lib/components/{ca-input-test → ca-input}/directives/command-visible.directive.d.ts +0 -0
  296. /package/lib/components/{ca-input-test → ca-input}/mixins/input-command.mixin.d.ts +0 -0
  297. /package/lib/components/{ca-input-test → ca-input}/mixins/input-helper.mixin.d.ts +0 -0
  298. /package/lib/components/{ca-input-test → ca-input}/models/base.model.d.ts +0 -0
@@ -37,7 +37,8 @@ import { CaTooltipListComponent } from './components/ca-tooltip-list/ca-tooltip-
37
37
  import { CaUploadFilesComponent } from './components/ca-upload-files/ca-upload-files.component';
38
38
  import { CaRightSidePanelCompanyComponent } from './components/ca-right-side-panel/components/ca-right-side-panel-company/ca-right-side-panel-company.component';
39
39
  import { CaProgressRangeComponent } from './components/ca-progress-range/ca-progress-range.component';
40
- import { InputTestComponent } from './components/ca-input-test/input-test.component';
40
+ import { InputTestComponent } from './components/ca-input/input-test/input-test.component';
41
+ import { CaCheckboxComponent } from './components/ca-checkbox/ca-checkbox.component';
41
42
  import * as i0 from "@angular/core";
42
43
  export class CaComponentsLibModule {
43
44
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaComponentsLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -78,7 +79,8 @@ export class CaComponentsLibModule {
78
79
  CaRightSidePanelCompanyComponent,
79
80
  CaProgressRangeComponent,
80
81
  CaTooltipListComponent,
81
- InputTestComponent], exports: [CaProfileImageComponent,
82
+ InputTestComponent,
83
+ CaCheckboxComponent], exports: [CaProfileImageComponent,
82
84
  CaAppTooltipV2Component,
83
85
  CaDetailsDropdownComponent,
84
86
  CaRatingReviewComponent,
@@ -113,7 +115,8 @@ export class CaComponentsLibModule {
113
115
  CaProgressRangeComponent,
114
116
  CaTooltipListComponent,
115
117
  CaInputAddressDropdownComponent,
116
- InputTestComponent] }); }
118
+ InputTestComponent,
119
+ CaCheckboxComponent] }); }
117
120
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaComponentsLibModule, providers: [CaSearchMultipleStatesService], imports: [CommonModule,
118
121
  CaProfileImageComponent,
119
122
  CaRatingReviewComponent,
@@ -151,7 +154,8 @@ export class CaComponentsLibModule {
151
154
  CaRightSidePanelCompanyComponent,
152
155
  CaProgressRangeComponent,
153
156
  CaTooltipListComponent,
154
- InputTestComponent] }); }
157
+ InputTestComponent,
158
+ CaCheckboxComponent] }); }
155
159
  }
156
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaComponentsLibModule, decorators: [{
157
161
  type: NgModule,
@@ -196,6 +200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
196
200
  CaProgressRangeComponent,
197
201
  CaTooltipListComponent,
198
202
  InputTestComponent,
203
+ CaCheckboxComponent,
199
204
  ],
200
205
  providers: [CaSearchMultipleStatesService],
201
206
  exports: [
@@ -235,7 +240,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
235
240
  CaTooltipListComponent,
236
241
  CaInputAddressDropdownComponent,
237
242
  InputTestComponent,
243
+ CaCheckboxComponent,
238
244
  ],
239
245
  }]
240
246
  }] });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY2EtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDNUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDMUgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwRkFBMEYsQ0FBQztBQUNqSixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxzR0FBc0csQ0FBQztBQUNsSyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsb0JBQW9CLEVB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QWdCO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixnQ0FBZ0M7d0JBQ2hDLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QiwrQkFBK0I7d0JBQy9CLGtCQUFrQjtxQkFDckI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENhUHJvZmlsZUltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FBcHBUb29sdGlwVjJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtYXBwLXRvb2x0aXAtdjIvY2EtYXBwLXRvb2x0aXAtdjIuY29tcG9uZW50JztcbmltcG9ydCB7IENhRGV0YWlsc0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWRldGFpbHMtZHJvcGRvd24vY2EtZGV0YWlscy1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtZmlsdGVycy9jYS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQvY2EtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREYXRldGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0UmFkaW9idXR0b25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LXJhZGlvYnV0dG9ucy9jYS1pbnB1dC1yYWRpb2J1dHRvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IENhTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLW1hcC9jYS1tYXAuY29tcG9uZW50JztcbmltcG9ydCB7IENhTWFwRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtbWFwLWRyb3Bkb3duL2NhLW1hcC1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FOb3RlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLW5vdGUvY2Etbm90ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FOb3RlQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLW5vdGUtY29udGFpbmVyL2NhLW5vdGUtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXBheXJvbGwtbGlzdC1zdW1tYXJ5LW92ZXJ2aWV3L2NhLXBheXJvbGwtbGlzdC1zdW1tYXJ5LW92ZXJ2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3VGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcGF5cm9sbC1saXN0LXN1bW1hcnktb3ZlcnZpZXctdGFibGUvY2EtcGF5cm9sbC1saXN0LXN1bW1hcnktb3ZlcnZpZXctdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2t1cERlbGl2ZXJ5QmxvY2tDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcGlja3VwLWRlbGl2ZXJ5LWJsb2NrL2NhLXBpY2t1cC1kZWxpdmVyeS1ibG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NCYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcHJvZ3Jlc3MtYmFyL2NhLXByb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FTZWFyY2hNdWx0aXBsZVN0YXRlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1zZWFyY2gtbXVsdGlwbGUtc3RhdGVzL2NhLXNlYXJjaC1tdWx0aXBsZS1zdGF0ZXMuY29tcG9uZW50JztcbmltcG9ydCB7IENhU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1zcGlubmVyL2NhLXNwaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhVHJ1Y2tUcmFpbGVyUHJvZ3Jlc0JhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS10cnVjay10cmFpbGVyLXByb2dyZXNzLWJhci9jYS10cnVjay10cmFpbGVyLXByb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dE5vdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtbm90ZS9jYS1pbnB1dC1ub3RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVBlcmlvZENvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcGVyaW9kLWNvbnRlbnQvY2EtcGVyaW9kLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRBZGRyZXNzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtYWRkcmVzcy1kcm9wZG93bi9jYS1pbnB1dC1hZGRyZXNzLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVNlYXJjaE11bHRpcGxlU3RhdGVzU2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1zZWFyY2gtbXVsdGlwbGUtc3RhdGVzL3V0aWxzL3NlcnZpY2VzL3NlYXJjaC1tdWx0aXBsZS1zdGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDYVJhdGluZ1Jldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1yYXRpbmctcmV2aWV3L2NhLXJhdGluZy1yZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhVG9kb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS10b2RvL2NhLXRvZG8uY29tcG9uZW50JztcbmltcG9ydCB7IENhTWFpblRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLW1haW4tdGFibGUvY2EtbWFpbi10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FBY3Rpdml0eUxvZ0xpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtYWN0aXZpdHktbG9nLWxpc3QvY2EtYWN0aXZpdHktbG9nLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhUmlnaHRTaWRlUGFuZWxNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXJpZ2h0LXNpZGUtcGFuZWwvY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsLW1lbnUvY2EtcmlnaHQtc2lkZS1wYW5lbC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVJpZ2h0U2lkZVBhbmVsVG9wQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXJpZ2h0LXNpZGUtcGFuZWwvY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsLXRvcC1iYXIvY2EtcmlnaHQtc2lkZS1wYW5lbC10b3AtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVJpZ2h0U2lkZVBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXJpZ2h0LXNpZGUtcGFuZWwvY2EtcmlnaHQtc2lkZS1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duL2NhLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWNoYXJ0L2NhLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYURyb3Bkb3duTWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1kcm9wZG93bi1tZW51L2NhLWRyb3Bkb3duLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IENhQ2hhcnRNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWNoYXJ0LW1hbmFnZXIvY2EtY2hhcnQtbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FUb29sdGlwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS10b29sdGlwLWxpc3QvY2EtdG9vbHRpcC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVVwbG9hZEZpbGVzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXVwbG9hZC1maWxlcy9jYS11cGxvYWQtZmlsZXMuY29tcG9uZW50JztcbmltcG9ydCB7IENhUmlnaHRTaWRlUGFuZWxDb21wYW55Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXJpZ2h0LXNpZGUtcGFuZWwvY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsLWNvbXBhbnkvY2EtcmlnaHQtc2lkZS1wYW5lbC1jb21wYW55LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2dyZXNzUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcHJvZ3Jlc3MtcmFuZ2UvY2EtcHJvZ3Jlc3MtcmFuZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0VGVzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC10ZXN0L2lucHV0LXRlc3QuY29tcG9uZW50JztcbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQsXG4gICAgICAgIENhUmF0aW5nUmV2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYUFwcFRvb2x0aXBWMkNvbXBvbmVudCxcbiAgICAgICAgQ2FEZXRhaWxzRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXRSYWRpb2J1dHRvbnNDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgQ2FNYXBDb21wb25lbnQsXG4gICAgICAgIENhTWFwRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhTm90ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FOb3RlQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3VGFibGVDb21wb25lbnQsXG4gICAgICAgIFBpY2t1cERlbGl2ZXJ5QmxvY2tDb21wb25lbnQsXG4gICAgICAgIFByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVNlYXJjaE11bHRpcGxlU3RhdGVzQ29tcG9uZW50LFxuICAgICAgICBDYVNwaW5uZXJDb21wb25lbnQsXG4gICAgICAgIENhVG9kb0NvbXBvbmVudCxcbiAgICAgICAgQ2FUcnVja1RyYWlsZXJQcm9ncmVzQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVBlcmlvZENvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXROb3RlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0QWRkcmVzc0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBDYU1haW5UYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQ2FBY3Rpdml0eUxvZ0xpc3RDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxNZW51Q29tcG9uZW50LFxuICAgICAgICBDYVJpZ2h0U2lkZVBhbmVsVG9wQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVJpZ2h0U2lkZVBhbmVsQ29tcG9uZW50LFxuICAgICAgICBDYUNoYXJ0Q29tcG9uZW50LFxuICAgICAgICBDYUNoYXJ0TWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgQ2FEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIENhVXBsb2FkRmlsZXNDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxDb21wYW55Q29tcG9uZW50LFxuICAgICAgICBDYVByb2dyZXNzUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIENhVG9vbHRpcExpc3RDb21wb25lbnQsXG4gICAgICAgIElucHV0VGVzdENvbXBvbmVudCxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0NhU2VhcmNoTXVsdGlwbGVTdGF0ZXNTZXJ2aWNlXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUFwcFRvb2x0aXBWMkNvbXBvbmVudCxcbiAgICAgICAgQ2FEZXRhaWxzRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhUmF0aW5nUmV2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0UmFkaW9idXR0b25zQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhTWFwQ29tcG9uZW50LFxuICAgICAgICBDYU1hcERyb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBDYU5vdGVDb21wb25lbnQsXG4gICAgICAgIENhTm90ZUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld1RhYmxlQ29tcG9uZW50LFxuICAgICAgICBQaWNrdXBEZWxpdmVyeUJsb2NrQ29tcG9uZW50LFxuICAgICAgICBQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICAgICAgQ2FTZWFyY2hNdWx0aXBsZVN0YXRlc0NvbXBvbmVudCxcbiAgICAgICAgQ2FTcGlubmVyQ29tcG9uZW50LFxuICAgICAgICBDYVRydWNrVHJhaWxlclByb2dyZXNCYXJDb21wb25lbnQsXG4gICAgICAgIENhUGVyaW9kQ29udGVudENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dE5vdGVDb21wb25lbnQsXG4gICAgICAgIENhTWFpblRhYmxlQ29tcG9uZW50LFxuICAgICAgICBDYUFjdGl2aXR5TG9nTGlzdENvbXBvbmVudCxcbiAgICAgICAgQ2FSaWdodFNpZGVQYW5lbE1lbnVDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxUb3BCYXJDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxDb21wb25lbnQsXG4gICAgICAgIENhQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIENhQ2hhcnRNYW5hZ2VyQ29tcG9uZW50LFxuICAgICAgICBDYURyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICAgICAgQ2FVcGxvYWRGaWxlc0NvbXBvbmVudCxcbiAgICAgICAgQ2FSaWdodFNpZGVQYW5lbENvbXBhbnlDb21wb25lbnQsXG4gICAgICAgIENhUHJvZ3Jlc3NSYW5nZUNvbXBvbmVudCxcbiAgICAgICAgQ2FUb29sdGlwTGlzdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dEFkZHJlc3NEcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhQ29tcG9uZW50c0xpYk1vZHVsZSB7fVxuIl19
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY2EtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDNUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDMUgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwRkFBMEYsQ0FBQztBQUNqSixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxzR0FBc0csQ0FBQztBQUNsSyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsb0JBQW9CLEVB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QXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiw2QkFBNkI7d0JBQzdCLCtCQUErQjt3QkFDL0IseUJBQXlCO3dCQUN6QixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGdDQUFnQzt3QkFDaEMsd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLCtCQUErQjt3QkFDL0Isa0JBQWtCO3dCQUNsQixtQkFBbUI7cUJBQ3RCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1wcm9maWxlLWltYWdlL2NhLXByb2ZpbGUtaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IENhQXBwVG9vbHRpcFYyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWFwcC10b29sdGlwLXYyL2NhLWFwcC10b29sdGlwLXYyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYURldGFpbHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1kZXRhaWxzLWRyb3Bkb3duL2NhLWRldGFpbHMtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IENhRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWZpbHRlcnMvY2EtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0L2NhLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dFJhZGlvYnV0dG9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1yYWRpb2J1dHRvbnMvY2EtaW5wdXQtcmFkaW9idXR0b25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYU1hcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1tYXAvY2EtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYU1hcERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLW1hcC1kcm9wZG93bi9jYS1tYXAtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IENhTm90ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1ub3RlL2NhLW5vdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhTm90ZUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1ub3RlLWNvbnRhaW5lci9jYS1ub3RlLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1wYXlyb2xsLWxpc3Qtc3VtbWFyeS1vdmVydmlldy9jYS1wYXlyb2xsLWxpc3Qtc3VtbWFyeS1vdmVydmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXBheXJvbGwtbGlzdC1zdW1tYXJ5LW92ZXJ2aWV3LXRhYmxlL2NhLXBheXJvbGwtbGlzdC1zdW1tYXJ5LW92ZXJ2aWV3LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWNrdXBEZWxpdmVyeUJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXBpY2t1cC1kZWxpdmVyeS1ibG9jay9jYS1waWNrdXAtZGVsaXZlcnktYmxvY2suY29tcG9uZW50JztcbmltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXByb2dyZXNzLWJhci9jYS1wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhU2VhcmNoTXVsdGlwbGVTdGF0ZXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2Etc2VhcmNoLW11bHRpcGxlLXN0YXRlcy9jYS1zZWFyY2gtbXVsdGlwbGUtc3RhdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVNwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2Etc3Bpbm5lci9jYS1zcGlubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVRydWNrVHJhaWxlclByb2dyZXNCYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtdHJ1Y2stdHJhaWxlci1wcm9ncmVzcy1iYXIvY2EtdHJ1Y2stdHJhaWxlci1wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXROb3RlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LW5vdGUvY2EtaW5wdXQtbm90ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQZXJpb2RDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXBlcmlvZC1jb250ZW50L2NhLXBlcmlvZC1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0QWRkcmVzc0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWFkZHJlc3MtZHJvcGRvd24vY2EtaW5wdXQtYWRkcmVzcy1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FTZWFyY2hNdWx0aXBsZVN0YXRlc1NlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvY2Etc2VhcmNoLW11bHRpcGxlLXN0YXRlcy91dGlscy9zZXJ2aWNlcy9zZWFyY2gtbXVsdGlwbGUtc3RhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FSYXRpbmdSZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtcmF0aW5nLXJldmlldy9jYS1yYXRpbmctcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVRvZG9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtdG9kby9jYS10b2RvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYU1haW5UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1tYWluLXRhYmxlL2NhLW1haW4tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhQWN0aXZpdHlMb2dMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWFjdGl2aXR5LWxvZy1saXN0L2NhLWFjdGl2aXR5LWxvZy1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVJpZ2h0U2lkZVBhbmVsTWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsL2NvbXBvbmVudHMvY2EtcmlnaHQtc2lkZS1wYW5lbC1tZW51L2NhLXJpZ2h0LXNpZGUtcGFuZWwtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FSaWdodFNpZGVQYW5lbFRvcEJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsL2NvbXBvbmVudHMvY2EtcmlnaHQtc2lkZS1wYW5lbC10b3AtYmFyL2NhLXJpZ2h0LXNpZGUtcGFuZWwtdG9wLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FSaWdodFNpZGVQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsL2NhLXJpZ2h0LXNpZGUtcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi9jYS1pbnB1dC1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FDaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1jaGFydC9jYS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FEcm9wZG93bk1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtZHJvcGRvd24tbWVudS9jYS1kcm9wZG93bi1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUNoYXJ0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1jaGFydC1tYW5hZ2VyL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhVG9vbHRpcExpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtdG9vbHRpcC1saXN0L2NhLXRvb2x0aXAtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FVcGxvYWRGaWxlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS11cGxvYWQtZmlsZXMvY2EtdXBsb2FkLWZpbGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVJpZ2h0U2lkZVBhbmVsQ29tcGFueUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1yaWdodC1zaWRlLXBhbmVsL2NvbXBvbmVudHMvY2EtcmlnaHQtc2lkZS1wYW5lbC1jb21wYW55L2NhLXJpZ2h0LXNpZGUtcGFuZWwtY29tcGFueS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQcm9ncmVzc1JhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLXByb2dyZXNzLXJhbmdlL2NhLXByb2dyZXNzLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dFRlc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQvaW5wdXQtdGVzdC9pbnB1dC10ZXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWNoZWNrYm94L2NhLWNoZWNrYm94LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQsXG4gICAgICAgIENhUmF0aW5nUmV2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYUFwcFRvb2x0aXBWMkNvbXBvbmVudCxcbiAgICAgICAgQ2FEZXRhaWxzRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXRSYWRpb2J1dHRvbnNDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgQ2FNYXBDb21wb25lbnQsXG4gICAgICAgIENhTWFwRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhTm90ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FOb3RlQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYVBheXJvbGxMaXN0U3VtbWFyeU92ZXJ2aWV3VGFibGVDb21wb25lbnQsXG4gICAgICAgIFBpY2t1cERlbGl2ZXJ5QmxvY2tDb21wb25lbnQsXG4gICAgICAgIFByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVNlYXJjaE11bHRpcGxlU3RhdGVzQ29tcG9uZW50LFxuICAgICAgICBDYVNwaW5uZXJDb21wb25lbnQsXG4gICAgICAgIENhVG9kb0NvbXBvbmVudCxcbiAgICAgICAgQ2FUcnVja1RyYWlsZXJQcm9ncmVzQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVBlcmlvZENvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXROb3RlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0QWRkcmVzc0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBDYU1haW5UYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQ2FBY3Rpdml0eUxvZ0xpc3RDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxNZW51Q29tcG9uZW50LFxuICAgICAgICBDYVJpZ2h0U2lkZVBhbmVsVG9wQmFyQ29tcG9uZW50LFxuICAgICAgICBDYVJpZ2h0U2lkZVBhbmVsQ29tcG9uZW50LFxuICAgICAgICBDYUNoYXJ0Q29tcG9uZW50LFxuICAgICAgICBDYUNoYXJ0TWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgQ2FEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIENhVXBsb2FkRmlsZXNDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxDb21wYW55Q29tcG9uZW50LFxuICAgICAgICBDYVByb2dyZXNzUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIENhVG9vbHRpcExpc3RDb21wb25lbnQsXG4gICAgICAgIElucHV0VGVzdENvbXBvbmVudCxcbiAgICAgICAgQ2FDaGVja2JveENvbXBvbmVudCxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0NhU2VhcmNoTXVsdGlwbGVTdGF0ZXNTZXJ2aWNlXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUFwcFRvb2x0aXBWMkNvbXBvbmVudCxcbiAgICAgICAgQ2FEZXRhaWxzRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhUmF0aW5nUmV2aWV3Q29tcG9uZW50LFxuICAgICAgICBDYUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0UmFkaW9idXR0b25zQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhTWFwQ29tcG9uZW50LFxuICAgICAgICBDYU1hcERyb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBDYU5vdGVDb21wb25lbnQsXG4gICAgICAgIENhTm90ZUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FQYXlyb2xsTGlzdFN1bW1hcnlPdmVydmlld1RhYmxlQ29tcG9uZW50LFxuICAgICAgICBQaWNrdXBEZWxpdmVyeUJsb2NrQ29tcG9uZW50LFxuICAgICAgICBQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICAgICAgQ2FTZWFyY2hNdWx0aXBsZVN0YXRlc0NvbXBvbmVudCxcbiAgICAgICAgQ2FTcGlubmVyQ29tcG9uZW50LFxuICAgICAgICBDYVRydWNrVHJhaWxlclByb2dyZXNCYXJDb21wb25lbnQsXG4gICAgICAgIENhUGVyaW9kQ29udGVudENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dE5vdGVDb21wb25lbnQsXG4gICAgICAgIENhTWFpblRhYmxlQ29tcG9uZW50LFxuICAgICAgICBDYUFjdGl2aXR5TG9nTGlzdENvbXBvbmVudCxcbiAgICAgICAgQ2FSaWdodFNpZGVQYW5lbE1lbnVDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxUb3BCYXJDb21wb25lbnQsXG4gICAgICAgIENhUmlnaHRTaWRlUGFuZWxDb21wb25lbnQsXG4gICAgICAgIENhQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIENhQ2hhcnRNYW5hZ2VyQ29tcG9uZW50LFxuICAgICAgICBDYURyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICAgICAgQ2FVcGxvYWRGaWxlc0NvbXBvbmVudCxcbiAgICAgICAgQ2FSaWdodFNpZGVQYW5lbENvbXBhbnlDb21wb25lbnQsXG4gICAgICAgIENhUHJvZ3Jlc3NSYW5nZUNvbXBvbmVudCxcbiAgICAgICAgQ2FUb29sdGlwTGlzdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dEFkZHJlc3NEcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICBDYUNoZWNrYm94Q29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhQ29tcG9uZW50c0xpYk1vZHVsZSB7fVxuIl19
@@ -25,12 +25,13 @@ export class CaChartComponent {
25
25
  this.updateDatasetBackgroundOnHover(value);
26
26
  }
27
27
  set chartConfig(value) {
28
- this._chartConfig = value;
29
- this.isChartDataAvailable = false;
28
+ this._chartConfig = { ...value };
30
29
  this.isChartDataAvailable =
31
- this._chartConfig?.chartData?.datasets?.some((item) => item.data.some((value) => Array.isArray(value)
32
- ? value[0] !== 0 || value[1] !== 0
33
- : value !== 0)) ?? false;
30
+ (!!this._chartConfig?.chartData?.datasets?.length &&
31
+ this._chartConfig?.chartData?.datasets?.some((item) => item.data.some((value) => Array.isArray(value)
32
+ ? value[0] !== null || value[1] !== null
33
+ : value !== null))) ??
34
+ false;
34
35
  this.changeDetector.detectChanges();
35
36
  if (this.isChartDataAvailable)
36
37
  this.updateChart();
@@ -137,9 +138,9 @@ export class CaChartComponent {
137
138
  if (this._chartConfig.chartType === "doughnut" /* eChartTypesString.DOUGHNUT */)
138
139
  Chart.overrides.doughnut.cutout = '88%';
139
140
  this.chart = new Chart(this.chartContext, {
140
- type: this._chartConfig.chartType,
141
- data: this._chartConfig.chartData,
142
- options: this._chartConfig.chartOptions,
141
+ type: this._chartConfig?.chartType,
142
+ data: this._chartConfig?.chartData,
143
+ options: this._chartConfig?.chartOptions,
143
144
  plugins: this.plugins,
144
145
  });
145
146
  if (!this._chartConfig.isDashboardChart)
@@ -597,7 +598,7 @@ export class CaChartComponent {
597
598
  this.destroy$.complete();
598
599
  }
599
600
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaChartComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ChartManagerService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
600
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartComponent, isStandalone: true, selector: "app-ca-chart", inputs: { legendData: "legendData", chartId: "chartId", chartDatasetHover: "chartDatasetHover", chartConfig: "chartConfig", selectedIndex: "selectedIndex" }, outputs: { hoveredIndex: "hoveredIndex" }, viewQueries: [{ propertyName: "chartCanvas", first: true, predicate: ["chartCanvas"], descendants: true }], ngImport: i0, template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track item.name\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\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}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i3.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: UnitPositionPipe, name: "unitPosition" }, { kind: "pipe", type: ThousandSeparatorPipe, name: "thousandSeparator" }] }); }
601
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartComponent, isStandalone: true, selector: "app-ca-chart", inputs: { legendData: "legendData", chartId: "chartId", chartDatasetHover: "chartDatasetHover", chartConfig: "chartConfig", selectedIndex: "selectedIndex" }, outputs: { hoveredIndex: "hoveredIndex" }, viewQueries: [{ propertyName: "chartCanvas", first: true, predicate: ["chartCanvas"], descendants: true }], ngImport: i0, template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track $index\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\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}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i3.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: UnitPositionPipe, name: "unitPosition" }, { kind: "pipe", type: ThousandSeparatorPipe, name: "thousandSeparator" }] }); }
601
602
  }
602
603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaChartComponent, decorators: [{
603
604
  type: Component,
@@ -606,7 +607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
606
607
  AngularSvgIconModule,
607
608
  UnitPositionPipe,
608
609
  ThousandSeparatorPipe,
609
- ], template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track item.name\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\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}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"] }]
610
+ ], template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track $index\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\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}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"] }]
610
611
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ChartManagerService, decorators: [{
611
612
  type: Optional
612
613
  }] }], propDecorators: { chartCanvas: [{
@@ -625,4 +626,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
625
626
  }], hoveredIndex: [{
626
627
  type: Output
627
628
  }] } });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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aUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBZ0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIGVDaGFydFR5cGVzU3RyaW5nLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPVxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoKGl0ZW06IElCYXNlRGF0YXNldCkgPT5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVswXSAhPT0gMCB8fCB2YWx1ZVsxXSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB0aGlzLmZvY3VzRG91Z2hudXRBcmModmFsdWUpO1xuICAgICAgICBlbHNlIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGhvdmVyZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGNoYXJ0ITogQ2hhcnQ7XG4gICAgcHJpdmF0ZSBjaGFydENvbnRleHQhOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBwbHVnaW5zPzogUGx1Z2luPENoYXJ0VHlwZSwgQW55T2JqZWN0PltdO1xuICAgIHByaXZhdGUgYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGFzdEhvdmVyZWRJbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICBwdWJsaWMgX2NoYXJ0Q29uZmlnITogSUNoYXJ0Q29uZmlndXJhdGlvbjtcbiAgICBwdWJsaWMgaXNDaGFydERhdGFBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjaGFydE1hbmFnZXJTZXJ2aWNlPzogQ2hhcnRNYW5hZ2VyU2VydmljZVxuICAgICkge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgaW5kZXgsIGNoYXJ0SWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFydElkICE9PSB0aGlzLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBDaGFydC5yZWdpc3Rlcihhbm5vdGF0aW9uUGx1Z2luKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKFxuICAgICAgICBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNoYXJ0RGF0YXNldEhvdmVyLmlzSG92ZXJkKSB7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgMC42LFxuICAgICAgICAgICAgICAgIDAuMSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydD8uZGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldC5oaWRkZW4pIHJldHVybiBkYXRhc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ/LmxhYmVsPy50b1VwcGVyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXI/LmxhYmVsPy50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJkRGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBncmFkaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZERhdGFTZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcldpdGhPcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcldpdGhPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzLm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFzZXQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gZGF0YXNldC5ib3JkZXJDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ2hhcnRIZWxwZXIuY2hhbmdlT3BhY2l0eU9mUmdiT3JSZ2JhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcmlnaW5hbENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFydENvbnRleHQgPSB0aGlzLmNoYXJ0Q2FudmFzPy5uYXRpdmVFbGVtZW50Py5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIHRoaXMuc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5zZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpXG4gICAgICAgICAgICBDaGFydC5vdmVycmlkZXMuZG91Z2hudXQuY3V0b3V0ID0gJzg4JSc7XG5cbiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0Q29udGV4dCwge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmlzRGFzaGJvYXJkQ2hhcnQpXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50UmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW0sIGluZHgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWV9BWElTXzBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uc2hpZnRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAhPT0gaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZVB4OiBudW1iZXIgPSB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNoaWZ0VmFsdWUgfHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVBZGp1c3RlZDogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlUHggLyB5U2NhbGUubWF4SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjE6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjI6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvcjIgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcjogQ2FudmFzR3JhZGllbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENoYXJ0T3B0aW9uc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5sYWJlbHM7XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgY2xpcDogZmFsc2UsXG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDaGFydENvbG9yc1N0cmluZ0VudW0uWF9BWElTX0xBQkVMX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseTogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9GQU1JTFlfTU9OVFNFUlJBVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfV0VJR0hUX0JPTERFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvU2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Ta2lwUGFkZGluZzogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSb3RhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9MYWJlbCB3cml0dGVuIGluIDIgbGluZXMsIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBuZXcgZGVzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVMYWJlbCA9IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3BsaXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aUxpbmVMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuX2NoYXJ0Q29uZmlnLnNob3dYQXhpc0xhYmVscyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heDogQ2hhcnRIZWxwZXIuY2FsY3VsYXRlRGF0YXNldE1heFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzIGFzIGFueSAvL2xlYXZlIHRoaXMgYXMgYW55XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkhvdmVyOiAoZXZlbnQ6IENoYXJ0RXZlbnQsIGl0ZW06IEFjdGl2ZUVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5oYXNWZXJ0aWNhbERhc2hlZEFubm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtWzBdPy5pbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZm9jdXNEb3VnaG51dEFyYyhpdGVtWzBdPy5pbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4LmVtaXQoaXRlbVswXT8uaW5kZXggfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNEb3VnaG51dEFyYyhpbmRleDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgIT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUIHx8XG4gICAgICAgICAgICBpbmRleCA9PT0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoIC0gMVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0c1swXVxuICAgICAgICAgICAgPy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb2xvcnM6IHN0cmluZ1tdID0gY29sb3JzLm1hcChcbiAgICAgICAgICAgIChjb2xvcjogc3RyaW5nLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5keCA9PT0gaW5kZXgpIHJldHVybiBjb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IENoYXJ0SGVscGVyLmNvbnZlcnRSZ2JUb1JnYmEoY29sb3IsIDAuMik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB1cGRhdGVkQ29sb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdXG4gICAgICAgICAgICAuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSBbXG4gICAgICAgICAgICAuLi5jb2xvcnMubWFwKChjb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENoYXJ0SGVscGVyLnJnYlRvUmdiYShjb2xvciwgMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIHNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkxJTkUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YXNldC5vcmRlciA9IGRhdGFzZXQub3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKENoYXJ0VHlwZUd1YXJkLmlzTGluZURhdGFzZXQoZGF0YXNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC50ZW5zaW9uID0gZGF0YXNldC50ZW5zaW9uID8/IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3ViaWNJbnRlcnBvbGF0aW9uU3RyaW5nRW51bS5NT05PVE9ORTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPSBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPz8gMztcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyUmFkaXVzID0gNDtcbiAgICAgICAgICAgICAgICAgICAgLy9kYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMgPSA4O1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCb3JkZXJXaWR0aCA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zcGFuR2FwcyA9IGRhdGFzZXQuc3BhbkdhcHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2hvd0xpbmUgPSBkYXRhc2V0LnNob3dMaW5lID8/IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNldE11bHRpcGxlWUF4aXModGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhcnRQbHVnaW5zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uSElHSExJR0hUX1NFR01FTlRfT05fSE9WRVIsXG4gICAgICAgICAgICAgICAgYWZ0ZXJFdmVudDogKGNoYXJ0LCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50LmV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50LnR5cGUgPT09IENoYXJ0RXZlbnRUeXBlc1N0cmluZ0VudW0uTU9VU0VfT1VUXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTW91c2VPdXRzaWRlQ2hhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPCBib3VuZGluZ1JlY3QubGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPiBib3VuZGluZ1JlY3QucmlnaHQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRZIDwgYm91bmRpbmdSZWN0LnRvcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPiBib3VuZGluZ1JlY3QuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZU91dHNpZGVDaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lQW5kRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuc2hvd1Rvb2x0aXBCYWNrZ3JvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmNoYXJ0LmNoYXJ0QXJlYTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgbGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbXG4gICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWFxuICAgICAgICAgICAgICAgICAgICBdIGFzIENhdGVnb3J5U2NhbGUgfCBMaW5lYXJTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aWNrUG9zaXRpb25zID0geFNjYWxlLnRpY2tzLm1hcCgodGljaykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRpY2sudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxlZnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggKyAxXSkgLyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SG92ZXJlZEluZGV4ID0gc2VnbWVudEJvdW5kYXJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kYXJ5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkubGVmdEJvdW5kYXJ5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGJvdW5kYXJ5LnJpZ2h0Qm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SG92ZXJlZEluZGV4ICE9PSB0aGlzLl9ob3ZlcmVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SG92ZXJlZEluZGV4ID09PSAtMSA/IG51bGwgOiBuZXdIb3ZlcmVkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Qm91bmRhcmllc1t0aGlzLl9ob3ZlcmVkSW5kZXggYXMgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuaGlnaGxpZ2h0U2VnbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGUgYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuc2V0QWN0aXZlRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRGF0YSBhcyBBY3RpdmVEYXRhUG9pbnRbXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJULFxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnPy5zaG93Qm90dG9tTGluZU9uTGluZUNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlczogeyB4OiB4U2NhbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGEuZGF0YXNldHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gZGF0YXNldC5kYXRhLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbZmlyc3RJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbbGFzdEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4U3RhcnQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShmaXJzdEluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhFbmQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShsYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHlCb3R0b20gPSBjaGFydEFyZWEuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHhTdGFydCwgeUJvdHRvbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4RW5kLCB5Qm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUKVxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZG91Z2hudXQtbGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVEYXRhc2V0RHJhdzogKGNoYXJ0OiBDaGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2VudGVyTGFiZWxzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsOiBJQ2hhcnRDZW50ZXJMYWJlbCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmRyYXdEb3VnaG51dExlZ2VuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VG9wOiBsYWJlbC5wb3NpdGlvbj8udG9wIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbTogSUJhc2VEYXRhc2V0LCBpbmR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuYW5ub3RhdGlvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAoYW5ub3RhdGlvbjogSUNoYXJ0QW5ub3RhdGlvbiwga2V5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbj8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ake2l0ZW0ubGFiZWx9LSR7aW5keH0tJHtrZXl9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLmlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYW5ub3RhdGlvbi0ke2luZHh9LSR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFubm90YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVJRDogYW5ub3RhdGlvbi5heGlzIHx8IGl0ZW0ueUF4aXNJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFubm90YXRpb24udmFsdWUgfHwgaXRlbS5zaGlmdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiBhbm5vdGF0aW9uLmJvcmRlcldpZHRoIHx8IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2g6IGFubm90YXRpb24uYm9yZGVyRGFzaCB8fCBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE11bHRpcGxlWUF4aXMoY2hhcnREYXRhOiBJQ2hhcnREYXRhPElMaW5lRGF0YXNldD4pOiB2b2lkIHtcbiAgICAgICAgY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5MSU5FIHx8XG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlBeGlzSUQgPSB0aGlzLl9jaGFydENvbmZpZy5pc011bHRpWUF4aXNcbiAgICAgICAgICAgICAgICAgICAgPyBgeS1heGlzLSR7aW5kZXh9YFxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFzZXQueUF4aXNJRCB8fCAneS1heGlzLTAnO1xuXG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlmIHRoZSBkYXRhc2V0IGlzIGFsbCAwXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBbGxaZXJvRGF0YXNldCA9IChkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW10pLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAodmFsOiBudW1iZXIpID0+IHZhbCA9PT0gMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbWluVmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNaW5WYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4VmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNYXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4VmFsdWUgKiAwLjAzO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHNjYWxpbmcgZm9yIGFsbCAwIGRhdGFzZXRzXG4gICAgICAgICAgICAgICAgaWYgKGlzQWxsWmVyb0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlID8gbWluVmFsdWUgLSAwLjEgOiBtaW5WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhWYWx1ZSArIDAuMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWF4VmFsdWUgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgIFt5QXhpc0lEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tlZDogdGhpcy5fY2hhcnRDb25maWcuaXNTdGFja2VkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEuZGF0YXNldHNbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICB5QXhpc0lELFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucztcblxuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRDtcblxuICAgICAgICBpZiAoYW5ub3RhdGlvbnMpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnM/LltrZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmVydGljYWxEYXNoZWRBbm5vdGF0aW9uTGluZShcbiAgICAgICAgZXZlbnQ6IENoYXJ0RXZlbnQsXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW0VDaGFydEV2ZW50UHJvcGVydGllcy5YXSBhc1xuICAgICAgICAgICAgfCBDYXRlZ29yeVNjYWxlXG4gICAgICAgICAgICB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5sYWJlbHM/Lm1hcChcbiAgICAgICAgICAgIChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcCgodGlja1BvcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgIGluZGV4ID09PSB0aWNrUG9zaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCArIDFdKSAvIDI7XG5cbiAgICAgICAgICAgIHJldHVybiB7IGxlZnRCb3VuZGFyeSwgcmlnaHRCb3VuZGFyeSB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PSBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgW0NoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5FQ2hhcnRBbm5vdGF0aW9uLlhfREFTSEVELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdIb3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChuZXdIb3ZlcmVkSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChudWxsKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmhhc1ZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbilcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiQGlmIChpc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGxlZ2VuZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IGxlZ2VuZERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWc/LmhlaWdodCArICdweCcsXG4gICAgICAgICAgICB3aWR0aDogX2NoYXJ0Q29uZmlnPy53aWR0aCArICclJyxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8Y2FudmFzICNjaGFydENhbnZhcz48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgW3NyY109XCJfY2hhcnRDb25maWcubm9EYXRhSW1hZ2VcIlxuICAgICAgICAgICAgYWx0PVwiTm8gZGF0YSBhdmFpbGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuby1kYXRhLXN2Z1wiXG4gICAgICAgID48L3N2Zy1pY29uPlxuICAgIDwvZGl2PlxufVxuPG5nLXRlbXBsYXRlICNsZWdlbmQgbGV0LWNvbmZpZz1cImNvbmZpZ1wiPlxuICAgIEBpZiAoY29uZmlnPy5kYXRhKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbmZpZy5oYXNIaWdobGlnaHRlZEJhY2tncm91bmQgJiYgJ2NvbG9yZWQtYmFja2dyb3VuZCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGl0bGUgZm9udC1zaXplLTE0IHRhLWZvbnQtZXh0cmEtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtd3JhcHBlciBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSBvZiBjb25maWcuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gJGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFjayBpdGVtLm5hbWVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24tY29udGVudC1jZW50ZXIgdGV4dC1zaXplLTExIHRhLWZvbnQtYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmlzTGluZUluZGljYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xpbmUtaW5kaWNhdG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2NpcmNsZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogaXRlbT8uY29sb3IgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2l6ZS0xOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXRlbT8udmFsdWUgfCB0aG91c2FuZFNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgdW5pdFBvc2l0aW9uOiBpdGVtPy51bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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QkFFbEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBa0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIGVDaGFydFR5cGVzU3RyaW5nLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB7IC4uLnZhbHVlIH07XG5cbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9XG4gICAgICAgICAgICAoISF0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVbMF0gIT09IG51bGwgfHwgdmFsdWVbMV0gIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkpID8/XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICB9XG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGVkSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuY2hhcnQgfHwgIXRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHJldHVybjtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHRoaXMuZm9jdXNEb3VnaG51dEFyYyh2YWx1ZSk7XG4gICAgICAgIGVsc2UgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG5cbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgaG92ZXJlZEluZGV4OiBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgY2hhcnQhOiBDaGFydDtcbiAgICBwcml2YXRlIGNoYXJ0Q29udGV4dCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBwcml2YXRlIHBsdWdpbnM/OiBQbHVnaW48Q2hhcnRUeXBlLCBBbnlPYmplY3Q+W107XG4gICAgcHJpdmF0ZSBhcmVBbmltYXRpb25zQ29tcGxlYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2hvdmVyZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0SG92ZXJlZEluZGV4OiBudW1iZXIgPSAtMTtcblxuICAgIHB1YmxpYyBfY2hhcnRDb25maWchOiBJQ2hhcnRDb25maWd1cmF0aW9uO1xuICAgIHB1YmxpYyBpc0NoYXJ0RGF0YUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNoYXJ0TWFuYWdlclNlcnZpY2U/OiBDaGFydE1hbmFnZXJTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQW5ub3RhdGlvblBsdWdpbigpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoYXJ0TWFuYWdlclNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZS5ob3ZlclN0YXRlJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCwgY2hhcnRJZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJ0SWQgIT09IHRoaXMuY2hhcnRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTogdm9pZCB7XG4gICAgICAgIENoYXJ0LnJlZ2lzdGVyKGFubm90YXRpb25QbHVnaW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIoXG4gICAgICAgIGNoYXJ0RGF0YXNldEhvdmVyOiBJQ2hhcnREYXRhc2V0SG92ZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMpIHJldHVybjtcblxuICAgICAgICBpZiAoY2hhcnREYXRhc2V0SG92ZXIuaXNIb3ZlcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICAwLjYsXG4gICAgICAgICAgICAgICAgMC4xLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0cz8ubWFwKFxuICAgICAgICAgICAgICAgIChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0LmhpZGRlbikgcmV0dXJuIGRhdGFzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldD8ubGFiZWw/LnRvVXBwZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlcj8ubGFiZWw/LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBob3ZlcmREYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGdyYWRpZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJkRGF0YVNldDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yV2l0aE9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNoYW5nZU9wYWNpdHlPZlJnYk9yUmdiYShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5ib3JkZXJDb2xvciBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yV2l0aE9wYWNpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubWFwKFxuICAgICAgICAgICAgICAgIChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5ib3JkZXJDb2xvciBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9yaWdpbmFsQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCA9IHRoaXMuY2hhcnRDYW52YXM/Lm5hdGl2ZUVsZW1lbnQ/LmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgdGhpcy5zZXRDaGFydE9wdGlvbnNQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuc2V0Q2hhcnREYXRhUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0UGx1Z2luc1Byb3BlcnRpZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jaGFydCkgdGhpcy5jaGFydC5kZXN0cm95KCk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplQW5ub3RhdGlvblBsdWdpbigpO1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVClcbiAgICAgICAgICAgIENoYXJ0Lm92ZXJyaWRlcy5kb3VnaG51dC5jdXRvdXQgPSAnODglJztcblxuICAgICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHRoaXMuY2hhcnRDb250ZXh0LCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydE9wdGlvbnMsXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuaXNEYXNoYm9hcmRDaGFydClcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuY29uZmlnLmRhdGEuZGF0YXNldHMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2ludENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLldISVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbSwgaW5keCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDaGFydEV2ZW50UHJvcGVydGllcy5ZX0FYSVNfMFxuICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IgJiYgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/LmNvbG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogaXRlbS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wb2ludENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uZmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5zaGlmdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcjIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICE9PSBpdGVtPy5jb2xvcjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGlmdFZhbHVlUHg6IG51bWJlciA9IHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hpZnRWYWx1ZSB8fCAwXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZUFkanVzdGVkOiBudW1iZXIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVQeCAvIHlTY2FsZS5tYXhIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yMTogc3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yIHx8IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yMjogc3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yMiB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yOiBDYW52YXNHcmFkaWVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlTY2FsZS5tYXhIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlQWRqdXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogYm9yZGVyQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudFdpdGhTaGlmdFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGFydCkgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmxhYmVscztcblxuICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgICAgICAgICBjbGlwOiBmYWxzZSxcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Qcm9ncmVzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZUFuaW1hdGlvbnNDb21wbGVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5YX0FYSVNfTEFCRUxfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bS5GT05UX0ZBTUlMWV9NT05UU0VSUkFULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9XRUlHSFRfQk9MREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NraXBQYWRkaW5nOiAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluUm90YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0xhYmVsIHdyaXR0ZW4gaW4gMiBsaW5lcywgd2lsbCBiZSBhZGp1c3RlZCB3aXRoIG5ldyBkZXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpTGluZUxhYmVsID0gbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsYWJlbC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG11bHRpTGluZUxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdGhpcy5fY2hhcnRDb25maWcuc2hvd1hBeGlzTGFiZWxzLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBDaGFydEhlbHBlci5jYWxjdWxhdGVEYXRhc2V0TWF4VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEuZGF0YXNldHMgYXMgYW55IC8vbGVhdmUgdGhpcyBhcyBhbnlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSG92ZXI6IChldmVudDogQ2hhcnRFdmVudCwgaXRlbTogQWN0aXZlRWxlbWVudFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmhhc1ZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbkxpbmUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bMF0/LmluZGV4ID49IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5mb2N1c0RvdWdobnV0QXJjKGl0ZW1bMF0/LmluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChpdGVtWzBdPy5pbmRleCB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0RvdWdobnV0QXJjKGluZGV4OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQgfHxcbiAgICAgICAgICAgIGluZGV4ID09PSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uZGF0YS5sZW5ndGggLSAxXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY29sb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2hhcnQ/LmRhdGE/LmRhdGFzZXRzWzBdXG4gICAgICAgICAgICA/LmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbG9yczogc3RyaW5nW10gPSBjb2xvcnMubWFwKFxuICAgICAgICAgICAgKGNvbG9yOiBzdHJpbmcsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmR4ID09PSBpbmRleCkgcmV0dXJuIGNvbG9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gQ2hhcnRIZWxwZXIuY29udmVydFJnYlRvUmdiYShjb2xvciwgMC4yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvciA9IHVwZGF0ZWRDb2xvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF1cbiAgICAgICAgICAgIC5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG5cbiAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvciA9IFtcbiAgICAgICAgICAgIC4uLmNvbG9ycy5tYXAoKGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hhcnRIZWxwZXIucmdiVG9SZ2JhKGNvbG9yLCAxKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0Q2hhcnREYXRhUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuTElORSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQpID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0Lm9yZGVyID0gZGF0YXNldC5vcmRlcjtcbiAgICAgICAgICAgICAgICBpZiAoQ2hhcnRUeXBlR3VhcmQuaXNMaW5lRGF0YXNldChkYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnRlbnNpb24gPSBkYXRhc2V0LnRlbnNpb24gPz8gMC41O1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBDdWJpY0ludGVycG9sYXRpb25TdHJpbmdFbnVtLk1PTk9UT05FO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uVFJBTlNQQVJFTlQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLldISVRFO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCb3JkZXJDb2xvciA9IGRhdGFzZXQuYm9yZGVyQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA9IGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA/PyAzO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMgPSA0O1xuICAgICAgICAgICAgICAgICAgICAvL2RhdGFzZXQucG9pbnRIb3ZlclJhZGl1cyA9IDg7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRIb3ZlckJvcmRlcldpZHRoID0gMztcblxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnNwYW5HYXBzID0gZGF0YXNldC5zcGFuR2FwcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zaG93TGluZSA9IGRhdGFzZXQuc2hvd0xpbmUgPz8gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0TXVsdGlwbGVZQXhpcyh0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5ISUdITElHSFRfU0VHTUVOVF9PTl9IT1ZFUixcbiAgICAgICAgICAgICAgICBhZnRlckV2ZW50OiAoY2hhcnQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQuZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnQudHlwZSA9PT0gQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bS5NT1VTRV9PVVRcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNb3VzZU91dHNpZGVDaGFydCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCA8IGJvdW5kaW5nUmVjdC5sZWZ0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCA+IGJvdW5kaW5nUmVjdC5yaWdodCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPCBib3VuZGluZ1JlY3QudG9wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WSA+IGJvdW5kaW5nUmVjdC5ib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01vdXNlT3V0c2lkZUNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5zaG93VG9vbHRpcEJhY2tncm91bmQpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBsZWZ0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID4gcmlnaHRcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydElkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIEVDaGFydEV2ZW50UHJvcGVydGllcy5YXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB4U2NhbGUudGlja3MubWFwKCh0aWNrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlLmdldFBpeGVsRm9yVmFsdWUodGljay52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRpY2tQb3MsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9PT0gdGlja1Bvc2l0aW9ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCArIDFdKSAvIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZWZ0Qm91bmRhcnksIHJpZ2h0Qm91bmRhcnkgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggIT09IHRoaXMuX2hvdmVyZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIb3ZlcmVkSW5kZXggPT09IC0xID8gbnVsbCA6IG5ld0hvdmVyZWRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRCb3VuZGFyaWVzW3RoaXMuX2hvdmVyZWRJbmRleCBhcyBudW1iZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faG92ZXJlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlczogeyB4OiB4U2NhbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLmNoYXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5oaWdobGlnaHRTZWdtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZURhdGEgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLl9ob3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5zZXRBY3RpdmVFbGVtZW50cyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVEYXRhIGFzIEFjdGl2ZURhdGFQb2ludFtdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlQsXG4gICAgICAgICAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWc/LnNob3dCb3R0b21MaW5lT25MaW5lQ2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydEFyZWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzOiB7IHg6IHhTY2FsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YS5kYXRhc2V0c1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBkYXRhc2V0LmRhdGEubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGRhdGFzZXQuZGF0YVtmaXJzdEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGRhdGFzZXQuZGF0YVtsYXN0SW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhTdGFydCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGZpcnN0SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeEVuZCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeUJvdHRvbSA9IGNoYXJ0QXJlYS5ib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeFN0YXJ0LCB5Qm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHhFbmQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdkb3VnaG51dC1sYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZURhdGFzZXREcmF3OiAoY2hhcnQ6IENoYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jZW50ZXJMYWJlbHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWw6IElDaGFydENlbnRlckxhYmVsLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuZHJhd0RvdWdobnV0TGVnZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5keCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUb3A6IGxhYmVsLnBvc2l0aW9uPy50b3AgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuY29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hhcnRBbm5vdGF0aW9ucyhpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmFubm90YXRpb25zPy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8uZm9yRWFjaChcbiAgICAgICAgICAgIChhbm5vdGF0aW9uOiBJQ2hhcnRBbm5vdGF0aW9uLCBrZXk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYCR7aXRlbS5sYWJlbH0tJHtpbmR4fS0ke2tleX1gXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhbm5vdGF0aW9uLSR7aW5keH0tJHtrZXl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYW5ub3RhdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUlEOiBhbm5vdGF0aW9uLmF4aXMgfHwgaXRlbS55QXhpc0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYW5ub3RhdGlvbi52YWx1ZSB8fCBpdGVtLnNoaWZ0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5jb2xvciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGFubm90YXRpb24uYm9yZGVyV2lkdGggfHwgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGFzaDogYW5ub3RhdGlvbi5ib3JkZXJEYXNoIHx8IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TXVsdGlwbGVZQXhpcyhjaGFydERhdGE6IElDaGFydERhdGE8SUxpbmVEYXRhc2V0Pik6IHZvaWQge1xuICAgICAgICBjaGFydERhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhc2V0LnR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkxJTkUgfHxcbiAgICAgICAgICAgICAgICBkYXRhc2V0LnR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeUF4aXNJRCA9IHRoaXMuX2NoYXJ0Q29uZmlnLmlzTXVsdGlZQXhpc1xuICAgICAgICAgICAgICAgICAgICA/IGB5LWF4aXMtJHtpbmRleH1gXG4gICAgICAgICAgICAgICAgICAgIDogZGF0YXNldC55QXhpc0lEIHx8ICd5LWF4aXMtMCc7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXRlY3QgaWYgdGhlIGRhdGFzZXQgaXMgYWxsIDBcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FsbFplcm9EYXRhc2V0ID0gKGRhdGFzZXQuZGF0YSBhcyBudW1iZXJbXSkuZXZlcnkoXG4gICAgICAgICAgICAgICAgICAgICh2YWw6IG51bWJlcikgPT4gdmFsID09PSAwXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBtaW5WYWx1ZSA9IENoYXJ0SGVscGVyLmNhbGN1bGF0ZU1pblZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCBtYXhWYWx1ZSA9IENoYXJ0SGVscGVyLmNhbGN1bGF0ZU1heFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhWYWx1ZSAqIDAuMDM7XG5cbiAgICAgICAgICAgICAgICAvLyBBZGp1c3Qgc2NhbGluZyBmb3IgYWxsIDAgZGF0YXNldHNcbiAgICAgICAgICAgICAgICBpZiAoaXNBbGxaZXJvRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWUgPyBtaW5WYWx1ZSAtIDAuMSA6IG1pblZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1heFZhbHVlICsgMC4xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXhWYWx1ZSArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyxcbiAgICAgICAgICAgICAgICAgICAgW3lBeGlzSURdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBtaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogbWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja2VkOiB0aGlzLl9jaGFydENvbmZpZy5pc1N0YWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhc2V0c1tpbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgIHlBeGlzSUQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25zID1cbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24/LmFubm90YXRpb25zO1xuXG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLlhfREFTSEVEO1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9ucylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgPy5hbm5vdGF0aW9ucz8uW2tleSBhcyBrZXlvZiB0eXBlb2YgYW5ub3RhdGlvbnNdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKFxuICAgICAgICBldmVudDogQ2hhcnRFdmVudCxcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLlhdIGFzXG4gICAgICAgICAgICB8IENhdGVnb3J5U2NhbGVcbiAgICAgICAgICAgIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmxhYmVscz8ubWFwKFxuICAgICAgICAgICAgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICBpbmRleCA9PT0gMCA/IGxlZnQgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPVxuICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuXG4gICAgICAgIGNvbnN0IG5ld0hvdmVyZWRJbmRleCA9IHNlZ21lbnRCb3VuZGFyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChib3VuZGFyeSkgPT5cbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID49IGJvdW5kYXJ5LmxlZnRCb3VuZGFyeSAmJlxuICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld0hvdmVyZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLlhfREFTSEVEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLkVDaGFydEFubm90YXRpb24uWF9EQVNIRUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld0hvdmVyZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG5ld0hvdmVyZWRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZUFuZEZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG51bGwpO1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzQ2hhcnREYXRhQXZhaWxhYmxlKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgbGVnZW5kO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNvbmZpZzogbGVnZW5kRGF0YSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxjYW52YXMgI2NoYXJ0Q2FudmFzPjwvY2FudmFzPlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgIGhlaWdodDogX2NoYXJ0Q29uZmlnPy5oZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgd2lkdGg6IF9jaGFydENvbmZpZz8ud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICBbc3JjXT1cIl9jaGFydENvbmZpZy5ub0RhdGFJbWFnZVwiXG4gICAgICAgICAgICBhbHQ9XCJObyBkYXRhIGF2YWlsYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtc3ZnXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI2xlZ2VuZCBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gICAgQGlmIChjb25maWc/LmRhdGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLmhhc0hpZ2hsaWdodGVkQmFja2dyb3VuZCAmJiAnY29sb3JlZC1iYWNrZ3JvdW5kJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10aXRsZSBmb250LXNpemUtMTQgdGEtZm9udC1leHRyYS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC13cmFwcGVyIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGNvbmZpZy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LWNlbnRlciB0ZXh0LXNpemUtMTEgdGEtZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaXNMaW5lSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGluZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2lyY2xlLWluZGljYXRvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpdGVtPy5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zaXplLTE4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtPy52YWx1ZSB8IHRob3VzYW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB1bml0UG9zaXRpb246IGl0ZW0/LnVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19