@ethlete/cdk 4.2.0 → 4.2.2

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 (213) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +6 -7
  3. package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +3 -3
  4. package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +3 -3
  5. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +3 -3
  6. package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +3 -3
  7. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +3 -3
  8. package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +9 -18
  9. package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +3 -3
  10. package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +3 -3
  11. package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +7 -7
  12. package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +7 -7
  13. package/esm2022/lib/components/button/components/button/button.component.mjs +3 -3
  14. package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +7 -7
  15. package/esm2022/lib/components/button/directives/button/button.directive.mjs +3 -3
  16. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +3 -3
  17. package/esm2022/lib/components/filter/filter-overlay/components/filter-overlay-page-outlet/filter-overlay-page-outlet.component.mjs +11 -11
  18. package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-back-or-close/filter-overlay-back-or-close.directive.mjs +3 -3
  19. package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-link/filter-overlay-link.directive.mjs +3 -3
  20. package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-reset/filter-overlay-reset.directive.mjs +3 -3
  21. package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-submit/filter-overlay-submit.directive.mjs +3 -3
  22. package/esm2022/lib/components/filter/filter-overlay/services/filter-overlay.service.mjs +3 -3
  23. package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/rich-filter-host.component.mjs +3 -3
  24. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/rich-filter-button.directive.mjs +3 -3
  25. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/rich-filter-button-slot.directive.mjs +3 -3
  26. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/rich-filter-content.directive.mjs +3 -3
  27. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/rich-filter-top.directive.mjs +3 -3
  28. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +3 -3
  30. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
  31. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +3 -3
  32. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +3 -3
  33. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +3 -3
  34. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +3 -3
  35. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +6 -6
  36. package/esm2022/lib/components/forms/components/input/components/date-input/date-input.component.mjs +3 -3
  37. package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +3 -3
  38. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +6 -6
  39. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
  40. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
  41. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
  42. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
  43. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
  44. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
  45. package/esm2022/lib/components/forms/components/input/directives/date-input/date-input.directive.mjs +3 -3
  46. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
  47. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
  48. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
  49. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
  50. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
  51. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
  52. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
  53. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
  54. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
  55. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
  56. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
  57. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
  58. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  59. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
  60. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
  61. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
  62. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +3 -3
  63. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +5 -5
  64. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  65. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +3 -3
  66. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +3 -3
  67. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +3 -3
  68. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +6 -8
  69. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +3 -3
  70. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/combobox-body-empty-template.directive.mjs +3 -3
  71. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/combobox-body-error-template.directive.mjs +3 -3
  72. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/combobox-body-loading-template.directive.mjs +3 -3
  73. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-more-items-hint-template/combobox-body-more-items-hint-template.directive.mjs +3 -3
  74. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/combobox-option-template.directive.mjs +3 -3
  75. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/combobox-selected-option-template.directive.mjs +3 -3
  76. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +7 -9
  77. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +8 -8
  78. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +6 -6
  79. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
  80. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
  81. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
  82. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +6 -6
  83. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +3 -3
  84. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +3 -3
  85. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +3 -3
  86. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +3 -3
  87. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +3 -3
  88. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +6 -6
  89. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -3
  90. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/selection-list-field.component.mjs +4 -5
  91. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/selection-list-option.component.mjs +5 -5
  92. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.mjs +3 -3
  93. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.mjs +3 -3
  94. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
  95. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
  96. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
  97. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +6 -6
  98. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +6 -6
  99. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
  100. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
  101. package/esm2022/lib/components/forms/directives/expose-input-vars/expose-input-vars.directive.mjs +3 -3
  102. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
  103. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
  104. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +3 -3
  105. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
  106. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
  107. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
  108. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
  109. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
  110. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
  111. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
  112. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
  113. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
  114. package/esm2022/lib/components/forms/services/input-state.service.mjs +3 -3
  115. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
  116. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +3 -3
  117. package/esm2022/lib/components/forms/utils/input.base.mjs +3 -3
  118. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
  119. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
  120. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
  121. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
  122. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
  123. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
  124. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +3 -3
  125. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
  126. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
  127. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
  128. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
  129. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
  130. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
  131. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +3 -3
  132. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
  133. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
  134. package/esm2022/lib/components/overlay/components/menu/context-menu-trigger.mjs +6 -6
  135. package/esm2022/lib/components/overlay/components/menu/menu-aim.mjs +6 -6
  136. package/esm2022/lib/components/overlay/components/menu/menu-bar.mjs +3 -3
  137. package/esm2022/lib/components/overlay/components/menu/menu-base.mjs +3 -3
  138. package/esm2022/lib/components/overlay/components/menu/menu-group.mjs +3 -3
  139. package/esm2022/lib/components/overlay/components/menu/menu-item-checkbox.mjs +3 -3
  140. package/esm2022/lib/components/overlay/components/menu/menu-item-radio.mjs +3 -3
  141. package/esm2022/lib/components/overlay/components/menu/menu-item-selectable.mjs +3 -3
  142. package/esm2022/lib/components/overlay/components/menu/menu-item.mjs +3 -3
  143. package/esm2022/lib/components/overlay/components/menu/menu-module.mjs +4 -4
  144. package/esm2022/lib/components/overlay/components/menu/menu-stack.mjs +3 -3
  145. package/esm2022/lib/components/overlay/components/menu/menu-trigger-base.mjs +3 -3
  146. package/esm2022/lib/components/overlay/components/menu/menu-trigger.mjs +3 -3
  147. package/esm2022/lib/components/overlay/components/menu/menu.mjs +3 -3
  148. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.mjs +3 -3
  149. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-close/overlay-close.directive.mjs +3 -3
  150. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-title/overlay-title.directive.mjs +3 -3
  151. package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +4 -4
  152. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +8 -8
  153. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
  154. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +8 -8
  155. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +4 -4
  156. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/dynamic-overlay-title.directive.mjs +3 -3
  157. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive.mjs +3 -3
  158. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
  159. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +7 -7
  160. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
  161. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +4 -4
  162. package/esm2022/lib/components/pagination/utils/pagination.util.mjs +1 -1
  163. package/esm2022/lib/components/picture/picture-data.directive.mjs +3 -3
  164. package/esm2022/lib/components/picture/picture.component.mjs +8 -8
  165. package/esm2022/lib/components/picture/pipes/normalize-source/normalize-source.pipe.mjs +3 -3
  166. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +6 -6
  167. package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +5 -6
  168. package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +3 -3
  169. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +219 -146
  170. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
  171. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
  172. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +5 -6
  173. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
  174. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
  175. package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
  176. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
  177. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
  178. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
  179. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
  180. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
  181. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
  182. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
  183. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
  184. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
  185. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
  186. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
  187. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
  188. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
  189. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
  190. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
  191. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
  192. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
  193. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
  194. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +7 -9
  195. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
  196. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
  197. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
  198. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
  199. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
  200. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
  201. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
  202. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
  203. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
  204. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
  205. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
  206. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +21 -13
  207. package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
  208. package/fesm2022/ethlete-cdk.mjs +898 -834
  209. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  210. package/lib/components/picture/picture.component.d.ts +1 -1
  211. package/lib/components/scrollable/components/scrollable/scrollable.component.d.ts +55 -35
  212. package/lib/components/tabs/utils/paginated-tab-header.directive.d.ts +1 -1
  213. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @ethlete/cdk
2
2
 
