@seniorsistemas/angular-components 19.3.0 → 19.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.d.ts +1 -2
  2. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +0 -1
  3. package/chips/lib/chips/chips/chips.component.d.ts +1 -2
  4. package/code-editor/lib/code-editor/code-editor.component.d.ts +0 -2
  5. package/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.d.ts +1 -3
  6. package/common/lib/svg-factory/svg-factory.directive.d.ts +1 -2
  7. package/content-generator/lib/content-generator/content-generator.component.d.ts +1 -6
  8. package/content-generator/lib/services/IAssist/iassist.service.d.ts +0 -3
  9. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -3
  10. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.d.ts +0 -2
  11. package/currency/lib/currency.service.d.ts +0 -2
  12. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +3 -7
  13. package/custom-fields/lib/custom-fields/custom-fields.service.d.ts +0 -2
  14. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +0 -2
  15. package/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.d.ts +1 -2
  16. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -3
  17. package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +1 -2
  18. package/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.d.ts +1 -3
  19. package/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.d.ts +1 -2
  20. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -3
  21. package/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.d.ts +1 -2
  22. package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +1 -3
  23. package/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.d.ts +1 -2
  24. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
  25. package/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +1 -2
  26. package/empty-state/lib/empty-state/go-back/go-back.component.d.ts +0 -2
  27. package/esm2022/badge/lib/badge/badge.component.mjs +3 -3
  28. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +10 -13
  29. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +7 -11
  30. package/esm2022/chips/lib/chips/chips/chips.component.mjs +5 -8
  31. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +6 -9
  32. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.mjs +8 -13
  33. package/esm2022/common/lib/svg-factory/svg-factory.directive.mjs +6 -10
  34. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +24 -30
  35. package/esm2022/content-generator/lib/services/IAssist/iassist.service.mjs +9 -12
  36. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +15 -23
  37. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +6 -9
  38. package/esm2022/currency/lib/currency.service.mjs +6 -9
  39. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -25
  40. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +6 -9
  41. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +22 -28
  42. package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +6 -10
  43. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +12 -17
  44. package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +5 -8
  45. package/esm2022/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.mjs +12 -17
  46. package/esm2022/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +5 -8
  47. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +13 -19
  48. package/esm2022/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.mjs +6 -10
  49. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +14 -19
  50. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +5 -8
  51. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +5 -8
  52. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +5 -8
  53. package/esm2022/empty-state/lib/empty-state/go-back/go-back.component.mjs +8 -11
  54. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +17 -21
  55. package/esm2022/gantt/lib/gantt/components/gantt/gantt.mjs +6 -2
  56. package/esm2022/gantt/lib/gantt/gantt.component.mjs +8 -4
  57. package/esm2022/global-search/lib/global-search/global-search.component.mjs +5 -8
  58. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +7 -12
  59. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +5 -8
  60. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +6 -10
  61. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +9 -12
  62. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +14 -17
  63. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +12 -15
  64. package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +15 -19
  65. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +5 -8
  66. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +10 -13
  67. package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +10 -13
  68. package/esm2022/kanban/lib/kanban/kanban.component.mjs +23 -17
  69. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +10 -16
  70. package/esm2022/locale/lib/locale/locale.service.mjs +8 -12
  71. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +6 -9
  72. package/esm2022/locale/lib/locale/pipes/localized-currency.pipe.mjs +6 -9
  73. package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +6 -9
  74. package/esm2022/locale/lib/locale/pipes/localized-number.pipe.mjs +6 -9
  75. package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +6 -9
  76. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +6 -9
  77. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +5 -8
  78. package/esm2022/numeric/lib/numeric.pipe.mjs +8 -12
  79. package/esm2022/numeric/lib/numeric.service.mjs +6 -9
  80. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +8 -11
  81. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +10 -16
  82. package/esm2022/picklist/lib/picklist/picklist.component.mjs +5 -8
  83. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +15 -19
  84. package/esm2022/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.mjs +8 -11
  85. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +5 -4
  86. package/esm2022/select-button/lib/select-button/select-button.component.mjs +3 -3
  87. package/esm2022/shared/lib/accessibility/paginator-accessibility.directive.mjs +8 -13
  88. package/esm2022/shared/lib/accessibility/table-checkbox-accessibility.directive.mjs +5 -8
  89. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +9 -12
  90. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +12 -16
  91. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.service.mjs +12 -16
  92. package/esm2022/speech-recognition/lib/speech-recognition/text-to-speech.service.mjs +8 -10
  93. package/esm2022/split-button/lib/split-button/split-button.component.mjs +5 -8
  94. package/esm2022/table/lib/table/row-toggler/row-toggler.directive.mjs +7 -7
  95. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +20 -29
  96. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +9 -16
  97. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +11 -13
  98. package/esm2022/text-area/lib/text-area/text-area.component.mjs +5 -8
  99. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +8 -11
  100. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +16 -24
  101. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +8 -11
  102. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +12 -16
  103. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +13 -25
  104. package/esm2022/toast/lib/toast/toast.service.mjs +7 -12
  105. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +10 -14
  106. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +6 -10
  107. package/fesm2022/seniorsistemas-angular-components-badge.mjs +2 -2
  108. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +10 -12
  110. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +6 -10
  112. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  113. package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -7
  114. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  115. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +10 -18
  116. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  117. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -9
  118. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  119. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +29 -40
  120. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  121. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +16 -28
  122. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  123. package/fesm2022/seniorsistemas-angular-components-currency.mjs +5 -8
  124. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  125. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +45 -59
  126. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  127. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +108 -157
  128. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  129. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +4 -8
  130. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  131. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +17 -22
  132. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  133. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +12 -4
  134. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  135. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +4 -7
  136. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  137. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +6 -11
  138. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  139. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +4 -7
  140. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  141. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +5 -9
  142. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  143. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +29 -38
  144. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  145. package/fesm2022/seniorsistemas-angular-components-insights.mjs +17 -22
  146. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  147. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +4 -7
  148. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  149. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +30 -30
  150. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  151. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -15
  152. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  153. package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -41
  154. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  155. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +5 -8
  156. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  157. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +4 -7
  158. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  159. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +9 -16
  160. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  161. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +13 -24
  162. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  163. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +4 -7
  164. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  165. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +14 -21
  166. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  167. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +11 -14
  168. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  169. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
  170. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  171. package/fesm2022/seniorsistemas-angular-components-shared.mjs +10 -18
  172. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  173. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +7 -10
  174. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  175. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +23 -34
  176. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  177. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +4 -7
  178. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  179. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +10 -12
  180. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  181. package/fesm2022/seniorsistemas-angular-components-table.mjs +30 -47
  182. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  183. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +4 -7
  184. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  185. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +6 -9
  186. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  187. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +30 -55
  188. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  189. package/fesm2022/seniorsistemas-angular-components-toast.mjs +6 -11
  190. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  191. package/fesm2022/seniorsistemas-angular-components-tree.mjs +9 -14
  192. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  193. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +5 -9
  194. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  195. package/file-picker/lib/file-picker/file-picker.component.d.ts +0 -4
  196. package/file-upload/README.md +9 -37
  197. package/gantt/lib/gantt/gantt.component.d.ts +1 -0
  198. package/global-search/lib/global-search/global-search.component.d.ts +1 -2
  199. package/ia-insight/README.md +17 -0
  200. package/image-cropper/lib/image-cropper/image-cropper.service.d.ts +1 -2
  201. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +1 -2
  202. package/info-sign/lib/info-sign/info-sign.directive.d.ts +1 -2
  203. package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +1 -2
  204. package/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +0 -2
  205. package/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +0 -2
  206. package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +0 -4
  207. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +1 -2
  208. package/kanban/lib/kanban/components/kanban-column/kanban-column.component.d.ts +0 -2
  209. package/kanban/lib/kanban/components/kanban-item/kanban-item.component.d.ts +0 -2
  210. package/kanban/lib/kanban/kanban.component.d.ts +2 -2
  211. package/loading-state/lib/loading-state/loading-state.directive.d.ts +1 -2
  212. package/locale/lib/locale/locale.service.d.ts +0 -3
  213. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +0 -2
  214. package/locale/lib/locale/pipes/localized-currency.pipe.d.ts +0 -2
  215. package/locale/lib/locale/pipes/localized-date.pipe.d.ts +0 -2
  216. package/locale/lib/locale/pipes/localized-number.pipe.d.ts +0 -2
  217. package/locale/lib/locale/pipes/localized-time.pipe.d.ts +0 -2
  218. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +0 -2
  219. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +1 -2
  220. package/numeric/lib/numeric.pipe.d.ts +0 -3
  221. package/numeric/lib/numeric.service.d.ts +0 -2
  222. package/package.json +12 -12
  223. package/password-strength/lib/password-strength/password-strength.component.d.ts +0 -2
  224. package/password-strength/lib/password-strength/password-strength.directive.d.ts +1 -2
  225. package/picklist/lib/picklist/picklist.component.d.ts +1 -2
  226. package/product-header/README.md +17 -0
  227. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +0 -4
  228. package/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.d.ts +0 -2
  229. package/progressbar/lib/progressbar/progressbar.module.d.ts +2 -1
  230. package/shared/lib/accessibility/paginator-accessibility.directive.d.ts +1 -3
  231. package/shared/lib/accessibility/table-checkbox-accessibility.directive.d.ts +1 -2
  232. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +0 -2
  233. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +0 -4
  234. package/speech-recognition/lib/speech-recognition/speech-recognition.service.d.ts +1 -5
  235. package/speech-recognition/lib/speech-recognition/text-to-speech.service.d.ts +1 -3
  236. package/split-button/lib/split-button/split-button.component.d.ts +1 -2
  237. package/table/lib/table/row-toggler/row-toggler.directive.d.ts +1 -1
  238. package/table/lib/table/table-column/table-columns.component.d.ts +2 -6
  239. package/table/lib/table/table-paging/table-paging.component.d.ts +0 -3
  240. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -1
  241. package/text-area/lib/text-area/text-area.component.d.ts +1 -2
  242. package/text-area-ia/README.md +17 -0
  243. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +0 -2
  244. package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +1 -3
  245. package/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +0 -2
  246. package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +0 -2
  247. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +1 -5
  248. package/toast/lib/toast/toast.service.d.ts +0 -2
  249. package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +1 -3
  250. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +1 -2
  251. package/confirm-dialog/README.md +0 -226
  252. package/numeric-mask/README.md +0 -395
  253. package/pin-code-field/README.md +0 -366
  254. package/spotlight/README.md +0 -311
