@seniorsistemas/angular-components 19.0.5 → 19.0.6

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +12 -12
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -14,22 +14,56 @@ import * as i2 from "@angular/forms";
14
14
  import * as i3 from "@angular/cdk/scrolling";
15
15
  import * as i4 from "@ngx-translate/core";
16
16
  import * as i5 from "@angular/cdk/overlay";
17
+ /**
18
+ * @description Componente de seleção dropdown genérico com suporte a seleção simples e múltipla,
19
+ * filtro, agrupamento, virtual scroll e acessibilidade (ARIA combobox). Implementa
20
+ * {@link ControlValueAccessor} para integração com Reactive Forms e Template-driven Forms.
21
+ *
22
+ * @example
23
+ * ```html
24
+ * <s-select
25
+ * formControlName="categoria"
26
+ * placeholder="Selecione uma categoria"
27
+ * [options]="categorias"
28
+ * optionLabel="nome"
29
+ * optionValue="id"
30
+ * [filter]="true"
31
+ * [showClear]="true" />
32
+ * ```
33
+ *
34
+ * @category Inputs
35
+ */
17
36
  export class SelectComponent {
18
37
  static nextId = 0;
38
+ /** @description Texto exibido quando nenhuma opção está selecionada. @default '' */
19
39
  placeholder = input('');
40
+ /** @description Habilita a seleção de múltiplas opções simultâneas. @default false */
20
41
  multiple = input(false);
42
+ /** @description Lista de opções disponíveis para seleção. Campo obrigatório. */
21
43
  options = input.required();
44
+ /** @description Chave do objeto de opção usada como label de exibição. */
22
45
  optionLabel = input();
46
+ /** @description Chave do objeto de opção usada como valor a ser emitido ao formulário. */
23
47
  optionValue = input();
48
+ /** @description Exibe um botão para limpar a seleção atual. @default false */
24
49
  showClear = input(false);
50
+ /** @description Habilita um campo de filtro textual para pesquisa nas opções. @default false */
25
51
  filter = input(false);
52
+ /** @description Exibe um ícone de checkmark ao lado da opção selecionada. @default false */
26
53
  checkmark = input(false);
54
+ /** @description Chave(s) do objeto usada(s) para filtragem textual. Quando não informado, usa `optionLabel`. */
27
55
  filterBy = input();
56
+ /** @description Habilita agrupamento de opções. As opções devem conter itens filhos conforme a estrutura de grupo suportada. @default false */
28
57
  group = input(false);
58
+ /** @description Habilita virtualização da lista para melhor performance com grandes volumes de opções. @default false */
29
59
  virtualScroll = input(false);
60
+ /** @description Altura fixa de cada item da lista em pixels, necessária para o cálculo do virtual scroll. @default 37 */
30
61
  virtualScrollItemSize = input(37);
62
+ /** @description Mensagem exibida quando nenhuma opção corresponde ao filtro aplicado. @default null */
31
63
  emptyMessage = input(null);
64
+ /** @description Controla o estado desabilitado do componente via two-way binding. @default false */
32
65
  disabled = model(false);
66
+ /** @description Controla a visibilidade do painel de opções via two-way binding. @default false */
33
67
  showOptions = model(false);
34
68
  value = signal(null);
35
69
  values = signal([]);
@@ -642,4 +676,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
642
676
  },
643
677
  ], template: "<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"select-container group flex h-[35px] w-full overflow-hidden rounded-[3px] border outline-1 outline-primary focus:outline\"\n [ngClass]=\"{\n 'pointer-events-none border-grayscale-20 bg-grayscale-5': disabled(),\n 'pointer-events-auto border-grayscale-30 bg-grayscale-0': !disabled(),\n }\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"showOptions()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-owns]=\"'dropdown-container-' + componentId\"\n [attr.aria-labelledby]=\"componentId + '-label'\"\n role=\"combobox\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n>\n <span\n class=\"flex flex-grow select-none px-3 py-[7px]\"\n [ngClass]=\"{\n 'text-grayscale-90': !disabled() && !isClean(),\n 'text-grayscale-60': !disabled() && isClean(),\n 'text-grayscale-30': disabled(),\n }\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n >\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n }\n\n <div\n class=\"dropdown-container flex items-center border-l px-3 group-hover:bg-grayscale-10 group-focus:border-primary\"\n [ngClass]=\"{ 'border-grayscale-20': disabled(), 'border-grayscale-30': !disabled() }\"\n >\n <i\n class=\"fas\"\n [ngClass]=\"{\n 'text-grayscale-30': disabled(),\n 'text-grayscale-90': !disabled(),\n 'fa-caret-down': !showOptions(),\n 'fa-caret-up': showOptions(),\n }\"\n ></i>\n </div>\n</div>\n\n<ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"showOptions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"showOptions.set(false)\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (detach)=\"showOptions.set(false)\"\n>\n <div\n [id]=\"'dropdown-container-' + componentId\"\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n (click)=\"$event.stopPropagation()\"\n [style.width.px]=\"containerDiv.offsetWidth\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 outline-1 outline-primary\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n />\n </form>\n <i class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"></i>\n </div>\n <button (click)=\"clearFilter()\">\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul class=\"max-h-52 overflow-auto\">\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">{{\n emptyMessage() ?? 'platform.angular_components.no_records_found' | translate\n }}</span>\n }\n </div>\n</ng-template>\n\n", styles: [":host.ng-dirty.ng-invalid{.dropdown-container,.select-container{border-color:#c13018;outline:none}}\n"] }]
644
678
  }], ctorParameters: () => [] });