3
+ ## 4.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`748a7815`](https://github.com/ethlete-io/ethdk/commit/748a781501ec9a3ab01edf05895f47a3e31da27a) Thanks [@TomTomB](https://github.com/TomTomB)! - Remove old grid styling from scrollable
8
+
9
+ - [`7c9ac832`](https://github.com/ethlete-io/ethdk/commit/7c9ac8320faf63447c69928160c9eda0354e39d0) Thanks [@TomTomB](https://github.com/TomTomB)! - Use scrollable element as root for internal intersection observer
10
+
11
+ ## 4.2.1
12
+
13
+ ### Patch Changes
14
+
15
+ - [`bc4d3079`](https://github.com/ethlete-io/ethdk/commit/bc4d3079c355be1841c9b9a0075bf49ab941e217) Thanks [@TomTomB](https://github.com/TomTomB)! - Fix scrollable masks not hiding sometimes
16
+
17
+ - [`2a75a9d8`](https://github.com/ethlete-io/ethdk/commit/2a75a9d856b6f5190570ac2bebcc02afdd409745) Thanks [@TomTomB](https://github.com/TomTomB)! - Migrate to new control flow
18
+
3
19
  ## 4.2.0
4
20
 
5
21
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  import { PortalModule } from '@angular/cdk/portal';
2
- import { AsyncPipe, NgClass, NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';
3
3
  import { ChangeDetectionStrategy, Component, ContentChild, Input, ViewEncapsulation, booleanAttribute, } from '@angular/core';
4
4
  import { LetDirective } from '@ethlete/core';
5
5
  import { BehaviorSubject } from 'rxjs';
@@ -40,10 +40,10 @@ export class AccordionComponent {
40
40
  close() {
41
41
  this._isOpen$.next(false);
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.1", type: AccordionComponent, isStandalone: true, selector: "et-accordion", inputs: { isOpenByDefault: ["isOpenByDefault", "isOpenByDefault", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], label: "label" }, host: { classAttribute: "et-accordion" }, providers: [{ provide: ACCORDION_COMPONENT, useExisting: AccordionComponent }], queries: [{ propertyName: "templateLabel", first: true, predicate: ACCORDION_LABEL_WRAPPER_DIRECTIVE, descendants: true }, { propertyName: "templateHint", first: true, predicate: ACCORDION_HINT_WRAPPER_DIRECTIVE, descendants: true }], ngImport: i0, template: "<div *etLet=\"_isOpen$ | async as isOpen\" class=\"et-accordion-container\">\n <h3 class=\"et-accordion-header-wrapper\">\n <button\n [disabled]=\"disabled\"\n [id]=\"headerId\"\n [attr.aria-controls]=\"bodyId\"\n [attr.aria-expanded]=\"isOpen\"\n [class.et-accordion-has-hint]=\"!!templateHint\"\n (click)=\"toggleAccordionOpen()\"\n class=\"et-accordion-header\"\n type=\"button\"\n >\n <div>\n <ng-template [ngIf]=\"templateLabel\" [ngIfElse]=\"textLabelTpl\">\n <ng-template [cdkPortalOutlet]=\"templateLabel\" />\n </ng-template>\n\n <ng-template #textLabelTpl\n ><span et-accordion-label>{{ label }} </span>\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"templateHint\">\n <ng-template [cdkPortalOutlet]=\"templateHint\" />\n </ng-container>\n\n <et-chevron-icon />\n </button>\n </h3>\n <div\n [@animateOpenClose]=\"(_isOpen$ | async) ? 'open' : 'close'\"\n [attr.aria-labelledby]=\"headerId\"\n [id]=\"bodyId\"\n class=\"et-accordion-body\"\n role=\"region\"\n >\n <div class=\"et-accordion-body-container\">\n <ng-content />\n </div>\n </div>\n <hr class=\"et-accordion-separator\" />\n</div>\n", styles: [":where(.et-accordion){--chevron-size: 15px}.et-accordion .et-accordion-container{position:relative;z-index:1}.et-accordion .et-chevron-icon{display:block;transform:rotate(180deg);transition:transform .3s var(--ease-5);inline-size:var(--chevron-size);block-size:var(--chevron-size)}.et-accordion [aria-expanded=true] .et-chevron-icon{transform:rotate(0)}.et-accordion .et-accordion-header{display:grid;grid-template-columns:1fr auto;inline-size:100%;block-size:100%;text-align:left;background-color:transparent;border:none;align-items:center;padding:0;gap:15px}.et-accordion .et-accordion-header:not(:disabled){cursor:pointer}.et-accordion .et-accordion-header.et-accordion-has-hint{grid-template-columns:1fr auto auto}.et-accordion .et-accordion-header-wrapper{margin:0}.et-accordion .et-accordion-body{overflow:hidden}.et-accordion .et-accordion-separator{position:relative;z-index:-1}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AccordionLabelDirective, selector: "[et-accordion-label]" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], animations: [accordionAnimations.animateOpenClose], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: AccordionComponent, isStandalone: true, selector: "et-accordion", inputs: { isOpenByDefault: ["isOpenByDefault", "isOpenByDefault", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], label: "label" }, host: { classAttribute: "et-accordion" }, providers: [{ provide: ACCORDION_COMPONENT, useExisting: AccordionComponent }], queries: [{ propertyName: "templateLabel", first: true, predicate: ACCORDION_LABEL_WRAPPER_DIRECTIVE, descendants: true }, { propertyName: "templateHint", first: true, predicate: ACCORDION_HINT_WRAPPER_DIRECTIVE, descendants: true }], ngImport: i0, template: "<div *etLet=\"_isOpen$ | async as isOpen\" class=\"et-accordion-container\">\n <h3 class=\"et-accordion-header-wrapper\">\n <button\n [disabled]=\"disabled\"\n [id]=\"headerId\"\n [attr.aria-controls]=\"bodyId\"\n [attr.aria-expanded]=\"isOpen\"\n [class.et-accordion-has-hint]=\"!!templateHint\"\n (click)=\"toggleAccordionOpen()\"\n class=\"et-accordion-header\"\n type=\"button\"\n >\n <div>\n @if (templateLabel) {\n <ng-template [cdkPortalOutlet]=\"templateLabel\" />\n } @else {\n <span et-accordion-label>{{ label }} </span>\n }\n </div>\n\n @if (templateHint) {\n <ng-template [cdkPortalOutlet]=\"templateHint\" />\n }\n\n <et-chevron-icon />\n </button>\n </h3>\n <div\n [@animateOpenClose]=\"(_isOpen$ | async) ? 'open' : 'close'\"\n [attr.aria-labelledby]=\"headerId\"\n [id]=\"bodyId\"\n class=\"et-accordion-body\"\n role=\"region\"\n >\n <div class=\"et-accordion-body-container\">\n <ng-content />\n </div>\n </div>\n <hr class=\"et-accordion-separator\" />\n</div>\n", styles: [":where(.et-accordion){--chevron-size: 15px}.et-accordion .et-accordion-container{position:relative;z-index:1}.et-accordion .et-chevron-icon{display:block;transform:rotate(180deg);transition:transform .3s var(--ease-5);inline-size:var(--chevron-size);block-size:var(--chevron-size)}.et-accordion [aria-expanded=true] .et-chevron-icon{transform:rotate(0)}.et-accordion .et-accordion-header{display:grid;grid-template-columns:1fr auto;inline-size:100%;block-size:100%;text-align:left;background-color:transparent;border:none;align-items:center;padding:0;gap:15px}.et-accordion .et-accordion-header:not(:disabled){cursor:pointer}.et-accordion .et-accordion-header.et-accordion-has-hint{grid-template-columns:1fr auto auto}.et-accordion .et-accordion-header-wrapper{margin:0}.et-accordion .et-accordion-body{overflow:hidden}.et-accordion .et-accordion-separator{position:relative;z-index:-1}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AccordionLabelDirective, selector: "[et-accordion-label]" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], animations: [accordionAnimations.animateOpenClose], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionComponent, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionComponent, decorators: [{
47
47
  type: Component,
48
48
  args: [{ selector: 'et-accordion', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, providers: [{ provide: ACCORDION_COMPONENT, useExisting: AccordionComponent }], imports: [
49
49
  LetDirective,
@@ -51,12 +51,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
51
51
  NgClass,
52
52
  AccordionLabelDirective,
53
53
  PortalModule,
54
- NgIf,
55
54
  NgTemplateOutlet,
56
55
  ChevronIconComponent,
57
56
  ], animations: [accordionAnimations.animateOpenClose], host: {
58
57
  class: 'et-accordion',
59
- }, template: "<div *etLet=\"_isOpen$ | async as isOpen\" class=\"et-accordion-container\">\n <h3 class=\"et-accordion-header-wrapper\">\n <button\n [disabled]=\"disabled\"\n [id]=\"headerId\"\n [attr.aria-controls]=\"bodyId\"\n [attr.aria-expanded]=\"isOpen\"\n [class.et-accordion-has-hint]=\"!!templateHint\"\n (click)=\"toggleAccordionOpen()\"\n class=\"et-accordion-header\"\n type=\"button\"\n >\n <div>\n <ng-template [ngIf]=\"templateLabel\" [ngIfElse]=\"textLabelTpl\">\n <ng-template [cdkPortalOutlet]=\"templateLabel\" />\n </ng-template>\n\n <ng-template #textLabelTpl\n ><span et-accordion-label>{{ label }} </span>\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"templateHint\">\n <ng-template [cdkPortalOutlet]=\"templateHint\" />\n </ng-container>\n\n <et-chevron-icon />\n </button>\n </h3>\n <div\n [@animateOpenClose]=\"(_isOpen$ | async) ? 'open' : 'close'\"\n [attr.aria-labelledby]=\"headerId\"\n [id]=\"bodyId\"\n class=\"et-accordion-body\"\n role=\"region\"\n >\n <div class=\"et-accordion-body-container\">\n <ng-content />\n </div>\n </div>\n <hr class=\"et-accordion-separator\" />\n</div>\n", styles: [":where(.et-accordion){--chevron-size: 15px}.et-accordion .et-accordion-container{position:relative;z-index:1}.et-accordion .et-chevron-icon{display:block;transform:rotate(180deg);transition:transform .3s var(--ease-5);inline-size:var(--chevron-size);block-size:var(--chevron-size)}.et-accordion [aria-expanded=true] .et-chevron-icon{transform:rotate(0)}.et-accordion .et-accordion-header{display:grid;grid-template-columns:1fr auto;inline-size:100%;block-size:100%;text-align:left;background-color:transparent;border:none;align-items:center;padding:0;gap:15px}.et-accordion .et-accordion-header:not(:disabled){cursor:pointer}.et-accordion .et-accordion-header.et-accordion-has-hint{grid-template-columns:1fr auto auto}.et-accordion .et-accordion-header-wrapper{margin:0}.et-accordion .et-accordion-body{overflow:hidden}.et-accordion .et-accordion-separator{position:relative;z-index:-1}\n"] }]
58
+ }, template: "<div *etLet=\"_isOpen$ | async as isOpen\" class=\"et-accordion-container\">\n <h3 class=\"et-accordion-header-wrapper\">\n <button\n [disabled]=\"disabled\"\n [id]=\"headerId\"\n [attr.aria-controls]=\"bodyId\"\n [attr.aria-expanded]=\"isOpen\"\n [class.et-accordion-has-hint]=\"!!templateHint\"\n (click)=\"toggleAccordionOpen()\"\n class=\"et-accordion-header\"\n type=\"button\"\n >\n <div>\n @if (templateLabel) {\n <ng-template [cdkPortalOutlet]=\"templateLabel\" />\n } @else {\n <span et-accordion-label>{{ label }} </span>\n }\n </div>\n\n @if (templateHint) {\n <ng-template [cdkPortalOutlet]=\"templateHint\" />\n }\n\n <et-chevron-icon />\n </button>\n </h3>\n <div\n [@animateOpenClose]=\"(_isOpen$ | async) ? 'open' : 'close'\"\n [attr.aria-labelledby]=\"headerId\"\n [id]=\"bodyId\"\n class=\"et-accordion-body\"\n role=\"region\"\n >\n <div class=\"et-accordion-body-container\">\n <ng-content />\n </div>\n </div>\n <hr class=\"et-accordion-separator\" />\n</div>\n", styles: [":where(.et-accordion){--chevron-size: 15px}.et-accordion .et-accordion-container{position:relative;z-index:1}.et-accordion .et-chevron-icon{display:block;transform:rotate(180deg);transition:transform .3s var(--ease-5);inline-size:var(--chevron-size);block-size:var(--chevron-size)}.et-accordion [aria-expanded=true] .et-chevron-icon{transform:rotate(0)}.et-accordion .et-accordion-header{display:grid;grid-template-columns:1fr auto;inline-size:100%;block-size:100%;text-align:left;background-color:transparent;border:none;align-items:center;padding:0;gap:15px}.et-accordion .et-accordion-header:not(:disabled){cursor:pointer}.et-accordion .et-accordion-header.et-accordion-has-hint{grid-template-columns:1fr auto auto}.et-accordion .et-accordion-header-wrapper{margin:0}.et-accordion .et-accordion-body{overflow:hidden}.et-accordion .et-accordion-separator{position:relative;z-index:-1}\n"] }]
60
59
  }], propDecorators: { isOpenByDefault: [{
61
60
  type: Input,
62
61
  args: [{ transform: booleanAttribute }]
@@ -72,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
72
71
  type: ContentChild,
73
72
  args: [ACCORDION_HINT_WRAPPER_DIRECTIVE]
74
73
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9hY2NvcmRpb24vY29tcG9uZW50cy9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9hY2NvcmRpb24vY29tcG9uZW50cy9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsOEJBQThCLEdBQy9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQUV0RSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7QUF5QnBCLE1BQU0sT0FBTyxrQkFBa0I7SUF2Qi9CO1FBd0JtQixRQUFHLEdBQUcsZ0JBQWdCLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFHdkQsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBUVEsV0FBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQzVCLGFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUVuRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFRyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7S0F5QjFEO0lBdkJDLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs4R0FoRFUsa0JBQWtCO2tHQUFsQixrQkFBa0Isa0hBR1QsZ0JBQWdCLHNDQUdoQixnQkFBZ0IsMEVBdEJ6QixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLHFFQTRCaEUsaUNBQWlDLCtFQUdqQyxnQ0FBZ0MsZ0RDaEVoRCxxdkNBMENBLGs3QkRQSSxZQUFZLGtFQUNaLFNBQVMsOENBRVQsdUJBQXVCLGdFQUN2QixZQUFZLGtNQUNaLElBQUksNkZBRUosb0JBQW9CLDhDQUVWLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7OzJGQUt2QyxrQkFBa0I7a0JBdkI5QixTQUFTOytCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLGFBQ0wsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLG9CQUFvQixFQUFFLENBQUMsV0FDckU7d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixZQUFZO3dCQUNaLElBQUk7d0JBQ0osZ0JBQWdCO3dCQUNoQixvQkFBb0I7cUJBQ3JCLGNBQ1csQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUM1Qzt3QkFDSixLQUFLLEVBQUUsY0FBYztxQkFDdEI7OEJBTUQsZUFBZTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUl0QyxRQUFRO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLEtBQUs7c0JBREosS0FBSztnQkFJYSxhQUFhO3NCQUQvQixZQUFZO3VCQUFDLGlDQUFpQztnQkFJNUIsWUFBWTtzQkFEOUIsWUFBWTt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExldERpcmVjdGl2ZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb25zJztcbmltcG9ydCB7XG4gIEFDQ09SRElPTl9ISU5UX1dSQVBQRVJfRElSRUNUSVZFLFxuICBBQ0NPUkRJT05fTEFCRUxfV1JBUFBFUl9ESVJFQ1RJVkUsXG4gIEFjY29yZGlvbkhpbnRXcmFwcGVyRGlyZWN0aXZlLFxuICBBY2NvcmRpb25MYWJlbERpcmVjdGl2ZSxcbiAgQWNjb3JkaW9uTGFiZWxXcmFwcGVyRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9wYXJ0aWFscyc7XG5pbXBvcnQgeyBhY2NvcmRpb25BbmltYXRpb25zIH0gZnJvbSAnLi9hY2NvcmRpb24uY29tcG9uZW50LmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQUNDT1JESU9OX0NPTVBPTkVOVCB9IGZyb20gJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5jb25zdGFudHMnO1xuXG5sZXQgYWNjb3JkaW9uSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1hY2NvcmRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFDQ09SRElPTl9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBBY2NvcmRpb25Db21wb25lbnQgfV0sXG4gIGltcG9ydHM6IFtcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nQ2xhc3MsXG4gICAgQWNjb3JkaW9uTGFiZWxEaXJlY3RpdmUsXG4gICAgUG9ydGFsTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBDaGV2cm9uSWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgYW5pbWF0aW9uczogW2FjY29yZGlvbkFuaW1hdGlvbnMuYW5pbWF0ZU9wZW5DbG9zZV0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LWFjY29yZGlvbicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkID0gYGV0LWFjY29yZGlvbi0ke2FjY29yZGlvbklkKyt9YDtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaXNPcGVuQnlEZWZhdWx0ID0gZmFsc2U7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbGFiZWwgPSAnJztcblxuICBAQ29udGVudENoaWxkKEFDQ09SRElPTl9MQUJFTF9XUkFQUEVSX0RJUkVDVElWRSlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRlbXBsYXRlTGFiZWwhOiBBY2NvcmRpb25MYWJlbFdyYXBwZXJEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChBQ0NPUkRJT05fSElOVF9XUkFQUEVSX0RJUkVDVElWRSlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRlbXBsYXRlSGludCE6IEFjY29yZGlvbkhpbnRXcmFwcGVyRGlyZWN0aXZlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBib2R5SWQgPSBgJHt0aGlzLl9pZH0tYm9keWA7XG4gIHByb3RlY3RlZCByZWFkb25seSBoZWFkZXJJZCA9IGAke3RoaXMuX2lkfS1oZWFkZXJgO1xuXG4gIF9pc0ZpcnN0ID0gZmFsc2U7XG4gIF9pc0xhc3QgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2lzT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBnZXQgaXNPcGVuJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbiQudmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc09wZW4kLm5leHQodGhpcy5pc09wZW5CeURlZmF1bHQpO1xuICB9XG5cbiAgdG9nZ2xlQWNjb3JkaW9uT3BlbigpIHtcbiAgICB0aGlzLl9pc09wZW4kLm5leHQoIXRoaXMuX2lzT3BlbiQudmFsdWUpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLl9pc09wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9pc09wZW4kLm5leHQoZmFsc2UpO1xuICB9XG59XG4iLCI8ZGl2ICpldExldD1cIl9pc09wZW4kIHwgYXN5bmMgYXMgaXNPcGVuXCIgY2xhc3M9XCJldC1hY2NvcmRpb24tY29udGFpbmVyXCI+XG4gIDxoMyBjbGFzcz1cImV0LWFjY29yZGlvbi1oZWFkZXItd3JhcHBlclwiPlxuICAgIDxidXR0b25cbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbaWRdPVwiaGVhZGVySWRcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJib2R5SWRcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgW2NsYXNzLmV0LWFjY29yZGlvbi1oYXMtaGludF09XCIhIXRlbXBsYXRlSGludFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQWNjb3JkaW9uT3BlbigpXCJcbiAgICAgIGNsYXNzPVwiZXQtYWNjb3JkaW9uLWhlYWRlclwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGVtcGxhdGVMYWJlbFwiIFtuZ0lmRWxzZV09XCJ0ZXh0TGFiZWxUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW2Nka1BvcnRhbE91dGxldF09XCJ0ZW1wbGF0ZUxhYmVsXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRMYWJlbFRwbFxuICAgICAgICAgID48c3BhbiBldC1hY2NvcmRpb24tbGFiZWw+e3sgbGFiZWwgfX0gPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZUhpbnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwidGVtcGxhdGVIaW50XCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gICAgPC9idXR0b24+XG4gIDwvaDM+XG4gIDxkaXZcbiAgICBbQGFuaW1hdGVPcGVuQ2xvc2VdPVwiKF9pc09wZW4kIHwgYXN5bmMpID8gJ29wZW4nIDogJ2Nsb3NlJ1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlYWRlcklkXCJcbiAgICBbaWRdPVwiYm9keUlkXCJcbiAgICBjbGFzcz1cImV0LWFjY29yZGlvbi1ib2R5XCJcbiAgICByb2xlPVwicmVnaW9uXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJldC1hY2NvcmRpb24tYm9keS1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8aHIgY2xhc3M9XCJldC1hY2NvcmRpb24tc2VwYXJhdG9yXCIgLz5cbjwvZGl2PlxuIl19
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9hY2NvcmRpb24vY29tcG9uZW50cy9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9hY2NvcmRpb24vY29tcG9uZW50cy9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2Qiw4QkFBOEIsR0FDL0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBRXRFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQXdCcEIsTUFBTSxPQUFPLGtCQUFrQjtJQXRCL0I7UUF1Qm1CLFFBQUcsR0FBRyxnQkFBZ0IsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUd2RCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUd4QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFRUSxXQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDNUIsYUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBRW5ELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVHLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQXlCMUQ7SUF2QkMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQWhEVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixrSEFHVCxnQkFBZ0Isc0NBR2hCLGdCQUFnQiwwRUFyQnpCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUMscUVBMkJoRSxpQ0FBaUMsK0VBR2pDLGdDQUFnQyxnREMvRGhELGduQ0F3Q0EsazdCRExJLFlBQVksa0VBQ1osU0FBUyw4Q0FFVCx1QkFBdUIsZ0VBQ3ZCLFlBQVksa01BRVosb0JBQW9CLDhDQUVWLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7OzJGQUt2QyxrQkFBa0I7a0JBdEI5QixTQUFTOytCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLGFBQ0wsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLG9CQUFvQixFQUFFLENBQUMsV0FDckU7d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3FCQUNyQixjQUNXLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsUUFDNUM7d0JBQ0osS0FBSyxFQUFFLGNBQWM7cUJBQ3RCOzhCQU1ELGVBQWU7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUl0QyxLQUFLO3NCQURKLEtBQUs7Z0JBSWEsYUFBYTtzQkFEL0IsWUFBWTt1QkFBQyxpQ0FBaUM7Z0JBSTVCLFlBQVk7c0JBRDlCLFlBQVk7dUJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXREaXJlY3RpdmUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hldnJvbkljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29ucyc7XG5pbXBvcnQge1xuICBBQ0NPUkRJT05fSElOVF9XUkFQUEVSX0RJUkVDVElWRSxcbiAgQUNDT1JESU9OX0xBQkVMX1dSQVBQRVJfRElSRUNUSVZFLFxuICBBY2NvcmRpb25IaW50V3JhcHBlckRpcmVjdGl2ZSxcbiAgQWNjb3JkaW9uTGFiZWxEaXJlY3RpdmUsXG4gIEFjY29yZGlvbkxhYmVsV3JhcHBlckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vcGFydGlhbHMnO1xuaW1wb3J0IHsgYWNjb3JkaW9uQW5pbWF0aW9ucyB9IGZyb20gJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5hbmltYXRpb25zJztcbmltcG9ydCB7IEFDQ09SRElPTl9DT01QT05FTlQgfSBmcm9tICcuL2FjY29yZGlvbi5jb21wb25lbnQuY29uc3RhbnRzJztcblxubGV0IGFjY29yZGlvbklkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtYWNjb3JkaW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FjY29yZGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBQ0NPUkRJT05fQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogQWNjb3JkaW9uQ29tcG9uZW50IH1dLFxuICBpbXBvcnRzOiBbXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ0NsYXNzLFxuICAgIEFjY29yZGlvbkxhYmVsRGlyZWN0aXZlLFxuICAgIFBvcnRhbE1vZHVsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIENoZXZyb25JY29uQ29tcG9uZW50LFxuICBdLFxuICBhbmltYXRpb25zOiBbYWNjb3JkaW9uQW5pbWF0aW9ucy5hbmltYXRlT3BlbkNsb3NlXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtYWNjb3JkaW9uJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaWQgPSBgZXQtYWNjb3JkaW9uLSR7YWNjb3JkaW9uSWQrK31gO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBpc09wZW5CeURlZmF1bHQgPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBsYWJlbCA9ICcnO1xuXG4gIEBDb250ZW50Q2hpbGQoQUNDT1JESU9OX0xBQkVMX1dSQVBQRVJfRElSRUNUSVZFKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVtcGxhdGVMYWJlbCE6IEFjY29yZGlvbkxhYmVsV3JhcHBlckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKEFDQ09SRElPTl9ISU5UX1dSQVBQRVJfRElSRUNUSVZFKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVtcGxhdGVIaW50ITogQWNjb3JkaW9uSGludFdyYXBwZXJEaXJlY3RpdmU7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJvZHlJZCA9IGAke3RoaXMuX2lkfS1ib2R5YDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhlYWRlcklkID0gYCR7dGhpcy5faWR9LWhlYWRlcmA7XG5cbiAgX2lzRmlyc3QgPSBmYWxzZTtcbiAgX2lzTGFzdCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfaXNPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIGdldCBpc09wZW4kKCkge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW4kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuJC52YWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzT3BlbiQubmV4dCh0aGlzLmlzT3BlbkJ5RGVmYXVsdCk7XG4gIH1cblxuICB0b2dnbGVBY2NvcmRpb25PcGVuKCkge1xuICAgIHRoaXMuX2lzT3BlbiQubmV4dCghdGhpcy5faXNPcGVuJC52YWx1ZSk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuX2lzT3BlbiQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2lzT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgKmV0TGV0PVwiX2lzT3BlbiQgfCBhc3luYyBhcyBpc09wZW5cIiBjbGFzcz1cImV0LWFjY29yZGlvbi1jb250YWluZXJcIj5cbiAgPGgzIGNsYXNzPVwiZXQtYWNjb3JkaW9uLWhlYWRlci13cmFwcGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtpZF09XCJoZWFkZXJJZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImJvZHlJZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICBbY2xhc3MuZXQtYWNjb3JkaW9uLWhhcy1oaW50XT1cIiEhdGVtcGxhdGVIaW50XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVBY2NvcmRpb25PcGVuKClcIlxuICAgICAgY2xhc3M9XCJldC1hY2NvcmRpb24taGVhZGVyXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAodGVtcGxhdGVMYWJlbCkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT1cInRlbXBsYXRlTGFiZWxcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBldC1hY2NvcmRpb24tbGFiZWw+e3sgbGFiZWwgfX0gPC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmICh0ZW1wbGF0ZUhpbnQpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwidGVtcGxhdGVIaW50XCIgLz5cbiAgICAgIH1cblxuICAgICAgPGV0LWNoZXZyb24taWNvbiAvPlxuICAgIDwvYnV0dG9uPlxuICA8L2gzPlxuICA8ZGl2XG4gICAgW0BhbmltYXRlT3BlbkNsb3NlXT1cIihfaXNPcGVuJCB8IGFzeW5jKSA/ICdvcGVuJyA6ICdjbG9zZSdcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJoZWFkZXJJZFwiXG4gICAgW2lkXT1cImJvZHlJZFwiXG4gICAgY2xhc3M9XCJldC1hY2NvcmRpb24tYm9keVwiXG4gICAgcm9sZT1cInJlZ2lvblwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtYWNjb3JkaW9uLWJvZHktY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGhyIGNsYXNzPVwiZXQtYWNjb3JkaW9uLXNlcGFyYXRvclwiIC8+XG48L2Rpdj5cbiJdfQ==
@@ -35,10 +35,10 @@ export class AccordionGroupComponent {
35
35
  }), takeUntil(this._destroy$))
36
36
  .subscribe();
37
37
  }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.1", type: AccordionGroupComponent, isStandalone: true, selector: "et-accordion-group", inputs: { autoCloseOthers: ["autoCloseOthers", "autoCloseOthers", booleanAttribute] }, host: { classAttribute: "et-accordion-group" }, queries: [{ propertyName: "_accordions", predicate: ACCORDION_COMPONENT }], ngImport: i0, template: "<ng-content select=\"et-accordion\" />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.2", type: AccordionGroupComponent, isStandalone: true, selector: "et-accordion-group", inputs: { autoCloseOthers: ["autoCloseOthers", "autoCloseOthers", booleanAttribute] }, host: { classAttribute: "et-accordion-group" }, queries: [{ propertyName: "_accordions", predicate: ACCORDION_COMPONENT }], ngImport: i0, template: "<ng-content select=\"et-accordion\" />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionGroupComponent, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionGroupComponent, decorators: [{
42
42
  type: Component,
43
43
  args: [{ selector: 'et-accordion-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
44
44
  class: 'et-accordion-group',
@@ -1,10 +1,10 @@
1
1
  import { Directive } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class AccordionHintDirective {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: AccordionHintDirective, isStandalone: true, selector: "[et-accordion-hint]", host: { classAttribute: "et-accordion-hint" }, ngImport: i0 }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: AccordionHintDirective, isStandalone: true, selector: "[et-accordion-hint]", host: { classAttribute: "et-accordion-hint" }, ngImport: i0 }); }
6
6
  }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionHintDirective, decorators: [{
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionHintDirective, decorators: [{
8
8
  type: Directive,
9
9
  args: [{
10
10
  selector: '[et-accordion-hint]',
@@ -6,10 +6,10 @@ export class AccordionHintWrapperDirective extends CdkPortal {
6
6
  constructor(templateRef, viewContainerRef) {
7
7
  super(templateRef, viewContainerRef);
8
8
  }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionHintWrapperDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: AccordionHintWrapperDirective, isStandalone: true, selector: "ng-template[et-accordion-hint-wrapper]", providers: [{ provide: ACCORDION_HINT_WRAPPER_DIRECTIVE, useExisting: AccordionHintWrapperDirective }], usesInheritance: true, ngImport: i0 }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionHintWrapperDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: AccordionHintWrapperDirective, isStandalone: true, selector: "ng-template[et-accordion-hint-wrapper]", providers: [{ provide: ACCORDION_HINT_WRAPPER_DIRECTIVE, useExisting: AccordionHintWrapperDirective }], usesInheritance: true, ngImport: i0 }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionHintWrapperDirective, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionHintWrapperDirective, decorators: [{
13
13
  type: Directive,
14
14
  args: [{
15
15
  selector: 'ng-template[et-accordion-hint-wrapper]',
@@ -1,10 +1,10 @@
1
1
  import { Directive } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class AccordionLabelDirective {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: AccordionLabelDirective, isStandalone: true, selector: "[et-accordion-label]", host: { classAttribute: "et-accordion-label" }, ngImport: i0 }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: AccordionLabelDirective, isStandalone: true, selector: "[et-accordion-label]", host: { classAttribute: "et-accordion-label" }, ngImport: i0 }); }
6
6
  }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionLabelDirective, decorators: [{
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionLabelDirective, decorators: [{
8
8
  type: Directive,
9
9
  args: [{
10
10
  selector: '[et-accordion-label]',
@@ -6,10 +6,10 @@ export class AccordionLabelWrapperDirective extends CdkPortal {
6
6
  constructor(templateRef, viewContainerRef) {
7
7
  super(templateRef, viewContainerRef);
8
8
  }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionLabelWrapperDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: AccordionLabelWrapperDirective, isStandalone: true, selector: "ng-template[et-accordion-label-wrapper]", providers: [{ provide: ACCORDION_LABEL_WRAPPER_DIRECTIVE, useExisting: AccordionLabelWrapperDirective }], usesInheritance: true, ngImport: i0 }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionLabelWrapperDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: AccordionLabelWrapperDirective, isStandalone: true, selector: "ng-template[et-accordion-label-wrapper]", providers: [{ provide: ACCORDION_LABEL_WRAPPER_DIRECTIVE, useExisting: AccordionLabelWrapperDirective }], usesInheritance: true, ngImport: i0 }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: AccordionLabelWrapperDirective, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: AccordionLabelWrapperDirective, decorators: [{
13
13
  type: Directive,
14
14
  args: [{
15
15
  selector: 'ng-template[et-accordion-label-wrapper]',
@@ -1,8 +1,8 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
3
- import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
3
+ import { AsyncPipe, NgClass } from '@angular/common';
4
4
  import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Injector, Input, ViewEncapsulation, inject, } from '@angular/core';
5
- import { LetDirective, Memo, ScrollObserverFirstElementDirective, ScrollObserverLastElementDirective, } from '@ethlete/core';
5
+ import { LetDirective, Memo } from '@ethlete/core';
6
6
  import { BehaviorSubject, map } from 'rxjs';
7
7
  import { BRACKET_CONFIG_TOKEN, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN } from '../../constants';
8
8
  import { Bracket, createBracketConfig, orderRounds } from '../../utils';
@@ -222,13 +222,13 @@ export class BracketComponent {
222
222
  const round = this._getRoundById(roundId, bracket);
223
223
  return round?.matches.find((match) => match.data.id === matchId) ?? null;
224
224
  }
225
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: BracketComponent, isStandalone: true, selector: "et-bracket", inputs: { itemWith: "itemWith", itemHeight: "itemHeight", roundHeaderHeight: "roundHeaderHeight", upperLowerBracketGap: "upperLowerBracketGap", columnGap: "columnGap", rowGap: "rowGap", roundsWithMatches: "roundsWithMatches", componentConfig: "componentConfig" }, host: { properties: { "attr.has-round-headers": "this.hasRoundHeaders" }, classAttribute: "et-bracket" }, providers: [
225
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: BracketComponent, isStandalone: true, selector: "et-bracket", inputs: { itemWith: "itemWith", itemHeight: "itemHeight", roundHeaderHeight: "roundHeaderHeight", upperLowerBracketGap: "upperLowerBracketGap", columnGap: "columnGap", rowGap: "rowGap", roundsWithMatches: "roundsWithMatches", componentConfig: "componentConfig" }, host: { properties: { "attr.has-round-headers": "this.hasRoundHeaders" }, classAttribute: "et-bracket" }, providers: [
227
227
  {
228
228
  provide: BRACKET_TOKEN,
229
229
  useExisting: BracketComponent,
230
230
  },
231
- ], ngImport: i0, template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: ScrollObserverFirstElementDirective, selector: "[etScrollObserverFirstElement]", inputs: ["etScrollObserverFirstElement"] }, { kind: "directive", type: ScrollObserverLastElementDirective, selector: "[etScrollObserverLastElement]", inputs: ["etScrollObserverLastElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
231
+ ], ngImport: i0, template: "@if (_bracket$ | async; as bracket) {\n @for (round of bracket.bracketRounds; track trackByRound(roundIndex, round); let roundIndex = $index) {\n @if (_config.roundHeaderComponent) {\n <div\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? round.row.start + 1\n : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n }\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n @for (match of round.matches; track trackByMatch(matchIndex, match); let matchIndex = $index) {\n @if (getConnectedMatches(match, bracket); as connectedMatches) {\n <div\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n }\n }\n </ng-container>\n </ng-container>\n }\n}\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
232
232
  }
233
233
  __decorate([
234
234
  Memo({
@@ -300,25 +300,16 @@ __decorate([
300
300
  __metadata("design:paramtypes", [Object, Bracket]),
301
301
  __metadata("design:returntype", void 0)
302
302
  ], BracketComponent.prototype, "_getNextMatch", null);
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketComponent, decorators: [{
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketComponent, decorators: [{
304
304
  type: Component,
305
- args: [{ selector: 'et-bracket', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
306
- NgClass,
307
- NgForOf,
308
- LetDirective,
309
- NgIf,
310
- PortalModule,
311
- AsyncPipe,
312
- ScrollObserverFirstElementDirective,
313
- ScrollObserverLastElementDirective,
314
- ], host: {
305
+ args: [{ selector: 'et-bracket', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, LetDirective, PortalModule, AsyncPipe], host: {
315
306
  class: 'et-bracket',
316
307
  }, providers: [
317
308
  {
318
309
  provide: BRACKET_TOKEN,
319
310
  useExisting: BracketComponent,
320
311
  },
321
- ], template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"] }]
312
+ ], template: "@if (_bracket$ | async; as bracket) {\n @for (round of bracket.bracketRounds; track trackByRound(roundIndex, round); let roundIndex = $index) {\n @if (_config.roundHeaderComponent) {\n <div\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? round.row.start + 1\n : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n }\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n @for (match of round.matches; track trackByMatch(matchIndex, match); let matchIndex = $index) {\n @if (getConnectedMatches(match, bracket); as connectedMatches) {\n <div\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n }\n }\n </ng-container>\n </ng-container>\n }\n}\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"] }]
322
313
  }], propDecorators: { itemWith: [{
323
314
  type: Input
324
315
  }], itemHeight: [{
@@ -339,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
339
330
  type: HostBinding,
340
331
  args: ['attr.has-round-headers']
341
332
  }], getConnectedMatches: [], getChildConnectorShape: [], getLineMultiAfter: [], getLineSpan: [], createRoundPortal: [], createMatchPortal: [], _getRoundById: [], _getPreviousMatches: [], _getNextMatch: [] } });
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsRUFBaUIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osSUFBSSxFQUNKLG1DQUFtQyxFQUNuQyxrQ0FBa0MsR0FDbkMsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUE4QnhFLE1BQU0sT0FBTyxnQkFBZ0I7SUEzQjdCO1FBNEJVLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMx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S0FBSztnQkFXRixNQUFNO3NCQURULEtBQUs7Z0JBV0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQW9CRixlQUFlO3NCQURsQixLQUFLO2dCQVdGLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsd0JBQXdCO2dCQXVCM0IsbUJBQW1CLE1BY25CLHNCQUFzQixNQWdDdEIsaUJBQWlCLE1BaURqQixXQUFXLE1BZ0NYLGlCQUFpQixNQW1CakIsaUJBQWlCLE1BaUJuQixhQUFhLE1BUWIsbUJBQW1CLE1Ba0JuQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBDb21wb25lbnRUeXBlLCBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTGV0RGlyZWN0aXZlLFxuICBNZW1vLFxuICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJSQUNLRVRfQ09ORklHX1RPS0VOLCBCUkFDS0VUX01BVENIX0lEX1RPS0VOLCBCUkFDS0VUX1JPVU5EX0lEX1RPS0VOLCBCUkFDS0VUX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJyYWNrZXRDb25maWcsIEJyYWNrZXRNYXRjaCwgQnJhY2tldFJvdW5kIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnJhY2tldCwgY3JlYXRlQnJhY2tldENvbmZpZywgb3JkZXJSb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRNYXRjaGVzIH0gZnJvbSAnLi9icmFja2V0LmNvbXBvbmVudC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWJyYWNrZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhY2tldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyYWNrZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yT2YsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIE5nSWYsXG4gICAgUG9ydGFsTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgICBTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1icmFja2V0JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQlJBQ0tFVF9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBCcmFja2V0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJyYWNrZXRDb21wb25lbnQge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfYnJhY2tldENvbmZpZyA9IGluamVjdChCUkFDS0VUX0NPTkZJR19UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtV2l0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbVdpdGg7XG4gIH1cbiAgc2V0IGl0ZW1XaXRoKHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1XaXRoID0gdjtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLXdpZHRoJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfaXRlbVdpdGggPSAnMjAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtSGVpZ2h0O1xuICB9XG4gIHNldCBpdGVtSGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1IZWlnaHQgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLWhlaWdodCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2l0ZW1IZWlnaHQgPSAnMTAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZEhlYWRlckhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRIZWFkZXJIZWlnaHQ7XG4gIH1cbiAgc2V0IHJvdW5kSGVhZGVySGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX3JvdW5kSGVhZGVySGVpZ2h0ID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX3JvdW5kLWhlYWRlci1oZWlnaHQnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9yb3VuZEhlYWRlckhlaWdodCA9ICc1MHB4JztcblxuICBASW5wdXQoKVxuICBnZXQgdXBwZXJMb3dlckJyYWNrZXRHYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwcGVyTG93ZXJCcmFja2V0R2FwO1xuICB9XG4gIHNldCB1cHBlckxvd2VyQnJhY2tldEdhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cHBlckxvd2VyQnJhY2tldEdhcCA9IHY7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLV91cHBlci1sb3dlci1icmFja2V0LWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX3VwcGVyTG93ZXJCcmFja2V0R2FwID0gJzBweCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbkdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uR2FwO1xuICB9XG4gIHNldCBjb2x1bW5HYXAodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sdW1uR2FwID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX2JyYWNrZXQtY29sdW1uLWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2NvbHVtbkdhcCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgcm93R2FwKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dHYXA7XG4gIH1cbiAgc2V0IHJvd0dhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dHYXAgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1yb3ctZ2FwJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfcm93R2FwITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZHNXaXRoTWF0Y2hlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXM7XG4gIH1cbiAgc2V0IHJvdW5kc1dpdGhNYXRjaGVzKHY6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IHY7XG5cbiAgICBpZiAoIXYgfHwgdi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2JyYWNrZXQkLm5leHQobnVsbCk7XG4gICAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvcnRlZFJvdW5kcyA9IG9yZGVyUm91bmRzKHYpO1xuXG4gICAgICB0aGlzLl9icmFja2V0JC5uZXh0KG5ldyBCcmFja2V0KHNvcnRlZFJvdW5kcykpO1xuICAgICAgdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMgPSBzb3J0ZWRSb3VuZHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3JvdW5kc1dpdGhNYXRjaGVzITogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBnZXQgY29tcG9uZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRDb25maWc7XG4gIH1cbiAgc2V0IGNvbXBvbmVudENvbmZpZyh2OiBCcmFja2V0Q29uZmlnIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbXBvbmVudENvbmZpZyA9IHY7XG4gICAgdGhpcy5fY29uZmlnID0gY3JlYXRlQnJhY2tldENvbmZpZyh0aGlzLl9icmFja2V0Q29uZmlnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9jb21wb25lbnRDb25maWc6IEJyYWNrZXRDb25maWcgfCBudWxsID0gbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaGFzLXJvdW5kLWhlYWRlcnMnKVxuICBnZXQgaGFzUm91bmRIZWFkZXJzKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZz8ucm91bmRIZWFkZXJDb21wb25lbnQgPz8gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NvbmZpZyA9IGNyZWF0ZUJyYWNrZXRDb25maWcodGhpcy5fY29tcG9uZW50Q29uZmlnLCB0aGlzLl9icmFja2V0Q29uZmlnKTtcbiAgcHJvdGVjdGVkIF9icmFja2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJhY2tldCB8IG51bGw+KG51bGwpO1xuXG4gIHRyYWNrQnlSb3VuZDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRSb3VuZD4gPSAoXywgcm91bmQpID0+IHJvdW5kLmRhdGEuaWQ7XG4gIHRyYWNrQnlNYXRjaDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRNYXRjaD4gPSAoXywgbWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQ7XG5cbiAgZ2V0QnJhY2tldE1hdGNoQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JyYWNrZXQkLnBpcGUobWFwKChicmFja2V0KSA9PiBicmFja2V0Py5nZXRNYXRjaEJ5SWQoaWQpID8/IG51bGwpKTtcbiAgfVxuXG4gIGdldEJyYWNrZXRSb3VuZEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9icmFja2V0JC5waXBlKG1hcCgoYnJhY2tldCkgPT4gYnJhY2tldD8uZ2V0Um91bmRCeUlkKGlkKSA/PyBudWxsKSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoOiBCcmFja2V0TWF0Y2gsIGJyYWNrZXQ6IEJyYWNrZXQpOiBDb25uZWN0ZWRNYXRjaGVzIHtcbiAgICBjb25zdCBwcmV2aW91c01hdGNoZXMgPSB0aGlzLl9nZXRQcmV2aW91c01hdGNoZXMobWF0Y2gsIGJyYWNrZXQpO1xuICAgIGNvbnN0IG5leHRNYXRjaCA9IHRoaXMuX2dldE5leHRNYXRjaChtYXRjaCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldmlvdXNNYXRjaGVzLFxuICAgICAgbmV4dE1hdGNoLFxuICAgIH07XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSA9PlxuICAgICAgYCR7Y3VycmVudE1hdGNoLmRhdGEuaWR9LSR7bmV4dE1hdGNoPy5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSB7XG4gICAgaWYgKCFuZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcyA9IG5leHRNYXRjaC5wcmV2aW91c01hdGNoZXM/Lm1hdGNoSWRzO1xuXG4gICAgaWYgKCFuZXh0TWF0Y2hQcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hBID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzBdO1xuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hCID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzFdO1xuXG4gICAgaWYgKG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAnc3RyYWlnaHQnO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TWF0Y2guZGF0YS5pZCA9PT0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaEEpIHtcbiAgICAgIHJldHVybiAnZG93bic7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNYXRjaC5kYXRhLmlkID09PSBuZXh0TWF0Y2hQcmV2aW91c01hdGNoQikge1xuICAgICAgcmV0dXJuICd1cCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZEluZGV4OiBudW1iZXIsIGJyYWNrZXQ6IEJyYWNrZXQpID0+IGAke3JvdW5kSW5kZXh9LSR7YnJhY2tldC5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0TGluZU11bHRpQWZ0ZXIocm91bmRJbmRleDogbnVtYmVyLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgY29uc3QgaXNEb3VibGVFbGltaW5hdGlvbiA9IGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnO1xuICAgIGNvbnN0IGN1cnJlbnRSb3VuZCA9IGJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4XTtcbiAgICBjb25zdCBuZXh0Um91bmQgPSBicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCArIDFdO1xuXG4gICAgLy8gZm9yIGNvbm5lY3RpbmcgdGhlIGxhc3QgbG9vc2VyIG1hdGNoIGFuZCB0aGUgcmVzcGVjdGl2ZSBzZW1pIGZpbmFsIHdpbm5lciBtYXRjaFxuICAgIGlmIChcbiAgICAgIGlzRG91YmxlRWxpbWluYXRpb24gJiZcbiAgICAgICghbmV4dFJvdW5kIHx8IG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmXG4gICAgICBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gYnJhY2tldC50b3RhbFJvd0NvdW50IC0gMTtcbiAgICB9XG5cbiAgICBpZiAoIW5leHRSb3VuZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKG5leHRSb3VuZC5tYXRjaGVzLmxlbmd0aCA9PT0gY3VycmVudFJvdW5kPy5tYXRjaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICByZXR1cm4gMiAqKiByb3VuZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcm5kSW5kZXggPSByb3VuZEluZGV4O1xuXG4gICAgICBpZiAoY3VycmVudFJvdW5kPy5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jykge1xuICAgICAgICBjb25zdCB0b3RhbFdpbm5lclJvdW5kcyA9IGJyYWNrZXQud2lubmVyUm91bmRDb3VudDtcbiAgICAgICAgY29uc3QgbG9vc2VyUm91bmRJbmRleCA9XG4gICAgICAgICAgY3VycmVudFJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnID8gcm91bmRJbmRleCAtIHRvdGFsV2lubmVyUm91bmRzIDogcm91bmRJbmRleDtcblxuICAgICAgICBybmRJbmRleCA9IGxvb3NlclJvdW5kSW5kZXggLyAyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMiAqKiBybmRJbmRleDtcbiAgICB9XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChcbiAgICAgIGFmZmVjdGVkUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgICBwcmV2aW91c1JvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgbmV4dFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgYnJhY2tldDogQnJhY2tldCxcbiAgICApID0+XG4gICAgICBgJHthZmZlY3RlZFJvdW5kPy5kYXRhLmlkfSAke3ByZXZpb3VzUm91bmQ/LmRhdGEuaWR9ICR7Y3VycmVudFJvdW5kPy5kYXRhLmlkfSAke25leHRSb3VuZD8uZGF0YS5pZH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRMaW5lU3BhbihcbiAgICBhZmZlY3RlZFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIHByZXZpb3VzUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIG5leHRSb3VuZDogQnJhY2tldFJvdW5kIHwgbnVsbCxcbiAgICBicmFja2V0OiBCcmFja2V0LFxuICApIHtcbiAgICBpZiAoIWFmZmVjdGVkUm91bmQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGlzIG5ldmVyIGEgY29ubmVjdGlvbiB0byB0aGUgdGhpcmQgcGxhY2UgbWF0Y2hcbiAgICBpZiAobmV4dFJvdW5kPy5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChicmFja2V0LmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gbmV4dFJvdW5kICYmIG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICdmaW5hbCcpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkUm91bmQgPT09IGN1cnJlbnRSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gcHJldmlvdXNSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uZW5kIC0gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uc3RhcnQ7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZDogQnJhY2tldFJvdW5kKSA9PiBgJHtyb3VuZC5kYXRhLmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBjcmVhdGVSb3VuZFBvcnRhbChyb3VuZDogQnJhY2tldFJvdW5kLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8dW5rbm93bj4pIHtcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEJSQUNLRVRfUk9VTkRfSURfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IHJvdW5kLmRhdGEuaWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50LCBudWxsLCBpbmplY3Rvcik7XG5cbiAgICByZXR1cm4gcG9ydGFsO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAobWF0Y2g6IEJyYWNrZXRNYXRjaCkgPT4gYCR7bWF0Y2guZGF0YS5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0Y2hQb3J0YWwobWF0Y2g6IEJyYWNrZXRNYXRjaCwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBCUkFDS0VUX01BVENIX0lEX1RPS0VOLFxuICAgICAgICAgIHVzZVZhbHVlOiBtYXRjaC5kYXRhLmlkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpO1xuXG4gICAgcmV0dXJuIHBvcnRhbDtcbiAgfVxuXG4gIEBNZW1vKHsgcmVzb2x2ZXI6IChpZDogc3RyaW5nLCBicmFja2V0OiBCcmFja2V0KSA9PiBgJHtpZH0tJHticmFja2V0LmlkfWAgfSlcbiAgcHJpdmF0ZSBfZ2V0Um91bmRCeUlkKGlkOiBzdHJpbmcsIGJyYWNrZXQ6IEJyYWNrZXQpIHtcbiAgICByZXR1cm4gYnJhY2tldD8uYnJhY2tldFJvdW5kcy5maW5kKChyb3VuZCkgPT4gcm91bmQuZGF0YS5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldFByZXZpb3VzTWF0Y2hlcyhtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5wcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZHMgfSA9IG1hdGNoLnByZXZpb3VzTWF0Y2hlcztcblxuICAgIGNvbnN0IHJvdW5kID0gdGhpcy5fZ2V0Um91bmRCeUlkKHJvdW5kSWQsIGJyYWNrZXQpO1xuXG4gICAgcmV0dXJuIG1hdGNoSWRzLm1hcCgobWF0Y2hJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldE5leHRNYXRjaChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5uZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZCB9ID0gbWF0Y2gubmV4dE1hdGNoO1xuXG4gICAgY29uc3Qgcm91bmQgPSB0aGlzLl9nZXRSb3VuZEJ5SWQocm91bmRJZCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJfYnJhY2tldCQgfCBhc3luYyBhcyBicmFja2V0XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdW5kIG9mIGJyYWNrZXQuYnJhY2tldFJvdW5kczsgdHJhY2tCeTogdHJhY2tCeVJvdW5kOyBsZXQgcm91bmRJbmRleCA9IGluZGV4XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50XCJcbiAgICAgIFtldFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50XT1cInJvdW5kSW5kZXggPT09IDBcIlxuICAgICAgW2V0U2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudF09XCJyb3VuZEluZGV4ID09PSBicmFja2V0Lndpbm5lclJvdW5kQ291bnQgLSAxXCJcbiAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgW3N0eWxlLi0tX3JzXT1cIlxuICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScgPyByb3VuZC5yb3cuc3RhcnQgKyAxIDogcm91bmQucm93LnN0YXJ0XG4gICAgICBcIlxuICAgICAgW2F0dHIuc3BlY2lhbC1hbGlnbi1lbmRdPVwiXG4gICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJyAmJlxuICAgICAgICBicmFja2V0LmJyYWNrZXRUeXBlID09PSAnc2luZ2xlJyAmJlxuICAgICAgICBicmFja2V0LmZpcnN0V2lubmVyUm91bmQgJiZcbiAgICAgICAgYnJhY2tldC5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoIDw9IDRcbiAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgIDogJ2ZhbHNlJ1xuICAgICAgXCJcbiAgICAgIFthdHRyLmlzLWxvc2VyLXJvdW5kLWhlYWRlcl09XCJcbiAgICAgICAgKHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnIHx8IHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJykgJiYgYnJhY2tldC5icmFja2V0VHlwZSA9PT0gJ2RvdWJsZSdcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cImV0LWJyYWNrZXQtcm91bmRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cImNyZWF0ZVJvdW5kUG9ydGFsKHJvdW5kLCBfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqZXRMZXQ9XCJicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCAtIDFdID8/IG51bGwgYXMgbGFzdFJvdW5kXCI+XG4gICAgICA8bmctY29udGFpbmVyICpldExldD1cImJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4ICsgMV0gPz8gbnVsbCBhcyBuZXh0Um91bmRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWF0Y2ggb2Ygcm91bmQubWF0Y2hlczsgdHJhY2tCeTogdHJhY2tCeU1hdGNoOyBsZXQgbWF0Y2hJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoLCBicmFja2V0KSBhcyBjb25uZWN0ZWRNYXRjaGVzXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tX3JzXT1cIlxuICAgICAgICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZSdcbiAgICAgICAgICAgICAgICA/IG1hdGNoLnJvdy5zdGFydCArIChfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50ID8gMiA6IDApXG4gICAgICAgICAgICAgICAgOiBtYXRjaC5yb3cuc3RhcnQgKyAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCA/IDEgOiAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9yZV09XCJcbiAgICAgICAgICAgICAgcm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnXG4gICAgICAgICAgICAgICAgPyBtYXRjaC5yb3cuZW5kICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAyIDogMClcbiAgICAgICAgICAgICAgICA6IG1hdGNoLnJvdy5lbmQgKyAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCA/IDEgOiAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9saW5lLW11bHRpLWFmdGVyXT1cImdldExpbmVNdWx0aUFmdGVyKHJvdW5kSW5kZXgsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmV0LWhhcy1wYXJlbnRzXT1cIiEhY29ubmVjdGVkTWF0Y2hlcy5wcmV2aW91c01hdGNoZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbYXR0ci5ldC1oYXMtY2hpbGRdPVwiISFjb25uZWN0ZWRNYXRjaGVzLm5leHRNYXRjaFwiXG4gICAgICAgICAgICBbYXR0ci5ldC1jaGlsZC1jb25uZWN0b3Itc2hhcGVdPVwiZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShtYXRjaCwgY29ubmVjdGVkTWF0Y2hlcy5uZXh0TWF0Y2gpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1iZWZvcmVdPVwiZ2V0TGluZVNwYW4obGFzdFJvdW5kLCBsYXN0Um91bmQsIHJvdW5kLCBuZXh0Um91bmQsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1jdXJyZW50XT1cImdldExpbmVTcGFuKHJvdW5kLCBsYXN0Um91bmQsIHJvdW5kLCBuZXh0Um91bmQsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1hZnRlcl09XCJnZXRMaW5lU3BhbihuZXh0Um91bmQsIGxhc3RSb3VuZCwgcm91bmQsIG5leHRSb3VuZCwgYnJhY2tldClcIlxuICAgICAgICAgICAgW2F0dHIuaXMtZmlyc3QtbG9zZXItcm91bmQtbWF0Y2hdPVwiXG4gICAgICAgICAgICAgIChyb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmIG1hdGNoSW5kZXggPT09IDBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5pcy1sYXN0LWxvd2VyLWJyYWNrZXQtbWF0Y2hdPVwiXG4gICAgICAgICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnICYmXG4gICAgICAgICAgICAgIChyb3VuZEluZGV4ID09PSBicmFja2V0LmJyYWNrZXRSb3VuZHMubGVuZ3RoIC0gMSB8fCBuZXh0Um91bmQ/LmRhdGE/LnR5cGUgPT09ICd0aGlyZF9wbGFjZScpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJldC1icmFja2V0LW1hdGNoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtQb3J0YWxPdXRsZXQ9XCJjcmVhdGVNYXRjaFBvcnRhbChtYXRjaCwgX2NvbmZpZy5tYXRjaENvbXBvbmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsRUFBaUIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixLQUFLLEVBRUwsaUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQXFCeEUsTUFBTSxPQUFPLGdCQUFnQjtJQWxCN0I7UUFtQlUsZ0JBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBQzFELG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsUUFBUSxF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QkFBaUIsTUFpRGpCLFdBQVcsTUFnQ1gsaUJBQWlCLE1BbUJqQixpQkFBaUIsTUFpQm5CLGFBQWEsTUFRYixtQkFBbUIsTUFrQm5CLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIENvbXBvbmVudFR5cGUsIFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXREaXJlY3RpdmUsIE1lbW8gfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQlJBQ0tFVF9DT05GSUdfVE9LRU4sIEJSQUNLRVRfTUFUQ0hfSURfVE9LRU4sIEJSQUNLRVRfUk9VTkRfSURfVE9LRU4sIEJSQUNLRVRfVE9LRU4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQnJhY2tldENvbmZpZywgQnJhY2tldE1hdGNoLCBCcmFja2V0Um91bmQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCcmFja2V0LCBjcmVhdGVCcmFja2V0Q29uZmlnLCBvcmRlclJvdW5kcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbm5lY3RlZE1hdGNoZXMgfSBmcm9tICcuL2JyYWNrZXQuY29tcG9uZW50LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtYnJhY2tldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFja2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJhY2tldC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW05nQ2xhc3MsIExldERpcmVjdGl2ZSwgUG9ydGFsTW9kdWxlLCBBc3luY1BpcGVdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1icmFja2V0JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQlJBQ0tFVF9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBCcmFja2V0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJyYWNrZXRDb21wb25lbnQge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfYnJhY2tldENvbmZpZyA9IGluamVjdChCUkFDS0VUX0NPTkZJR19UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtV2l0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbVdpdGg7XG4gIH1cbiAgc2V0IGl0ZW1XaXRoKHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1XaXRoID0gdjtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLXdpZHRoJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfaXRlbVdpdGggPSAnMjAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtSGVpZ2h0O1xuICB9XG4gIHNldCBpdGVtSGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1IZWlnaHQgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLWhlaWdodCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2l0ZW1IZWlnaHQgPSAnMTAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZEhlYWRlckhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRIZWFkZXJIZWlnaHQ7XG4gIH1cbiAgc2V0IHJvdW5kSGVhZGVySGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX3JvdW5kSGVhZGVySGVpZ2h0ID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX3JvdW5kLWhlYWRlci1oZWlnaHQnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9yb3VuZEhlYWRlckhlaWdodCA9ICc1MHB4JztcblxuICBASW5wdXQoKVxuICBnZXQgdXBwZXJMb3dlckJyYWNrZXRHYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwcGVyTG93ZXJCcmFja2V0R2FwO1xuICB9XG4gIHNldCB1cHBlckxvd2VyQnJhY2tldEdhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cHBlckxvd2VyQnJhY2tldEdhcCA9IHY7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLV91cHBlci1sb3dlci1icmFja2V0LWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX3VwcGVyTG93ZXJCcmFja2V0R2FwID0gJzBweCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbkdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uR2FwO1xuICB9XG4gIHNldCBjb2x1bW5HYXAodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sdW1uR2FwID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX2JyYWNrZXQtY29sdW1uLWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2NvbHVtbkdhcCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgcm93R2FwKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dHYXA7XG4gIH1cbiAgc2V0IHJvd0dhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dHYXAgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1yb3ctZ2FwJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfcm93R2FwITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZHNXaXRoTWF0Y2hlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXM7XG4gIH1cbiAgc2V0IHJvdW5kc1dpdGhNYXRjaGVzKHY6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IHY7XG5cbiAgICBpZiAoIXYgfHwgdi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2JyYWNrZXQkLm5leHQobnVsbCk7XG4gICAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvcnRlZFJvdW5kcyA9IG9yZGVyUm91bmRzKHYpO1xuXG4gICAgICB0aGlzLl9icmFja2V0JC5uZXh0KG5ldyBCcmFja2V0KHNvcnRlZFJvdW5kcykpO1xuICAgICAgdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMgPSBzb3J0ZWRSb3VuZHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3JvdW5kc1dpdGhNYXRjaGVzITogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBnZXQgY29tcG9uZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRDb25maWc7XG4gIH1cbiAgc2V0IGNvbXBvbmVudENvbmZpZyh2OiBCcmFja2V0Q29uZmlnIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbXBvbmVudENvbmZpZyA9IHY7XG4gICAgdGhpcy5fY29uZmlnID0gY3JlYXRlQnJhY2tldENvbmZpZyh0aGlzLl9icmFja2V0Q29uZmlnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9jb21wb25lbnRDb25maWc6IEJyYWNrZXRDb25maWcgfCBudWxsID0gbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaGFzLXJvdW5kLWhlYWRlcnMnKVxuICBnZXQgaGFzUm91bmRIZWFkZXJzKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZz8ucm91bmRIZWFkZXJDb21wb25lbnQgPz8gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NvbmZpZyA9IGNyZWF0ZUJyYWNrZXRDb25maWcodGhpcy5fY29tcG9uZW50Q29uZmlnLCB0aGlzLl9icmFja2V0Q29uZmlnKTtcbiAgcHJvdGVjdGVkIF9icmFja2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJhY2tldCB8IG51bGw+KG51bGwpO1xuXG4gIHRyYWNrQnlSb3VuZDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRSb3VuZD4gPSAoXywgcm91bmQpID0+IHJvdW5kLmRhdGEuaWQ7XG4gIHRyYWNrQnlNYXRjaDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRNYXRjaD4gPSAoXywgbWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQ7XG5cbiAgZ2V0QnJhY2tldE1hdGNoQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JyYWNrZXQkLnBpcGUobWFwKChicmFja2V0KSA9PiBicmFja2V0Py5nZXRNYXRjaEJ5SWQoaWQpID8/IG51bGwpKTtcbiAgfVxuXG4gIGdldEJyYWNrZXRSb3VuZEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9icmFja2V0JC5waXBlKG1hcCgoYnJhY2tldCkgPT4gYnJhY2tldD8uZ2V0Um91bmRCeUlkKGlkKSA/PyBudWxsKSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoOiBCcmFja2V0TWF0Y2gsIGJyYWNrZXQ6IEJyYWNrZXQpOiBDb25uZWN0ZWRNYXRjaGVzIHtcbiAgICBjb25zdCBwcmV2aW91c01hdGNoZXMgPSB0aGlzLl9nZXRQcmV2aW91c01hdGNoZXMobWF0Y2gsIGJyYWNrZXQpO1xuICAgIGNvbnN0IG5leHRNYXRjaCA9IHRoaXMuX2dldE5leHRNYXRjaChtYXRjaCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldmlvdXNNYXRjaGVzLFxuICAgICAgbmV4dE1hdGNoLFxuICAgIH07XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSA9PlxuICAgICAgYCR7Y3VycmVudE1hdGNoLmRhdGEuaWR9LSR7bmV4dE1hdGNoPy5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSB7XG4gICAgaWYgKCFuZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcyA9IG5leHRNYXRjaC5wcmV2aW91c01hdGNoZXM/Lm1hdGNoSWRzO1xuXG4gICAgaWYgKCFuZXh0TWF0Y2hQcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hBID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzBdO1xuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hCID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzFdO1xuXG4gICAgaWYgKG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAnc3RyYWlnaHQnO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TWF0Y2guZGF0YS5pZCA9PT0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaEEpIHtcbiAgICAgIHJldHVybiAnZG93bic7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNYXRjaC5kYXRhLmlkID09PSBuZXh0TWF0Y2hQcmV2aW91c01hdGNoQikge1xuICAgICAgcmV0dXJuICd1cCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZEluZGV4OiBudW1iZXIsIGJyYWNrZXQ6IEJyYWNrZXQpID0+IGAke3JvdW5kSW5kZXh9LSR7YnJhY2tldC5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0TGluZU11bHRpQWZ0ZXIocm91bmRJbmRleDogbnVtYmVyLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgY29uc3QgaXNEb3VibGVFbGltaW5hdGlvbiA9IGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnO1xuICAgIGNvbnN0IGN1cnJlbnRSb3VuZCA9IGJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4XTtcbiAgICBjb25zdCBuZXh0Um91bmQgPSBicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCArIDFdO1xuXG4gICAgLy8gZm9yIGNvbm5lY3RpbmcgdGhlIGxhc3QgbG9vc2VyIG1hdGNoIGFuZCB0aGUgcmVzcGVjdGl2ZSBzZW1pIGZpbmFsIHdpbm5lciBtYXRjaFxuICAgIGlmIChcbiAgICAgIGlzRG91YmxlRWxpbWluYXRpb24gJiZcbiAgICAgICghbmV4dFJvdW5kIHx8IG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmXG4gICAgICBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gYnJhY2tldC50b3RhbFJvd0NvdW50IC0gMTtcbiAgICB9XG5cbiAgICBpZiAoIW5leHRSb3VuZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKG5leHRSb3VuZC5tYXRjaGVzLmxlbmd0aCA9PT0gY3VycmVudFJvdW5kPy5tYXRjaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICByZXR1cm4gMiAqKiByb3VuZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcm5kSW5kZXggPSByb3VuZEluZGV4O1xuXG4gICAgICBpZiAoY3VycmVudFJvdW5kPy5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jykge1xuICAgICAgICBjb25zdCB0b3RhbFdpbm5lclJvdW5kcyA9IGJyYWNrZXQud2lubmVyUm91bmRDb3VudDtcbiAgICAgICAgY29uc3QgbG9vc2VyUm91bmRJbmRleCA9XG4gICAgICAgICAgY3VycmVudFJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnID8gcm91bmRJbmRleCAtIHRvdGFsV2lubmVyUm91bmRzIDogcm91bmRJbmRleDtcblxuICAgICAgICBybmRJbmRleCA9IGxvb3NlclJvdW5kSW5kZXggLyAyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMiAqKiBybmRJbmRleDtcbiAgICB9XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChcbiAgICAgIGFmZmVjdGVkUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgICBwcmV2aW91c1JvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgbmV4dFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgYnJhY2tldDogQnJhY2tldCxcbiAgICApID0+XG4gICAgICBgJHthZmZlY3RlZFJvdW5kPy5kYXRhLmlkfSAke3ByZXZpb3VzUm91bmQ/LmRhdGEuaWR9ICR7Y3VycmVudFJvdW5kPy5kYXRhLmlkfSAke25leHRSb3VuZD8uZGF0YS5pZH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRMaW5lU3BhbihcbiAgICBhZmZlY3RlZFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIHByZXZpb3VzUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIG5leHRSb3VuZDogQnJhY2tldFJvdW5kIHwgbnVsbCxcbiAgICBicmFja2V0OiBCcmFja2V0LFxuICApIHtcbiAgICBpZiAoIWFmZmVjdGVkUm91bmQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGlzIG5ldmVyIGEgY29ubmVjdGlvbiB0byB0aGUgdGhpcmQgcGxhY2UgbWF0Y2hcbiAgICBpZiAobmV4dFJvdW5kPy5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChicmFja2V0LmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gbmV4dFJvdW5kICYmIG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICdmaW5hbCcpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkUm91bmQgPT09IGN1cnJlbnRSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gcHJldmlvdXNSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uZW5kIC0gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uc3RhcnQ7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZDogQnJhY2tldFJvdW5kKSA9PiBgJHtyb3VuZC5kYXRhLmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBjcmVhdGVSb3VuZFBvcnRhbChyb3VuZDogQnJhY2tldFJvdW5kLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8dW5rbm93bj4pIHtcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEJSQUNLRVRfUk9VTkRfSURfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IHJvdW5kLmRhdGEuaWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50LCBudWxsLCBpbmplY3Rvcik7XG5cbiAgICByZXR1cm4gcG9ydGFsO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAobWF0Y2g6IEJyYWNrZXRNYXRjaCkgPT4gYCR7bWF0Y2guZGF0YS5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0Y2hQb3J0YWwobWF0Y2g6IEJyYWNrZXRNYXRjaCwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBCUkFDS0VUX01BVENIX0lEX1RPS0VOLFxuICAgICAgICAgIHVzZVZhbHVlOiBtYXRjaC5kYXRhLmlkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpO1xuXG4gICAgcmV0dXJuIHBvcnRhbDtcbiAgfVxuXG4gIEBNZW1vKHsgcmVzb2x2ZXI6IChpZDogc3RyaW5nLCBicmFja2V0OiBCcmFja2V0KSA9PiBgJHtpZH0tJHticmFja2V0LmlkfWAgfSlcbiAgcHJpdmF0ZSBfZ2V0Um91bmRCeUlkKGlkOiBzdHJpbmcsIGJyYWNrZXQ6IEJyYWNrZXQpIHtcbiAgICByZXR1cm4gYnJhY2tldD8uYnJhY2tldFJvdW5kcy5maW5kKChyb3VuZCkgPT4gcm91bmQuZGF0YS5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldFByZXZpb3VzTWF0Y2hlcyhtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5wcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZHMgfSA9IG1hdGNoLnByZXZpb3VzTWF0Y2hlcztcblxuICAgIGNvbnN0IHJvdW5kID0gdGhpcy5fZ2V0Um91bmRCeUlkKHJvdW5kSWQsIGJyYWNrZXQpO1xuXG4gICAgcmV0dXJuIG1hdGNoSWRzLm1hcCgobWF0Y2hJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldE5leHRNYXRjaChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5uZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZCB9ID0gbWF0Y2gubmV4dE1hdGNoO1xuXG4gICAgY29uc3Qgcm91bmQgPSB0aGlzLl9nZXRSb3VuZEJ5SWQocm91bmRJZCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gIH1cbn1cbiIsIkBpZiAoX2JyYWNrZXQkIHwgYXN5bmM7IGFzIGJyYWNrZXQpIHtcbiAgQGZvciAocm91bmQgb2YgYnJhY2tldC5icmFja2V0Um91bmRzOyB0cmFjayB0cmFja0J5Um91bmQocm91bmRJbmRleCwgcm91bmQpOyBsZXQgcm91bmRJbmRleCA9ICRpbmRleCkge1xuICAgIEBpZiAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCkge1xuICAgICAgPGRpdlxuICAgICAgICBbc3R5bGUuLS1fY3NdPVwicm91bmQuY29sdW1uLnN0YXJ0XCJcbiAgICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgICBbc3R5bGUuLS1fcnNdPVwiXG4gICAgICAgICAgcm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnXG4gICAgICAgICAgICA/IHJvdW5kLnJvdy5zdGFydCArIDFcbiAgICAgICAgICAgIDogcm91bmQucm93LnN0YXJ0XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLnNwZWNpYWwtYWxpZ24tZW5kXT1cIlxuICAgICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJyAmJlxuICAgICAgICAgIGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdzaW5nbGUnICYmXG4gICAgICAgICAgYnJhY2tldC5maXJzdFdpbm5lclJvdW5kICYmXG4gICAgICAgICAgYnJhY2tldC5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoIDw9IDRcbiAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICA6ICdmYWxzZSdcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuaXMtbG9zZXItcm91bmQtaGVhZGVyXT1cIlxuICAgICAgICAgIChyb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmIGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiZXQtYnJhY2tldC1yb3VuZFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cImNyZWF0ZVJvdW5kUG9ydGFsKHJvdW5kLCBfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqZXRMZXQ9XCJicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCAtIDFdID8/IG51bGwgYXMgbGFzdFJvdW5kXCI+XG4gICAgICA8bmctY29udGFpbmVyICpldExldD1cImJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4ICsgMV0gPz8gbnVsbCBhcyBuZXh0Um91bmRcIj5cbiAgICAgICAgQGZvciAobWF0Y2ggb2Ygcm91bmQubWF0Y2hlczsgdHJhY2sgdHJhY2tCeU1hdGNoKG1hdGNoSW5kZXgsIG1hdGNoKTsgbGV0IG1hdGNoSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYgKGdldENvbm5lY3RlZE1hdGNoZXMobWF0Y2gsIGJyYWNrZXQpOyBhcyBjb25uZWN0ZWRNYXRjaGVzKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgICAgICAgICBbc3R5bGUuLS1fY2VdPVwicm91bmQuY29sdW1uLmVuZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLV9yc109XCJcbiAgICAgICAgICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZSdcbiAgICAgICAgICAgICAgICAgID8gbWF0Y2gucm93LnN0YXJ0ICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAyIDogMClcbiAgICAgICAgICAgICAgICAgIDogbWF0Y2gucm93LnN0YXJ0ICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAxIDogMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3N0eWxlLi0tX3JlXT1cIlxuICAgICAgICAgICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnIHx8IHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJ1xuICAgICAgICAgICAgICAgICAgPyBtYXRjaC5yb3cuZW5kICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAyIDogMClcbiAgICAgICAgICAgICAgICAgIDogbWF0Y2gucm93LmVuZCArIChfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50ID8gMSA6IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLV9saW5lLW11bHRpLWFmdGVyXT1cImdldExpbmVNdWx0aUFmdGVyKHJvdW5kSW5kZXgsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgICAgW2F0dHIuZXQtaGFzLXBhcmVudHNdPVwiISFjb25uZWN0ZWRNYXRjaGVzLnByZXZpb3VzTWF0Y2hlcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2F0dHIuZXQtaGFzLWNoaWxkXT1cIiEhY29ubmVjdGVkTWF0Y2hlcy5uZXh0TWF0Y2hcIlxuICAgICAgICAgICAgICBbYXR0ci5ldC1jaGlsZC1jb25uZWN0b3Itc2hhcGVdPVwiZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShtYXRjaCwgY29ubmVjdGVkTWF0Y2hlcy5uZXh0TWF0Y2gpXCJcbiAgICAgICAgICAgICAgW2F0dHIubGluZS1zcGFuLWJlZm9yZV09XCJnZXRMaW5lU3BhbihsYXN0Um91bmQsIGxhc3RSb3VuZCwgcm91bmQsIG5leHRSb3VuZCwgYnJhY2tldClcIlxuICAgICAgICAgICAgICBbYXR0ci5saW5lLXNwYW4tY3VycmVudF09XCJnZXRMaW5lU3Bhbihyb3VuZCwgbGFzdFJvdW5kLCByb3VuZCwgbmV4dFJvdW5kLCBicmFja2V0KVwiXG4gICAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1hZnRlcl09XCJnZXRMaW5lU3BhbihuZXh0Um91bmQsIGxhc3RSb3VuZCwgcm91bmQsIG5leHRSb3VuZCwgYnJhY2tldClcIlxuICAgICAgICAgICAgICBbYXR0ci5pcy1maXJzdC1sb3Nlci1yb3VuZC1tYXRjaF09XCJcbiAgICAgICAgICAgICAgICAocm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnKSAmJiBtYXRjaEluZGV4ID09PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmlzLWxhc3QtbG93ZXItYnJhY2tldC1tYXRjaF09XCJcbiAgICAgICAgICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyAmJlxuICAgICAgICAgICAgICAgIChyb3VuZEluZGV4ID09PSBicmFja2V0LmJyYWNrZXRSb3VuZHMubGVuZ3RoIC0gMSB8fCBuZXh0Um91bmQ/LmRhdGE/LnR5cGUgPT09ICd0aGlyZF9wbGFjZScpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXQtYnJhY2tldC1tYXRjaFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cImNyZWF0ZU1hdGNoUG9ydGFsKG1hdGNoLCBfY29uZmlnLm1hdGNoQ29tcG9uZW50KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICB9XG59XG4iXX0=
@@ -7,10 +7,10 @@ export class BracketMatchDirective {
7
7
  this.bracket = inject(BRACKET_TOKEN);
8
8
  this.match$ = this.bracket.getBracketMatchById(this.matchId);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketMatchDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
11
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: BracketMatchDirective, isStandalone: true, ngImport: i0 }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketMatchDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
11
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: BracketMatchDirective, isStandalone: true, ngImport: i0 }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketMatchDirective, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketMatchDirective, decorators: [{
14
14
  type: Directive,
15
15
  args: [{
16
16
  standalone: true,
@@ -7,10 +7,10 @@ export class BracketRoundDirective {
7
7
  this.bracket = inject(BRACKET_TOKEN);
8
8
  this.round$ = this.bracket.getBracketRoundById(this.roundId);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketRoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
11
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: BracketRoundDirective, isStandalone: true, ngImport: i0 }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketRoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
11
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: BracketRoundDirective, isStandalone: true, ngImport: i0 }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketRoundDirective, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketRoundDirective, decorators: [{
14
14
  type: Directive,
15
15
  args: [{
16
16
  standalone: true,
@@ -1,5 +1,5 @@
1
- import { AsyncPipe, NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';
3
3
  import { BracketMatchDirective } from '../../directives';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../directives/bracket-match/bracket-match.directive";
@@ -7,13 +7,13 @@ export class BracketMatchComponent {
7
7
  constructor() {
8
8
  this.matchData = inject(BracketMatchDirective);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketMatchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: BracketMatchComponent, isStandalone: true, selector: "et-bracket-match", host: { classAttribute: "et-bracket-match" }, hostDirectives: [{ directive: i1.BracketMatchDirective }], ngImport: i0, template: "<ng-container *ngIf=\"matchData.match$ | async as match\">\n {{ match.data.id }}\n</ng-container>\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketMatchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: BracketMatchComponent, isStandalone: true, selector: "et-bracket-match", host: { classAttribute: "et-bracket-match" }, hostDirectives: [{ directive: i1.BracketMatchDirective }], ngImport: i0, template: "@if (matchData.match$ | async; as match) {\n {{ match.data.id }}\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: BracketMatchComponent, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BracketMatchComponent, decorators: [{
14
14
  type: Component,
15
15
  args: [{ selector: 'et-bracket-match', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
16
16
  class: 'et-bracket-match',
17
- }, imports: [AsyncPipe, NgIf], hostDirectives: [BracketMatchDirective], template: "<ng-container *ngIf=\"matchData.match$ | async as match\">\n {{ match.data.id }}\n</ng-container>\n" }]
17
+ }, imports: [AsyncPipe], hostDirectives: [BracketMatchDirective], template: "@if (matchData.match$ | async; as match) {\n {{ match.data.id }}\n}\n" }]
18
18
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC1tYXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9wYXJ0aWFscy9icmFja2V0LW1hdGNoL2JyYWNrZXQtbWF0Y2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2JyYWNrZXQvcGFydGlhbHMvYnJhY2tldC1tYXRjaC9icmFja2V0LW1hdGNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQWV6RCxNQUFNLE9BQU8scUJBQXFCO0lBYmxDO1FBY0UsY0FBUyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBQzNDOzhHQUZZLHFCQUFxQjtrR0FBckIscUJBQXFCLHFMQ2pCbEMsc0dBR0EscUREV1ksU0FBUyw4Q0FBRSxJQUFJOzsyRkFHZCxxQkFBcUI7a0JBYmpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsa0JBQWtCO3FCQUMxQixXQUNRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFDVixDQUFDLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyYWNrZXRNYXRjaERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1icmFja2V0LW1hdGNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyYWNrZXQtbWF0Y2guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9icmFja2V0LW1hdGNoLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1icmFja2V0LW1hdGNoJyxcbiAgfSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgTmdJZl0sXG4gIGhvc3REaXJlY3RpdmVzOiBbQnJhY2tldE1hdGNoRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgQnJhY2tldE1hdGNoQ29tcG9uZW50IHtcbiAgbWF0Y2hEYXRhID0gaW5qZWN0KEJyYWNrZXRNYXRjaERpcmVjdGl2ZSk7XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibWF0Y2hEYXRhLm1hdGNoJCB8IGFzeW5jIGFzIG1hdGNoXCI+XG4gIHt7IG1hdGNoLmRhdGEuaWQgfX1cbjwvbmctY29udGFpbmVyPlxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC1tYXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9wYXJ0aWFscy9icmFja2V0LW1hdGNoL2JyYWNrZXQtbWF0Y2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2JyYWNrZXQvcGFydGlhbHMvYnJhY2tldC1tYXRjaC9icmFja2V0LW1hdGNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBZXpELE1BQU0sT0FBTyxxQkFBcUI7SUFibEM7UUFjRSxjQUFTLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDM0M7OEdBRlkscUJBQXFCO2tHQUFyQixxQkFBcUIscUxDakJsQyx3RUFHQSxxRERXWSxTQUFTOzsyRkFHUixxQkFBcUI7a0JBYmpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsa0JBQWtCO3FCQUMxQixXQUNRLENBQUMsU0FBUyxDQUFDLGtCQUNKLENBQUMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJhY2tldE1hdGNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWJyYWNrZXQtbWF0Y2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhY2tldC1tYXRjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyYWNrZXQtbWF0Y2guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LWJyYWNrZXQtbWF0Y2gnLFxuICB9LFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtCcmFja2V0TWF0Y2hEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBCcmFja2V0TWF0Y2hDb21wb25lbnQge1xuICBtYXRjaERhdGEgPSBpbmplY3QoQnJhY2tldE1hdGNoRGlyZWN0aXZlKTtcbn1cbiIsIkBpZiAobWF0Y2hEYXRhLm1hdGNoJCB8IGFzeW5jOyBhcyBtYXRjaCkge1xuICB7eyBtYXRjaC5kYXRhLmlkIH19XG59XG4iXX0=