@@ -1,27 +1,24 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, inject } from '@angular/core';
2
+ import { CookieService } from 'ngx-cookie-service';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "ngx-cookie-service";
4
- import * as i2 from "../empty-state.component";
4
+ import * as i1 from "../empty-state.component";
5
5
  export class EmptyStateGoBackComponent {
6
- _cookieService;
6
+ _cookieService = inject(CookieService);
7
7
  iconClass = 'fa fa-exclamation-triangle';
8
8
  title;
9
9
  description;
10
10
  primaryActionLabel;
11
- constructor(_cookieService) {
12
- this._cookieService = _cookieService;
13
- }
14
11
  goBack() {
15
12
  const portalUrl = this._cookieService.get('com.senior.portal.url');
16
13
  window.open(portalUrl, '_top');
17
14
  }
18
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateGoBackComponent, deps: [{ token: i1.CookieService }], target: i0.ɵɵFactoryTarget.Component });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmptyStateGoBackComponent, selector: "s-empty-state-go-back", inputs: { iconClass: "iconClass", title: "title", description: "description", primaryActionLabel: "primaryActionLabel" }, ngImport: i0, template: "<s-empty-state \n [iconClass]=\"iconClass\" \n [title]=\"title\" \n [description]=\"description\" \n (primaryAction)=\"goBack()\"\n [primaryActionLabel]=\"primaryActionLabel\">\n</s-empty-state>", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }] });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateGoBackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmptyStateGoBackComponent, selector: "s-empty-state-go-back", inputs: { iconClass: "iconClass", title: "title", description: "description", primaryActionLabel: "primaryActionLabel" }, ngImport: i0, template: "<s-empty-state \n [iconClass]=\"iconClass\" \n [title]=\"title\" \n [description]=\"description\" \n (primaryAction)=\"goBack()\"\n [primaryActionLabel]=\"primaryActionLabel\">\n</s-empty-state>", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }] });
20
17
  }