645
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRILE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7QUFrRDNGLE1BQU0sT0FBTyxlQUFlO0lBQ2hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRW5C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QixlQUFlLDJGQUNmLGFBQWE7OzRGQWdDUixlQUFlO2tCQTNDM0IsU0FBUzsrQkFDSSxVQUFVLGNBRVIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGFBQWE7cUJBQ2hCLFFBQ0s7d0JBQ0YsaUJBQWlCLEVBQUUsd0JBQXdCO3dCQUMzQyxzQkFBc0IsRUFBRSxlQUFlO3dCQUN2QyxzQkFBc0IsRUFBRSxXQUFXO3dCQUNuQyxrQkFBa0IsRUFBRSxpREFBaUQ7d0JBQ3JFLDhCQUE4QixFQUFFLG9FQUFvRTt3QkFDcEcsbUJBQW1CLEVBQUUsa0NBQWtDO3dCQUN2RCxzQkFBc0IsRUFBRSxZQUFZO3dCQUNwQyxJQUFJLEVBQUUsVUFBVTtxQkFDbkIsYUFhVTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50JztcblxuaW50ZXJmYWNlIEludGVybmFsRHJvcGRvd25PcHRpb248VD4ge1xuICAgIGRhdGE6IFQ7XG4gICAgaWQ6IHN0cmluZztcbiAgICBncm91cGVyPzogYm9vbGVhbjtcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBPdmVybGF5TW9kdWxlLFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKHdpbmRvdzpyZXNpemUpJzogJ29uV2luZG93UmVzaXplKCRldmVudCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnc2hvd09wdGlvbnMoKScsXG4gICAgICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdcImxpc3Rib3hcIicsXG4gICAgICAgICdbYXR0ci5hcmlhLW93bnNdJzogJ3Nob3dPcHRpb25zKCkgPyBjb21wb25lbnRJZCArIFwiLWxpc3Rib3hcIiA6IG51bGwnLFxuICAgICAgICAnW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSc6ICdmb2N1c2VkSW5kZXgoKSA+PSAwID8gZmlsdGVyZWRPcHRpb25zKClbZm9jdXNlZEluZGV4KCldPy5pZCA6IG51bGwnLFxuICAgICAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAncGxhY2Vob2xkZXIoKSB8fCBcIlNlbGVjdCBvcHRpb25cIicsXG4gICAgICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICB9LFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICA6aG9zdC5uZy1kaXJ0eS5uZy1pbnZhbGlkIHtcbiAgICAgICAgICAgICAgICAuZHJvcGRvd24tY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIC5zZWxlY3QtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYzEzMDE4O1xuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxuXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuICAgIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICBwdWJsaWMgcGxhY2Vob2xkZXIgPSBpbnB1dCgnJyk7XG4gICAgcHVibGljIG11bHRpcGxlID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICAgIHB1YmxpYyBvcHRpb25MYWJlbCA9IGlucHV0PGtleW9mIFQ+KCk7XG4gICAgcHVibGljIG9wdGlvblZhbHVlID0gaW5wdXQ8a2V5b2YgVD4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyBmaWx0ZXIgPSBpbnB1dChmYWxzZSk7XG4gICAgcHVibGljIGNoZWNrbWFyayA9IGlucHV0KGZhbHNlKTtcbiAgICBwdWJsaWMgZmlsdGVyQnkgPSBpbnB1dDxrZXlvZiBUIHwgKGtleW9mIFQpW10+KCk7XG4gICAgcHVibGljIGdyb3VwID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBpbnB1dCgzNyk7XG4gICAgcHVibGljIGVtcHR5TWVzc2FnZSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuICAgIHB1YmxpYyBzaG93T3B0aW9ucyA9IG1vZGVsKGZhbHNlKTtcblxuICAgIHB1YmxpYyB2YWx1ZSA9IHNpZ25hbDxJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+IHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIHZhbHVlcyA9IHNpZ25hbDxJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10+KFtdKTtcbiAgICBwdWJsaWMgZmlsdGVyVmFsdWUgPSBzaWduYWwoJycpO1xuICAgIHB1YmxpYyBmb2N1c2VkSW5kZXggPSBzaWduYWwoLTEpO1xuXG4gICAgcHVibGljIGNvbXBvbmVudElkID0gYHNlbGVjdCR7U2VsZWN0Q29tcG9uZW50Lm5leHRJZCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBxdWUgaW5kaWNhIHNlIHRvZGFzIGFzIG9ww6fDtWVzIGZpbHRyYWRhcyBlc3TDo28gc2VsZWNpb25hZGFzLlxuICAgICAqIFJldG9ybmEgYHRydWVgIHNlIHRvZGFzIGFzIG9ww6fDtWVzIGRpc3BvbsOtdmVpcyAoZXhjbHVpbmRvIGFncnVwYWRvcmVzKSBlc3RpdmVyZW0gcHJlc2VudGVzXG4gICAgICogbmEgbGlzdGEgZGUgdmFsb3JlcyBzZWxlY2lvbmFkb3MsIGUgYGZhbHNlYCBjYXNvIGNvbnRyw6FyaW8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBzZSB0b2RhcyBhcyBvcMOnw7VlcyBmaWx0cmFkYXMgZXN0w6NvIHNlbGVjaW9uYWRhcywgYGZhbHNlYCBjYXNvIGNvbnRyw6FyaW8uXG4gICAgICovXG4gICAgcHVibGljIGFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5ncm91cGVyKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnZhbHVlcygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uaWQpO1xuXG4gICAgICAgIGNvbnN0IHJldCA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmV2ZXJ5KChvcHRpb24pID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdGlvbi5pZCkpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIGl0ZW0gYXR1YWxtZW50ZSBmb2NhZG8gbmEgbGlzdGEgZGUgb3DDp8O1ZXMgZmlsdHJhZGFzLlxuICAgICAqIEByZXR1cm5zIE8gZGFkbyBkbyBpdGVtIGZvY2FkbyBvdSBgbnVsbGAgY2FzbyBuZW5odW0gaXRlbSBlc3RlamEgZm9jYWRvLlxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1c2VkSXRlbSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRPcHRpb25zKClbaW5kZXhdPy5kYXRhID8/IG51bGw7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRhIGUgcmV0b3JuYSBhIGxpc3RhIGludGVybmEgZGUgb3DDp8O1ZXMgZG8gZHJvcGRvd24uXG4gICAgICogLSBTZSBhcyBvcMOnw7VlcyBlc3RpdmVyZW0gYWdydXBhZGFzIChgZ3JvdXAoKWAgcmV0b3JuYSB2ZXJkYWRlaXJvKSxcbiAgICAgKiAgIHV0aWxpemEgYF9ncm91cGVyVG9GbGF0YCBwYXJhIHRyYW5zZm9ybWFyIGFzIG9ww6fDtWVzIGFncnVwYWRhcyBlbSB1bWEgbGlzdGEgcGxhbmEuXG4gICAgICogLSBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmEgYXMgb3DDp8O1ZXMgY29tIElEcyBhZGljaW9uYWRvcy5cbiAgICAgKiBAcmV0dXJucyBVbSBhcnJheSBkZSBgSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPmAgcmVwcmVzZW50YW5kbyBhcyBvcMOnw7VlcyBkaXNwb27DrXZlaXMgcGFyYSBvIGNvbXBvbmVudGUgc2VsZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcm5hbE9wdGlvbnMgPSBjb21wdXRlZDxJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10+KCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgICBjb25zdCBvcHRpb25zV2l0aElkID0gdGhpcy5fYWRkSWRUb09wdGlvbnMob3B0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwKCkgPyB0aGlzLl9ncm91cGVyVG9GbGF0KG9wdGlvbnNXaXRoSWQpIDogb3B0aW9uc1dpdGhJZDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJldG9ybmEgdW1hIHN0cmluZyByZXByZXNlbnRhbmRvIGEgc2VsZcOnw6NvIGF0dWFsIGRvIGNvbXBvbmVudGUuXG4gICAgICogLSBTZSBvIG1vZG8gbcO6bHRpcGxvIGVzdGl2ZXIgYXRpdmFkbyBlIG1haXMgZGUgdW0gaXRlbSBlc3RpdmVyIHNlbGVjaW9uYWRvLFxuICAgICAqICAgcmV0b3JuYSB1bWEgbWVuc2FnZW0gdHJhZHV6aWRhIGluZGljYW5kbyBvIG7Dum1lcm8gdG90YWwgZGUgcmVnaXN0cm9zIHNlbGVjaW9uYWRvcy5cbiAgICAgKiAtIFNlIGFwZW5hcyB1bSBpdGVtIGVzdGl2ZXIgc2VsZWNpb25hZG8sIHJldG9ybmEgbyByw7N0dWxvIGRlc3NlIGl0ZW0uXG4gICAgICogLSBTZSBvIG1vZG8gbcO6bHRpcGxvIG7Do28gZXN0aXZlciBhdGl2YWRvLCByZXRvcm5hIG8gcsOzdHVsbyBkbyBpdGVtIHNlbGVjaW9uYWRvIG91IHVtYSBzdHJpbmcgdmF6aWEgY2FzbyBuZW5odW0gaXRlbSBlc3RlamEgc2VsZWNpb25hZG8uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGV4dG8gcmVwcmVzZW50YW5kbyBhIHNlbGXDp8OjbyBhdHVhbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJpbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy52YWx1ZXMoKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgcGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZHNfc2VsZWN0ZWRgLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBzZWxlY3RlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRMYWJlbEZyb21PcHRpb24oc2VsZWN0ZWRbMF0uZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZCA/IHRoaXMuX2dldExhYmVsRnJvbU9wdGlvbihzZWxlY3RlZC5kYXRhKSA6ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNlIG8gc2VsZXRvciBlc3TDoSBcImxpbXBvXCIsIG91IHNlamEsIHNlbSBuZW5odW0gdmFsb3Igc2VsZWNpb25hZG8uXG4gICAgICogLSBObyBtb2RvIG3Dumx0aXBsbyAoYG11bHRpcGxlYCksIHJldG9ybmEgYHRydWVgIHNlIG7Do28gaG91dmVyIG5lbmh1bSB2YWxvciBzZWxlY2lvbmFkbyAoYHZhbHVlc2AgZXN0w6EgdmF6aW8pLlxuICAgICAqIC0gTm8gbW9kbyBzaW1wbGVzLCByZXRvcm5hIGB0cnVlYCBzZSBuw6NvIGhvdXZlciB2YWxvciBzZWxlY2lvbmFkbyAoYHZhbHVlYCDDqSBmYWxzeSkuXG4gICAgICogQHJldHVybnMgYHRydWVgIHNlIG7Do28gaG91dmVyIHNlbGXDp8OjbywgYGZhbHNlYCBjYXNvIGNvbnRyw6FyaW8uXG4gICAgICovXG4gICAgcHVibGljIGlzQ2xlYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlKCkgPyAhdGhpcy52YWx1ZXMoKS5sZW5ndGggOiAhdGhpcy52YWx1ZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZWQgcXVlIGluZGljYSBzZSBvIGVzdGFkbyBkZSBzZWxlw6fDo28gXCJTZWxlY2lvbmFyIFRvZG9zXCIgZXN0w6EgaW5kZXRlcm1pbmFkby5cbiAgICAgKiBSZXRvcm5hIGB0cnVlYCBxdWFuZG8gbmVtIHRvZG9zIG9zIGl0ZW5zIGZpbHRyYWRvcyBlc3TDo28gc2VsZWNpb25hZG9zIGUgbmVtIHRvZG9zIGVzdMOjbyBkZXNtYXJjYWRvcyxcbiAgICAgKiBvdSBzZWphLCBxdWFuZG8gaMOhIHVtYSBzZWxlw6fDo28gcGFyY2lhbCBkb3MgaXRlbnMgZGlzcG9uw612ZWlzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgc2UgYSBzZWxlw6fDo28gZm9yIHBhcmNpYWwsIGBmYWxzZWAgY2FzbyBjb250csOhcmlvLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxJc0luZGV0ZXJtaW5hdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pbnRlcm5hbE9wdGlvbnMoKS5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCkuc29tZSgobykgPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmdyb3VwZXIpO1xuICAgICAgICBjb25zdCBhbGwgPSBvcHRpb25zLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5ldmVyeSgob3B0aW9uKSA9PiBzZWxlY3RlZC5pbmNsdWRlcyhvcHRpb24pKTtcbiAgICAgICAgY29uc3Qgbm9uZSA9IG9wdGlvbnMuZXZlcnkoKG9wdGlvbikgPT4gIXNlbGVjdGVkLmluY2x1ZGVzKG9wdGlvbikpO1xuXG4gICAgICAgIHJldHVybiAhYWxsICYmICFub25lO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSB1bWEgbGlzdGEgZGUgb3DDp8O1ZXMgZmlsdHJhZGFzIGNvbSBiYXNlIG5vIHZhbG9yIGRlIGJ1c2NhIChgZmlsdGVyVmFsdWVgKSBlIG5vcyBjcml0w6lyaW9zIGRlZmluaWRvcy5cbiAgICAgKiAtIFNlIG8gZmlsdHJvIGVzdGl2ZXIgZGVzYWJpbGl0YWRvIG91IG8gdmFsb3IgZGUgYnVzY2EgZXN0aXZlciB2YXppbywgcmV0b3JuYSB0b2RhcyBhcyBvcMOnw7Vlcy5cbiAgICAgKiAtIENhc28gY29udHLDoXJpbywgZmlsdHJhIGFzIG9ww6fDtWVzIHV0aWxpemFuZG8gbyhzKSBjYW1wbyhzKSBlc3BlY2lmaWNhZG8ocykgZW0gYGZpbHRlckJ5YC5cbiAgICAgKiAtIElnbm9yYSBvcMOnw7VlcyBxdWUgcG9zc3VlbSBhIHByb3ByaWVkYWRlIGBncm91cGVyYCBkZWZpbmlkYS5cbiAgICAgKiBAcmV0dXJucyBBcyBvcMOnw7VlcyBmaWx0cmFkYXMgY29uZm9ybWUgbyB2YWxvciBkZSBidXNjYSBlIGNyaXTDqXJpb3MgZGUgZmlsdHJvLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSB0aGlzLmludGVybmFsT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmZpbHRlclZhbHVlKCkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcigpIHx8ICFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxPcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyQnkgPSB0aGlzLmZpbHRlckJ5KCk7XG4gICAgICAgIHJldHVybiBhbGxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmdyb3VwZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IHRoaXMub3B0aW9uTGFiZWwoKTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgIGxhYmVsID0gb3B0aW9uTGFiZWwgPyBTdHJpbmcob3B0aW9uLmRhdGFbb3B0aW9uTGFiZWxdKSA6IFN0cmluZyhvcHRpb24uZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyQnkpKSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBmaWx0ZXJCeS5tYXAoKGJ5KSA9PiBTdHJpbmcob3B0aW9uLmRhdGFbYnldID8/ICcnKSkuam9pbignICcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IFN0cmluZyhvcHRpb24uZGF0YVtmaWx0ZXJCeV0gPz8gJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cDx7IGZpbHRlcjogRm9ybUNvbnRyb2w8c3RyaW5nPiB9Pih7XG4gICAgICAgIGZpbHRlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksXG4gICAgfSk7XG5cbiAgICBwcml2YXRlIF9jb250YWluZXJEaXYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjb250YWluZXJEaXYnKTtcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBhbnkgfCBhbnlbXSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtXG4gICAgICAgICAgICAuZ2V0KCdmaWx0ZXInKSFcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVJbnB1dHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgbyB2YWxvciBzZWxlY2lvbmFkbyBkbyBjb21wb25lbnRlIHNlbGVjdC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgTyB2YWxvciBhIHNlciBkZWZpbmlkby4gUG9kZSBzZXIgdW0gb2JqZXRvIGRvIHRpcG8gYFRgLCB1bSBhcnJheSBkZSBgVGAgKHF1YW5kbyBtw7psdGlwbGEgc2VsZcOnw6NvIGVzdMOhIGhhYmlsaXRhZGEpLCBvdSBgbnVsbGAuXG4gICAgICogQHRocm93cyBTZSBvIG1vZG8gbcO6bHRpcGxvIGVzdGl2ZXIgYXRpdmFkbyBlIG8gdmFsb3IgbsOjbyBmb3IgdW0gYXJyYXksIGxhbsOnYSB1bSBlcnJvLlxuICAgICAqIEB0aHJvd3MgU2UgbyBtb2RvIG3Dumx0aXBsbyBlc3RpdmVyIGRlc2F0aXZhZG8gZSBvIHZhbG9yIGZvciB1bSBhcnJheSwgbGFuw6dhIHVtIGVycm8uXG4gICAgICogRXN0ZSBtw6l0b2RvIG1hcGVpYSBvKHMpIHZhbG9yKGVzKSBmb3JuZWNpZG8ocykgcGFyYSBhcyBvcMOnw7VlcyBpbnRlcm5hcyBkbyBjb21wb25lbnRlLFxuICAgICAqIGdhcmFudGluZG8gcXVlIGFwZW5hcyBvcMOnw7VlcyB2w6FsaWRhcyBzZWphbSBzZWxlY2lvbmFkYXMgY29uZm9ybWUgbyBtb2RvIGRlIHNlbGXDp8OjbyAow7puaWNvIG91IG3Dumx0aXBsbykuXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFQgfCBUW10gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxPcHRpb25zKCkuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kYXRhKSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pOiBvcHRpb24gaXMgSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPiA9PiAhIW9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQobWFwcGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIGFuIGFycmF5IHdoZW4gXCJtdWx0aXBsZVwiIGlzIHRydWUuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMub3B0aW9uVmFsdWUoKTtcbiAgICAgICAgICAgIGxldCBtYXBwZWQ6IEludGVybmFsRHJvcGRvd25PcHRpb248VD4gfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IG5vdCBiZSBhbiBhcnJheSB3aGVuIFwibXVsdGlwbGVcIiBpcyBmYWxzZS4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvblZhbHVlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbWFwcGVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbE9wdGlvbnMoKS5maW5kKChvcHRpb24pID0+IG9wdGlvbi5kYXRhW29wdGlvblZhbHVlXSA9PT0gdmFsdWVbb3B0aW9uVmFsdWVdKSA/PyBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXBwZWQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsT3B0aW9ucygpLmZpbmQoKG9wdGlvbikgPT4gSlNPTi5zdHJpbmdpZnkob3B0aW9uLmRhdGEpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpID8/XG4gICAgICAgICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KG1hcHBlZCA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdHJhIHVtYSBmdW7Dp8OjbyBkZSBjYWxsYmFjayBxdWUgc2Vyw6EgY2hhbWFkYSBzZW1wcmUgcXVlIG8gdmFsb3IgZG8gY29tcG9uZW50ZSBtdWRhci5cbiAgICAgKiBAcGFyYW0gb25DaGFuZ2UgRnVuw6fDo28gZGUgY2FsbGJhY2sgcXVlIHJlY2ViZSBvIG5vdm8gdmFsb3Igc2VsZWNpb25hZG8gb3UgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBUIHwgVFtdIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdHJhIHVtYSBmdW7Dp8OjbyBkZSBjYWxsYmFjayBxdWUgc2Vyw6EgY2hhbWFkYSBxdWFuZG8gbyBjb21wb25lbnRlIGZvciB0b2NhZG8gKHBlcmRlciBvIGZvY28pLlxuICAgICAqIEBwYXJhbSBvblRvdWNoZWQgRnVuw6fDo28gZGUgY2FsbGJhY2sgYSBzZXIgZXhlY3V0YWRhIHF1YW5kbyBvIGNvbXBvbmVudGUgZm9yIG1hcmNhZG8gY29tbyBcInRvY2Fkb1wiLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSBvIGVzdGFkbyBkZSBkZXNhYmlsaXRhZG8gZG8gY29tcG9uZW50ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWQgSW5kaWNhIHNlIG8gY29tcG9uZW50ZSBkZXZlIHNlciBkZXNhYmlsaXRhZG8gKGB0cnVlYCkgb3UgaGFiaWxpdGFkbyAoYGZhbHNlYCkuXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsdGVybmEgYSBleGliacOnw6NvIGRhcyBvcMOnw7VlcyBkbyBjb21wb25lbnRlIHNlbGVjdC5cbiAgICAgKiBTZSBvIGNvbXBvbmVudGUgZXN0aXZlciBkZXNhYmlsaXRhZG8sIG7Do28gcmVhbGl6YSBuZW5odW1hIGHDp8Ojby5cbiAgICAgKiBDYXNvIGNvbnRyw6FyaW8sIGludmVydGUgbyBlc3RhZG8gZGUgZXhpYmnDp8OjbyBkYXMgb3DDp8O1ZXMuXG4gICAgICogQW8gYWJyaXIsIG1vdmUgbyBmb2NvIHBhcmEgbyBpdGVtIGF0dWFsbWVudGUgc2VsZWNpb25hZG8uXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkT3BlbiA9ICF0aGlzLnNob3dPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuc2hvd09wdGlvbnMuc2V0KHNob3VsZE9wZW4pO1xuXG4gICAgICAgIGlmIChzaG91bGRPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1NlbGVjdGVkT3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY2lvbmEgdW0gaXRlbSBubyBjb21wb25lbnRlIGRlIHNlbGXDp8Ojby5cbiAgICAgKiBAcGFyYW0gaXRlbSBPIGl0ZW0gYSBzZXIgc2VsZWNpb25hZG8gb3UgZGVzbWFyY2Fkby5cbiAgICAgKiBTZSBvIGNvbXBvbmVudGUgZXN0aXZlciBkZXNhYmlsaXRhZG8sIGEgZnVuw6fDo28gcmV0b3JuYSBpbWVkaWF0YW1lbnRlLlxuICAgICAqIE5vIG1vZG8gbcO6bHRpcGxvLCBhZGljaW9uYSBvdSByZW1vdmUgbyBpdGVtIGRhIGxpc3RhIGRlIHZhbG9yZXMgc2VsZWNpb25hZG9zLlxuICAgICAqIE5vIG1vZG8gc2ltcGxlcywgZGVmaW5lIG8gaXRlbSBjb21vIHZhbG9yIHNlbGVjaW9uYWRvIGUgZmVjaGEgbyBkcm9wZG93bi5cbiAgICAgKiBTZW1wcmUgbm90aWZpY2EgYXMgbXVkYW7Dp2FzIGUgbWFyY2EgbyBjb21wb25lbnRlIGNvbW8gdG9jYWRvLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW06IEludGVybmFsRHJvcGRvd25PcHRpb248VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLm9wdGlvblZhbHVlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBbLi4udGhpcy52YWx1ZXMoKV07XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHN0b3JlLmZpbmRJbmRleCgoc2VsZWN0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbSA9PT0gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RvcmUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KHN0b3JlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvblZhbHVlID8gc3RvcmUubWFwKChpdGVtKSA9PiBpdGVtLmRhdGFbb3B0aW9uVmFsdWVdKSA6IHN0b3JlO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uVmFsdWUgPyBpdGVtLmRhdGFbb3B0aW9uVmFsdWVdIDogaXRlbS5kYXRhO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpbXBhIG8gdmFsb3Igc2VsZWNpb25hZG8gbm8gY29tcG9uZW50ZSBzZWxlY3QuXG4gICAgICogU2UgbyBjb21wb25lbnRlIGVzdGl2ZXIgZGVzYWJpbGl0YWRvLCBuw6NvIGV4ZWN1dGEgbmVuaHVtYSBhw6fDo28uXG4gICAgICogUGFyYSBzZWxlw6fDo28gbcO6bHRpcGxhLCByZW1vdmUgdG9kb3Mgb3MgdmFsb3JlcyBzZWxlY2lvbmFkb3MgZSBub3RpZmljYSBhIGFsdGVyYcOnw6NvLlxuICAgICAqIFBhcmEgc2VsZcOnw6NvIMO6bmljYSwgZGVmaW5lIG8gdmFsb3IgY29tbyBudWxvIGUgbm90aWZpY2EgYSBhbHRlcmHDp8Ojby5cbiAgICAgKiBGZWNoYSBvIGRyb3Bkb3duIGUgbWFyY2EgbyBjb21wb25lbnRlIGNvbW8gXCJ0b2NhZG9cIi5cbiAgICAgKiBJbXBlZGUgYSBwcm9wYWdhw6fDo28gZG8gZXZlbnRvIGRvIG1vdXNlLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZG8gbW91c2UgcXVlIGFjaW9ub3UgYSBsaW1wZXphIGRhIHNlbGXDp8Ojby5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KFtdKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMudmFsdWVzKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaW1wYSBvIGZpbHRybyBkbyBmb3JtdWzDoXJpbywgcmVzZXRhbmRvIG8gY2FtcG8gJ2ZpbHRlcicgZG8gZm9ybXVsw6FyaW8gZGUgZmlsdHJvLlxuICAgICAqIEVzdGUgbcOpdG9kbyByZWRlZmluZSBvIHZhbG9yIGRvIGNhbXBvICdmaWx0ZXInIHBhcmEgc2V1IGVzdGFkbyBpbmljaWFsLFxuICAgICAqIHJlbW92ZW5kbyBxdWFscXVlciB0ZXh0byBvdSB2YWxvciBwcmV2aWFtZW50ZSBpbnNlcmlkbyBwZWxvIHVzdcOhcmlvLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFuaXB1bGEgbyBldmVudG8gZGUgcmVkaW1lbnNpb25hbWVudG8gZGEgamFuZWxhLlxuICAgICAqIEZlY2hhIG8gZHJvcGRvd24gZGUgb3DDp8O1ZXMgY2FzbyBlbGUgZXN0ZWphIHZpc8OtdmVsIGFvIHJlZGltZW5zaW9uYXIgYSBqYW5lbGEuXG4gICAgICogQHBhcmFtIF8gRXZlbnRvIGRlIHJlZGltZW5zaW9uYW1lbnRvIGRhIGphbmVsYSAobsOjbyB1dGlsaXphZG8pLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZShfOiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zaG93T3B0aW9ucygpKSB7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSBjbGlxdWUgbm8gZWxlbWVudG8gY29udGFpbmVyIGRhIHNlbGXDp8Ojby5cbiAgICAgKiBFc3RlIG3DqXRvZG8gYWx0ZXJuYSBvIGVzdGFkbyBkZSBleGliacOnw6NvIGRvIGNvbXBvbmVudGUgc2VsZWN0IGUsXG4gICAgICogZW0gc2VndWlkYSwgZGVmaW5lIG8gZm9jbyBubyBlbGVtZW50byBjb250YWluZXIgY29ycmVzcG9uZGVudGUuXG4gICAgICovXG4gICAgcHVibGljIG9uQ29udGFpbmVyRGl2Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lckRpdigpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFuaXB1bGEgZXZlbnRvcyBkZSB0ZWNsYWRvIHBhcmEgbmF2ZWdhw6fDo28gZSBzZWxlw6fDo28gZGUgb3DDp8O1ZXMgbm8gY29tcG9uZW50ZSBzZWxlY3QuXG4gICAgICogLSAnQXJyb3dEb3duJzogTW92ZSBvIGZvY28gcGFyYSBhIHByw7N4aW1hIG9ww6fDo28gZGlzcG9uw612ZWwuXG4gICAgICogLSAnQXJyb3dVcCc6IE1vdmUgbyBmb2NvIHBhcmEgYSBvcMOnw6NvIGFudGVyaW9yLlxuICAgICAqIC0gJ1RhYic6IFNlbGVjaW9uYSBhIG9ww6fDo28gYXR1YWxtZW50ZSBmb2NhZGEgZSBmZWNoYSBvIGRyb3Bkb3duLlxuICAgICAqIC0gJ0VudGVyJzogU2VsZWNpb25hIGEgb3DDp8OjbyBmb2NhZGEgc2UgbyBkcm9wZG93biBlc3RpdmVyIGFiZXJ0bywgb3UgYWx0ZXJuYSBhIGFiZXJ0dXJhIGRvIGRyb3Bkb3duLlxuICAgICAqIC0gJ0VzY2FwZSc6IEZlY2hhIG8gZHJvcGRvd24uXG4gICAgICogLSAnICc6IChiYXJyYSBkZSBlc3Bhw6dvKSBTZWxlY2lvbmEgYSBvcMOnw6NvIGZvY2FkYSBzZSBvIGRyb3Bkb3duIGVzdGl2ZXIgYWJlcnRvLCBvdSBhbHRlcm5hIGEgYWJlcnR1cmEgZG8gZHJvcGRvd24uXG4gICAgICogUHJldmluZSBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkbyBuYXZlZ2Fkb3IgcXVhbmRvIG5lY2Vzc8OhcmlvIHBhcmEgZ2FyYW50aXIgYSBuYXZlZ2HDp8OjbyBhZGVxdWFkYSBwZWxvIHRlY2xhZG8uXG4gICAgICogQHBhcmFtIGV2ZW50IE8gZXZlbnRvIGRlIHRlY2xhZG8gZGlzcGFyYWRvIHBlbG8gdXN1w6FyaW8uXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBfc2VsZWN0T3B0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEluZGV4KCkgPj0gMCAmJiB0aGlzLmZvY3VzZWRJbmRleCgpIDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShvcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4KCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzTmV4dE9wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNQcmV2aW91c09wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgX3NlbGVjdE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93T3B0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zZWxlY3RPcHRpb24oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93T3B0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zZWxlY3RPcHRpb24oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldG9ybmEgbyByw7N0dWxvIChsYWJlbCkgYXNzb2NpYWRvIGEgdW1hIG9ww6fDo28gZm9ybmVjaWRhLlxuICAgICAqIEBwYXJhbSBvcHRpb24gLSBBIG9ww6fDo28gZG8gdGlwbyBUIHBhcmEgYSBxdWFsIG8gcsOzdHVsbyBkZXZlIHNlciBvYnRpZG8uXG4gICAgICogQHJldHVybnMgTyByw7N0dWxvIGRhIG9ww6fDo28gY29tbyB1bWEgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPcHRpb25MYWJlbChvcHRpb246IFQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TGFiZWxGcm9tT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuw6fDo28gZGUgdHJhY2tCeSB1dGlsaXphZGEgZW0gZGlyZXRpdmFzICpuZ0ZvciBwYXJhIG90aW1pemFyIGEgcmVuZGVyaXphw6fDo28gZGUgbGlzdGFzLlxuICAgICAqIFJldG9ybmEgbyBpZGVudGlmaWNhZG9yIMO6bmljbyAoYGlkYCkgZGUgY2FkYSBpdGVtIGRvIHRpcG8gYEludGVybmFsRHJvcGRvd25PcHRpb248VD5gLlxuICAgICAqIEBwYXJhbSBfIC0gw41uZGljZSBkbyBpdGVtIG5hIGxpc3RhIChuw6NvIHV0aWxpemFkbykuXG4gICAgICogQHBhcmFtIGl0ZW0gLSBPIGl0ZW0gYXR1YWwgZGEgbGlzdGEgZG8gdGlwbyBgSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPmAuXG4gICAgICogQHJldHVybnMgTyBpZGVudGlmaWNhZG9yIMO6bmljbyBkbyBpdGVtIGNvbW8gdW1hIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWNhIHNlIGEgb3DDp8OjbyBmb3JuZWNpZGEgZXN0w6Egc2VsZWNpb25hZGEuXG4gICAgICogQHBhcmFtIG9wdGlvbiAtIEEgb3DDp8OjbyBpbnRlcm5hIGRvIGRyb3Bkb3duIGEgc2VyIHZlcmlmaWNhZGEuXG4gICAgICogQHJldHVybnMgYHRydWVgIHNlIGEgb3DDp8OjbyBlc3RpdmVyIHNlbGVjaW9uYWRhLCBjYXNvIGNvbnRyw6FyaW8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNPcHRpb25TZWxlY3RlZChvcHRpb246IEludGVybmFsRHJvcGRvd25PcHRpb248VD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudmFsdWVzKCkuZmluZCgobykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvID09PSBvcHRpb247XG4gICAgICAgICAgICB9KSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBhIHNlbGXDp8OjbyBkZSB0b2RvcyBvcyBpdGVucyBkaXNwb27DrXZlaXMuXG4gICAgICogU2UgbyBtb2RvIG3Dumx0aXBsbyBlc3RpdmVyIGF0aXZhZG8sIHNlbGVjaW9uYSB0b2RvcyBvcyBpdGVucyBmaWx0cmFkb3MgcXVlIG7Do28gc8OjbyBhZ3J1cGFkb3Jlc1xuICAgICAqIGNhc28gbmVtIHRvZG9zIGVzdGVqYW0gc2VsZWNpb25hZG9zLCBvdSBsaW1wYSBhIHNlbGXDp8OjbyBjYXNvIHRvZG9zIGrDoSBlc3RlamFtIHNlbGVjaW9uYWRvcy5cbiAgICAgKiBBcMOzcyBhIGFsdGVyYcOnw6NvLCBub3RpZmljYSBhIG11ZGFuw6dhIGRlIHZhbG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5ncm91cGVyKTtcblxuICAgICAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIHLDs3R1bG8gKGxhYmVsKSBkZSB1bWEgb3DDp8OjbyBmb3JuZWNpZGEuXG4gICAgICogRXN0ZSBtw6l0b2RvIHV0aWxpemEgYSBwcm9wcmllZGFkZSBkZWZpbmlkYSBwb3IgYG9wdGlvbkxhYmVsYCBwYXJhIGV4dHJhaXIgbyB2YWxvciBkbyByw7N0dWxvIGRhIG9ww6fDo28uXG4gICAgICogQ2FzbyBgb3B0aW9uTGFiZWxgIG7Do28gZXN0ZWphIGRlZmluaWRvLCByZXRvcm5hIGEgcmVwcmVzZW50YcOnw6NvIGVtIHN0cmluZyBkYSBwcsOzcHJpYSBvcMOnw6NvLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIG9wdGlvbiBBIG9ww6fDo28gZGEgcXVhbCBvIHLDs3R1bG8gc2Vyw6EgZXh0cmHDrWRvLlxuICAgICAqIEByZXR1cm5zIE8gcsOzdHVsbyBkYSBvcMOnw6NvIGNvbW8gdW1hIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRMYWJlbEZyb21PcHRpb24ob3B0aW9uOiBUKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLm9wdGlvbkxhYmVsKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25MYWJlbCA/IFN0cmluZyhvcHRpb25bb3B0aW9uTGFiZWxdKSA6IFN0cmluZyhvcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBhcyBlbnRyYWRhcyBkbyBjb21wb25lbnRlIGRlIHNlbGXDp8Ojby5cbiAgICAgKiBFc3RlIG3DqXRvZG8gdmVyaWZpY2Egc2UgYXMgb3DDp8O1ZXMgZm9ybmVjaWRhcyBzw6NvIHbDoWxpZGFzLiBDYXNvIGFzIG9ww6fDtWVzIHNlamFtIG9iamV0b3MsXG4gICAgICogZ2FyYW50ZSBxdWUgYSBwcm9wcmllZGFkZSBgb3B0aW9uTGFiZWxgIGVzdGVqYSBkZWZpbmlkYSwgbGFuw6dhbmRvIHVtIGVycm8gY2FzbyBjb250csOhcmlvLlxuICAgICAqIFNlIG7Do28gaG91dmVyIG9ww6fDtWVzLCBhIHZhbGlkYcOnw6NvIMOpIGlnbm9yYWRhLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHRocm93cyB7RXJyb3J9IFNlIGFzIG9ww6fDtWVzIGZvcmVtIG9iamV0b3MgZSBgb3B0aW9uTGFiZWxgIG7Do28gZXN0aXZlciBkZWZpbmlkby5cbiAgICAgKi9cbiAgICBwcml2YXRlIF92YWxpZGF0ZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc09iamVjdE9wdGlvbnMgPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKTtcblxuICAgICAgICBpZiAoaGFzT2JqZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbkxhYmVsKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIm9wdGlvbkxhYmVsXCIgaW5wdXQgaXMgcmVxdWlyZWQgd2hlbiBvcHRpb25zIGFyZSBvYmplY3RzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmVjaGEgbyBkcm9wZG93biBkZSBvcMOnw7VlcyBkbyBjb21wb25lbnRlIHNlbGVjdC5cbiAgICAgKiBFc3RlIG3DqXRvZG8gb2N1bHRhIGFzIG9ww6fDtWVzIGRpc3BvbsOtdmVpcyBlIHJlZGVmaW5lIG8gw61uZGljZSBkbyBpdGVtIGZvY2FkbyBwYXJhIC0xLFxuICAgICAqIGluZGljYW5kbyBxdWUgbmVuaHVtIGl0ZW0gZXN0w6EgYXR1YWxtZW50ZSBmb2NhZG8uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dPcHRpb25zLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldCgtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRpY2lvbmEgdW0gaWRlbnRpZmljYWRvciDDum5pY28gYSBjYWRhIG9ww6fDo28gZm9ybmVjaWRhLlxuICAgICAqIFBhcmEgY2FkYSBpdGVtIG5vIGFycmF5IGRlIG9ww6fDtWVzLCBnZXJhIHVtIG9iamV0byBgSW50ZXJuYWxEcm9wZG93bk9wdGlvbmAgY29udGVuZG8gbyBkYWRvIG9yaWdpbmFsXG4gICAgICogZSB1bSBjYW1wbyBgaWRgIMO6bmljbyBiYXNlYWRvIG5vIHRpbWVzdGFtcCBhdHVhbCBlIG5vIMOtbmRpY2UgZG8gaXRlbS4gQ2FzbyBhIG9ww6fDo28gc2VqYSB1bSBncnVwb1xuICAgICAqIChkZXRlY3RhZG8gcGVsYSBwcmVzZW7Dp2EgZGUgdW0gYXJyYXkgYGl0ZW1zYCksIGFkaWNpb25hIHRhbWLDqW0gYSBwcm9wcmllZGFkZSBgZ3JvdXBlcjogdHJ1ZWAuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSBvcMOnw7VlcyBkbyB0aXBvIGBUYCBhIHNlcmVtIHByb2Nlc3NhZGFzLlxuICAgICAqIEByZXR1cm5zIFVtIGFycmF5IGRlIG9iamV0b3MgYEludGVybmFsRHJvcGRvd25PcHRpb248VD5gIGNvbSBpZGVudGlmaWNhZG9yZXMgw7puaWNvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRJZFRvT3B0aW9ucyhvcHRpb25zOiBUW10pOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10ge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcCgob3B0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAoKSAmJiBBcnJheS5pc0FycmF5KChvcHRpb24gYXMgYW55KS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgaWRfJHt0aW1lc3RhbXB9XyR7aW5kZXgrK31gLFxuICAgICAgICAgICAgICAgICAgICBncm91cGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTogb3B0aW9uLFxuICAgICAgICAgICAgICAgIGlkOiBgaWRfJHt0aW1lc3RhbXB9XyR7aW5kZXgrK31gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydGUgdW1hIGxpc3RhIGRlIG9ww6fDtWVzIHBvc3NpdmVsbWVudGUgYWdydXBhZGFzIGVtIHVtYSBsaXN0YSBwbGFuYSBkZSBvcMOnw7Vlcy5cbiAgICAgKiBQYXJhIGNhZGEgb3DDp8OjbyBxdWUgcG9zc3VpIHVtIGFncnVwYWRvciAoYGdyb3VwZXJgKSBlIHVtIGFycmF5IGRlIGl0ZW5zIGVtIGBkYXRhLml0ZW1zYCxcbiAgICAgKiBhZGljaW9uYSBhIG9ww6fDo28gZG8gYWdydXBhZG9yIGUsIGVtIHNlZ3VpZGEsIGFkaWNpb25hIGNhZGEgaXRlbSBkbyBncnVwbyBjb21vIHVtYSBub3ZhIG9ww6fDo29cbiAgICAgKiBpbmRpdmlkdWFsLCBhdHJpYnVpbmRvIHVtIGBpZGAgw7puaWNvIHBhcmEgY2FkYSBpdGVtIGRvIGdydXBvLlxuICAgICAqIENhc28gYSBvcMOnw6NvIG7Do28gc2VqYSB1bSBhZ3J1cGFkb3IsIGVsYSDDqSBhZGljaW9uYWRhIGRpcmV0YW1lbnRlIGFvIHJlc3VsdGFkby5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIExpc3RhIGRlIG9ww6fDtWVzIGludGVybmFzIGRvIGRyb3Bkb3duLCBwb2RlbmRvIGNvbnRlciBhZ3J1cGFkb3Jlcy5cbiAgICAgKiBAcmV0dXJucyBMaXN0YSBwbGFuYSBkZSBvcMOnw7VlcywgaW5jbHVpbmRvIGFncnVwYWRvcmVzIGUgc2V1cyBpdGVucyBleHBhbmRpZG9zLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dyb3VwZXJUb0ZsYXQob3B0aW9uczogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPltdKTogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10gPSBbXTtcblxuICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5ncm91cGVyICYmIEFycmF5LmlzQXJyYXkoKG9wdGlvbi5kYXRhIGFzIGFueSkuaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEl0ZW1zID0gKG9wdGlvbi5kYXRhIGFzIGFueSkuaXRlbXMubWFwKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpZDogYCR7b3B0aW9uLmlkfV9pdGVtXyR7aW5kZXh9YCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ3JvdXBJdGVtcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZSBvIGZvY28gcGFyYSBhIHByw7N4aW1hIG9ww6fDo28gZGlzcG9uw612ZWwgbmEgbGlzdGEsIGlnbm9yYW5kbyBvcMOnw7VlcyBxdWUgc2VqYW0gYWdydXBhZG9yZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBMaXN0YSBkZSBvcMOnw7VlcyBpbnRlcm5hcyBkbyBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb2N1c05leHRPcHRpb24ob3B0aW9uczogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPltdKSB7XG4gICAgICAgIGxldCBuZXh0SW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpICsgMTtcblxuICAgICAgICB3aGlsZSAobmV4dEluZGV4IDwgb3B0aW9ucy5sZW5ndGggJiYgb3B0aW9uc1tuZXh0SW5kZXhdLmdyb3VwZXIpIHtcbiAgICAgICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRJbmRleCA8IG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV4dEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvRm9jdXNlZE9wdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZSBvIGZvY28gcGFyYSBhIG9ww6fDo28gYW50ZXJpb3IgbmEgbGlzdGEsIGlnbm9yYW5kbyBvcMOnw7VlcyBkbyB0aXBvIFwiZ3JvdXBlclwiLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgTGlzdGEgZGUgb3DDp8O1ZXMgaW50ZXJuYXMgZG8gZHJvcGRvd24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9jdXNQcmV2aW91c09wdGlvbihvcHRpb25zOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10pIHtcbiAgICAgICAgbGV0IHByZXZJbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4KCkgLSAxO1xuXG4gICAgICAgIHdoaWxlIChwcmV2SW5kZXggPj0gMCAmJiBvcHRpb25zW3ByZXZJbmRleF0uZ3JvdXBlcikge1xuICAgICAgICAgICAgcHJldkluZGV4LS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChwcmV2SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb2xhIGEgbGlzdGEgZGUgb3DDp8O1ZXMgcGFyYSBnYXJhbnRpciBxdWUgYSBvcMOnw6NvIGF0dWFsbWVudGUgZm9jYWRhIGVzdGVqYSB2aXPDrXZlbC5cbiAgICAgKiBFc3RlIG3DqXRvZG8gb2J0w6ltIG8gSUQgZGEgb3DDp8OjbyBhdHVhbG1lbnRlIGZvY2FkYSBhIHBhcnRpciBkYSBsaXN0YSBkZSBvcMOnw7VlcyBmaWx0cmFkYXMuXG4gICAgICogU2UgdW0gSUQgdsOhbGlkbyBmb3IgZW5jb250cmFkbywgYnVzY2EgbyBlbGVtZW50byBjb3JyZXNwb25kZW50ZSBubyBET00gZSB1dGlsaXphXG4gICAgICogYHNjcm9sbEludG9WaWV3YCBwYXJhIHJvbGFyIGF0w6kgYSBvcMOnw6NvLCBhbGluaGFuZG8tYSBhbyBibG9jbyBtYWlzIHByw7N4aW1vLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV0/LmlkO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBlbD8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSBvIGZvY28gbm8gaXRlbSBhdHVhbG1lbnRlIHNlbGVjaW9uYWRvIGFvIGFicmlyIG8gZHJvcGRvd24uXG4gICAgICogTm8gbW9kbyBzaW1wbGVzLCBmb2NhIG8gaXRlbSBzZWxlY2lvbmFkby4gTm8gbW9kbyBtw7psdGlwbG8sIGZvY2EgbyBwcmltZWlybyBpdGVtIHNlbGVjaW9uYWRvLlxuICAgICAqIEFww7NzIHJlbmRlcml6YcOnw6NvIGRvIG92ZXJsYXksIHJvbGEgYSBsaXN0YSBhdMOpIG8gaXRlbSBmb2NhZG8uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb2N1c1NlbGVjdGVkT3B0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkSW5kZXggPSAtMTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gdGhpcy52YWx1ZXMoKVswXTtcbiAgICAgICAgICAgIGlmIChmaXJzdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KChvKSA9PiBvLmlkID09PSBmaXJzdFNlbGVjdGVkLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KChvKSA9PiBvLmlkID09PSBzZWxlY3RlZC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoc2VsZWN0ZWRJbmRleCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2NvbnRhaW5lckRpdlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lciBncm91cCBmbGV4IGgtWzM1cHhdIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bM3B4XSBib3JkZXIgb3V0bGluZS0xIG91dGxpbmUtcHJpbWFyeSBmb2N1czpvdXRsaW5lXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIGJvcmRlci1ncmF5c2NhbGUtMjAgYmctZ3JheXNjYWxlLTUnOiBkaXNhYmxlZCgpLFxuICAgICAgICAncG9pbnRlci1ldmVudHMtYXV0byBib3JkZXItZ3JheXNjYWxlLTMwIGJnLWdyYXlzY2FsZS0wJzogIWRpc2FibGVkKCksXG4gICAgfVwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInNob3dPcHRpb25zKClcIlxuICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ2xpc3Rib3gnXCJcbiAgICBbYXR0ci5hcmlhLW93bnNdPVwiJ2Ryb3Bkb3duLWNvbnRhaW5lci0nICsgY29tcG9uZW50SWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21wb25lbnRJZCArICctbGFiZWwnXCJcbiAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgIChjbGljayk9XCJvbkNvbnRhaW5lckRpdkNsaWNrKClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuPlxuICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWdyb3cgc2VsZWN0LW5vbmUgcHgtMyBweS1bN3B4XVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICd0ZXh0LWdyYXlzY2FsZS05MCc6ICFkaXNhYmxlZCgpICYmICFpc0NsZWFuKCksXG4gICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtNjAnOiAhZGlzYWJsZWQoKSAmJiBpc0NsZWFuKCksXG4gICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtMzAnOiBkaXNhYmxlZCgpLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIHt7IHByaW50KCkgfHwgcGxhY2Vob2xkZXIoKSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIEBpZiAoIWRpc2FibGVkKCkgJiYgc2hvd0NsZWFyKCkgJiYgIWlzQ2xlYW4oKSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm14LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmbGV4IGl0ZW1zLWNlbnRlclwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lciBmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItbCBweC0zIGdyb3VwLWhvdmVyOmJnLWdyYXlzY2FsZS0xMCBncm91cC1mb2N1czpib3JkZXItcHJpbWFyeVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2JvcmRlci1ncmF5c2NhbGUtMjAnOiBkaXNhYmxlZCgpLCAnYm9yZGVyLWdyYXlzY2FsZS0zMCc6ICFkaXNhYmxlZCgpIH1cIlxuICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtMzAnOiBkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICd0ZXh0LWdyYXlzY2FsZS05MCc6ICFkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICdmYS1jYXJldC1kb3duJzogIXNob3dPcHRpb25zKCksXG4gICAgICAgICAgICAgICAgJ2ZhLWNhcmV0LXVwJzogc2hvd09wdGlvbnMoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+PC9pPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNkcm9wZG93blRlbXBsYXRlXG4gICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzaG93T3B0aW9ucygpXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cInRydWVcIlxuICAgIChiYWNrZHJvcENsaWNrKT1cInNob3dPcHRpb25zLnNldChmYWxzZSlcIlxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuICAgIChkZXRhY2gpPVwic2hvd09wdGlvbnMuc2V0KGZhbHNlKVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBbaWRdPVwiJ2Ryb3Bkb3duLWNvbnRhaW5lci0nICsgY29tcG9uZW50SWRcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWJvZHktY2xhc3Mgei1bMTAwMF0gcm91bmRlZC1bM3B4XSBiZy1ncmF5c2NhbGUtMCBweS0xIHNoYWRvdy1tZFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyRGl2Lm9mZnNldFdpZHRoXCJcbiAgICA+XG4gICAgICAgIEBpZiAoZmlsdGVyKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcHgtMyBweS0xLjVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKG11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RBbGxJc0luZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3MtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC1bMzVweF0gZ3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGdyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZ3JvdyByb3VuZGVkLVszcHhdIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTMwIHBsLTIuNSBwci03IG91dGxpbmUtMSBvdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2ggYWJzb2x1dGUgcmlnaHQtMi41IHRvcC0yLjUgdGV4dC1ncmF5c2NhbGUtOTBcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmbGV4IGl0ZW1zLWNlbnRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBWaXJ0dWFsIHNjcm9sbCAtLT5cbiAgICAgICAgQGlmICh2aXJ0dWFsU2Nyb2xsKCkgJiYgZmlsdGVyZWRPcHRpb25zKCkubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC01MiBvdmVyZmxvdy1hdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tCeUlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzLXNlbGVjdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJvcHRpb24uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldE9wdGlvbkxhYmVsKG9wdGlvbi5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2ttYXJrXT1cImNoZWNrbWFyaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0SXRlbShvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0dyb3VwZXJdPVwib3B0aW9uLmdyb3VwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzRm9jdXNlZF09XCJvcHRpb24uZGF0YSA9PT0gZm9jdXNlZEl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3Mtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBOb3JtYWwgbGlzdCAtLT5cbiAgICAgICAgQGlmICghdmlydHVhbFNjcm9sbCgpIHx8IGZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA8PSAxMCkge1xuICAgICAgICAgICAgPHVsIGNsYXNzPVwibWF4LWgtNTIgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzLXNlbGVjdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJvcHRpb24uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldE9wdGlvbkxhYmVsKG9wdGlvbi5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2ttYXJrXT1cImNoZWNrbWFyaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0SXRlbShvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0dyb3VwZXJdPVwib3B0aW9uLmdyb3VwZXIgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzRm9jdXNlZF09XCJvcHRpb24uZGF0YSA9PT0gZm9jdXNlZEl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3Mtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS0zIHRleHQtZ3JheXNjYWxlLTYwXCI+e3tcbiAgICAgICAgICAgICAgICBlbXB0eU1lc3NhZ2UoKSA/PyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLm5vX3JlY29yZHNfZm91bmQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRILE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7QUFPM0Y7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQTRDSCxNQUFNLE9BQU8sZUFBZTtJQUNoQixNQUFNLENB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USxlQUFlOzRGQUFmLGVBQWUsa2tGQVJiO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSix5SkN6RkwsazFMQXFKQSw4SkRoR1EsWUFBWSw0SEFDWixtQkFBbUIsNDhCQUNuQixlQUFlLDRqQkFDZixxQkFBcUIsaU1BQ3JCLGlCQUFpQiwrSkFDakIsZUFBZSwyRkFDZixhQUFhOzs0RkFnQ1IsZUFBZTtrQkEzQzNCLFNBQVM7K0JBQ0ksVUFBVSxjQUVSLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixhQUFhO3FCQUNoQixRQUNLO3dCQUNGLGlCQUFpQixFQUFFLHdCQUF3Qjt3QkFDM0Msc0JBQXNCLEVBQUUsZUFBZTt3QkFDdkMsc0JBQXNCLEVBQUUsV0FBVzt3QkFDbkMsa0JBQWtCLEVBQUUsaURBQWlEO3dCQUNyRSw4QkFBOEIsRUFBRSxvRUFBb0U7d0JBQ3BHLG1CQUFtQixFQUFFLGtDQUFrQzt3QkFDdkQsc0JBQXNCLEVBQUUsWUFBWTt3QkFDcEMsSUFBSSxFQUFFLFVBQVU7cUJBQ25CLGFBYVU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgT25Jbml0LFxuICAgIHNpZ25hbCxcbiAgICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VsZWN0LW9wdGlvbi9zZWxlY3Qtb3B0aW9uLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+IHtcbiAgICBkYXRhOiBUO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZ3JvdXBlcj86IGJvb2xlYW47XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHNlbGXDp8OjbyBkcm9wZG93biBnZW7DqXJpY28gY29tIHN1cG9ydGUgYSBzZWxlw6fDo28gc2ltcGxlcyBlIG3Dumx0aXBsYSxcbiAqIGZpbHRybywgYWdydXBhbWVudG8sIHZpcnR1YWwgc2Nyb2xsIGUgYWNlc3NpYmlsaWRhZGUgKEFSSUEgY29tYm9ib3gpLiBJbXBsZW1lbnRhXG4gKiB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgaW50ZWdyYcOnw6NvIGNvbSBSZWFjdGl2ZSBGb3JtcyBlIFRlbXBsYXRlLWRyaXZlbiBGb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtc2VsZWN0XG4gKiAgIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3JpYVwiXG4gKiAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIHVtYSBjYXRlZ29yaWFcIlxuICogICBbb3B0aW9uc109XCJjYXRlZ29yaWFzXCJcbiAqICAgb3B0aW9uTGFiZWw9XCJub21lXCJcbiAqICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gKiAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gKiAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBPdmVybGF5TW9kdWxlLFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKHdpbmRvdzpyZXNpemUpJzogJ29uV2luZG93UmVzaXplKCRldmVudCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnc2hvd09wdGlvbnMoKScsXG4gICAgICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdcImxpc3Rib3hcIicsXG4gICAgICAgICdbYXR0ci5hcmlhLW93bnNdJzogJ3Nob3dPcHRpb25zKCkgPyBjb21wb25lbnRJZCArIFwiLWxpc3Rib3hcIiA6IG51bGwnLFxuICAgICAgICAnW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSc6ICdmb2N1c2VkSW5kZXgoKSA+PSAwID8gZmlsdGVyZWRPcHRpb25zKClbZm9jdXNlZEluZGV4KCldPy5pZCA6IG51bGwnLFxuICAgICAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAncGxhY2Vob2xkZXIoKSB8fCBcIlNlbGVjdCBvcHRpb25cIicsXG4gICAgICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICB9LFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICA6aG9zdC5uZy1kaXJ0eS5uZy1pbnZhbGlkIHtcbiAgICAgICAgICAgICAgICAuZHJvcGRvd24tY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIC5zZWxlY3QtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYzEzMDE4O1xuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxuXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuICAgIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFRleHRvIGV4aWJpZG8gcXVhbmRvIG5lbmh1bWEgb3DDp8OjbyBlc3TDoSBzZWxlY2lvbmFkYS4gQGRlZmF1bHQgJycgKi9cbiAgICBwdWJsaWMgcGxhY2Vob2xkZXIgPSBpbnB1dCgnJyk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIGEgc2VsZcOnw6NvIGRlIG3Dumx0aXBsYXMgb3DDp8O1ZXMgc2ltdWx0w6JuZWFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBtdWx0aXBsZSA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgb3DDp8O1ZXMgZGlzcG9uw612ZWlzIHBhcmEgc2VsZcOnw6NvLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXG4gICAgcHVibGljIG9wdGlvbnMgPSBpbnB1dC5yZXF1aXJlZDxUW10+KCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIENoYXZlIGRvIG9iamV0byBkZSBvcMOnw6NvIHVzYWRhIGNvbW8gbGFiZWwgZGUgZXhpYmnDp8Ojby4gKi9cbiAgICBwdWJsaWMgb3B0aW9uTGFiZWwgPSBpbnB1dDxrZXlvZiBUPigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDaGF2ZSBkbyBvYmpldG8gZGUgb3DDp8OjbyB1c2FkYSBjb21vIHZhbG9yIGEgc2VyIGVtaXRpZG8gYW8gZm9ybXVsw6FyaW8uICovXG4gICAgcHVibGljIG9wdGlvblZhbHVlID0gaW5wdXQ8a2V5b2YgVD4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgdW0gYm90w6NvIHBhcmEgbGltcGFyIGEgc2VsZcOnw6NvIGF0dWFsLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBzaG93Q2xlYXIgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIHVtIGNhbXBvIGRlIGZpbHRybyB0ZXh0dWFsIHBhcmEgcGVzcXVpc2EgbmFzIG9ww6fDtWVzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBmaWx0ZXIgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIHVtIMOtY29uZSBkZSBjaGVja21hcmsgYW8gbGFkbyBkYSBvcMOnw6NvIHNlbGVjaW9uYWRhLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBjaGVja21hcmsgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIENoYXZlKHMpIGRvIG9iamV0byB1c2FkYShzKSBwYXJhIGZpbHRyYWdlbSB0ZXh0dWFsLiBRdWFuZG8gbsOjbyBpbmZvcm1hZG8sIHVzYSBgb3B0aW9uTGFiZWxgLiAqL1xuICAgIHB1YmxpYyBmaWx0ZXJCeSA9IGlucHV0PGtleW9mIFQgfCAoa2V5b2YgVClbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgYWdydXBhbWVudG8gZGUgb3DDp8O1ZXMuIEFzIG9ww6fDtWVzIGRldmVtIGNvbnRlciBpdGVucyBmaWxob3MgY29uZm9ybWUgYSBlc3RydXR1cmEgZGUgZ3J1cG8gc3Vwb3J0YWRhLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBncm91cCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgdmlydHVhbGl6YcOnw6NvIGRhIGxpc3RhIHBhcmEgbWVsaG9yIHBlcmZvcm1hbmNlIGNvbSBncmFuZGVzIHZvbHVtZXMgZGUgb3DDp8O1ZXMuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgcHVibGljIHZpcnR1YWxTY3JvbGwgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEFsdHVyYSBmaXhhIGRlIGNhZGEgaXRlbSBkYSBsaXN0YSBlbSBwaXhlbHMsIG5lY2Vzc8OhcmlhIHBhcmEgbyBjw6FsY3VsbyBkbyB2aXJ0dWFsIHNjcm9sbC4gQGRlZmF1bHQgMzcgKi9cbiAgICBwdWJsaWMgdmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaW5wdXQoMzcpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBNZW5zYWdlbSBleGliaWRhIHF1YW5kbyBuZW5odW1hIG9ww6fDo28gY29ycmVzcG9uZGUgYW8gZmlsdHJvIGFwbGljYWRvLiBAZGVmYXVsdCBudWxsICovXG4gICAgcHVibGljIGVtcHR5TWVzc2FnZSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDb250cm9sYSBvIGVzdGFkbyBkZXNhYmlsaXRhZG8gZG8gY29tcG9uZW50ZSB2aWEgdHdvLXdheSBiaW5kaW5nLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIHB1YmxpYyBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgYSB2aXNpYmlsaWRhZGUgZG8gcGFpbmVsIGRlIG9ww6fDtWVzIHZpYSB0d28td2F5IGJpbmRpbmcuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgcHVibGljIHNob3dPcHRpb25zID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgcHVibGljIHZhbHVlID0gc2lnbmFsPEludGVybmFsRHJvcGRvd25PcHRpb248VD4gfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgdmFsdWVzID0gc2lnbmFsPEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXT4oW10pO1xuICAgIHB1YmxpYyBmaWx0ZXJWYWx1ZSA9IHNpZ25hbCgnJyk7XG4gICAgcHVibGljIGZvY3VzZWRJbmRleCA9IHNpZ25hbCgtMSk7XG5cbiAgICBwdWJsaWMgY29tcG9uZW50SWQgPSBgc2VsZWN0JHtTZWxlY3RDb21wb25lbnQubmV4dElkKyt9YDtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHF1ZSBpbmRpY2Egc2UgdG9kYXMgYXMgb3DDp8O1ZXMgZmlsdHJhZGFzIGVzdMOjbyBzZWxlY2lvbmFkYXMuXG4gICAgICogUmV0b3JuYSBgdHJ1ZWAgc2UgdG9kYXMgYXMgb3DDp8O1ZXMgZGlzcG9uw612ZWlzIChleGNsdWluZG8gYWdydXBhZG9yZXMpIGVzdGl2ZXJlbSBwcmVzZW50ZXNcbiAgICAgKiBuYSBsaXN0YSBkZSB2YWxvcmVzIHNlbGVjaW9uYWRvcywgZSBgZmFsc2VgIGNhc28gY29udHLDoXJpby5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIHNlIHRvZGFzIGFzIG9ww6fDtWVzIGZpbHRyYWRhcyBlc3TDo28gc2VsZWNpb25hZGFzLCBgZmFsc2VgIGNhc28gY29udHLDoXJpby5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmdyb3VwZXIpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMudmFsdWVzKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5pZCk7XG5cbiAgICAgICAgY29uc3QgcmV0ID0gb3B0aW9ucy5sZW5ndGggPiAwICYmIG9wdGlvbnMuZXZlcnkoKG9wdGlvbikgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0aW9uLmlkKSk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gaXRlbSBhdHVhbG1lbnRlIGZvY2FkbyBuYSBsaXN0YSBkZSBvcMOnw7VlcyBmaWx0cmFkYXMuXG4gICAgICogQHJldHVybnMgTyBkYWRvIGRvIGl0ZW0gZm9jYWRvIG91IGBudWxsYCBjYXNvIG5lbmh1bSBpdGVtIGVzdGVqYSBmb2NhZG8uXG4gICAgICovXG4gICAgcHVibGljIGZvY3VzZWRJdGVtID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKVtpbmRleF0/LmRhdGEgPz8gbnVsbDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGEgZSByZXRvcm5hIGEgbGlzdGEgaW50ZXJuYSBkZSBvcMOnw7VlcyBkbyBkcm9wZG93bi5cbiAgICAgKiAtIFNlIGFzIG9ww6fDtWVzIGVzdGl2ZXJlbSBhZ3J1cGFkYXMgKGBncm91cCgpYCByZXRvcm5hIHZlcmRhZGVpcm8pLFxuICAgICAqICAgdXRpbGl6YSBgX2dyb3VwZXJUb0ZsYXRgIHBhcmEgdHJhbnNmb3JtYXIgYXMgb3DDp8O1ZXMgYWdydXBhZGFzIGVtIHVtYSBsaXN0YSBwbGFuYS5cbiAgICAgKiAtIENhc28gY29udHLDoXJpbywgcmV0b3JuYSBhcyBvcMOnw7VlcyBjb20gSURzIGFkaWNpb25hZG9zLlxuICAgICAqIEByZXR1cm5zIFVtIGFycmF5IGRlIGBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+YCByZXByZXNlbnRhbmRvIGFzIG9ww6fDtWVzIGRpc3BvbsOtdmVpcyBwYXJhIG8gY29tcG9uZW50ZSBzZWxlY3QuXG4gICAgICovXG4gICAgcHVibGljIGludGVybmFsT3B0aW9ucyA9IGNvbXB1dGVkPEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoSWQgPSB0aGlzLl9hZGRJZFRvT3B0aW9ucyhvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAoKSA/IHRoaXMuX2dyb3VwZXJUb0ZsYXQob3B0aW9uc1dpdGhJZCkgOiBvcHRpb25zV2l0aElkO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIHJlcHJlc2VudGFuZG8gYSBzZWxlw6fDo28gYXR1YWwgZG8gY29tcG9uZW50ZS5cbiAgICAgKiAtIFNlIG8gbW9kbyBtw7psdGlwbG8gZXN0aXZlciBhdGl2YWRvIGUgbWFpcyBkZSB1bSBpdGVtIGVzdGl2ZXIgc2VsZWNpb25hZG8sXG4gICAgICogICByZXRvcm5hIHVtYSBtZW5zYWdlbSB0cmFkdXppZGEgaW5kaWNhbmRvIG8gbsO6bWVybyB0b3RhbCBkZSByZWdpc3Ryb3Mgc2VsZWNpb25hZG9zLlxuICAgICAqIC0gU2UgYXBlbmFzIHVtIGl0ZW0gZXN0aXZlciBzZWxlY2lvbmFkbywgcmV0b3JuYSBvIHLDs3R1bG8gZGVzc2UgaXRlbS5cbiAgICAgKiAtIFNlIG8gbW9kbyBtw7psdGlwbG8gbsOjbyBlc3RpdmVyIGF0aXZhZG8sIHJldG9ybmEgbyByw7N0dWxvIGRvIGl0ZW0gc2VsZWNpb25hZG8gb3UgdW1hIHN0cmluZyB2YXppYSBjYXNvIG5lbmh1bSBpdGVtIGVzdGVqYSBzZWxlY2lvbmFkby5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUZXh0byByZXByZXNlbnRhbmRvIGEgc2VsZcOnw6NvIGF0dWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlcygpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMudG90YWxfcmVjb3Jkc19zZWxlY3RlZGAsIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IHNlbGVjdGVkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhYmVsRnJvbU9wdGlvbihzZWxlY3RlZFswXS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkID8gdGhpcy5fZ2V0TGFiZWxGcm9tT3B0aW9uKHNlbGVjdGVkLmRhdGEpIDogJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2UgbyBzZWxldG9yIGVzdMOhIFwibGltcG9cIiwgb3Ugc2VqYSwgc2VtIG5lbmh1bSB2YWxvciBzZWxlY2lvbmFkby5cbiAgICAgKiAtIE5vIG1vZG8gbcO6bHRpcGxvIChgbXVsdGlwbGVgKSwgcmV0b3JuYSBgdHJ1ZWAgc2UgbsOjbyBob3V2ZXIgbmVuaHVtIHZhbG9yIHNlbGVjaW9uYWRvIChgdmFsdWVzYCBlc3TDoSB2YXppbykuXG4gICAgICogLSBObyBtb2RvIHNpbXBsZXMsIHJldG9ybmEgYHRydWVgIHNlIG7Do28gaG91dmVyIHZhbG9yIHNlbGVjaW9uYWRvIChgdmFsdWVgIMOpIGZhbHN5KS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgc2UgbsOjbyBob3V2ZXIgc2VsZcOnw6NvLCBgZmFsc2VgIGNhc28gY29udHLDoXJpby5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDbGVhbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUoKSA/ICF0aGlzLnZhbHVlcygpLmxlbmd0aCA6ICF0aGlzLnZhbHVlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBxdWUgaW5kaWNhIHNlIG8gZXN0YWRvIGRlIHNlbGXDp8OjbyBcIlNlbGVjaW9uYXIgVG9kb3NcIiBlc3TDoSBpbmRldGVybWluYWRvLlxuICAgICAqIFJldG9ybmEgYHRydWVgIHF1YW5kbyBuZW0gdG9kb3Mgb3MgaXRlbnMgZmlsdHJhZG9zIGVzdMOjbyBzZWxlY2lvbmFkb3MgZSBuZW0gdG9kb3MgZXN0w6NvIGRlc21hcmNhZG9zLFxuICAgICAqIG91IHNlamEsIHF1YW5kbyBow6EgdW1hIHNlbGXDp8OjbyBwYXJjaWFsIGRvcyBpdGVucyBkaXNwb27DrXZlaXMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBzZSBhIHNlbGXDp8OjbyBmb3IgcGFyY2lhbCwgYGZhbHNlYCBjYXNvIGNvbnRyw6FyaW8uXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEFsbElzSW5kZXRlcm1pbmF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmludGVybmFsT3B0aW9ucygpLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKS5zb21lKChvKSA9PiBvLmlkID09PSBvcHRpb24uaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKCkuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZ3JvdXBlcik7XG4gICAgICAgIGNvbnN0IGFsbCA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmV2ZXJ5KChvcHRpb24pID0+IHNlbGVjdGVkLmluY2x1ZGVzKG9wdGlvbikpO1xuICAgICAgICBjb25zdCBub25lID0gb3B0aW9ucy5ldmVyeSgob3B0aW9uKSA9PiAhc2VsZWN0ZWQuaW5jbHVkZXMob3B0aW9uKSk7XG5cbiAgICAgICAgcmV0dXJuICFhbGwgJiYgIW5vbmU7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIHVtYSBsaXN0YSBkZSBvcMOnw7VlcyBmaWx0cmFkYXMgY29tIGJhc2Ugbm8gdmFsb3IgZGUgYnVzY2EgKGBmaWx0ZXJWYWx1ZWApIGUgbm9zIGNyaXTDqXJpb3MgZGVmaW5pZG9zLlxuICAgICAqIC0gU2UgbyBmaWx0cm8gZXN0aXZlciBkZXNhYmlsaXRhZG8gb3UgbyB2YWxvciBkZSBidXNjYSBlc3RpdmVyIHZhemlvLCByZXRvcm5hIHRvZGFzIGFzIG9ww6fDtWVzLlxuICAgICAqIC0gQ2FzbyBjb250csOhcmlvLCBmaWx0cmEgYXMgb3DDp8O1ZXMgdXRpbGl6YW5kbyBvKHMpIGNhbXBvKHMpIGVzcGVjaWZpY2FkbyhzKSBlbSBgZmlsdGVyQnlgLlxuICAgICAqIC0gSWdub3JhIG9ww6fDtWVzIHF1ZSBwb3NzdWVtIGEgcHJvcHJpZWRhZGUgYGdyb3VwZXJgIGRlZmluaWRhLlxuICAgICAqIEByZXR1cm5zIEFzIG9ww6fDtWVzIGZpbHRyYWRhcyBjb25mb3JtZSBvIHZhbG9yIGRlIGJ1c2NhIGUgY3JpdMOpcmlvcyBkZSBmaWx0cm8uXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IHRoaXMuaW50ZXJuYWxPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuZmlsdGVyVmFsdWUoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyKCkgfHwgIXNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuIGFsbE9wdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJCeSA9IHRoaXMuZmlsdGVyQnkoKTtcbiAgICAgICAgcmV0dXJuIGFsbE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb24uZ3JvdXBlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGxhYmVsID0gJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gdGhpcy5vcHRpb25MYWJlbCgpO1xuXG4gICAgICAgICAgICBpZiAoIWZpbHRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBvcHRpb25MYWJlbCA/IFN0cmluZyhvcHRpb24uZGF0YVtvcHRpb25MYWJlbF0pIDogU3RyaW5nKG9wdGlvbi5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJCeSkpIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGZpbHRlckJ5Lm1hcCgoYnkpID0+IFN0cmluZyhvcHRpb24uZGF0YVtieV0gPz8gJycpKS5qb2luKCcgJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxhYmVsID0gU3RyaW5nKG9wdGlvbi5kYXRhW2ZpbHRlckJ5XSA/PyAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwPHsgZmlsdGVyOiBGb3JtQ29udHJvbDxzdHJpbmc+IH0+KHtcbiAgICAgICAgZmlsdGVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSxcbiAgICB9KTtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lckRpdiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NvbnRhaW5lckRpdicpO1xuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSB8IGFueVtdIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm1cbiAgICAgICAgICAgIC5nZXQoJ2ZpbHRlcicpIVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUlucHV0cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSBvIHZhbG9yIHNlbGVjaW9uYWRvIGRvIGNvbXBvbmVudGUgc2VsZWN0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBPIHZhbG9yIGEgc2VyIGRlZmluaWRvLiBQb2RlIHNlciB1bSBvYmpldG8gZG8gdGlwbyBgVGAsIHVtIGFycmF5IGRlIGBUYCAocXVhbmRvIG3Dumx0aXBsYSBzZWxlw6fDo28gZXN0w6EgaGFiaWxpdGFkYSksIG91IGBudWxsYC5cbiAgICAgKiBAdGhyb3dzIFNlIG8gbW9kbyBtw7psdGlwbG8gZXN0aXZlciBhdGl2YWRvIGUgbyB2YWxvciBuw6NvIGZvciB1bSBhcnJheSwgbGFuw6dhIHVtIGVycm8uXG4gICAgICogQHRocm93cyBTZSBvIG1vZG8gbcO6bHRpcGxvIGVzdGl2ZXIgZGVzYXRpdmFkbyBlIG8gdmFsb3IgZm9yIHVtIGFycmF5LCBsYW7Dp2EgdW0gZXJyby5cbiAgICAgKiBFc3RlIG3DqXRvZG8gbWFwZWlhIG8ocykgdmFsb3IoZXMpIGZvcm5lY2lkbyhzKSBwYXJhIGFzIG9ww6fDtWVzIGludGVybmFzIGRvIGNvbXBvbmVudGUsXG4gICAgICogZ2FyYW50aW5kbyBxdWUgYXBlbmFzIG9ww6fDtWVzIHbDoWxpZGFzIHNlamFtIHNlbGVjaW9uYWRhcyBjb25mb3JtZSBvIG1vZG8gZGUgc2VsZcOnw6NvICjDum5pY28gb3UgbcO6bHRpcGxvKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVCB8IFRbXSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMubXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE9wdGlvbnMoKS5maW5kKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9uLmRhdGEpID09PSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbik6IG9wdGlvbiBpcyBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+ID0+ICEhb3B0aW9uKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldChtYXBwZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYW4gYXJyYXkgd2hlbiBcIm11bHRpcGxlXCIgaXMgdHJ1ZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5vcHRpb25WYWx1ZSgpO1xuICAgICAgICAgICAgbGV0IG1hcHBlZDogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3Qgbm90IGJlIGFuIGFycmF5IHdoZW4gXCJtdWx0aXBsZVwiIGlzIGZhbHNlLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9uVmFsdWUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBtYXBwZWQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsT3B0aW9ucygpLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmRhdGFbb3B0aW9uVmFsdWVdID09PSB2YWx1ZVtvcHRpb25WYWx1ZV0pID8/IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hcHBlZCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxPcHRpb25zKCkuZmluZCgob3B0aW9uKSA9PiBKU09OLnN0cmluZ2lmeShvcHRpb24uZGF0YSkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgPz9cbiAgICAgICAgICAgICAgICAgICAgbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXQobWFwcGVkID8/IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0cmEgdW1hIGZ1bsOnw6NvIGRlIGNhbGxiYWNrIHF1ZSBzZXLDoSBjaGFtYWRhIHNlbXByZSBxdWUgbyB2YWxvciBkbyBjb21wb25lbnRlIG11ZGFyLlxuICAgICAqIEBwYXJhbSBvbkNoYW5nZSBGdW7Dp8OjbyBkZSBjYWxsYmFjayBxdWUgcmVjZWJlIG8gbm92byB2YWxvciBzZWxlY2lvbmFkbyBvdSBudWxsLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiAodmFsdWU6IFQgfCBUW10gfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0cmEgdW1hIGZ1bsOnw6NvIGRlIGNhbGxiYWNrIHF1ZSBzZXLDoSBjaGFtYWRhIHF1YW5kbyBvIGNvbXBvbmVudGUgZm9yIHRvY2FkbyAocGVyZGVyIG8gZm9jbykuXG4gICAgICogQHBhcmFtIG9uVG91Y2hlZCBGdW7Dp8OjbyBkZSBjYWxsYmFjayBhIHNlciBleGVjdXRhZGEgcXVhbmRvIG8gY29tcG9uZW50ZSBmb3IgbWFyY2FkbyBjb21vIFwidG9jYWRvXCIuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIG8gZXN0YWRvIGRlIGRlc2FiaWxpdGFkbyBkbyBjb21wb25lbnRlLlxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGRldmUgc2VyIGRlc2FiaWxpdGFkbyAoYHRydWVgKSBvdSBoYWJpbGl0YWRvIChgZmFsc2VgKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBhIGV4aWJpw6fDo28gZGFzIG9ww6fDtWVzIGRvIGNvbXBvbmVudGUgc2VsZWN0LlxuICAgICAqIFNlIG8gY29tcG9uZW50ZSBlc3RpdmVyIGRlc2FiaWxpdGFkbywgbsOjbyByZWFsaXphIG5lbmh1bWEgYcOnw6NvLlxuICAgICAqIENhc28gY29udHLDoXJpbywgaW52ZXJ0ZSBvIGVzdGFkbyBkZSBleGliacOnw6NvIGRhcyBvcMOnw7Vlcy5cbiAgICAgKiBBbyBhYnJpciwgbW92ZSBvIGZvY28gcGFyYSBvIGl0ZW0gYXR1YWxtZW50ZSBzZWxlY2lvbmFkby5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRPcGVuID0gIXRoaXMuc2hvd09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucy5zZXQoc2hvdWxkT3Blbik7XG5cbiAgICAgICAgaWYgKHNob3VsZE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjaW9uYSB1bSBpdGVtIG5vIGNvbXBvbmVudGUgZGUgc2VsZcOnw6NvLlxuICAgICAqIEBwYXJhbSBpdGVtIE8gaXRlbSBhIHNlciBzZWxlY2lvbmFkbyBvdSBkZXNtYXJjYWRvLlxuICAgICAqIFNlIG8gY29tcG9uZW50ZSBlc3RpdmVyIGRlc2FiaWxpdGFkbywgYSBmdW7Dp8OjbyByZXRvcm5hIGltZWRpYXRhbWVudGUuXG4gICAgICogTm8gbW9kbyBtw7psdGlwbG8sIGFkaWNpb25hIG91IHJlbW92ZSBvIGl0ZW0gZGEgbGlzdGEgZGUgdmFsb3JlcyBzZWxlY2lvbmFkb3MuXG4gICAgICogTm8gbW9kbyBzaW1wbGVzLCBkZWZpbmUgbyBpdGVtIGNvbW8gdmFsb3Igc2VsZWNpb25hZG8gZSBmZWNoYSBvIGRyb3Bkb3duLlxuICAgICAqIFNlbXByZSBub3RpZmljYSBhcyBtdWRhbsOnYXMgZSBtYXJjYSBvIGNvbXBvbmVudGUgY29tbyB0b2NhZG8uXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEl0ZW0oaXRlbTogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMub3B0aW9uVmFsdWUoKTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZSA9IFsuLi50aGlzLnZhbHVlcygpXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RvcmUuZmluZEluZGV4KChzZWxlY3RlZEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtID09PSBpdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoc3RvcmUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uVmFsdWUgPyBzdG9yZS5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YVtvcHRpb25WYWx1ZV0pIDogc3RvcmU7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXQoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb25WYWx1ZSA/IGl0ZW0uZGF0YVtvcHRpb25WYWx1ZV0gOiBpdGVtLmRhdGE7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZShyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltcGEgbyB2YWxvciBzZWxlY2lvbmFkbyBubyBjb21wb25lbnRlIHNlbGVjdC5cbiAgICAgKiBTZSBvIGNvbXBvbmVudGUgZXN0aXZlciBkZXNhYmlsaXRhZG8sIG7Do28gZXhlY3V0YSBuZW5odW1hIGHDp8Ojby5cbiAgICAgKiBQYXJhIHNlbGXDp8OjbyBtw7psdGlwbGEsIHJlbW92ZSB0b2RvcyBvcyB2YWxvcmVzIHNlbGVjaW9uYWRvcyBlIG5vdGlmaWNhIGEgYWx0ZXJhw6fDo28uXG4gICAgICogUGFyYSBzZWxlw6fDo28gw7puaWNhLCBkZWZpbmUgbyB2YWxvciBjb21vIG51bG8gZSBub3RpZmljYSBhIGFsdGVyYcOnw6NvLlxuICAgICAqIEZlY2hhIG8gZHJvcGRvd24gZSBtYXJjYSBvIGNvbXBvbmVudGUgY29tbyBcInRvY2Fkb1wiLlxuICAgICAqIEltcGVkZSBhIHByb3BhZ2HDp8OjbyBkbyBldmVudG8gZG8gbW91c2UuXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkbyBtb3VzZSBxdWUgYWNpb25vdSBhIGxpbXBlemEgZGEgc2VsZcOnw6NvLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW10pO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZXMoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG5cbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpbXBhIG8gZmlsdHJvIGRvIGZvcm11bMOhcmlvLCByZXNldGFuZG8gbyBjYW1wbyAnZmlsdGVyJyBkbyBmb3JtdWzDoXJpbyBkZSBmaWx0cm8uXG4gICAgICogRXN0ZSBtw6l0b2RvIHJlZGVmaW5lIG8gdmFsb3IgZG8gY2FtcG8gJ2ZpbHRlcicgcGFyYSBzZXUgZXN0YWRvIGluaWNpYWwsXG4gICAgICogcmVtb3ZlbmRvIHF1YWxxdWVyIHRleHRvIG91IHZhbG9yIHByZXZpYW1lbnRlIGluc2VyaWRvIHBlbG8gdXN1w6FyaW8uXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8ucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSByZWRpbWVuc2lvbmFtZW50byBkYSBqYW5lbGEuXG4gICAgICogRmVjaGEgbyBkcm9wZG93biBkZSBvcMOnw7VlcyBjYXNvIGVsZSBlc3RlamEgdmlzw612ZWwgYW8gcmVkaW1lbnNpb25hciBhIGphbmVsYS5cbiAgICAgKiBAcGFyYW0gXyBFdmVudG8gZGUgcmVkaW1lbnNpb25hbWVudG8gZGEgamFuZWxhIChuw6NvIHV0aWxpemFkbykuXG4gICAgICovXG4gICAgcHVibGljIG9uV2luZG93UmVzaXplKF86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbmlwdWxhIG8gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb250YWluZXIgZGEgc2VsZcOnw6NvLlxuICAgICAqIEVzdGUgbcOpdG9kbyBhbHRlcm5hIG8gZXN0YWRvIGRlIGV4aWJpw6fDo28gZG8gY29tcG9uZW50ZSBzZWxlY3QgZSxcbiAgICAgKiBlbSBzZWd1aWRhLCBkZWZpbmUgbyBmb2NvIG5vIGVsZW1lbnRvIGNvbnRhaW5lciBjb3JyZXNwb25kZW50ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db250YWluZXJEaXZDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyRGl2KCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBldmVudG9zIGRlIHRlY2xhZG8gcGFyYSBuYXZlZ2HDp8OjbyBlIHNlbGXDp8OjbyBkZSBvcMOnw7VlcyBubyBjb21wb25lbnRlIHNlbGVjdC5cbiAgICAgKiAtICdBcnJvd0Rvd24nOiBNb3ZlIG8gZm9jbyBwYXJhIGEgcHLDs3hpbWEgb3DDp8OjbyBkaXNwb27DrXZlbC5cbiAgICAgKiAtICdBcnJvd1VwJzogTW92ZSBvIGZvY28gcGFyYSBhIG9ww6fDo28gYW50ZXJpb3IuXG4gICAgICogLSAnVGFiJzogU2VsZWNpb25hIGEgb3DDp8OjbyBhdHVhbG1lbnRlIGZvY2FkYSBlIGZlY2hhIG8gZHJvcGRvd24uXG4gICAgICogLSAnRW50ZXInOiBTZWxlY2lvbmEgYSBvcMOnw6NvIGZvY2FkYSBzZSBvIGRyb3Bkb3duIGVzdGl2ZXIgYWJlcnRvLCBvdSBhbHRlcm5hIGEgYWJlcnR1cmEgZG8gZHJvcGRvd24uXG4gICAgICogLSAnRXNjYXBlJzogRmVjaGEgbyBkcm9wZG93bi5cbiAgICAgKiAtICcgJzogKGJhcnJhIGRlIGVzcGHDp28pIFNlbGVjaW9uYSBhIG9ww6fDo28gZm9jYWRhIHNlIG8gZHJvcGRvd24gZXN0aXZlciBhYmVydG8sIG91IGFsdGVybmEgYSBhYmVydHVyYSBkbyBkcm9wZG93bi5cbiAgICAgKiBQcmV2aW5lIG8gY29tcG9ydGFtZW50byBwYWRyw6NvIGRvIG5hdmVnYWRvciBxdWFuZG8gbmVjZXNzw6FyaW8gcGFyYSBnYXJhbnRpciBhIG5hdmVnYcOnw6NvIGFkZXF1YWRhIHBlbG8gdGVjbGFkby5cbiAgICAgKiBAcGFyYW0gZXZlbnQgTyBldmVudG8gZGUgdGVjbGFkbyBkaXNwYXJhZG8gcGVsbyB1c3XDoXJpby5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9zZWxlY3RPcHRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkSW5kZXgoKSA+PSAwICYmIHRoaXMuZm9jdXNlZEluZGV4KCkgPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKG9wdGlvbnNbdGhpcy5mb2N1c2VkSW5kZXgoKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1ByZXZpb3VzT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICBfc2VsZWN0T3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3NlbGVjdE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3NlbGVjdE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIHLDs3R1bG8gKGxhYmVsKSBhc3NvY2lhZG8gYSB1bWEgb3DDp8OjbyBmb3JuZWNpZGEuXG4gICAgICogQHBhcmFtIG9wdGlvbiAtIEEgb3DDp8OjbyBkbyB0aXBvIFQgcGFyYSBhIHF1YWwgbyByw7N0dWxvIGRldmUgc2VyIG9idGlkby5cbiAgICAgKiBAcmV0dXJucyBPIHLDs3R1bG8gZGEgb3DDp8OjbyBjb21vIHVtYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogVCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRMYWJlbEZyb21PcHRpb24ob3B0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW7Dp8OjbyBkZSB0cmFja0J5IHV0aWxpemFkYSBlbSBkaXJldGl2YXMgKm5nRm9yIHBhcmEgb3RpbWl6YXIgYSByZW5kZXJpemHDp8OjbyBkZSBsaXN0YXMuXG4gICAgICogUmV0b3JuYSBvIGlkZW50aWZpY2Fkb3Igw7puaWNvIChgaWRgKSBkZSBjYWRhIGl0ZW0gZG8gdGlwbyBgSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPmAuXG4gICAgICogQHBhcmFtIF8gLSDDjW5kaWNlIGRvIGl0ZW0gbmEgbGlzdGEgKG7Do28gdXRpbGl6YWRvKS5cbiAgICAgKiBAcGFyYW0gaXRlbSAtIE8gaXRlbSBhdHVhbCBkYSBsaXN0YSBkbyB0aXBvIGBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+YC5cbiAgICAgKiBAcmV0dXJucyBPIGlkZW50aWZpY2Fkb3Igw7puaWNvIGRvIGl0ZW0gY29tbyB1bWEgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmFja0J5SWQoXzogbnVtYmVyLCBpdGVtOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpY2Egc2UgYSBvcMOnw6NvIGZvcm5lY2lkYSBlc3TDoSBzZWxlY2lvbmFkYS5cbiAgICAgKiBAcGFyYW0gb3B0aW9uIC0gQSBvcMOnw6NvIGludGVybmEgZG8gZHJvcGRvd24gYSBzZXIgdmVyaWZpY2FkYS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgc2UgYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEsIGNhc28gY29udHLDoXJpbyBgZmFsc2VgLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc09wdGlvblNlbGVjdGVkKG9wdGlvbjogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy52YWx1ZXMoKS5maW5kKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG8gPT09IG9wdGlvbjtcbiAgICAgICAgICAgIH0pICE9PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbHRlcm5hIGEgc2VsZcOnw6NvIGRlIHRvZG9zIG9zIGl0ZW5zIGRpc3BvbsOtdmVpcy5cbiAgICAgKiBTZSBvIG1vZG8gbcO6bHRpcGxvIGVzdGl2ZXIgYXRpdmFkbywgc2VsZWNpb25hIHRvZG9zIG9zIGl0ZW5zIGZpbHRyYWRvcyBxdWUgbsOjbyBzw6NvIGFncnVwYWRvcmVzXG4gICAgICogY2FzbyBuZW0gdG9kb3MgZXN0ZWphbSBzZWxlY2lvbmFkb3MsIG91IGxpbXBhIGEgc2VsZcOnw6NvIGNhc28gdG9kb3MgasOhIGVzdGVqYW0gc2VsZWNpb25hZG9zLlxuICAgICAqIEFww7NzIGEgYWx0ZXJhw6fDo28sIG5vdGlmaWNhIGEgbXVkYW7Dp2EgZGUgdmFsb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmdyb3VwZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlcygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gcsOzdHVsbyAobGFiZWwpIGRlIHVtYSBvcMOnw6NvIGZvcm5lY2lkYS5cbiAgICAgKiBFc3RlIG3DqXRvZG8gdXRpbGl6YSBhIHByb3ByaWVkYWRlIGRlZmluaWRhIHBvciBgb3B0aW9uTGFiZWxgIHBhcmEgZXh0cmFpciBvIHZhbG9yIGRvIHLDs3R1bG8gZGEgb3DDp8Ojby5cbiAgICAgKiBDYXNvIGBvcHRpb25MYWJlbGAgbsOjbyBlc3RlamEgZGVmaW5pZG8sIHJldG9ybmEgYSByZXByZXNlbnRhw6fDo28gZW0gc3RyaW5nIGRhIHByw7NwcmlhIG9ww6fDo28uXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9uIEEgb3DDp8OjbyBkYSBxdWFsIG8gcsOzdHVsbyBzZXLDoSBleHRyYcOtZG8uXG4gICAgICogQHJldHVybnMgTyByw7N0dWxvIGRhIG9ww6fDo28gY29tbyB1bWEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldExhYmVsRnJvbU9wdGlvbihvcHRpb246IFQpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IHRoaXMub3B0aW9uTGFiZWwoKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkxhYmVsID8gU3RyaW5nKG9wdGlvbltvcHRpb25MYWJlbF0pIDogU3RyaW5nKG9wdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhIGFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZGUgc2VsZcOnw6NvLlxuICAgICAqIEVzdGUgbcOpdG9kbyB2ZXJpZmljYSBzZSBhcyBvcMOnw7VlcyBmb3JuZWNpZGFzIHPDo28gdsOhbGlkYXMuIENhc28gYXMgb3DDp8O1ZXMgc2VqYW0gb2JqZXRvcyxcbiAgICAgKiBnYXJhbnRlIHF1ZSBhIHByb3ByaWVkYWRlIGBvcHRpb25MYWJlbGAgZXN0ZWphIGRlZmluaWRhLCBsYW7Dp2FuZG8gdW0gZXJybyBjYXNvIGNvbnRyw6FyaW8uXG4gICAgICogU2UgbsOjbyBob3V2ZXIgb3DDp8O1ZXMsIGEgdmFsaWRhw6fDo28gw6kgaWdub3JhZGEuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gU2UgYXMgb3DDp8O1ZXMgZm9yZW0gb2JqZXRvcyBlIGBvcHRpb25MYWJlbGAgbsOjbyBlc3RpdmVyIGRlZmluaWRvLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGFzT2JqZWN0T3B0aW9ucyA9IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNPYmplY3RPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9uTGFiZWwoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwib3B0aW9uTGFiZWxcIiBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIG9wdGlvbnMgYXJlIG9iamVjdHMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZWNoYSBvIGRyb3Bkb3duIGRlIG9ww6fDtWVzIGRvIGNvbXBvbmVudGUgc2VsZWN0LlxuICAgICAqIEVzdGUgbcOpdG9kbyBvY3VsdGEgYXMgb3DDp8O1ZXMgZGlzcG9uw612ZWlzIGUgcmVkZWZpbmUgbyDDrW5kaWNlIGRvIGl0ZW0gZm9jYWRvIHBhcmEgLTEsXG4gICAgICogaW5kaWNhbmRvIHF1ZSBuZW5odW0gaXRlbSBlc3TDoSBhdHVhbG1lbnRlIGZvY2Fkby5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Nsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd09wdGlvbnMuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGljaW9uYSB1bSBpZGVudGlmaWNhZG9yIMO6bmljbyBhIGNhZGEgb3DDp8OjbyBmb3JuZWNpZGEuXG4gICAgICogUGFyYSBjYWRhIGl0ZW0gbm8gYXJyYXkgZGUgb3DDp8O1ZXMsIGdlcmEgdW0gb2JqZXRvIGBJbnRlcm5hbERyb3Bkb3duT3B0aW9uYCBjb250ZW5kbyBvIGRhZG8gb3JpZ2luYWxcbiAgICAgKiBlIHVtIGNhbXBvIGBpZGAgw7puaWNvIGJhc2VhZG8gbm8gdGltZXN0YW1wIGF0dWFsIGUgbm8gw61uZGljZSBkbyBpdGVtLiBDYXNvIGEgb3DDp8OjbyBzZWphIHVtIGdydXBvXG4gICAgICogKGRldGVjdGFkbyBwZWxhIHByZXNlbsOnYSBkZSB1bSBhcnJheSBgaXRlbXNgKSwgYWRpY2lvbmEgdGFtYsOpbSBhIHByb3ByaWVkYWRlIGBncm91cGVyOiB0cnVlYC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIG9ww6fDtWVzIGRvIHRpcG8gYFRgIGEgc2VyZW0gcHJvY2Vzc2FkYXMuXG4gICAgICogQHJldHVybnMgVW0gYXJyYXkgZGUgb2JqZXRvcyBgSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPmAgY29tIGlkZW50aWZpY2Fkb3JlcyDDum5pY29zLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2FkZElkVG9PcHRpb25zKG9wdGlvbnM6IFRbXSk6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cCgpICYmIEFycmF5LmlzQXJyYXkoKG9wdGlvbiBhcyBhbnkpLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGBpZF8ke3RpbWVzdGFtcH1fJHtpbmRleCsrfWAsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgaWQ6IGBpZF8ke3RpbWVzdGFtcH1fJHtpbmRleCsrfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0ZSB1bWEgbGlzdGEgZGUgb3DDp8O1ZXMgcG9zc2l2ZWxtZW50ZSBhZ3J1cGFkYXMgZW0gdW1hIGxpc3RhIHBsYW5hIGRlIG9ww6fDtWVzLlxuICAgICAqIFBhcmEgY2FkYSBvcMOnw6NvIHF1ZSBwb3NzdWkgdW0gYWdydXBhZG9yIChgZ3JvdXBlcmApIGUgdW0gYXJyYXkgZGUgaXRlbnMgZW0gYGRhdGEuaXRlbXNgLFxuICAgICAqIGFkaWNpb25hIGEgb3DDp8OjbyBkbyBhZ3J1cGFkb3IgZSwgZW0gc2VndWlkYSwgYWRpY2lvbmEgY2FkYSBpdGVtIGRvIGdydXBvIGNvbW8gdW1hIG5vdmEgb3DDp8Ojb1xuICAgICAqIGluZGl2aWR1YWwsIGF0cmlidWluZG8gdW0gYGlkYCDDum5pY28gcGFyYSBjYWRhIGl0ZW0gZG8gZ3J1cG8uXG4gICAgICogQ2FzbyBhIG9ww6fDo28gbsOjbyBzZWphIHVtIGFncnVwYWRvciwgZWxhIMOpIGFkaWNpb25hZGEgZGlyZXRhbWVudGUgYW8gcmVzdWx0YWRvLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgTGlzdGEgZGUgb3DDp8O1ZXMgaW50ZXJuYXMgZG8gZHJvcGRvd24sIHBvZGVuZG8gY29udGVyIGFncnVwYWRvcmVzLlxuICAgICAqIEByZXR1cm5zIExpc3RhIHBsYW5hIGRlIG9ww6fDtWVzLCBpbmNsdWluZG8gYWdydXBhZG9yZXMgZSBzZXVzIGl0ZW5zIGV4cGFuZGlkb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ3JvdXBlclRvRmxhdChvcHRpb25zOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10pOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSA9IFtdO1xuXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmdyb3VwZXIgJiYgQXJyYXkuaXNBcnJheSgob3B0aW9uLmRhdGEgYXMgYW55KS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSAob3B0aW9uLmRhdGEgYXMgYW55KS5pdGVtcy5tYXAoKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgJHtvcHRpb24uaWR9X2l0ZW1fJHtpbmRleH1gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5ncm91cEl0ZW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIG8gZm9jbyBwYXJhIGEgcHLDs3hpbWEgb3DDp8OjbyBkaXNwb27DrXZlbCBuYSBsaXN0YSwgaWdub3JhbmRvIG9ww6fDtWVzIHF1ZSBzZWphbSBhZ3J1cGFkb3Jlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIExpc3RhIGRlIG9ww6fDtWVzIGludGVybmFzIGRvIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzTmV4dE9wdGlvbihvcHRpb25zOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10pIHtcbiAgICAgICAgbGV0IG5leHRJbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4KCkgKyAxO1xuXG4gICAgICAgIHdoaWxlIChuZXh0SW5kZXggPCBvcHRpb25zLmxlbmd0aCAmJiBvcHRpb25zW25leHRJbmRleF0uZ3JvdXBlcikge1xuICAgICAgICAgICAgbmV4dEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChuZXh0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIG8gZm9jbyBwYXJhIGEgb3DDp8OjbyBhbnRlcmlvciBuYSBsaXN0YSwgaWdub3JhbmRvIG9ww6fDtWVzIGRvIHRpcG8gXCJncm91cGVyXCIuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBMaXN0YSBkZSBvcMOnw7VlcyBpbnRlcm5hcyBkbyBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb2N1c1ByZXZpb3VzT3B0aW9uKG9wdGlvbnM6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSkge1xuICAgICAgICBsZXQgcHJldkluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKSAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHByZXZJbmRleCA+PSAwICYmIG9wdGlvbnNbcHJldkluZGV4XS5ncm91cGVyKSB7XG4gICAgICAgICAgICBwcmV2SW5kZXgtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KHByZXZJbmRleCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGEgYSBsaXN0YSBkZSBvcMOnw7VlcyBwYXJhIGdhcmFudGlyIHF1ZSBhIG9ww6fDo28gYXR1YWxtZW50ZSBmb2NhZGEgZXN0ZWphIHZpc8OtdmVsLlxuICAgICAqIEVzdGUgbcOpdG9kbyBvYnTDqW0gbyBJRCBkYSBvcMOnw6NvIGF0dWFsbWVudGUgZm9jYWRhIGEgcGFydGlyIGRhIGxpc3RhIGRlIG9ww6fDtWVzIGZpbHRyYWRhcy5cbiAgICAgKiBTZSB1bSBJRCB2w6FsaWRvIGZvciBlbmNvbnRyYWRvLCBidXNjYSBvIGVsZW1lbnRvIGNvcnJlc3BvbmRlbnRlIG5vIERPTSBlIHV0aWxpemFcbiAgICAgKiBgc2Nyb2xsSW50b1ZpZXdgIHBhcmEgcm9sYXIgYXTDqSBhIG9ww6fDo28sIGFsaW5oYW5kby1hIGFvIGJsb2NvIG1haXMgcHLDs3hpbW8uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKVt0aGlzLmZvY3VzZWRJbmRleCgpXT8uaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGVsPy5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIG8gZm9jbyBubyBpdGVtIGF0dWFsbWVudGUgc2VsZWNpb25hZG8gYW8gYWJyaXIgbyBkcm9wZG93bi5cbiAgICAgKiBObyBtb2RvIHNpbXBsZXMsIGZvY2EgbyBpdGVtIHNlbGVjaW9uYWRvLiBObyBtb2RvIG3Dumx0aXBsbywgZm9jYSBvIHByaW1laXJvIGl0ZW0gc2VsZWNpb25hZG8uXG4gICAgICogQXDDs3MgcmVuZGVyaXphw6fDo28gZG8gb3ZlcmxheSwgcm9sYSBhIGxpc3RhIGF0w6kgbyBpdGVtIGZvY2Fkby5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzU2VsZWN0ZWRPcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpO1xuICAgICAgICBsZXQgc2VsZWN0ZWRJbmRleCA9IC0xO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWQgPSB0aGlzLnZhbHVlcygpWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IG8uaWQgPT09IGZpcnN0U2VsZWN0ZWQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IG8uaWQgPT09IHNlbGVjdGVkLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChzZWxlY3RlZEluZGV4KTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3Njcm9sbFRvRm9jdXNlZE9wdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIiwiPGRpdlxuICAgICNjb250YWluZXJEaXZcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBjbGFzcz1cInNlbGVjdC1jb250YWluZXIgZ3JvdXAgZmxleCBoLVszNXB4XSB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzNweF0gYm9yZGVyIG91dGxpbmUtMSBvdXRsaW5lLXByaW1hcnkgZm9jdXM6b3V0bGluZVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBib3JkZXItZ3JheXNjYWxlLTIwIGJnLWdyYXlzY2FsZS01JzogZGlzYWJsZWQoKSxcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzLWF1dG8gYm9yZGVyLWdyYXlzY2FsZS0zMCBiZy1ncmF5c2NhbGUtMCc6ICFkaXNhYmxlZCgpLFxuICAgIH1cIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG93T3B0aW9ucygpXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgW2F0dHIuYXJpYS1vd25zXT1cIidkcm9wZG93bi1jb250YWluZXItJyArIGNvbXBvbmVudElkXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiY29tcG9uZW50SWQgKyAnLWxhYmVsJ1wiXG4gICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAoY2xpY2spPVwib25Db250YWluZXJEaXZDbGljaygpXCJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1ncm93IHNlbGVjdC1ub25lIHB4LTMgcHktWzdweF1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtOTAnOiAhZGlzYWJsZWQoKSAmJiAhaXNDbGVhbigpLFxuICAgICAgICAgICAgJ3RleHQtZ3JheXNjYWxlLTYwJzogIWRpc2FibGVkKCkgJiYgaXNDbGVhbigpLFxuICAgICAgICAgICAgJ3RleHQtZ3JheXNjYWxlLTMwJzogZGlzYWJsZWQoKSxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICB7eyBwcmludCgpIHx8IHBsYWNlaG9sZGVyKCkgfX1cbiAgICA8L3NwYW4+XG5cbiAgICBAaWYgKCFkaXNhYmxlZCgpICYmIHNob3dDbGVhcigpICYmICFpc0NsZWFuKCkpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJteC0zXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmxleCBpdGVtcy1jZW50ZXJcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXIgZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLWwgcHgtMyBncm91cC1ob3ZlcjpiZy1ncmF5c2NhbGUtMTAgZ3JvdXAtZm9jdXM6Ym9yZGVyLXByaW1hcnlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdib3JkZXItZ3JheXNjYWxlLTIwJzogZGlzYWJsZWQoKSwgJ2JvcmRlci1ncmF5c2NhbGUtMzAnOiAhZGlzYWJsZWQoKSB9XCJcbiAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImZhc1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3RleHQtZ3JheXNjYWxlLTMwJzogZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtOTAnOiAhZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICAnZmEtY2FyZXQtZG93bic6ICFzaG93T3B0aW9ucygpLFxuICAgICAgICAgICAgICAgICdmYS1jYXJldC11cCc6IHNob3dPcHRpb25zKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvaT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgICAjZHJvcGRvd25UZW1wbGF0ZVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwic2hvd09wdGlvbnMoKVwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0cnVlXCJcbiAgICAoYmFja2Ryb3BDbGljayk9XCJzaG93T3B0aW9ucy5zZXQoZmFsc2UpXCJcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCJcbiAgICAoZGV0YWNoKT1cInNob3dPcHRpb25zLnNldChmYWxzZSlcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgW2lkXT1cIidkcm9wZG93bi1jb250YWluZXItJyArIGNvbXBvbmVudElkXCJcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1ib2R5LWNsYXNzIHotWzEwMDBdIHJvdW5kZWQtWzNweF0gYmctZ3JheXNjYWxlLTAgcHktMSBzaGFkb3ctbWRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbnRhaW5lckRpdi5vZmZzZXRXaWR0aFwiXG4gICAgPlxuICAgICAgICBAaWYgKGZpbHRlcigpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zIHB4LTMgcHktMS41XCI+XG4gICAgICAgICAgICAgICAgQGlmIChtdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAjc2VsZWN0QWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsSXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGgtWzM1cHhdIGdyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBncm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGdyb3cgcm91bmRlZC1bM3B4XSBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBwbC0yLjUgcHItNyBvdXRsaW5lLTEgb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoIGFic29sdXRlIHJpZ2h0LTIuNSB0b3AtMi41IHRleHQtZ3JheXNjYWxlLTkwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmxleCBpdGVtcy1jZW50ZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gVmlydHVhbCBzY3JvbGwgLS0+XG4gICAgICAgIEBpZiAodmlydHVhbFNjcm9sbCgpICYmIGZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgICAgW2l0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtNTIgb3ZlcmZsb3ctYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8cy1zZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPcHRpb25MYWJlbChvcHRpb24uZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrbWFya109XCJjaGVja21hcmsoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJpc09wdGlvblNlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdEl0ZW0ob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNHcm91cGVyXT1cIm9wdGlvbi5ncm91cGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZvY3VzZWRdPVwib3B0aW9uLmRhdGEgPT09IGZvY3VzZWRJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gTm9ybWFsIGxpc3QgLS0+XG4gICAgICAgIEBpZiAoIXZpcnR1YWxTY3JvbGwoKSB8fCBmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPD0gMTApIHtcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm1heC1oLTUyIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrIG9wdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8cy1zZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPcHRpb25MYWJlbChvcHRpb24uZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrbWFya109XCJjaGVja21hcmsoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJpc09wdGlvblNlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdEl0ZW0ob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNHcm91cGVyXT1cIm9wdGlvbi5ncm91cGVyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZvY3VzZWRdPVwib3B0aW9uLmRhdGEgPT09IGZvY3VzZWRJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZmlsdGVyZWRPcHRpb25zKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tMyB0ZXh0LWdyYXlzY2FsZS02MFwiPnt7XG4gICAgICAgICAgICAgICAgZW1wdHlNZXNzYWdlKCkgPz8gJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5ub19yZWNvcmRzX2ZvdW5kJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbiJdfQ==
@@ -3,10 +3,44 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
5
  import * as i2 from "./components/select-button-item/select-button-item.component";