21
18
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateGoBackComponent, decorators: [{
22
19
  type: Component,
23
20
  args: [{ selector: 's-empty-state-go-back', template: "<s-empty-state \n [iconClass]=\"iconClass\" \n [title]=\"title\" \n [description]=\"description\" \n (primaryAction)=\"goBack()\"\n [primaryActionLabel]=\"primaryActionLabel\">\n</s-empty-state>" }]
24
- }], ctorParameters: () => [{ type: i1.CookieService }], propDecorators: { iconClass: [{
21
+ }], propDecorators: { iconClass: [{
25
22
  type: Input
26
23
  }], title: [{
27
24
  type: Input,
@@ -31,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
31
28
  }], primaryActionLabel: [{
32
29
  type: Input
33
30
  }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28tYmFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZW1wdHktc3RhdGUvc3JjL2xpYi9lbXB0eS1zdGF0ZS9nby1iYWNrL2dvLWJhY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2VtcHR5LXN0YXRlL3NyYy9saWIvZW1wdHktc3RhdGUvZ28tYmFjay9nby1iYWNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU2pELE1BQU0sT0FBTyx5QkFBeUI7SUFhTDtJQVh0QixTQUFTLEdBQUcsNEJBQTRCLENBQUM7SUFHekMsS0FBSyxDQUFVO0lBR2YsV0FBVyxDQUFVO0lBR3JCLGtCQUFrQixDQUFVO0lBRW5DLFlBQTZCLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO0lBQUcsQ0FBQztJQUV2RCxNQUFNO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQWxCUSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix1TENUdEMsbU5BTWdCOzs0RkRHSCx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0ksdUJBQXVCO2tGQU0xQixTQUFTO3NCQURmLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJbEIsV0FBVztzQkFEakIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtZW1wdHktc3RhdGUtZ28tYmFjaycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dvLWJhY2suY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5U3RhdGVHb0JhY2tDb21wb25lbnQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGljb25DbGFzcyA9ICdmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSc7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0aXRsZSE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcHJpbWFyeUFjdGlvbkxhYmVsPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfY29va2llU2VydmljZTogQ29va2llU2VydmljZSkge31cblxuICAgIHB1YmxpYyBnb0JhY2soKSB7XG4gICAgICAgIGNvbnN0IHBvcnRhbFVybCA9IHRoaXMuX2Nvb2tpZVNlcnZpY2UuZ2V0KCdjb20uc2VuaW9yLnBvcnRhbC51cmwnKTtcbiAgICAgICAgd2luZG93Lm9wZW4ocG9ydGFsVXJsLCAnX3RvcCcpO1xuICAgIH1cbn1cbiIsIjxzLWVtcHR5LXN0YXRlIFxuICAgIFtpY29uQ2xhc3NdPVwiaWNvbkNsYXNzXCIgXG4gICAgW3RpdGxlXT1cInRpdGxlXCIgXG4gICAgW2Rlc2NyaXB0aW9uXT1cImRlc2NyaXB0aW9uXCIgXG4gICAgKHByaW1hcnlBY3Rpb24pPVwiZ29CYWNrKClcIlxuICAgIFtwcmltYXJ5QWN0aW9uTGFiZWxdPVwicHJpbWFyeUFjdGlvbkxhYmVsXCI+XG48L3MtZW1wdHktc3RhdGU+Il19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28tYmFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZW1wdHktc3RhdGUvc3JjL2xpYi9lbXB0eS1zdGF0ZS9nby1iYWNrL2dvLWJhY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2VtcHR5LXN0YXRlL3NyYy9saWIvZW1wdHktc3RhdGUvZ28tYmFjay9nby1iYWNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQU9uRCxNQUFNLE9BQU8seUJBQXlCO0lBQ2pCLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFHakQsU0FBUyxHQUFHLDRCQUE0QixDQUFDO0lBR3pDLEtBQUssQ0FBVTtJQUdmLFdBQVcsQ0FBVTtJQUdyQixrQkFBa0IsQ0FBVTtJQUU1QixNQUFNO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQWxCUSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix1TENUdEMsbU5BTWdCOzs0RkRHSCx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0ksdUJBQXVCOzhCQVExQixTQUFTO3NCQURmLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJbEIsV0FBVztzQkFEakIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1lbXB0eS1zdGF0ZS1nby1iYWNrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ28tYmFjay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUdvQmFja0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29va2llU2VydmljZSA9IGluamVjdChDb29raWVTZXJ2aWNlKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGljb25DbGFzcyA9ICdmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSc7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0aXRsZSE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcHJpbWFyeUFjdGlvbkxhYmVsPzogc3RyaW5nO1xuXG4gICAgcHVibGljIGdvQmFjaygpIHtcbiAgICAgICAgY29uc3QgcG9ydGFsVXJsID0gdGhpcy5fY29va2llU2VydmljZS5nZXQoJ2NvbS5zZW5pb3IucG9ydGFsLnVybCcpO1xuICAgICAgICB3aW5kb3cub3Blbihwb3J0YWxVcmwsICdfdG9wJyk7XG4gICAgfVxufVxuIiwiPHMtZW1wdHktc3RhdGUgXG4gICAgW2ljb25DbGFzc109XCJpY29uQ2xhc3NcIiBcbiAgICBbdGl0bGVdPVwidGl0bGVcIiBcbiAgICBbZGVzY3JpcHRpb25dPVwiZGVzY3JpcHRpb25cIiBcbiAgICAocHJpbWFyeUFjdGlvbik9XCJnb0JhY2soKVwiXG4gICAgW3ByaW1hcnlBY3Rpb25MYWJlbF09XCJwcmltYXJ5QWN0aW9uTGFiZWxcIj5cbjwvcy1lbXB0eS1zdGF0ZT4iXX0=
@@ -1,19 +1,20 @@
1
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, inject } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { TranslateService } from '@ngx-translate/core';
2
4
  import { DEPRECATED_CONFIG } from '@seniorsistemas/angular-components/common/deprecated-selector';
3
5
  import { DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';
4
6
  import { Breakpoints, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
5
7
  import moment from 'moment';
6
8
  import { Subject } from 'rxjs';
9
+ import { FilePickerService } from './file-picker.service';
7
10
  import { ALL_PERMISSIONS } from './models/file-picker-permissions';
8
11
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/platform-browser";
10
- import * as i2 from "./file-picker.service";
11
- import * as i3 from "@ngx-translate/core";
12
- import * as i4 from "@seniorsistemas/angular-components/common/deprecated-selector";
13
- import * as i5 from "@angular/common";
14
- import * as i6 from "@seniorsistemas/angular-components/button";
15
- import * as i7 from "primeng/tooltip";
16
- import * as i8 from "@seniorsistemas/angular-components/progressbar";
12
+ import * as i1 from "@seniorsistemas/angular-components/common/deprecated-selector";
13
+ import * as i2 from "@angular/common";
14
+ import * as i3 from "@seniorsistemas/angular-components/button";
15
+ import * as i4 from "primeng/tooltip";
16
+ import * as i5 from "@seniorsistemas/angular-components/progressbar";
17
+ import * as i6 from "@ngx-translate/core";
17
18
  /**
18
19
  * @description Componente de upload de arquivos com suporte a seleção múltipla,
19
20
  * validação de tipo/tamanho, controle de permissões (adicionar, ler, remover),
@@ -33,9 +34,9 @@ import * as i8 from "@seniorsistemas/angular-components/progressbar";
33
34
  * @category Inputs
34
35
  */
35
36
  export class FilePickerComponent {
36
- sanitizer;
37
- filePickerService;
38
- translate;
37
+ sanitizer = inject(DomSanitizer);
38
+ filePickerService = inject(FilePickerService);
39
+ translate = inject(TranslateService);
39
40
  static nextId = 0;
40
41
  ADD_PERMISSION = 'add';
41
42
  READ_PERMISSION = 'read';
@@ -114,11 +115,6 @@ export class FilePickerComponent {
114
115
  isSmallDevice = false;
115
116
  inputValue = '';
116
117
  modifiedDate;
117
- constructor(sanitizer, filePickerService, translate) {
118
- this.sanitizer = sanitizer;
119
- this.filePickerService = filePickerService;
120
- this.translate = translate;
121
- }
122
118
  ngOnInit() {
123
119
  this.supportedExtensions = this.supportedExtensions.map((extension) => extension.replace('.', '').toLowerCase());
124
120
  }
@@ -276,7 +272,7 @@ export class FilePickerComponent {
276
272
  fullYear,
277
273
  });
278
274
  }
279
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilePickerComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.FilePickerService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
275
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
280
276
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilePickerComponent, selector: "s-file-picker, s-file-upload", inputs: { id: "id", chooseLabel: "chooseLabel", removeLabel: "removeLabel", cancelLabel: "cancelLabel", successTooltip: "successTooltip", multiple: "multiple", accept: "accept", supportedExtensions: "supportedExtensions", ariaLabelFileName: "ariaLabelFileName", maxFileSize: "maxFileSize", maxCombinedFileSize: "maxCombinedFileSize", fileLimit: "fileLimit", ariaLabelProgress: "ariaLabelProgress", ariaLabelSuccess: "ariaLabelSuccess", ariaLabelError: "ariaLabelError", ariaLabelRemove: "ariaLabelRemove", formControl: "formControl", disabled: "disabled", showFileUploadDate: "showFileUploadDate", permissions: "permissions", files: "files" }, outputs: { uploadHandler: "uploadHandler", removeFile: "removeFile", cancelUpload: "cancelUpload", downloadFile: "downloadFile", validateErrors: "validateErrors" }, host: { listeners: { "window:resize": "onResize()" } }, providers: [
281
277
  {
282
278
  provide: DEPRECATED_CONFIG,
@@ -286,7 +282,7 @@ export class FilePickerComponent {
286
282
  removalVersion: '20.0.0',
287
283
  },
288
284
  },
289
- ], viewQueries: [{ propertyName: "inputUpload", first: true, predicate: ["inputUpload"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }], hostDirectives: [{ directive: i4.DeprecatedSelectorDirective }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"file-picker\"\n>\n <div class=\"file-picker-choose\">\n <input\n #inputUpload\n [id]=\"id + 'input-upload'\"\n type=\"file\"\n name=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"_onInputFileSelect($event)\"\n />\n @if (permissions.includes(ADD_PERMISSION)) {\n <s-button\n [id]=\"id + 'upload-button'\"\n [label]=\"chooseLabel || 'platform.angular_components.attach_files' | translate\"\n (clicked)=\"inputUpload.click()\"\n priority=\"primary\"\n [disabled]=\"disabled || !!formControl?.disabled || fileLimit === files.length\"\n [auxiliary]=\"false\"\n >\n </s-button>\n }\n </div>\n\n @if (files.length) {\n <section\n [id]=\"id + 'fileupload-list'\"\n class=\"file-picker-list\"\n role=\"grid\"\n >\n @for (file of files; track file; let i = $index) {\n <div\n class=\"file-picker-list-file\"\n role=\"row\"\n >\n <div\n [id]=\"id + '-file-' + i + '-name'\"\n class=\"flex flex-grow items-center justify-between overflow-hidden text-ellipsis text-nowrap\"\n role=\"gridcell\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (permissions.includes(READ_PERMISSION) && file.savedFile) || file.progress === 100\n ? descriptionUrl\n : description;\n context: {\n $implicit: file,\n index: i,\n }\n \"\n >\n </ng-container>\n\n <span>{{ formatFileSize(file.size) }}</span>\n\n @if (modifiedDate) {\n <span class=\"file-picker-list-file-name-date\">{{ modifiedDate }}</span>\n }\n </div>\n <div\n class=\"file-picker-list-file-status\"\n role=\"gridcell\"\n >\n @if (file.isUploading && !isSmallDevice) {\n <div class=\"w-64\">\n <s-progressbar\n [value]=\"file.progress ?? 0\"\n [showValue]=\"false\"\n activeColor=\"blue\"\n ></s-progressbar>\n </div>\n }\n\n @if (file.isUploading && isSmallDevice) {\n <span\n [id]=\"id + '-file-' + i + '-spin'\"\n class=\"fas fa-circle-notch fa-spin\"\n [attr.aria-label]=\"\n ariaLabelProgress || 'platform.angular_components.loading_file' | translate\n \"\n >\n </span>\n }\n\n @if (!file.isUploading && !file.error && file.progress === 100) {\n <span\n [id]=\"id + '-file-' + i + '-check'\"\n class=\"fas fa-check\"\n role=\"alert\"\n [attr.aria-label]=\"\n ariaLabelSuccess ||\n successTooltip ||\n 'platform.angular_components.file_attached_successfully' | translate\n \"\n [pTooltip]=\"\n successTooltip || 'platform.angular_components.file_attached_successfully'\n | translate\n \"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n\n @if (file.error?.message) {\n <span\n [id]=\"id + '-file-' + i + '-error'\"\n class=\"fas fa-times\"\n role=\"alert\"\n [pTooltip]=\"file.error?.message\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n </div>\n <div\n class=\"file-picker-list-file-actions\"\n role=\"gridcell\"\n >\n @if (file.isUploading) {\n <a\n [id]=\"id + '-file-' + i + '-cancel'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onCancelUpload(i)\"\n >\n {{ cancelLabel || 'platform.angular_components.cancel' | translate }}\n </a>\n }\n\n @if (\n permissions.includes(REMOVE_PERMISSION) &&\n !file.isUploading &&\n !(disabled || !!formControl?.disabled)\n ) {\n <a\n role=\"button\"\n tabindex=\"0\"\n [id]=\"id + '-file-' + i + '-remove'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onRemoveFile(file)\"\n [attr.aria-label]=\"\n ariaLabelRemove || removeLabel || 'platform.angular_components.remove' | translate\n \"\n >\n {{ removeLabel || 'platform.angular_components.remove' | translate }}\n </a>\n }\n </div>\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template\n #descriptionUrl\n let-file\n let-i=\"index\"\n>\n <div class=\"flex justify-between\">\n <div>\n <a\n [id]=\"id + '-file-' + i + '-name-link'\"\n tabindex=\"0\"\n (click)=\"onDowloadFile(i)\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"break-words\"\n >{{ file.name }}\n </a>\n <a\n style=\"display: none\"\n [href]=\"file.objectURL\"\n target=\"_blank\"\n download\n #anchor\n >\n </a>\n </div>\n </div>\n</ng-template>\n\n<ng-template\n #description\n let-file\n>\n <div class=\"flex justify-between\">\n <span\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n >\n {{ file.name }}\n </span>\n </div>\n</ng-template>\n\n", styles: [".file-picker .file-picker-choose{position:relative;margin:15px 0;width:max-content}.file-picker input[type=file]{display:none}.file-picker-list{border:1px solid #ccc}.file-picker-list-file:not(:first-child){border-top:1px solid #ccc}.file-picker-list .file-picker-list-file{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:15px}.file-picker-list .file-picker-list-file .file-picker-list-file-name{display:flex;flex-direction:column;align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-picker-list .file-picker-list-file .file-picker-list-file-name .file-picker-list-file-name-date{font-size:.75rem;color:#999}.file-picker-list .file-picker-list-file .file-picker-list-file-name>a{cursor:pointer;text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-status{align-self:center}.file-picker-list .file-picker-list-file .fas.fa-circle-notch{color:#d8d8d8;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-check{color:#0c9348;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-times{color:#c13018;font-size:12px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin-top:15px;align-self:center;width:100%}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action{text-decoration:none;color:#428bca}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:hover,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :focus,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :visited{text-decoration:none}@media (min-width: 768px){.file-picker-list .file-picker-list-file{flex-wrap:nowrap}.file-picker-list .file-picker-list-file .file-picker-list-file-name{width:auto;flex-grow:2}.file-picker-list .file-picker-list-file .file-picker-list-file-status{margin:0 15px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin:0;width:auto}}\n"], dependencies: [{ kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.ProgressBarComponent, selector: "s-progressbar", inputs: ["value", "activeColor", "numberFormatOptions", "targetValue", "label", "targetLabel", "showValue", "mode"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
285
+ ], viewQueries: [{ propertyName: "inputUpload", first: true, predicate: ["inputUpload"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"file-picker\"\n>\n <div class=\"file-picker-choose\">\n <input\n #inputUpload\n [id]=\"id + 'input-upload'\"\n type=\"file\"\n name=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"_onInputFileSelect($event)\"\n />\n @if (permissions.includes(ADD_PERMISSION)) {\n <s-button\n [id]=\"id + 'upload-button'\"\n [label]=\"chooseLabel || 'platform.angular_components.attach_files' | translate\"\n (clicked)=\"inputUpload.click()\"\n priority=\"primary\"\n [disabled]=\"disabled || !!formControl?.disabled || fileLimit === files.length\"\n [auxiliary]=\"false\"\n >\n </s-button>\n }\n </div>\n\n @if (files.length) {\n <section\n [id]=\"id + 'fileupload-list'\"\n class=\"file-picker-list\"\n role=\"grid\"\n >\n @for (file of files; track file; let i = $index) {\n <div\n class=\"file-picker-list-file\"\n role=\"row\"\n >\n <div\n [id]=\"id + '-file-' + i + '-name'\"\n class=\"flex flex-grow items-center justify-between overflow-hidden text-ellipsis text-nowrap\"\n role=\"gridcell\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (permissions.includes(READ_PERMISSION) && file.savedFile) || file.progress === 100\n ? descriptionUrl\n : description;\n context: {\n $implicit: file,\n index: i,\n }\n \"\n >\n </ng-container>\n\n <span>{{ formatFileSize(file.size) }}</span>\n\n @if (modifiedDate) {\n <span class=\"file-picker-list-file-name-date\">{{ modifiedDate }}</span>\n }\n </div>\n <div\n class=\"file-picker-list-file-status\"\n role=\"gridcell\"\n >\n @if (file.isUploading && !isSmallDevice) {\n <div class=\"w-64\">\n <s-progressbar\n [value]=\"file.progress ?? 0\"\n [showValue]=\"false\"\n activeColor=\"blue\"\n ></s-progressbar>\n </div>\n }\n\n @if (file.isUploading && isSmallDevice) {\n <span\n [id]=\"id + '-file-' + i + '-spin'\"\n class=\"fas fa-circle-notch fa-spin\"\n [attr.aria-label]=\"\n ariaLabelProgress || 'platform.angular_components.loading_file' | translate\n \"\n >\n </span>\n }\n\n @if (!file.isUploading && !file.error && file.progress === 100) {\n <span\n [id]=\"id + '-file-' + i + '-check'\"\n class=\"fas fa-check\"\n role=\"alert\"\n [attr.aria-label]=\"\n ariaLabelSuccess ||\n successTooltip ||\n 'platform.angular_components.file_attached_successfully' | translate\n \"\n [pTooltip]=\"\n successTooltip || 'platform.angular_components.file_attached_successfully'\n | translate\n \"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n\n @if (file.error?.message) {\n <span\n [id]=\"id + '-file-' + i + '-error'\"\n class=\"fas fa-times\"\n role=\"alert\"\n [pTooltip]=\"file.error?.message\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n </div>\n <div\n class=\"file-picker-list-file-actions\"\n role=\"gridcell\"\n >\n @if (file.isUploading) {\n <a\n [id]=\"id + '-file-' + i + '-cancel'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onCancelUpload(i)\"\n >\n {{ cancelLabel || 'platform.angular_components.cancel' | translate }}\n </a>\n }\n\n @if (\n permissions.includes(REMOVE_PERMISSION) &&\n !file.isUploading &&\n !(disabled || !!formControl?.disabled)\n ) {\n <a\n role=\"button\"\n tabindex=\"0\"\n [id]=\"id + '-file-' + i + '-remove'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onRemoveFile(file)\"\n [attr.aria-label]=\"\n ariaLabelRemove || removeLabel || 'platform.angular_components.remove' | translate\n \"\n >\n {{ removeLabel || 'platform.angular_components.remove' | translate }}\n </a>\n }\n </div>\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template\n #descriptionUrl\n let-file\n let-i=\"index\"\n>\n <div class=\"flex justify-between\">\n <div>\n <a\n [id]=\"id + '-file-' + i + '-name-link'\"\n tabindex=\"0\"\n (click)=\"onDowloadFile(i)\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"break-words\"\n >{{ file.name }}\n </a>\n <a\n style=\"display: none\"\n [href]=\"file.objectURL\"\n target=\"_blank\"\n download\n #anchor\n >\n </a>\n </div>\n </div>\n</ng-template>\n\n<ng-template\n #description\n let-file\n>\n <div class=\"flex justify-between\">\n <span\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n >\n {{ file.name }}\n </span>\n </div>\n</ng-template>\n\n", styles: [".file-picker .file-picker-choose{position:relative;margin:15px 0;width:max-content}.file-picker input[type=file]{display:none}.file-picker-list{border:1px solid #ccc}.file-picker-list-file:not(:first-child){border-top:1px solid #ccc}.file-picker-list .file-picker-list-file{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:15px}.file-picker-list .file-picker-list-file .file-picker-list-file-name{display:flex;flex-direction:column;align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-picker-list .file-picker-list-file .file-picker-list-file-name .file-picker-list-file-name-date{font-size:.75rem;color:#999}.file-picker-list .file-picker-list-file .file-picker-list-file-name>a{cursor:pointer;text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-status{align-self:center}.file-picker-list .file-picker-list-file .fas.fa-circle-notch{color:#d8d8d8;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-check{color:#0c9348;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-times{color:#c13018;font-size:12px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin-top:15px;align-self:center;width:100%}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action{text-decoration:none;color:#428bca}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:hover,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :focus,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :visited{text-decoration:none}@media (min-width: 768px){.file-picker-list .file-picker-list-file{flex-wrap:nowrap}.file-picker-list .file-picker-list-file .file-picker-list-file-name{width:auto;flex-grow:2}.file-picker-list .file-picker-list-file .file-picker-list-file-status{margin:0 15px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin:0;width:auto}}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.ProgressBarComponent, selector: "s-progressbar", inputs: ["value", "activeColor", "numberFormatOptions", "targetValue", "label", "targetLabel", "showValue", "mode"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
290
286
  }
291
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilePickerComponent, decorators: [{
292
288
  type: Component,
@@ -300,7 +296,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
300
296
  },
301
297
  },
302
298
  ], template: "<div\n [id]=\"id\"\n class=\"file-picker\"\n>\n <div class=\"file-picker-choose\">\n <input\n #inputUpload\n [id]=\"id + 'input-upload'\"\n type=\"file\"\n name=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"_onInputFileSelect($event)\"\n />\n @if (permissions.includes(ADD_PERMISSION)) {\n <s-button\n [id]=\"id + 'upload-button'\"\n [label]=\"chooseLabel || 'platform.angular_components.attach_files' | translate\"\n (clicked)=\"inputUpload.click()\"\n priority=\"primary\"\n [disabled]=\"disabled || !!formControl?.disabled || fileLimit === files.length\"\n [auxiliary]=\"false\"\n >\n </s-button>\n }\n </div>\n\n @if (files.length) {\n <section\n [id]=\"id + 'fileupload-list'\"\n class=\"file-picker-list\"\n role=\"grid\"\n >\n @for (file of files; track file; let i = $index) {\n <div\n class=\"file-picker-list-file\"\n role=\"row\"\n >\n <div\n [id]=\"id + '-file-' + i + '-name'\"\n class=\"flex flex-grow items-center justify-between overflow-hidden text-ellipsis text-nowrap\"\n role=\"gridcell\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (permissions.includes(READ_PERMISSION) && file.savedFile) || file.progress === 100\n ? descriptionUrl\n : description;\n context: {\n $implicit: file,\n index: i,\n }\n \"\n >\n </ng-container>\n\n <span>{{ formatFileSize(file.size) }}</span>\n\n @if (modifiedDate) {\n <span class=\"file-picker-list-file-name-date\">{{ modifiedDate }}</span>\n }\n </div>\n <div\n class=\"file-picker-list-file-status\"\n role=\"gridcell\"\n >\n @if (file.isUploading && !isSmallDevice) {\n <div class=\"w-64\">\n <s-progressbar\n [value]=\"file.progress ?? 0\"\n [showValue]=\"false\"\n activeColor=\"blue\"\n ></s-progressbar>\n </div>\n }\n\n @if (file.isUploading && isSmallDevice) {\n <span\n [id]=\"id + '-file-' + i + '-spin'\"\n class=\"fas fa-circle-notch fa-spin\"\n [attr.aria-label]=\"\n ariaLabelProgress || 'platform.angular_components.loading_file' | translate\n \"\n >\n </span>\n }\n\n @if (!file.isUploading && !file.error && file.progress === 100) {\n <span\n [id]=\"id + '-file-' + i + '-check'\"\n class=\"fas fa-check\"\n role=\"alert\"\n [attr.aria-label]=\"\n ariaLabelSuccess ||\n successTooltip ||\n 'platform.angular_components.file_attached_successfully' | translate\n \"\n [pTooltip]=\"\n successTooltip || 'platform.angular_components.file_attached_successfully'\n | translate\n \"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n\n @if (file.error?.message) {\n <span\n [id]=\"id + '-file-' + i + '-error'\"\n class=\"fas fa-times\"\n role=\"alert\"\n [pTooltip]=\"file.error?.message\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [appendTo]=\"'body'\"\n >\n </span>\n }\n </div>\n <div\n class=\"file-picker-list-file-actions\"\n role=\"gridcell\"\n >\n @if (file.isUploading) {\n <a\n [id]=\"id + '-file-' + i + '-cancel'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onCancelUpload(i)\"\n >\n {{ cancelLabel || 'platform.angular_components.cancel' | translate }}\n </a>\n }\n\n @if (\n permissions.includes(REMOVE_PERMISSION) &&\n !file.isUploading &&\n !(disabled || !!formControl?.disabled)\n ) {\n <a\n role=\"button\"\n tabindex=\"0\"\n [id]=\"id + '-file-' + i + '-remove'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onRemoveFile(file)\"\n [attr.aria-label]=\"\n ariaLabelRemove || removeLabel || 'platform.angular_components.remove' | translate\n \"\n >\n {{ removeLabel || 'platform.angular_components.remove' | translate }}\n </a>\n }\n </div>\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template\n #descriptionUrl\n let-file\n let-i=\"index\"\n>\n <div class=\"flex justify-between\">\n <div>\n <a\n [id]=\"id + '-file-' + i + '-name-link'\"\n tabindex=\"0\"\n (click)=\"onDowloadFile(i)\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"break-words\"\n >{{ file.name }}\n </a>\n <a\n style=\"display: none\"\n [href]=\"file.objectURL\"\n target=\"_blank\"\n download\n #anchor\n >\n </a>\n </div>\n </div>\n</ng-template>\n\n<ng-template\n #description\n let-file\n>\n <div class=\"flex justify-between\">\n <span\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n >\n {{ file.name }}\n </span>\n </div>\n</ng-template>\n\n", styles: [".file-picker .file-picker-choose{position:relative;margin:15px 0;width:max-content}.file-picker input[type=file]{display:none}.file-picker-list{border:1px solid #ccc}.file-picker-list-file:not(:first-child){border-top:1px solid #ccc}.file-picker-list .file-picker-list-file{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:15px}.file-picker-list .file-picker-list-file .file-picker-list-file-name{display:flex;flex-direction:column;align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-picker-list .file-picker-list-file .file-picker-list-file-name .file-picker-list-file-name-date{font-size:.75rem;color:#999}.file-picker-list .file-picker-list-file .file-picker-list-file-name>a{cursor:pointer;text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-status{align-self:center}.file-picker-list .file-picker-list-file .fas.fa-circle-notch{color:#d8d8d8;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-check{color:#0c9348;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-times{color:#c13018;font-size:12px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin-top:15px;align-self:center;width:100%}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action{text-decoration:none;color:#428bca}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:hover,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :focus,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :visited{text-decoration:none}@media (min-width: 768px){.file-picker-list .file-picker-list-file{flex-wrap:nowrap}.file-picker-list .file-picker-list-file .file-picker-list-file-name{width:auto;flex-grow:2}.file-picker-list .file-picker-list-file .file-picker-list-file-status{margin:0 15px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin:0;width:auto}}\n"] }]
303
- }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.FilePickerService }, { type: i3.TranslateService }], propDecorators: { inputUpload: [{
299
+ }], propDecorators: { inputUpload: [{
304
300
  type: ViewChild,
305
301
  args: ['inputUpload', { static: false }]
306
302
  }], anchor: [{
@@ -362,4 +358,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
362
358
  type: HostListener,
363
359
  args: ['window:resize']
364
360
  }] } });
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtcGlja2VyL3NyYy9saWIvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtcGlja2VyL3NyYy9saWIvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7O0FBSTFGOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQWlCSCxNQUFNLE9BQU8sbUJBQW1CO0lBMklQO0lBQ0E7SUFDQTtJQTVJZCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVsQixjQUFjLEdBQTBCLEtBQUssQ0FBQztJQUM5QyxlQUFlLEdBQTBCLE1BQU0sQ0FBQztJQUNoRCxpQkFBaUIsR0FBMEIsUUFBUSxDQUFDO0lBRzFDLFdBQVcsR0FBc0IsSUFBSSxDQUFDO0lBR3RDLE1BQU0sR0FBc0IsSUFBSSxD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Q0FDNUIsY0FBYyxFQUFFLFFBQVE7NkJBQzNCO3lCQUNKO3FCQUNKO2dKQVVnQixXQUFXO3NCQUQzQixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTFCLE1BQU07c0JBRHRCLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLL0IsRUFBRTtzQkFEUixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxXQUFXO3NCQURqQixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0MsUUFBUTtzQkFEZCxLQUFLO2dCQUtDLE1BQU07c0JBRFosS0FBSztnQkFLQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBS0MsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQUtDLFNBQVM7c0JBRGYsS0FBSztnQkFLQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBS0MsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0MsZUFBZTtzQkFEckIsS0FBSztnQkFLQyxXQUFXO3NCQURqQixLQUFLO2dCQUtDLFFBQVE7c0JBRGQsS0FBSztnQkFLQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFRSyxLQUFLO3NCQURmLEtBQUs7Z0JBaUJDLGFBQWE7c0JBRG5CLE1BQU07Z0JBS0EsVUFBVTtzQkFEaEIsTUFBTTtnQkFLQSxZQUFZO3NCQURsQixNQUFNO2dCQUtBLFlBQVk7c0JBRGxCLE1BQU07Z0JBS0EsY0FBYztzQkFEcEIsTUFBTTtnQkErQkEsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgREVQUkVDQVRFRF9DT05GSUcgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NvbW1vbi9kZXByZWNhdGVkLXNlbGVjdG9yJztcbmltcG9ydCB7IERlcHJlY2F0ZWRTZWxlY3RvckRpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29tbW9uL2RlcHJlY2F0ZWQtc2VsZWN0b3InO1xuaW1wb3J0IHsgQnJlYWtwb2ludHMsIGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpbGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9maWxlLXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVEdG8gfSBmcm9tICcuL21vZGVscy9maWxlLWR0byc7XG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMsIEZpbGVQaWNrZXJQZXJtaXNzaW9ucyB9IGZyb20gJy4vbW9kZWxzL2ZpbGUtcGlja2VyLXBlcm1pc3Npb25zJztcbmltcG9ydCB7IExpc3RCbG9iTWV0YWRhdGFSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2xpc3QtYmxvYi1tZXRhZGF0YSc7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gJy4vbW9kZWxzL3VwbG9hZEVycm9yJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSB1cGxvYWQgZGUgYXJxdWl2b3MgY29tIHN1cG9ydGUgYSBzZWxlw6fDo28gbcO6bHRpcGxhLFxuICogdmFsaWRhw6fDo28gZGUgdGlwby90YW1hbmhvLCBjb250cm9sZSBkZSBwZXJtaXNzw7VlcyAoYWRpY2lvbmFyLCBsZXIsIHJlbW92ZXIpLFxuICogZG93bmxvYWQgZSBjYW5jZWxhbWVudG8gZGUgdXBsb2FkcyBlbSBhbmRhbWVudG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWZpbGUtcGlja2VyXG4gKiAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAqICAgYWNjZXB0PVwiYXBwbGljYXRpb24vcGRmXCJcbiAqICAgW21heEZpbGVTaXplXT1cIjUyNDI4ODBcIlxuICogICBbZmlsZXNdPVwiYXJxdWl2b3NcIlxuICogICAodXBsb2FkSGFuZGxlcik9XCJvblVwbG9hZCgkZXZlbnQpXCJcbiAqICAgKHJlbW92ZUZpbGUpPVwib25SZW1vdmUoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1maWxlLXBpY2tlciwgcy1maWxlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbRGVwcmVjYXRlZFNlbGVjdG9yRGlyZWN0aXZlXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogREVQUkVDQVRFRF9DT05GSUcsXG4gICAgICAgICAgICB1c2VWYWx1ZToge1xuICAgICAgICAgICAgICAgIG9sZFNlbGVjdG9yOiAncy1maWxlLXVwbG9hZCcsXG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0b3I6ICdzLWZpbGUtcGlja2VyJyxcbiAgICAgICAgICAgICAgICByZW1vdmFsVmVyc2lvbjogJzIwLjAuMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHVibGljIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gICAgcHVibGljIEFERF9QRVJNSVNTSU9OOiBGaWxlUGlja2VyUGVybWlzc2lvbnMgPSAnYWRkJztcbiAgICBwdWJsaWMgUkVBRF9QRVJNSVNTSU9OOiBGaWxlUGlja2VyUGVybWlzc2lvbnMgPSAncmVhZCc7XG4gICAgcHVibGljIFJFTU9WRV9QRVJNSVNTSU9OOiBGaWxlUGlja2VyUGVybWlzc2lvbnMgPSAncmVtb3ZlJztcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0VXBsb2FkJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dFVwbG9hZDogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmNob3I6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSWRlbnRpZmljYWRvciBkbyBjb21wb25lbnRlIG5vIERPTS4gR2VyYWRvIGF1dG9tYXRpY2FtZW50ZSBzZSBuw6NvIGluZm9ybWFkby4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBzLWZpbGUtcGlja2VyLSR7RmlsZVBpY2tlckNvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSBzZWxlw6fDo28gZGUgYXJxdWl2by4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjaG9vc2VMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb8Onw6NvIGRlIGFycXVpdm8uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGNhbmNlbGFtZW50byBkZSB1cGxvYWQuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFRleHRvIGRvIHRvb2x0aXAgZXhpYmlkbyBhcMOzcyB1cGxvYWQgYmVtLXN1Y2VkaWRvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN1Y2Nlc3NUb29sdGlwPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIHNlbGVjaW9uYXIgbcO6bHRpcGxvcyBhcnF1aXZvcyBhbyBtZXNtbyB0ZW1wby4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZT86IGJvb2xlYW47XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFRpcG9zIE1JTUUgYWNlaXRvcyBwZWxvIHNlbGV0b3IgZGUgYXJxdWl2byAoZXguOiBgJ2FwcGxpY2F0aW9uL3BkZixpbWFnZS8qJ2ApLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFjY2VwdD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgZXh0ZW5zw7VlcyBkZSBhcnF1aXZvIGFjZWl0YXMgcGFyYSB2YWxpZGHDp8OjbyAoZXguOiBgWycucGRmJywgJy5kb2N4J11gKS4gQGRlZmF1bHQgW10gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdXBwb3J0ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMYWJlbCBBUklBIHBhcmEgbyBub21lIGRvIGFycXVpdm8sIHBhcmEgbGVpdG9yZXMgZGUgdGVsYS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxGaWxlTmFtZT86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGFtYW5obyBtw6F4aW1vIHBvciBhcnF1aXZvIGVtIGJ5dGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heEZpbGVTaXplPzogbnVtYmVyO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUYW1hbmhvIG3DoXhpbW8gY29tYmluYWRvIGRlIHRvZG9zIG9zIGFycXVpdm9zIGVtIGJ5dGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heENvbWJpbmVkRmlsZVNpemU/OiBudW1iZXI7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE7Dum1lcm8gbcOheGltbyBkZSBhcnF1aXZvcyBxdWUgcG9kZW0gc2VyIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWxlTGltaXQ/OiBudW1iZXI7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExhYmVsIEFSSUEgcGFyYSBhIGJhcnJhIGRlIHByb2dyZXNzbyBkbyB1cGxvYWQuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXJpYUxhYmVsUHJvZ3Jlc3M/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExhYmVsIEFSSUEgcGFyYSBvIMOtY29uZSBkZSBzdWNlc3NvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFyaWFMYWJlbFN1Y2Nlc3M/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExhYmVsIEFSSUEgcGFyYSBtZW5zYWdlbnMgZGUgZXJybyBkZSB2YWxpZGHDp8Ojby4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxFcnJvcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFiZWwgQVJJQSBwYXJhIG8gYm90w6NvIGRlIHJlbW/Dp8OjbyBkZSBhcnF1aXZvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFyaWFMYWJlbFJlbW92ZT86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRm9ybUNvbnRyb2wgZXh0ZXJubyB2aW5jdWxhZG8gYW8gY29tcG9uZW50ZSBwYXJhIGNvbnRyb2xlIGRlIGVzdGFkby4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtQ29udHJvbD86IEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEZXNhYmlsaXRhIHRvZGFzIGFzIGludGVyYcOnw7VlcyBkbyBjb21wb25lbnRlLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGEgZGF0YSBkZSB1cGxvYWQgZGUgY2FkYSBhcnF1aXZvLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dGaWxlVXBsb2FkRGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBwZXJtaXNzw7VlcyBoYWJpbGl0YWRhcyBubyBjb21wb25lbnRlOiBgJ2FkZCdgLCBgJ3JlYWQnYCwgYCdyZW1vdmUnYC4gQGRlZmF1bHQgQUxMX1BFUk1JU1NJT05TICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IEZpbGVQaWNrZXJQZXJtaXNzaW9uc1tdID0gQUxMX1BFUk1JU1NJT05TO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGFycXVpdm9zIGrDoSBlbnZpYWRvcyBhIHNlcmVtIGV4aWJpZG9zIG5vIGNvbXBvbmVudGUuXG4gICAgICogQW8gYXRyaWJ1aXIsIG9zIGFycXVpdm9zIHPDo28gcHJvY2Vzc2Fkb3MgZSBzdWFzIFVSTHMgc8OjbyBnZXJhZGFzIHBhcmEgcHJldmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsZXMoZmlsZXM6IEZpbGVEdG9bXSkge1xuICAgICAgICBpZiAoIWZpbGVzIHx8IGZpbGVzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVzID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbGVVcGxvYWREYXRlICYmIGZpbGVzWzBdPy5vYmplY3RJZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRVcGxvYWREYXRlKGZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maWxlcyA9IGZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgZmlsZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gc2VsZWNpb25hIGFycXVpdm9zIHbDoWxpZG9zIHBhcmEgdXBsb2FkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB1cGxvYWRIYW5kbGVyOiBFdmVudEVtaXR0ZXI8eyBmaWxlczogRmlsZUR0b1tdIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIHJlbW92ZSB1bSBhcnF1aXZvIGRhIGxpc3RhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZW1vdmVGaWxlOiBFdmVudEVtaXR0ZXI8eyBmaWxlOiBGaWxlIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGNhbmNlbGEgdW0gdXBsb2FkIGVtIGFuZGFtZW50by4gRW1pdGUgbyDDrW5kaWNlIGRvIGFycXVpdm8gY2FuY2VsYWRvLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxVcGxvYWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGNsaWNhIHBhcmEgYmFpeGFyIHVtIGFycXVpdm8uICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRvd25sb2FkRmlsZTogRXZlbnRFbWl0dGVyPHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB1bSBhcnF1aXZvIG7Do28gcGFzc2EgbmEgdmFsaWRhw6fDo28gZGUgdGlwbywgdGFtYW5obyBvdSBsaW1pdGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRlRXJyb3JzOiBFdmVudEVtaXR0ZXI8VXBsb2FkRXJyb3I+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfZmlsZXM6IEZpbGVEdG9bXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgaXNTbWFsbERldmljZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBpbnB1dFZhbHVlID0gJyc7XG4gICAgcHVibGljIG1vZGlmaWVkRGF0ZT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVQaWNrZXJTZXJ2aWNlOiBGaWxlUGlja2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMgPSB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+XG4gICAgICAgICAgICBleHRlbnNpb24ucmVwbGFjZSgnLicsICcnKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgcHVibGljIG9uUmVzaXplKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfb25JbnB1dEZpbGVTZWxlY3QoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudFRhcmdldEZpbGVzID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzIGFzIEZpbGVMaXN0O1xuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJGaWxlcyA9ICgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXI/LmZpbGVzIGFzIEZpbGVMaXN0O1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZUR0b1tdID0gQXJyYXkuZnJvbShkYXRhVHJhbnNmZXJGaWxlcyA/IGRhdGFUcmFuc2ZlckZpbGVzIDogZXZlbnRUYXJnZXRGaWxlcyk7XG4gICAgICAgIHRoaXMub25GaWxlU2VsZWN0KGZpbGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxlU2VsZWN0KGZpbGVzOiBGaWxlRHRvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3RmlsZXM6IEZpbGVEdG9bXSA9IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNGaWxlTGltaXRFeGNlZWRlZChmaWxlcykpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVFcnJvcnMuZW1pdCh7XG4gICAgICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heEZpbGVMaW1pdCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRmlsZUNvbWJpbmVkU2l6ZUV4Y2VlZGVkKGZpbGVzKSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMsXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heENvbWJpbmVkRmlsZVNpemUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsZUlucHV0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVW5zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9uKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaWxlU2l6ZUV4Y2VlZGVkKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heEZpbGVTaXplJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmNvbmNhdChuZXdGaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEhhbmRsZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgZmlsZXM6IG5ld0ZpbGVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyRmlsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlRmlsZShmaWxlOiBGaWxlRHRvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVJbmRleCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gdGhpcy5maWxlcy5zcGxpY2UoZmlsZUluZGV4LCAxKTtcblxuICAgICAgICBpZiAocmVtb3ZlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlLmVtaXQoeyBmaWxlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmIChyZW1vdmVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZC5lbWl0KGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Eb3dsb2FkRmlsZShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmFuY2hvcikpIHJldHVybjtcblxuICAgICAgICB0aGlzLmRvd25sb2FkRmlsZS5lbWl0KHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLmFuY2hvcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWxlcygpOiBGaWxlRHRvW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdEZpbGVTaXplKHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAgQnl0ZXMnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBzaXplcyA9IFsnYnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChzaXplIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMikpICsgJyAnICsgc2l6ZXNbaV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIHRoaXMuaXNTbWFsbERldmljZSA9IHdpbmRvd1dpZHRoIDw9IEJyZWFrcG9pbnRzLlNNX01BWDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsZUxpbWl0RXhjZWVkZWQoZmlsZXM6IEZpbGVEdG9bXSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoICsgZmlsZXMubGVuZ3RoID4gdGhpcy5maWxlTGltaXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbGVDb21iaW5lZFNpemVFeGNlZWRlZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5tYXhDb21iaW5lZEZpbGVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlc0xpc3QgPSBbLi4uZmlsZXMsIC4uLnRoaXMuZmlsZXNdO1xuXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkU2l6ZSA9IGZpbGVzTGlzdC5yZWR1Y2UoKGNvbWJpbmVkU2l6ZSwgZmlsZSkgPT4gY29tYmluZWRTaXplICsgZmlsZS5zaXplLCAwKTtcblxuICAgICAgICByZXR1cm4gY29tYmluZWRTaXplID4gdGhpcy5tYXhDb21iaW5lZEZpbGVTaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWxlU2l6ZUV4Y2VlZGVkKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Vuc3VwcG9ydGVkRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG5cbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJGaWxlSW5wdXQoKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmlucHV0VXBsb2FkPy5uYXRpdmVFbGVtZW50KSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5wdXRVcGxvYWQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcGxvYWREYXRlKGJsb2JGaWxlOiBGaWxlRHRvW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9iRmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlUGlja2VyU2VydmljZVxuICAgICAgICAgICAgLmdldE1ldGFkYXRhQ3VzdG9tRmllbGQoeyBvYmplY3RJZDogYmxvYkZpbGVbMF0ub2JqZWN0SWQgPz8gJycgfSlcbiAgICAgICAgICAgIC50aGVuKChtZXRhZGF0YSkgPT4gdGhpcy5zZXRNb2RpZmllZERhdGUobWV0YWRhdGEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1vZGlmaWVkRGF0ZShtZXRhZGF0YTogTGlzdEJsb2JNZXRhZGF0YVJlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnSEgnKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IG1vbWVudChtZXRhZGF0YS5tb2RpZmllZCkuZm9ybWF0KCdtbScpO1xuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnREQnKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnTU0nKTtcbiAgICAgICAgY29uc3QgZnVsbFllYXIgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnWVlZWScpO1xuXG4gICAgICAgIHRoaXMubW9kaWZpZWREYXRlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmRhdGVfbW9kaWZpZWRfY3VzdG9tX2Jsb2InLCB7XG4gICAgICAgICAgICBob3VyLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGRheSxcbiAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgZnVsbFllYXIsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIiwiPGRpdlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJmaWxlLXBpY2tlclwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZpbGUtcGlja2VyLWNob29zZVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFVwbG9hZFxuICAgICAgICAgICAgW2lkXT1cImlkICsgJ2lucHV0LXVwbG9hZCdcIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiX29uSW5wdXRGaWxlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKHBlcm1pc3Npb25zLmluY2x1ZGVzKEFERF9QRVJNSVNTSU9OKSkge1xuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJ3VwbG9hZC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY2hvb3NlTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hdHRhY2hfZmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbnB1dFVwbG9hZC5jbGljaygpXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAhIWZvcm1Db250cm9sPy5kaXNhYmxlZCB8fCBmaWxlTGltaXQgPT09IGZpbGVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgW2lkXT1cImlkICsgJ2ZpbGV1cGxvYWQtbGlzdCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0XCJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1waWNrZXItbGlzdC1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWdyb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB0ZXh0LW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlcm1pc3Npb25zLmluY2x1ZGVzKFJFQURfUEVSTUlTU0lPTikgJiYgZmlsZS5zYXZlZEZpbGUpIHx8IGZpbGUucHJvZ3Jlc3MgPT09IDEwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkZXNjcmlwdGlvblVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobW9kaWZpZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtbmFtZS1kYXRlXCI+e3sgbW9kaWZpZWREYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsZS5pc1VwbG9hZGluZyAmJiAhaXNTbWFsbERldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLXByb2dyZXNzYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsZS5wcm9ncmVzcyA/PyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3I9XCJibHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcy1wcm9ncmVzc2Jhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmlzVXBsb2FkaW5nICYmIGlzU21hbGxEZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLXNwaW4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsUHJvZ3Jlc3MgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5sb2FkaW5nX2ZpbGUnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmlsZS5pc1VwbG9hZGluZyAmJiAhZmlsZS5lcnJvciAmJiBmaWxlLnByb2dyZXNzID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLWNoZWNrJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbFN1Y2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzVG9vbHRpcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZmlsZV9hdHRhY2hlZF9zdWNjZXNzZnVsbHknIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZmlsZV9hdHRhY2hlZF9zdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1maWxlLScgKyBpICsgJy1lcnJvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJmaWxlLmVycm9yPy5tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1waWNrZXItbGlzdC1maWxlLWFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmlzVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1maWxlLScgKyBpICsgJy1jYW5jZWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtYWN0aW9ucy1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWxVcGxvYWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FuY2VsTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLmluY2x1ZGVzKFJFTU9WRV9QRVJNSVNTSU9OKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmaWxlLmlzVXBsb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShkaXNhYmxlZCB8fCAhIWZvcm1Db250cm9sPy5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLXJlbW92ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtcGlja2VyLWxpc3QtZmlsZS1hY3Rpb25zLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUZpbGUoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsUmVtb3ZlIHx8IHJlbW92ZUxhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucmVtb3ZlJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVtb3ZlTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVzY3JpcHRpb25VcmxcbiAgICBsZXQtZmlsZVxuICAgIGxldC1pPVwiaW5kZXhcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLW5hbWUtbGluaydcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bG9hZEZpbGUoaSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsRmlsZU5hbWUgfHwgZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJyZWFrLXdvcmRzXCJcbiAgICAgICAgICAgICAgICA+e3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwiZmlsZS5vYmplY3RVUkxcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgZG93bmxvYWRcbiAgICAgICAgICAgICAgICAjYW5jaG9yXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI2Rlc2NyaXB0aW9uXG4gICAgbGV0LWZpbGVcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEZpbGVOYW1lIHx8IGZpbGUubmFtZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGZpbGUubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtcGlja2VyL3NyYy9saWIvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtcGlja2VyL3NyYy9saWIvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM1RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUYsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBeUIsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7QUFJMUY7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBaUJILE1BQU0sT0FBTyxtQkFBbUI7SUFDWCxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lB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UUFBUTtzQkFEZCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERFUFJFQ0FURURfQ09ORklHIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9jb21tb24vZGVwcmVjYXRlZC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBEZXByZWNhdGVkU2VsZWN0b3JEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NvbW1vbi9kZXByZWNhdGVkLXNlbGVjdG9yJztcbmltcG9ydCB7IEJyZWFrcG9pbnRzLCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGaWxlUGlja2VyU2VydmljZSB9IGZyb20gJy4vZmlsZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRHRvIH0gZnJvbSAnLi9tb2RlbHMvZmlsZS1kdG8nO1xuaW1wb3J0IHsgQUxMX1BFUk1JU1NJT05TLCBGaWxlUGlja2VyUGVybWlzc2lvbnMgfSBmcm9tICcuL21vZGVscy9maWxlLXBpY2tlci1wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBMaXN0QmxvYk1ldGFkYXRhUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9saXN0LWJsb2ItbWV0YWRhdGEnO1xuaW1wb3J0IHsgVXBsb2FkRXJyb3IgfSBmcm9tICcuL21vZGVscy91cGxvYWRFcnJvcic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgdXBsb2FkIGRlIGFycXVpdm9zIGNvbSBzdXBvcnRlIGEgc2VsZcOnw6NvIG3Dumx0aXBsYSxcbiAqIHZhbGlkYcOnw6NvIGRlIHRpcG8vdGFtYW5obywgY29udHJvbGUgZGUgcGVybWlzc8O1ZXMgKGFkaWNpb25hciwgbGVyLCByZW1vdmVyKSxcbiAqIGRvd25sb2FkIGUgY2FuY2VsYW1lbnRvIGRlIHVwbG9hZHMgZW0gYW5kYW1lbnRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1maWxlLXBpY2tlclxuICogICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gKiAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL3BkZlwiXG4gKiAgIFttYXhGaWxlU2l6ZV09XCI1MjQyODgwXCJcbiAqICAgW2ZpbGVzXT1cImFycXVpdm9zXCJcbiAqICAgKHVwbG9hZEhhbmRsZXIpPVwib25VcGxvYWQoJGV2ZW50KVwiXG4gKiAgIChyZW1vdmVGaWxlKT1cIm9uUmVtb3ZlKCRldmVudClcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtZmlsZS1waWNrZXIsIHMtZmlsZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0RGlyZWN0aXZlczogW0RlcHJlY2F0ZWRTZWxlY3RvckRpcmVjdGl2ZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IERFUFJFQ0FURURfQ09ORklHLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgICAgICAgICBvbGRTZWxlY3RvcjogJ3MtZmlsZS11cGxvYWQnLFxuICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yOiAncy1maWxlLXBpY2tlcicsXG4gICAgICAgICAgICAgICAgcmVtb3ZhbFZlcnNpb246ICcyMC4wLjAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGaWxlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGlja2VyU2VydmljZSA9IGluamVjdChGaWxlUGlja2VyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICBwdWJsaWMgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICBwdWJsaWMgQUREX1BFUk1JU1NJT046IEZpbGVQaWNrZXJQZXJtaXNzaW9ucyA9ICdhZGQnO1xuICAgIHB1YmxpYyBSRUFEX1BFUk1JU1NJT046IEZpbGVQaWNrZXJQZXJtaXNzaW9ucyA9ICdyZWFkJztcbiAgICBwdWJsaWMgUkVNT1ZFX1BFUk1JU1NJT046IEZpbGVQaWNrZXJQZXJtaXNzaW9ucyA9ICdyZW1vdmUnO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRVcGxvYWQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0VXBsb2FkOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdhbmNob3InLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuY2hvcjogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBJZGVudGlmaWNhZG9yIGRvIGNvbXBvbmVudGUgbm8gRE9NLiBHZXJhZG8gYXV0b21hdGljYW1lbnRlIHNlIG7Do28gaW5mb3JtYWRvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYHMtZmlsZS1waWNrZXItJHtGaWxlUGlja2VyQ29tcG9uZW50Lm5leHRJZCsrfWA7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIHNlbGXDp8OjbyBkZSBhcnF1aXZvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNob29zZUxhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vw6fDo28gZGUgYXJxdWl2by4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZW1vdmVMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgY2FuY2VsYW1lbnRvIGRlIHVwbG9hZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGV4dG8gZG8gdG9vbHRpcCBleGliaWRvIGFww7NzIHVwbG9hZCBiZW0tc3VjZWRpZG8uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VjY2Vzc1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFBlcm1pdGUgc2VsZWNpb25hciBtw7psdGlwbG9zIGFycXVpdm9zIGFvIG1lc21vIHRlbXBvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG11bHRpcGxlPzogYm9vbGVhbjtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGlwb3MgTUlNRSBhY2VpdG9zIHBlbG8gc2VsZXRvciBkZSBhcnF1aXZvIChleC46IGAnYXBwbGljYXRpb24vcGRmLGltYWdlLyonYCkuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWNjZXB0Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBleHRlbnPDtWVzIGRlIGFycXVpdm8gYWNlaXRhcyBwYXJhIHZhbGlkYcOnw6NvIChleC46IGBbJy5wZGYnLCAnLmRvY3gnXWApLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExhYmVsIEFSSUEgcGFyYSBvIG5vbWUgZG8gYXJxdWl2bywgcGFyYSBsZWl0b3JlcyBkZSB0ZWxhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFyaWFMYWJlbEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUYW1hbmhvIG3DoXhpbW8gcG9yIGFycXVpdm8gZW0gYnl0ZXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWF4RmlsZVNpemU/OiBudW1iZXI7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFRhbWFuaG8gbcOheGltbyBjb21iaW5hZG8gZGUgdG9kb3Mgb3MgYXJxdWl2b3MgZW0gYnl0ZXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWF4Q29tYmluZWRGaWxlU2l6ZT86IG51bWJlcjtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIHF1ZSBwb2RlbSBzZXIgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVMaW1pdD86IG51bWJlcjtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFiZWwgQVJJQSBwYXJhIGEgYmFycmEgZGUgcHJvZ3Jlc3NvIGRvIHVwbG9hZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxQcm9ncmVzcz86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFiZWwgQVJJQSBwYXJhIG8gw61jb25lIGRlIHN1Y2Vzc28uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXJpYUxhYmVsU3VjY2Vzcz86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFiZWwgQVJJQSBwYXJhIG1lbnNhZ2VucyBkZSBlcnJvIGRlIHZhbGlkYcOnw6NvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFyaWFMYWJlbEVycm9yPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMYWJlbCBBUklBIHBhcmEgbyBib3TDo28gZGUgcmVtb8Onw6NvIGRlIGFycXVpdm8uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXJpYUxhYmVsUmVtb3ZlPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBGb3JtQ29udHJvbCBleHRlcm5vIHZpbmN1bGFkbyBhbyBjb21wb25lbnRlIHBhcmEgY29udHJvbGUgZGUgZXN0YWRvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1Db250cm9sPzogRm9ybUNvbnRyb2w7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIERlc2FiaWxpdGEgdG9kYXMgYXMgaW50ZXJhw6fDtWVzIGRvIGNvbXBvbmVudGUuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgYSBkYXRhIGRlIHVwbG9hZCBkZSBjYWRhIGFycXVpdm8uIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0ZpbGVVcGxvYWREYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIHBlcm1pc3PDtWVzIGhhYmlsaXRhZGFzIG5vIGNvbXBvbmVudGU6IGAnYWRkJ2AsIGAncmVhZCdgLCBgJ3JlbW92ZSdgLiBAZGVmYXVsdCBBTExfUEVSTUlTU0lPTlMgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogRmlsZVBpY2tlclBlcm1pc3Npb25zW10gPSBBTExfUEVSTUlTU0lPTlM7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgYXJxdWl2b3MgasOhIGVudmlhZG9zIGEgc2VyZW0gZXhpYmlkb3Mgbm8gY29tcG9uZW50ZS5cbiAgICAgKiBBbyBhdHJpYnVpciwgb3MgYXJxdWl2b3Mgc8OjbyBwcm9jZXNzYWRvcyBlIHN1YXMgVVJMcyBzw6NvIGdlcmFkYXMgcGFyYSBwcmV2aWV3LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBmaWxlcyhmaWxlczogRmlsZUR0b1tdKSB7XG4gICAgICAgIGlmICghZmlsZXMgfHwgZmlsZXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93RmlsZVVwbG9hZERhdGUgJiYgZmlsZXNbMF0/Lm9iamVjdElkKSB7XG4gICAgICAgICAgICB0aGlzLmdldFVwbG9hZERhdGUoZmlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwod2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBzZWxlY2lvbmEgYXJxdWl2b3MgdsOhbGlkb3MgcGFyYSB1cGxvYWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHVwbG9hZEhhbmRsZXI6IEV2ZW50RW1pdHRlcjx7IGZpbGVzOiBGaWxlRHRvW10gfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gcmVtb3ZlIHVtIGFycXVpdm8gZGEgbGlzdGEuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlbW92ZUZpbGU6IEV2ZW50RW1pdHRlcjx7IGZpbGU6IEZpbGUgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2FuY2VsYSB1bSB1cGxvYWQgZW0gYW5kYW1lbnRvLiBFbWl0ZSBvIMOtbmRpY2UgZG8gYXJxdWl2byBjYW5jZWxhZG8uICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNhbmNlbFVwbG9hZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2xpY2EgcGFyYSBiYWl4YXIgdW0gYXJxdWl2by4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlOiBFdmVudEVtaXR0ZXI8eyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIHVtIGFycXVpdm8gbsOjbyBwYXNzYSBuYSB2YWxpZGHDp8OjbyBkZSB0aXBvLCB0YW1hbmhvIG91IGxpbWl0ZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsaWRhdGVFcnJvcnM6IEV2ZW50RW1pdHRlcjxVcGxvYWRFcnJvcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIF9maWxlczogRmlsZUR0b1tdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHB1YmxpYyBpc1NtYWxsRGV2aWNlID0gZmFsc2U7XG4gICAgcHVibGljIGlucHV0VmFsdWUgPSAnJztcbiAgICBwdWJsaWMgbW9kaWZpZWREYXRlPzogc3RyaW5nO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMgPSB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+XG4gICAgICAgICAgICBleHRlbnNpb24ucmVwbGFjZSgnLicsICcnKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgcHVibGljIG9uUmVzaXplKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfb25JbnB1dEZpbGVTZWxlY3QoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudFRhcmdldEZpbGVzID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzIGFzIEZpbGVMaXN0O1xuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJGaWxlcyA9ICgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXI/LmZpbGVzIGFzIEZpbGVMaXN0O1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZUR0b1tdID0gQXJyYXkuZnJvbShkYXRhVHJhbnNmZXJGaWxlcyA/IGRhdGFUcmFuc2ZlckZpbGVzIDogZXZlbnRUYXJnZXRGaWxlcyk7XG4gICAgICAgIHRoaXMub25GaWxlU2VsZWN0KGZpbGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxlU2VsZWN0KGZpbGVzOiBGaWxlRHRvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3RmlsZXM6IEZpbGVEdG9bXSA9IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNGaWxlTGltaXRFeGNlZWRlZChmaWxlcykpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVFcnJvcnMuZW1pdCh7XG4gICAgICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heEZpbGVMaW1pdCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRmlsZUNvbWJpbmVkU2l6ZUV4Y2VlZGVkKGZpbGVzKSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMsXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heENvbWJpbmVkRmlsZVNpemUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsZUlucHV0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVW5zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9uKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaWxlU2l6ZUV4Y2VlZGVkKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVycm9ycy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ21heEZpbGVTaXplJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmNvbmNhdChuZXdGaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEhhbmRsZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgZmlsZXM6IG5ld0ZpbGVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyRmlsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlRmlsZShmaWxlOiBGaWxlRHRvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVJbmRleCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gdGhpcy5maWxlcy5zcGxpY2UoZmlsZUluZGV4LCAxKTtcblxuICAgICAgICBpZiAocmVtb3ZlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlLmVtaXQoeyBmaWxlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmIChyZW1vdmVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZC5lbWl0KGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Eb3dsb2FkRmlsZShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmFuY2hvcikpIHJldHVybjtcblxuICAgICAgICB0aGlzLmRvd25sb2FkRmlsZS5lbWl0KHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLmFuY2hvcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWxlcygpOiBGaWxlRHRvW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdEZpbGVTaXplKHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAgQnl0ZXMnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBzaXplcyA9IFsnYnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChzaXplIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMikpICsgJyAnICsgc2l6ZXNbaV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIHRoaXMuaXNTbWFsbERldmljZSA9IHdpbmRvd1dpZHRoIDw9IEJyZWFrcG9pbnRzLlNNX01BWDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsZUxpbWl0RXhjZWVkZWQoZmlsZXM6IEZpbGVEdG9bXSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoICsgZmlsZXMubGVuZ3RoID4gdGhpcy5maWxlTGltaXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbGVDb21iaW5lZFNpemVFeGNlZWRlZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5tYXhDb21iaW5lZEZpbGVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlc0xpc3QgPSBbLi4uZmlsZXMsIC4uLnRoaXMuZmlsZXNdO1xuXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkU2l6ZSA9IGZpbGVzTGlzdC5yZWR1Y2UoKGNvbWJpbmVkU2l6ZSwgZmlsZSkgPT4gY29tYmluZWRTaXplICsgZmlsZS5zaXplLCAwKTtcblxuICAgICAgICByZXR1cm4gY29tYmluZWRTaXplID4gdGhpcy5tYXhDb21iaW5lZEZpbGVTaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWxlU2l6ZUV4Y2VlZGVkKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Vuc3VwcG9ydGVkRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG5cbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJGaWxlSW5wdXQoKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmlucHV0VXBsb2FkPy5uYXRpdmVFbGVtZW50KSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5wdXRVcGxvYWQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcGxvYWREYXRlKGJsb2JGaWxlOiBGaWxlRHRvW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9iRmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlUGlja2VyU2VydmljZVxuICAgICAgICAgICAgLmdldE1ldGFkYXRhQ3VzdG9tRmllbGQoeyBvYmplY3RJZDogYmxvYkZpbGVbMF0ub2JqZWN0SWQgPz8gJycgfSlcbiAgICAgICAgICAgIC50aGVuKChtZXRhZGF0YSkgPT4gdGhpcy5zZXRNb2RpZmllZERhdGUobWV0YWRhdGEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1vZGlmaWVkRGF0ZShtZXRhZGF0YTogTGlzdEJsb2JNZXRhZGF0YVJlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnSEgnKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IG1vbWVudChtZXRhZGF0YS5tb2RpZmllZCkuZm9ybWF0KCdtbScpO1xuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnREQnKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnTU0nKTtcbiAgICAgICAgY29uc3QgZnVsbFllYXIgPSBtb21lbnQobWV0YWRhdGEubW9kaWZpZWQpLmZvcm1hdCgnWVlZWScpO1xuXG4gICAgICAgIHRoaXMubW9kaWZpZWREYXRlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmRhdGVfbW9kaWZpZWRfY3VzdG9tX2Jsb2InLCB7XG4gICAgICAgICAgICBob3VyLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGRheSxcbiAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgZnVsbFllYXIsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIiwiPGRpdlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJmaWxlLXBpY2tlclwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZpbGUtcGlja2VyLWNob29zZVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFVwbG9hZFxuICAgICAgICAgICAgW2lkXT1cImlkICsgJ2lucHV0LXVwbG9hZCdcIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiX29uSW5wdXRGaWxlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKHBlcm1pc3Npb25zLmluY2x1ZGVzKEFERF9QRVJNSVNTSU9OKSkge1xuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJ3VwbG9hZC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY2hvb3NlTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hdHRhY2hfZmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbnB1dFVwbG9hZC5jbGljaygpXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAhIWZvcm1Db250cm9sPy5kaXNhYmxlZCB8fCBmaWxlTGltaXQgPT09IGZpbGVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgW2lkXT1cImlkICsgJ2ZpbGV1cGxvYWQtbGlzdCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0XCJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1waWNrZXItbGlzdC1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWdyb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB0ZXh0LW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlcm1pc3Npb25zLmluY2x1ZGVzKFJFQURfUEVSTUlTU0lPTikgJiYgZmlsZS5zYXZlZEZpbGUpIHx8IGZpbGUucHJvZ3Jlc3MgPT09IDEwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkZXNjcmlwdGlvblVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobW9kaWZpZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtbmFtZS1kYXRlXCI+e3sgbW9kaWZpZWREYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsZS5pc1VwbG9hZGluZyAmJiAhaXNTbWFsbERldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLXByb2dyZXNzYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsZS5wcm9ncmVzcyA/PyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3I9XCJibHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcy1wcm9ncmVzc2Jhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmlzVXBsb2FkaW5nICYmIGlzU21hbGxEZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLXNwaW4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsUHJvZ3Jlc3MgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5sb2FkaW5nX2ZpbGUnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmlsZS5pc1VwbG9hZGluZyAmJiAhZmlsZS5lcnJvciAmJiBmaWxlLnByb2dyZXNzID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLWNoZWNrJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbFN1Y2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzVG9vbHRpcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZmlsZV9hdHRhY2hlZF9zdWNjZXNzZnVsbHknIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZmlsZV9hdHRhY2hlZF9zdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1maWxlLScgKyBpICsgJy1lcnJvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJmaWxlLmVycm9yPy5tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1waWNrZXItbGlzdC1maWxlLWFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmlzVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1maWxlLScgKyBpICsgJy1jYW5jZWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXBpY2tlci1saXN0LWZpbGUtYWN0aW9ucy1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWxVcGxvYWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FuY2VsTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLmluY2x1ZGVzKFJFTU9WRV9QRVJNSVNTSU9OKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmaWxlLmlzVXBsb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShkaXNhYmxlZCB8fCAhIWZvcm1Db250cm9sPy5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLXJlbW92ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtcGlja2VyLWxpc3QtZmlsZS1hY3Rpb25zLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUZpbGUoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsUmVtb3ZlIHx8IHJlbW92ZUxhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucmVtb3ZlJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVtb3ZlTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVzY3JpcHRpb25VcmxcbiAgICBsZXQtZmlsZVxuICAgIGxldC1pPVwiaW5kZXhcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWZpbGUtJyArIGkgKyAnLW5hbWUtbGluaydcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bG9hZEZpbGUoaSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsRmlsZU5hbWUgfHwgZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJyZWFrLXdvcmRzXCJcbiAgICAgICAgICAgICAgICA+e3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwiZmlsZS5vYmplY3RVUkxcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgZG93bmxvYWRcbiAgICAgICAgICAgICAgICAjYW5jaG9yXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI2Rlc2NyaXB0aW9uXG4gICAgbGV0LWZpbGVcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEZpbGVOYW1lIHx8IGZpbGUubmFtZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGZpbGUubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=