6
+ /**
7
+ * @description Componente de seleção por botões agrupados, onde cada opção é representada
8
+ * visualmente como um botão clicável. Suporta seleção simples e múltipla. Implementa
9
+ * {@link ControlValueAccessor} para integração com formulários Angular.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <s-select-button
14
+ * formControlName="visualizacao"
15
+ * [items]="opcoesVisualizacao"
16
+ * [multiple]="false"
17
+ * (itemSelected)="onVisualizacaoChange($event)" />
18
+ * ```
19
+ *
20
+ * @category Inputs
21
+ */
6
22
  export class SelectButtonComponent {
23
+ /**
24
+ * @description Lista de itens exibidos como botões de seleção.
25
+ * Cada item pode possuir `label`, `value` e `disabled`. Campo obrigatório.
26
+ */
7
27
  items;
28
+ /**
29
+ * @description Habilita a seleção de múltiplos itens ao mesmo tempo.
30
+ * Quando `false`, apenas um item pode estar ativo por vez.
31
+ *
32
+ * @default false
33
+ */
8
34
  multiple = false;
35
+ /**
36
+ * @description Emitido após a seleção de um item, com a lista completa dos itens
37
+ * atualmente selecionados (array de {@link SelectButtonItem}).
38
+ */
9
39
  itemSelected = new EventEmitter();
40
+ /**
41
+ * @description Emitido no momento do clique em um item, antes da atualização
42
+ * do estado de seleção. Útil para side-effects imediatos ao clique.
43
+ */
10
44
  itemClicked = new EventEmitter();
11
45
  disabled = false;
12
46
  activeItems = new Set();
@@ -119,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
119
153
  }], itemClicked: [{
120
154
  type: Output
121
155
  }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0LWJ1dHRvbi9zcmMvbGliL3NlbGVjdC1idXR0b24vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0LWJ1dHRvbi9zcmMvbGliL3NlbGVjdC1idXR0b24vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFnQnpFLE1BQU0sT0FBTyxxQkFBcUI7SUFFdkIsS0FBSyxDQUFzQjtJQUczQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBR2pCLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztJQUd0RCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFFbkQsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7SUFDMUMsUUFBUSxDQUF1QztJQUMvQyxTQUFTLENBQXVDO0lBRWhELFVBQVUsQ0FBQyxLQUE2QztRQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRTtnQkFD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QUFRO3NCQURkLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsTUFBTTtnQkFJQSxXQUFXO3NCQURqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdC1idXR0b24taXRlbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zZWxlY3QtYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdEJ1dHRvbkNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgaXRlbXMhOiBTZWxlY3RCdXR0b25JdGVtW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0QnV0dG9uSXRlbVtdPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGl0ZW1DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RCdXR0b25JdGVtPigpO1xuXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIGFjdGl2ZUl0ZW1zID0gbmV3IFNldDxTZWxlY3RCdXR0b25JdGVtPigpO1xuICAgIHB1YmxpYyBvbkNoYW5nZT86ICh2YWx1ZTogU2VsZWN0QnV0dG9uSXRlbVtdKSA9PiB2b2lkO1xuICAgIHB1YmxpYyBvblRvdWNoZWQ/OiAodmFsdWU6IFNlbGVjdEJ1dHRvbkl0ZW1bXSkgPT4gdm9pZDtcblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlPzogU2VsZWN0QnV0dG9uSXRlbSB8IFNlbGVjdEJ1dHRvbkl0ZW1bXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1zLmNsZWFyKCk7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtOiBTZWxlY3RCdXR0b25JdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpSXRlbTogU2VsZWN0QnV0dG9uSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcGFyZUl0ZW1zKGl0ZW0sIGlJdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtcy5hZGQoaUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaUl0ZW06IFNlbGVjdEJ1dHRvbkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcGFyZUl0ZW1zKHZhbHVlLCBpSXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtcy5hZGQoaUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogU2VsZWN0QnV0dG9uSXRlbVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAodmFsdWU6IFNlbGVjdEJ1dHRvbkl0ZW1bXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSXRlbVNlbGVjdChpdGVtOiBTZWxlY3RCdXR0b25JdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdChpdGVtKTtcblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1zLmFkZChpdGVtKTtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChbLi4udGhpcy5hY3RpdmVJdGVtc10pO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2U/LihbLi4udGhpcy5hY3RpdmVJdGVtc10pO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZD8uKFsuLi50aGlzLmFjdGl2ZUl0ZW1zXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcGFyZUl0ZW1zKGl0ZW0xOiBTZWxlY3RCdXR0b25JdGVtLCBpdGVtMjogU2VsZWN0QnV0dG9uSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBfY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBhICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICBiID09PSBudWxsXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpICE9PSBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgICAgIGxldCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gICAgICAgICAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzQSkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSB8fCAhX2NvbXBhcmUoYVtrZXldLCBiW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoa2V5KSAhPT0gYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBfY29tcGFyZShpdGVtMSwgaXRlbTIpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cInNlbGVjdC1idXR0b25cIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdC1idXR0b24tLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiPlxuICAgIEBmb3IoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbS52YWx1ZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgPHMtc2VsZWN0LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgaW5kZXggYXMgaVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZUl0ZW1zLmhhcyhpdGVtKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgKGl0ZW0uZGlzYWJsZWQgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIFtmaXJzdF09XCJpID09PSAwXCJcbiAgICAgICAgICAgIFtsYXN0XT1cImkgPT09IGl0ZW1zLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbVNlbGVjdChpdGVtKVwiPlxuICAgICAgICA8L3Mtc2VsZWN0LWJ1dHRvbi1pdGVtPlxuICAgIH1cbjwvZGl2PiJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0LWJ1dHRvbi9zcmMvbGliL3NlbGVjdC1idXR0b24vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0LWJ1dHRvbi9zcmMvbGliL3NlbGVjdC1idXR0b24vc2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFJekU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBYUgsTUFBTSxPQUFPLHFCQUFxQjtJQUM5Qjs7O09BR0c7SUFFSSxLQUFLLENBQXNCO0lBRWxDOzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7O09BR0c7SUFFSSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFFN0Q7OztPQUdHO0lBRUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRW5ELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQzFDLFFBQVEsQ0FBdUM7SUFDL0MsU0FBUyxDQUF1QztJQUVoRCxVQUFVLENBQUMsS0FBNkM7UUFDM0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FB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STt5QkFDZDtxQkFDSjs4QkFRTSxLQUFLO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVVsQixRQUFRO3NCQURkLEtBQUs7Z0JBUUMsWUFBWTtzQkFEbEIsTUFBTTtnQkFRQSxXQUFXO3NCQURqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdC1idXR0b24taXRlbSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgc2VsZcOnw6NvIHBvciBib3TDtWVzIGFncnVwYWRvcywgb25kZSBjYWRhIG9ww6fDo28gw6kgcmVwcmVzZW50YWRhXG4gKiB2aXN1YWxtZW50ZSBjb21vIHVtIGJvdMOjbyBjbGljw6F2ZWwuIFN1cG9ydGEgc2VsZcOnw6NvIHNpbXBsZXMgZSBtw7psdGlwbGEuIEltcGxlbWVudGFcbiAqIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tIGZvcm11bMOhcmlvcyBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1zZWxlY3QtYnV0dG9uXG4gKiAgIGZvcm1Db250cm9sTmFtZT1cInZpc3VhbGl6YWNhb1wiXG4gKiAgIFtpdGVtc109XCJvcGNvZXNWaXN1YWxpemFjYW9cIlxuICogICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICogICAoaXRlbVNlbGVjdGVkKT1cIm9uVmlzdWFsaXphY2FvQ2hhbmdlKCRldmVudClcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Mtc2VsZWN0LWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RCdXR0b25Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBpdGVucyBleGliaWRvcyBjb21vIGJvdMO1ZXMgZGUgc2VsZcOnw6NvLlxuICAgICAqIENhZGEgaXRlbSBwb2RlIHBvc3N1aXIgYGxhYmVsYCwgYHZhbHVlYCBlIGBkaXNhYmxlZGAuIENhbXBvIG9icmlnYXTDs3Jpby5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBpdGVtcyE6IFNlbGVjdEJ1dHRvbkl0ZW1bXTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBhIHNlbGXDp8OjbyBkZSBtw7psdGlwbG9zIGl0ZW5zIGFvIG1lc21vIHRlbXBvLlxuICAgICAqIFF1YW5kbyBgZmFsc2VgLCBhcGVuYXMgdW0gaXRlbSBwb2RlIGVzdGFyIGF0aXZvIHBvciB2ZXouXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBhcMOzcyBhIHNlbGXDp8OjbyBkZSB1bSBpdGVtLCBjb20gYSBsaXN0YSBjb21wbGV0YSBkb3MgaXRlbnNcbiAgICAgKiBhdHVhbG1lbnRlIHNlbGVjaW9uYWRvcyAoYXJyYXkgZGUge0BsaW5rIFNlbGVjdEJ1dHRvbkl0ZW19KS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RCdXR0b25JdGVtW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBubyBtb21lbnRvIGRvIGNsaXF1ZSBlbSB1bSBpdGVtLCBhbnRlcyBkYSBhdHVhbGl6YcOnw6NvXG4gICAgICogZG8gZXN0YWRvIGRlIHNlbGXDp8Ojby4gw5p0aWwgcGFyYSBzaWRlLWVmZmVjdHMgaW1lZGlhdG9zIGFvIGNsaXF1ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdEJ1dHRvbkl0ZW0+KCk7XG5cbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgYWN0aXZlSXRlbXMgPSBuZXcgU2V0PFNlbGVjdEJ1dHRvbkl0ZW0+KCk7XG4gICAgcHVibGljIG9uQ2hhbmdlPzogKHZhbHVlOiBTZWxlY3RCdXR0b25JdGVtW10pID0+IHZvaWQ7XG4gICAgcHVibGljIG9uVG91Y2hlZD86ICh2YWx1ZTogU2VsZWN0QnV0dG9uSXRlbVtdKSA9PiB2b2lkO1xuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU/OiBTZWxlY3RCdXR0b25JdGVtIHwgU2VsZWN0QnV0dG9uSXRlbVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbXMuY2xlYXIoKTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW06IFNlbGVjdEJ1dHRvbkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGlJdGVtOiBTZWxlY3RCdXR0b25JdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlSXRlbXMoaXRlbSwgaUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1zLmFkZChpSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpSXRlbTogU2VsZWN0QnV0dG9uSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlSXRlbXModmFsdWUsIGlJdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1zLmFkZChpSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBTZWxlY3RCdXR0b25JdGVtW10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICh2YWx1ZTogU2VsZWN0QnV0dG9uSXRlbVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JdGVtU2VsZWN0KGl0ZW06IFNlbGVjdEJ1dHRvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KGl0ZW0pO1xuXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbXMuYWRkKGl0ZW0pO1xuICAgICAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KFsuLi50aGlzLmFjdGl2ZUl0ZW1zXSk7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZT8uKFsuLi50aGlzLmFjdGl2ZUl0ZW1zXSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkPy4oWy4uLnRoaXMuYWN0aXZlSXRlbXNdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb21wYXJlSXRlbXMoaXRlbTE6IFNlbGVjdEJ1dHRvbkl0ZW0sIGl0ZW0yOiBTZWxlY3RCdXR0b25JdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IF9jb21wYXJlID0gKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgYiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGEgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgYSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGIgPT09IG51bGxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICAgICAgbGV0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG5cbiAgICAgICAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNBKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpIHx8ICFfY29tcGFyZShhW2tleV0sIGJba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYS5oYXNPd25Qcm9wZXJ0eShrZXkpICE9PSBiLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIF9jb21wYXJlKGl0ZW0xLCBpdGVtMik7XG4gICAgfVxufVxuXG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJzZWxlY3QtYnV0dG9uXCJcbiAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3QtYnV0dG9uLS1kaXNhYmxlZCc6IGRpc2FibGVkIH1cIj5cbiAgICBAZm9yKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0udmFsdWU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxzLXNlbGVjdC1idXR0b24taXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGluZGV4IGFzIGlcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVJdGVtcy5oYXMoaXRlbSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChpdGVtLmRpc2FibGVkID8/IGZhbHNlKVwiXG4gICAgICAgICAgICBbZmlyc3RdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICBbbGFzdF09XCJpID09PSBpdGVtcy5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoaXRlbSlcIj5cbiAgICAgICAgPC9zLXNlbGVjdC1idXR0b24taXRlbT5cbiAgICB9XG48L2Rpdj4iXX0=
@@ -1,19 +1,27 @@
1
- import { Component, Input } from "@angular/core";
1
+ import { Component, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
4
  import * as i2 from "@seniorsistemas/angular-components/tooltip";
5
+ /**
6
+ * @description Botão com borda que varia de estilo de acordo com a severidade informada.
7
+ * Utilizado internamente por outros componentes da biblioteca.
8
+ *
9
+ * @category Shared
10
+ */
5
11
  export class BorderButtonComponent {
12
+ /** @description Nível de severidade que define a cor e estilo do botão. @default 'default' */
6
13
  severity = 'default';
14
+ /** @description Opções de configuração do botão (rótulo, ação, etc.). */
7
15
  options;
8
16
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BorderButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
17
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BorderButtonComponent, selector: "s-border-button", inputs: { severity: "severity", options: "options" }, ngImport: i0, template: "<button\n class=\"border-button\"\n [ngClass]=\"{\n 'border-button--severity-default': severity === 'default',\n 'border-button--severity-info': severity === 'info',\n 'border-button--severity-warn': severity === 'warn',\n 'border-button--severity-error': severity === 'error',\n 'border-button--severity-success': severity === 'success',\n 'border-button--disabled': options?.disabled ? options?.disabled(severity) : false,\n }\"\n (click)=\"options?.onClick ? options?.onClick(severity) : null\"\n [sTooltip]=\"options?.tooltip?.(severity)\"\n tooltipPosition=\"left\"\n [disabled]=\"options?.disabled ? options?.disabled(severity) : false\"\n>\n <span class=\"border-button__label\">\n {{ options?.label ? options?.label(severity) : null }}\n </span>\n @if (options?.icon ? options?.icon(severity) : false) {\n <span class=\"border-button__icon {{ options?.icon(severity) }}\"></span>\n }\n</button>\n", styles: [".border-button{padding:0 8px;border:1px solid;border-radius:12px;height:23px;max-width:320px;display:flex;justify-content:center;align-items:center;cursor:pointer}.border-button__label{font-family:Open Sans,sans-serif;font-size:12px;line-height:150%;width:100%;display:block;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border-button__icon{font-size:12px;color:#333;margin-left:8px}.border-button--severity-default{border-color:#ccc;background-color:#fff}.border-button--severity-info{border-color:#428bca;background-color:#d5e8ec;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-info:enabled:hover{background-color:#9ecad4;cursor:pointer}.border-button--severity-info:enabled:active{transition:none;background-color:#67acbc;border-color:#67acbc}.border-button--severity-warn{border-color:#f8931f;background-color:#fce3ba;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-warn:enabled:hover{background-color:#f8bf5e;cursor:pointer}.border-button--severity-warn:enabled:active{transition:none;background-color:#f5a319;border-color:#f5a319}.border-button--severity-error{border-color:#c13018;background-color:#fcd2d2;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-error:enabled:hover{background-color:#f89696;cursor:pointer}.border-button--severity-error:enabled:active{transition:none;background-color:#f45b5b;border-color:#f45b5b}.border-button--severity-success{border-color:#0c9348;background-color:#e6ffb3;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-success:enabled:hover{background-color:#c8ff5c;cursor:pointer}.border-button--severity-success:enabled:active{transition:none;background-color:#ade500;border-color:#ade500}.border-button--disabled:disabled:hover{cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
10
18
  }
11
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BorderButtonComponent, decorators: [{
12
20
  type: Component,
13
- args: [{ selector: "s-border-button", template: "<button\n class=\"border-button\"\n [ngClass]=\"{\n 'border-button--severity-default': severity === 'default',\n 'border-button--severity-info': severity === 'info',\n 'border-button--severity-warn': severity === 'warn',\n 'border-button--severity-error': severity === 'error',\n 'border-button--severity-success': severity === 'success',\n 'border-button--disabled': options?.disabled ? options?.disabled(severity) : false,\n }\"\n (click)=\"options?.onClick ? options?.onClick(severity) : null\"\n [sTooltip]=\"options?.tooltip?.(severity)\"\n tooltipPosition=\"left\"\n [disabled]=\"options?.disabled ? options?.disabled(severity) : false\"\n>\n <span class=\"border-button__label\">\n {{ options?.label ? options?.label(severity) : null }}\n </span>\n @if (options?.icon ? options?.icon(severity) : false) {\n <span class=\"border-button__icon {{ options?.icon(severity) }}\"></span>\n }\n</button>\n", styles: [".border-button{padding:0 8px;border:1px solid;border-radius:12px;height:23px;max-width:320px;display:flex;justify-content:center;align-items:center;cursor:pointer}.border-button__label{font-family:Open Sans,sans-serif;font-size:12px;line-height:150%;width:100%;display:block;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border-button__icon{font-size:12px;color:#333;margin-left:8px}.border-button--severity-default{border-color:#ccc;background-color:#fff}.border-button--severity-info{border-color:#428bca;background-color:#d5e8ec;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-info:enabled:hover{background-color:#9ecad4;cursor:pointer}.border-button--severity-info:enabled:active{transition:none;background-color:#67acbc;border-color:#67acbc}.border-button--severity-warn{border-color:#f8931f;background-color:#fce3ba;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-warn:enabled:hover{background-color:#f8bf5e;cursor:pointer}.border-button--severity-warn:enabled:active{transition:none;background-color:#f5a319;border-color:#f5a319}.border-button--severity-error{border-color:#c13018;background-color:#fcd2d2;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-error:enabled:hover{background-color:#f89696;cursor:pointer}.border-button--severity-error:enabled:active{transition:none;background-color:#f45b5b;border-color:#f45b5b}.border-button--severity-success{border-color:#0c9348;background-color:#e6ffb3;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-success:enabled:hover{background-color:#c8ff5c;cursor:pointer}.border-button--severity-success:enabled:active{transition:none;background-color:#ade500;border-color:#ade500}.border-button--disabled:disabled:hover{cursor:default}\n"] }]
21
+ args: [{ selector: 's-border-button', template: "<button\n class=\"border-button\"\n [ngClass]=\"{\n 'border-button--severity-default': severity === 'default',\n 'border-button--severity-info': severity === 'info',\n 'border-button--severity-warn': severity === 'warn',\n 'border-button--severity-error': severity === 'error',\n 'border-button--severity-success': severity === 'success',\n 'border-button--disabled': options?.disabled ? options?.disabled(severity) : false,\n }\"\n (click)=\"options?.onClick ? options?.onClick(severity) : null\"\n [sTooltip]=\"options?.tooltip?.(severity)\"\n tooltipPosition=\"left\"\n [disabled]=\"options?.disabled ? options?.disabled(severity) : false\"\n>\n <span class=\"border-button__label\">\n {{ options?.label ? options?.label(severity) : null }}\n </span>\n @if (options?.icon ? options?.icon(severity) : false) {\n <span class=\"border-button__icon {{ options?.icon(severity) }}\"></span>\n }\n</button>\n", styles: [".border-button{padding:0 8px;border:1px solid;border-radius:12px;height:23px;max-width:320px;display:flex;justify-content:center;align-items:center;cursor:pointer}.border-button__label{font-family:Open Sans,sans-serif;font-size:12px;line-height:150%;width:100%;display:block;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border-button__icon{font-size:12px;color:#333;margin-left:8px}.border-button--severity-default{border-color:#ccc;background-color:#fff}.border-button--severity-info{border-color:#428bca;background-color:#d5e8ec;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-info:enabled:hover{background-color:#9ecad4;cursor:pointer}.border-button--severity-info:enabled:active{transition:none;background-color:#67acbc;border-color:#67acbc}.border-button--severity-warn{border-color:#f8931f;background-color:#fce3ba;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-warn:enabled:hover{background-color:#f8bf5e;cursor:pointer}.border-button--severity-warn:enabled:active{transition:none;background-color:#f5a319;border-color:#f5a319}.border-button--severity-error{border-color:#c13018;background-color:#fcd2d2;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-error:enabled:hover{background-color:#f89696;cursor:pointer}.border-button--severity-error:enabled:active{transition:none;background-color:#f45b5b;border-color:#f45b5b}.border-button--severity-success{border-color:#0c9348;background-color:#e6ffb3;transition:background-color .5s ease,border-color .5s ease}.border-button--severity-success:enabled:hover{background-color:#c8ff5c;cursor:pointer}.border-button--severity-success:enabled:active{transition:none;background-color:#ade500;border-color:#ade500}.border-button--disabled:disabled:hover{cursor:default}\n"] }]
14
22
  }], propDecorators: { severity: [{
15
23
  type: Input
16
24
  }], options: [{
17
25
  type: Input
18
26
  }] } });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkL3NyYy9saWIvc2hhcmVkL2JvcmRlci1idXR0b24vYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkL3NyYy9saWIvc2hhcmVkL2JvcmRlci1idXR0b24vYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVVqRCxNQUFNLE9BQU8scUJBQXFCO0lBRXZCLFFBQVEsR0FBZSxTQUFTLENBQUM7SUFHakMsT0FBTyxDQUF1Qjt3R0FMNUIscUJBQXFCOzRGQUFyQixxQkFBcUIsNkdDVmxDLG0rQkFzQkE7OzRGRFphLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxpQkFBaUI7OEJBTXBCLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgQm9yZGVyQnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuLi9tb2RlbHMvYm9yZGVyLWJ1dHRvbi1vcHRpb25zXCI7XG5pbXBvcnQgeyBTZXZlcml0aWVzIH0gZnJvbSBcIi4uL21vZGVscy9zZXZlcml0aWVzXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInMtYm9yZGVyLWJ1dHRvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9ib3JkZXItYnV0dG9uLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBCb3JkZXJCdXR0b25Db21wb25lbnQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldmVyaXR5OiBTZXZlcml0aWVzID0gJ2RlZmF1bHQnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3B0aW9ucz86IEJvcmRlckJ1dHRvbk9wdGlvbnM7XG59XG4iLCI8YnV0dG9uXG4gICAgY2xhc3M9XCJib3JkZXItYnV0dG9uXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdib3JkZXItYnV0dG9uLS1zZXZlcml0eS1kZWZhdWx0Jzogc2V2ZXJpdHkgPT09ICdkZWZhdWx0JyxcbiAgICAgICAgJ2JvcmRlci1idXR0b24tLXNldmVyaXR5LWluZm8nOiBzZXZlcml0eSA9PT0gJ2luZm8nLFxuICAgICAgICAnYm9yZGVyLWJ1dHRvbi0tc2V2ZXJpdHktd2Fybic6IHNldmVyaXR5ID09PSAnd2FybicsXG4gICAgICAgICdib3JkZXItYnV0dG9uLS1zZXZlcml0eS1lcnJvcic6IHNldmVyaXR5ID09PSAnZXJyb3InLFxuICAgICAgICAnYm9yZGVyLWJ1dHRvbi0tc2V2ZXJpdHktc3VjY2Vzcyc6IHNldmVyaXR5ID09PSAnc3VjY2VzcycsXG4gICAgICAgICdib3JkZXItYnV0dG9uLS1kaXNhYmxlZCc6IG9wdGlvbnM/LmRpc2FibGVkID8gb3B0aW9ucz8uZGlzYWJsZWQoc2V2ZXJpdHkpIDogZmFsc2UsXG4gICAgfVwiXG4gICAgKGNsaWNrKT1cIm9wdGlvbnM/Lm9uQ2xpY2sgPyBvcHRpb25zPy5vbkNsaWNrKHNldmVyaXR5KSA6IG51bGxcIlxuICAgIFtzVG9vbHRpcF09XCJvcHRpb25zPy50b29sdGlwPy4oc2V2ZXJpdHkpXCJcbiAgICB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCJcbiAgICBbZGlzYWJsZWRdPVwib3B0aW9ucz8uZGlzYWJsZWQgPyBvcHRpb25zPy5kaXNhYmxlZChzZXZlcml0eSkgOiBmYWxzZVwiXG4+XG4gICAgPHNwYW4gY2xhc3M9XCJib3JkZXItYnV0dG9uX19sYWJlbFwiPlxuICAgICAgICB7eyBvcHRpb25zPy5sYWJlbCA/IG9wdGlvbnM/LmxhYmVsKHNldmVyaXR5KSA6IG51bGwgfX1cbiAgICA8L3NwYW4+XG4gICAgQGlmIChvcHRpb25zPy5pY29uID8gb3B0aW9ucz8uaWNvbihzZXZlcml0eSkgOiBmYWxzZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImJvcmRlci1idXR0b25fX2ljb24ge3sgb3B0aW9ucz8uaWNvbihzZXZlcml0eSkgfX1cIj48L3NwYW4+XG4gICAgfVxuPC9idXR0b24+XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkL3NyYy9saWIvc2hhcmVkL2JvcmRlci1idXR0b24vYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkL3NyYy9saWIvc2hhcmVkL2JvcmRlci1idXR0b24vYm9yZGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUtqRDs7Ozs7R0FLRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsOEZBQThGO0lBRXZGLFFBQVEsR0FBZSxTQUFTLENBQUM7SUFFeEMseUVBQXlFO0lBRWxFLE9BQU8sQ0FBdUI7d0dBUDVCLHFCQUFxQjs0RkFBckIscUJBQXFCLDZHQ2hCbEMsbStCQXNCQTs7NEZETmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLGlCQUFpQjs4QkFPcEIsUUFBUTtzQkFEZCxLQUFLO2dCQUtDLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQm9yZGVyQnV0dG9uT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9ib3JkZXItYnV0dG9uLW9wdGlvbnMnO1xuaW1wb3J0IHsgU2V2ZXJpdGllcyB9IGZyb20gJy4uL21vZGVscy9zZXZlcml0aWVzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQm90w6NvIGNvbSBib3JkYSBxdWUgdmFyaWEgZGUgZXN0aWxvIGRlIGFjb3JkbyBjb20gYSBzZXZlcmlkYWRlIGluZm9ybWFkYS5cbiAqIFV0aWxpemFkbyBpbnRlcm5hbWVudGUgcG9yIG91dHJvcyBjb21wb25lbnRlcyBkYSBiaWJsaW90ZWNhLlxuICpcbiAqIEBjYXRlZ29yeSBTaGFyZWRcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWJvcmRlci1idXR0b24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ib3JkZXItYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ib3JkZXItYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEJvcmRlckJ1dHRvbkNvbXBvbmVudCB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOw612ZWwgZGUgc2V2ZXJpZGFkZSBxdWUgZGVmaW5lIGEgY29yIGUgZXN0aWxvIGRvIGJvdMOjby4gQGRlZmF1bHQgJ2RlZmF1bHQnICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V2ZXJpdHk6IFNldmVyaXRpZXMgPSAnZGVmYXVsdCc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE9ww6fDtWVzIGRlIGNvbmZpZ3VyYcOnw6NvIGRvIGJvdMOjbyAocsOzdHVsbywgYcOnw6NvLCBldGMuKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcHRpb25zPzogQm9yZGVyQnV0dG9uT3B0aW9ucztcbn1cblxuIiwiPGJ1dHRvblxuICAgIGNsYXNzPVwiYm9yZGVyLWJ1dHRvblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYm9yZGVyLWJ1dHRvbi0tc2V2ZXJpdHktZGVmYXVsdCc6IHNldmVyaXR5ID09PSAnZGVmYXVsdCcsXG4gICAgICAgICdib3JkZXItYnV0dG9uLS1zZXZlcml0eS1pbmZvJzogc2V2ZXJpdHkgPT09ICdpbmZvJyxcbiAgICAgICAgJ2JvcmRlci1idXR0b24tLXNldmVyaXR5LXdhcm4nOiBzZXZlcml0eSA9PT0gJ3dhcm4nLFxuICAgICAgICAnYm9yZGVyLWJ1dHRvbi0tc2V2ZXJpdHktZXJyb3InOiBzZXZlcml0eSA9PT0gJ2Vycm9yJyxcbiAgICAgICAgJ2JvcmRlci1idXR0b24tLXNldmVyaXR5LXN1Y2Nlc3MnOiBzZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICAnYm9yZGVyLWJ1dHRvbi0tZGlzYWJsZWQnOiBvcHRpb25zPy5kaXNhYmxlZCA/IG9wdGlvbnM/LmRpc2FibGVkKHNldmVyaXR5KSA6IGZhbHNlLFxuICAgIH1cIlxuICAgIChjbGljayk9XCJvcHRpb25zPy5vbkNsaWNrID8gb3B0aW9ucz8ub25DbGljayhzZXZlcml0eSkgOiBudWxsXCJcbiAgICBbc1Rvb2x0aXBdPVwib3B0aW9ucz8udG9vbHRpcD8uKHNldmVyaXR5KVwiXG4gICAgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbnM/LmRpc2FibGVkID8gb3B0aW9ucz8uZGlzYWJsZWQoc2V2ZXJpdHkpIDogZmFsc2VcIlxuPlxuICAgIDxzcGFuIGNsYXNzPVwiYm9yZGVyLWJ1dHRvbl9fbGFiZWxcIj5cbiAgICAgICAge3sgb3B0aW9ucz8ubGFiZWwgPyBvcHRpb25zPy5sYWJlbChzZXZlcml0eSkgOiBudWxsIH19XG4gICAgPC9zcGFuPlxuICAgIEBpZiAob3B0aW9ucz8uaWNvbiA/IG9wdGlvbnM/Lmljb24oc2V2ZXJpdHkpIDogZmFsc2UpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJib3JkZXItYnV0dG9uX19pY29uIHt7IG9wdGlvbnM/Lmljb24oc2V2ZXJpdHkpIH19XCI+PC9zcGFuPlxuICAgIH1cbjwvYnV0dG9uPlxuIl19