ngx-bootstrap 10.3.0 → 11.0.0

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 (616) hide show
  1. package/README.md +3 -5
  2. package/accordion/accordion-group.component.d.ts +1 -1
  3. package/accordion/accordion.component.d.ts +1 -1
  4. package/accordion/esm2022/accordion-group.component.mjs +84 -0
  5. package/accordion/{esm2020 → esm2022}/accordion.component.mjs +4 -4
  6. package/accordion/{esm2020 → esm2022}/accordion.config.mjs +4 -4
  7. package/accordion/{esm2020 → esm2022}/accordion.module.mjs +5 -5
  8. package/accordion/{fesm2020 → fesm2022}/ngx-bootstrap-accordion.mjs +29 -29
  9. package/accordion/fesm2022/ngx-bootstrap-accordion.mjs.map +1 -0
  10. package/accordion/package.json +8 -14
  11. package/alert/alert.component.d.ts +1 -1
  12. package/alert/esm2022/alert.component.mjs +77 -0
  13. package/alert/{esm2020 → esm2022}/alert.config.mjs +4 -4
  14. package/alert/{esm2020 → esm2022}/alert.module.mjs +5 -5
  15. package/alert/{fesm2015 → fesm2022}/ngx-bootstrap-alert.mjs +10 -10
  16. package/alert/fesm2022/ngx-bootstrap-alert.mjs.map +1 -0
  17. package/alert/package.json +8 -14
  18. package/buttons/button-checkbox.directive.d.ts +2 -2
  19. package/buttons/button-radio.directive.d.ts +1 -1
  20. package/buttons/{esm2020 → esm2022}/button-checkbox.directive.mjs +4 -4
  21. package/buttons/{esm2020 → esm2022}/button-radio-group.directive.mjs +4 -4
  22. package/buttons/esm2022/button-radio.directive.mjs +188 -0
  23. package/buttons/{esm2020 → esm2022}/buttons.module.mjs +5 -5
  24. package/buttons/{fesm2020 → fesm2022}/ngx-bootstrap-buttons.mjs +26 -26
  25. package/buttons/fesm2022/ngx-bootstrap-buttons.mjs.map +1 -0
  26. package/buttons/package.json +7 -13
  27. package/carousel/carousel.component.d.ts +1 -1
  28. package/carousel/esm2022/carousel.component.mjs +713 -0
  29. package/carousel/{esm2020 → esm2022}/carousel.config.mjs +4 -4
  30. package/carousel/{esm2020 → esm2022}/carousel.module.mjs +5 -5
  31. package/carousel/{esm2020 → esm2022}/slide.component.mjs +6 -6
  32. package/carousel/{fesm2020 → fesm2022}/ngx-bootstrap-carousel.mjs +65 -56
  33. package/carousel/fesm2022/ngx-bootstrap-carousel.mjs.map +1 -0
  34. package/carousel/package.json +8 -14
  35. package/carousel/slide.component.d.ts +1 -1
  36. package/chronos/duration/create.d.ts +1 -1
  37. package/chronos/{fesm2020 → fesm2022}/ngx-bootstrap-chronos.mjs +4 -0
  38. package/chronos/fesm2022/ngx-bootstrap-chronos.mjs.map +1 -0
  39. package/chronos/locale/locale.class.d.ts +3 -3
  40. package/chronos/moment/calendar.d.ts +1 -1
  41. package/chronos/package.json +5 -11
  42. package/chronos/parse/regex.d.ts +1 -1
  43. package/chronos/testing/chain.d.ts +3 -3
  44. package/chronos/types.d.ts +4 -4
  45. package/chronos/units/aliases.d.ts +1 -1
  46. package/collapse/collapse.directive.d.ts +1 -1
  47. package/collapse/esm2022/collapse.directive.mjs +168 -0
  48. package/collapse/{esm2020 → esm2022}/collapse.module.mjs +5 -5
  49. package/collapse/{fesm2020 → fesm2022}/ngx-bootstrap-collapse.mjs +26 -26
  50. package/collapse/fesm2022/ngx-bootstrap-collapse.mjs.map +1 -0
  51. package/collapse/package.json +8 -14
  52. package/component-loader/{esm2020 → esm2022}/component-loader.factory.mjs +4 -4
  53. package/component-loader/{fesm2020 → fesm2022}/ngx-bootstrap-component-loader.mjs +5 -3
  54. package/component-loader/fesm2022/ngx-bootstrap-component-loader.mjs.map +1 -0
  55. package/component-loader/listen-options.model.d.ts +1 -1
  56. package/component-loader/package.json +7 -13
  57. package/datepicker/bs-datepicker-inline.component.d.ts +1 -1
  58. package/datepicker/bs-datepicker.component.d.ts +1 -1
  59. package/datepicker/bs-daterangepicker-inline.component.d.ts +1 -1
  60. package/datepicker/bs-daterangepicker.component.d.ts +1 -1
  61. package/datepicker/{esm2020 → esm2022}/bs-datepicker-inline.component.mjs +4 -4
  62. package/datepicker/{esm2020 → esm2022}/bs-datepicker-inline.config.mjs +4 -4
  63. package/datepicker/{esm2020 → esm2022}/bs-datepicker-input.directive.mjs +4 -4
  64. package/datepicker/esm2022/bs-datepicker.component.mjs +303 -0
  65. package/datepicker/{esm2020 → esm2022}/bs-datepicker.config.mjs +4 -4
  66. package/datepicker/{esm2020 → esm2022}/bs-datepicker.module.mjs +32 -32
  67. package/datepicker/esm2022/bs-daterangepicker-inline.component.mjs +163 -0
  68. package/datepicker/{esm2020 → esm2022}/bs-daterangepicker-inline.config.mjs +4 -4
  69. package/datepicker/{esm2020 → esm2022}/bs-daterangepicker-input.directive.mjs +4 -4
  70. package/datepicker/esm2022/bs-daterangepicker.component.mjs +296 -0
  71. package/datepicker/{esm2020 → esm2022}/bs-daterangepicker.config.mjs +4 -4
  72. package/datepicker/{esm2020 → esm2022}/bs-locale.service.mjs +4 -4
  73. package/datepicker/esm2022/reducer/bs-datepicker.actions.mjs +143 -0
  74. package/datepicker/{esm2020 → esm2022}/reducer/bs-datepicker.effects.mjs +4 -4
  75. package/datepicker/{esm2020 → esm2022}/reducer/bs-datepicker.store.mjs +4 -4
  76. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-calendar-layout.component.mjs +6 -6
  77. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-current-date-view.component.mjs +4 -4
  78. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-custom-dates-view.component.mjs +6 -6
  79. package/datepicker/esm2022/themes/bs/bs-datepicker-container.component.mjs +192 -0
  80. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-datepicker-day-decorator.directive.mjs +4 -4
  81. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-datepicker-inline-container.component.mjs +9 -9
  82. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-datepicker-navigation-view.component.mjs +6 -6
  83. package/datepicker/esm2022/themes/bs/bs-daterangepicker-container.component.mjs +261 -0
  84. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-daterangepicker-inline-container.component.mjs +9 -9
  85. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-days-calendar-view.component.mjs +6 -6
  86. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-months-calendar-view.component.mjs +6 -6
  87. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-timepicker-view.component.mjs +6 -6
  88. package/datepicker/{esm2020 → esm2022}/themes/bs/bs-years-calendar-view.component.mjs +6 -6
  89. package/datepicker/{fesm2020 → fesm2022}/ngx-bootstrap-datepicker.mjs +226 -226
  90. package/datepicker/fesm2022/ngx-bootstrap-datepicker.mjs.map +1 -0
  91. package/datepicker/models/index.d.ts +1 -1
  92. package/datepicker/package.json +13 -19
  93. package/datepicker/themes/bs/bs-current-date-view.component.d.ts +1 -1
  94. package/datepicker/themes/bs/bs-custom-dates-view.component.d.ts +1 -1
  95. package/datepicker/themes/bs/bs-datepicker-day-decorator.directive.d.ts +1 -1
  96. package/datepicker/themes/bs/bs-datepicker-navigation-view.component.d.ts +1 -1
  97. package/datepicker/themes/bs/bs-days-calendar-view.component.d.ts +1 -1
  98. package/datepicker/themes/bs/bs-months-calendar-view.component.d.ts +1 -1
  99. package/datepicker/themes/bs/bs-years-calendar-view.component.d.ts +1 -1
  100. package/datepicker/utils/matrix-utils.d.ts +1 -1
  101. package/dropdown/bs-dropdown.directive.d.ts +1 -1
  102. package/dropdown/esm2022/bs-dropdown-container.component.mjs +79 -0
  103. package/dropdown/{esm2020 → esm2022}/bs-dropdown-menu.directive.mjs +4 -4
  104. package/dropdown/{esm2020 → esm2022}/bs-dropdown-toggle.directive.mjs +4 -4
  105. package/dropdown/{esm2020 → esm2022}/bs-dropdown.config.mjs +4 -4
  106. package/dropdown/esm2022/bs-dropdown.directive.mjs +340 -0
  107. package/dropdown/{esm2020 → esm2022}/bs-dropdown.module.mjs +10 -10
  108. package/dropdown/{esm2020 → esm2022}/bs-dropdown.state.mjs +4 -4
  109. package/dropdown/{fesm2020 → fesm2022}/ngx-bootstrap-dropdown.mjs +62 -62
  110. package/dropdown/fesm2022/ngx-bootstrap-dropdown.mjs.map +1 -0
  111. package/dropdown/package.json +10 -16
  112. package/fesm2022/ngx-bootstrap.mjs.map +1 -0
  113. package/focus-trap/boolean-property.d.ts +1 -1
  114. package/focus-trap/{esm2020 → esm2022}/focus-trap-manager.mjs +4 -4
  115. package/focus-trap/esm2022/focus-trap.mjs +399 -0
  116. package/focus-trap/{esm2020 → esm2022}/focus-trap.module.mjs +5 -5
  117. package/focus-trap/{esm2020 → esm2022}/interactivity-checker.mjs +4 -4
  118. package/focus-trap/{esm2020 → esm2022}/platform.mjs +4 -4
  119. package/focus-trap/{fesm2020 → fesm2022}/ngx-bootstrap-focus-trap.mjs +43 -39
  120. package/focus-trap/fesm2022/ngx-bootstrap-focus-trap.mjs.map +1 -0
  121. package/focus-trap/focus-trap.d.ts +1 -1
  122. package/focus-trap/package.json +8 -14
  123. package/locale/fesm2022/ngx-bootstrap-locale.mjs.map +1 -0
  124. package/locale/package.json +6 -12
  125. package/mini-ngrx/fesm2022/ngx-bootstrap-mini-ngrx.mjs.map +1 -0
  126. package/mini-ngrx/package.json +6 -12
  127. package/mini-ngrx/public_api.d.ts +1 -1
  128. package/modal/{esm2020 → esm2022}/bs-modal-ref.service.mjs +4 -4
  129. package/modal/{esm2020 → esm2022}/bs-modal.service.mjs +4 -4
  130. package/modal/esm2022/modal-backdrop.component.mjs +50 -0
  131. package/modal/{esm2020 → esm2022}/modal-container.component.mjs +6 -6
  132. package/modal/{esm2020 → esm2022}/modal-options.class.mjs +4 -4
  133. package/modal/esm2022/modal.directive.mjs +364 -0
  134. package/modal/{esm2020 → esm2022}/modal.module.mjs +7 -7
  135. package/modal/{fesm2020 → fesm2022}/ngx-bootstrap-modal.mjs +44 -42
  136. package/modal/fesm2022/ngx-bootstrap-modal.mjs.map +1 -0
  137. package/modal/modal.directive.d.ts +1 -1
  138. package/modal/models/index.d.ts +1 -1
  139. package/modal/package.json +8 -14
  140. package/package.json +9 -15
  141. package/pagination/{esm2020 → esm2022}/pager.component.mjs +4 -4
  142. package/pagination/{esm2020 → esm2022}/pagination.component.mjs +4 -4
  143. package/pagination/{esm2020 → esm2022}/pagination.config.mjs +4 -4
  144. package/pagination/{esm2020 → esm2022}/pagination.module.mjs +5 -5
  145. package/pagination/{fesm2020 → fesm2022}/ngx-bootstrap-pagination.mjs +13 -13
  146. package/pagination/fesm2022/ngx-bootstrap-pagination.mjs.map +1 -0
  147. package/pagination/package.json +8 -14
  148. package/pagination/pager.component.d.ts +1 -1
  149. package/pagination/pagination.component.d.ts +1 -1
  150. package/popover/esm2022/popover-container.component.mjs +46 -0
  151. package/popover/{esm2020 → esm2022}/popover.config.mjs +4 -4
  152. package/popover/esm2022/popover.directive.mjs +241 -0
  153. package/popover/{esm2020 → esm2022}/popover.module.mjs +5 -5
  154. package/popover/{fesm2020 → fesm2022}/ngx-bootstrap-popover.mjs +31 -31
  155. package/popover/fesm2022/ngx-bootstrap-popover.mjs.map +1 -0
  156. package/popover/package.json +9 -15
  157. package/popover/popover-container.component.d.ts +1 -1
  158. package/popover/popover.directive.d.ts +1 -1
  159. package/positioning/{esm2020 → esm2022}/positioning.service.mjs +4 -4
  160. package/positioning/{fesm2020 → fesm2022}/ngx-bootstrap-positioning.mjs +3 -3
  161. package/positioning/fesm2022/ngx-bootstrap-positioning.mjs.map +1 -0
  162. package/positioning/models/index.d.ts +1 -1
  163. package/positioning/package.json +10 -16
  164. package/progressbar/bar.component.d.ts +1 -1
  165. package/progressbar/{esm2020 → esm2022}/bar.component.mjs +4 -4
  166. package/progressbar/esm2022/progressbar.component.mjs +53 -0
  167. package/progressbar/{esm2020 → esm2022}/progressbar.config.mjs +4 -4
  168. package/progressbar/{esm2020 → esm2022}/progressbar.module.mjs +5 -5
  169. package/progressbar/{fesm2020 → fesm2022}/ngx-bootstrap-progressbar.mjs +24 -24
  170. package/progressbar/fesm2022/ngx-bootstrap-progressbar.mjs.map +1 -0
  171. package/progressbar/package.json +7 -13
  172. package/progressbar/progressbar-type.interface.d.ts +1 -1
  173. package/progressbar/progressbar.component.d.ts +1 -1
  174. package/rating/{esm2020 → esm2022}/rating.component.mjs +4 -4
  175. package/rating/{esm2020 → esm2022}/rating.config.mjs +4 -4
  176. package/rating/{esm2020 → esm2022}/rating.module.mjs +5 -5
  177. package/rating/{fesm2015 → fesm2022}/ngx-bootstrap-rating.mjs +10 -10
  178. package/rating/fesm2022/ngx-bootstrap-rating.mjs.map +1 -0
  179. package/rating/package.json +8 -14
  180. package/rating/rating.component.d.ts +1 -1
  181. package/schematics/collection.json +1 -1
  182. package/schematics/package.json +7 -7
  183. package/schematics/utils/current_dependency_versions.json +1 -1
  184. package/schematics/utils/index.d.ts +0 -2
  185. package/schematics/utils/index.js +1 -13
  186. package/schematics/utils/index.js.map +1 -1
  187. package/sortable/{esm2020 → esm2022}/draggable-item.service.mjs +4 -4
  188. package/sortable/esm2022/sortable.component.mjs +266 -0
  189. package/sortable/{esm2020 → esm2022}/sortable.module.mjs +5 -5
  190. package/sortable/{fesm2020 → fesm2022}/ngx-bootstrap-sortable.mjs +28 -28
  191. package/sortable/fesm2022/ngx-bootstrap-sortable.mjs.map +1 -0
  192. package/sortable/package.json +10 -16
  193. package/sortable/sortable.component.d.ts +1 -1
  194. package/tabs/esm2022/ng-transclude.directive.mjs +28 -0
  195. package/tabs/{esm2020 → esm2022}/tab-heading.directive.mjs +4 -4
  196. package/tabs/esm2022/tab.directive.mjs +115 -0
  197. package/tabs/{esm2020 → esm2022}/tabs.module.mjs +11 -11
  198. package/tabs/esm2022/tabset.component.mjs +216 -0
  199. package/tabs/{esm2020 → esm2022}/tabset.config.mjs +4 -4
  200. package/tabs/{fesm2015 → fesm2022}/ngx-bootstrap-tabs.mjs +63 -63
  201. package/tabs/fesm2022/ngx-bootstrap-tabs.mjs.map +1 -0
  202. package/tabs/ng-transclude.directive.d.ts +1 -1
  203. package/tabs/package.json +7 -13
  204. package/tabs/tab.directive.d.ts +1 -1
  205. package/tabs/tabset.component.d.ts +1 -1
  206. package/timepicker/esm2022/reducer/timepicker.actions.mjs +53 -0
  207. package/timepicker/{esm2020 → esm2022}/reducer/timepicker.store.mjs +4 -4
  208. package/timepicker/{esm2020 → esm2022}/timepicker.component.mjs +4 -4
  209. package/timepicker/{esm2020 → esm2022}/timepicker.config.mjs +4 -4
  210. package/timepicker/{esm2020 → esm2022}/timepicker.module.mjs +5 -5
  211. package/timepicker/{fesm2020 → fesm2022}/ngx-bootstrap-timepicker.mjs +22 -22
  212. package/timepicker/fesm2022/ngx-bootstrap-timepicker.mjs.map +1 -0
  213. package/timepicker/package.json +10 -16
  214. package/timepicker/reducer/timepicker.reducer.d.ts +1 -3
  215. package/timepicker/timepicker.component.d.ts +1 -1
  216. package/timepicker/timepicker.models.d.ts +1 -1
  217. package/tooltip/{esm2020 → esm2022}/tooltip-container.component.mjs +9 -9
  218. package/tooltip/{esm2020 → esm2022}/tooltip.config.mjs +4 -4
  219. package/tooltip/esm2022/tooltip.directive.mjs +342 -0
  220. package/tooltip/{esm2020 → esm2022}/tooltip.module.mjs +5 -5
  221. package/tooltip/{fesm2020 → fesm2022}/ngx-bootstrap-tooltip.mjs +61 -61
  222. package/tooltip/fesm2022/ngx-bootstrap-tooltip.mjs.map +1 -0
  223. package/tooltip/package.json +10 -16
  224. package/tooltip/tooltip.directive.d.ts +1 -1
  225. package/typeahead/esm2022/typeahead-container.component.mjs +311 -0
  226. package/typeahead/{esm2020 → esm2022}/typeahead.config.mjs +4 -4
  227. package/typeahead/{esm2020 → esm2022}/typeahead.directive.mjs +4 -4
  228. package/typeahead/{esm2020 → esm2022}/typeahead.module.mjs +5 -5
  229. package/typeahead/{fesm2020 → fesm2022}/ngx-bootstrap-typeahead.mjs +20 -20
  230. package/typeahead/fesm2022/ngx-bootstrap-typeahead.mjs.map +1 -0
  231. package/typeahead/package.json +12 -18
  232. package/typeahead/typeahead.directive.d.ts +3 -3
  233. package/utils/fesm2022/ngx-bootstrap-utils.mjs.map +1 -0
  234. package/utils/package.json +6 -12
  235. package/utils/theme-provider.d.ts +1 -1
  236. package/utils/triggers.d.ts +1 -1
  237. package/accordion/esm2020/accordion-group.component.mjs +0 -84
  238. package/accordion/fesm2015/ngx-bootstrap-accordion.mjs +0 -182
  239. package/accordion/fesm2015/ngx-bootstrap-accordion.mjs.map +0 -1
  240. package/accordion/fesm2020/ngx-bootstrap-accordion.mjs.map +0 -1
  241. package/alert/esm2020/alert.component.mjs +0 -77
  242. package/alert/fesm2015/ngx-bootstrap-alert.mjs.map +0 -1
  243. package/alert/fesm2020/ngx-bootstrap-alert.mjs +0 -119
  244. package/alert/fesm2020/ngx-bootstrap-alert.mjs.map +0 -1
  245. package/buttons/esm2020/button-radio.directive.mjs +0 -188
  246. package/buttons/fesm2015/ngx-bootstrap-buttons.mjs +0 -448
  247. package/buttons/fesm2015/ngx-bootstrap-buttons.mjs.map +0 -1
  248. package/buttons/fesm2020/ngx-bootstrap-buttons.mjs.map +0 -1
  249. package/carousel/esm2020/carousel.component.mjs +0 -713
  250. package/carousel/fesm2015/ngx-bootstrap-carousel.mjs +0 -851
  251. package/carousel/fesm2015/ngx-bootstrap-carousel.mjs.map +0 -1
  252. package/carousel/fesm2020/ngx-bootstrap-carousel.mjs.map +0 -1
  253. package/chronos/fesm2015/ngx-bootstrap-chronos.mjs +0 -7384
  254. package/chronos/fesm2015/ngx-bootstrap-chronos.mjs.map +0 -1
  255. package/chronos/fesm2020/ngx-bootstrap-chronos.mjs.map +0 -1
  256. package/collapse/esm2020/collapse.directive.mjs +0 -168
  257. package/collapse/fesm2015/ngx-bootstrap-collapse.mjs +0 -200
  258. package/collapse/fesm2015/ngx-bootstrap-collapse.mjs.map +0 -1
  259. package/collapse/fesm2020/ngx-bootstrap-collapse.mjs.map +0 -1
  260. package/component-loader/fesm2015/ngx-bootstrap-component-loader.mjs +0 -345
  261. package/component-loader/fesm2015/ngx-bootstrap-component-loader.mjs.map +0 -1
  262. package/component-loader/fesm2020/ngx-bootstrap-component-loader.mjs.map +0 -1
  263. package/datepicker/esm2020/bs-datepicker.component.mjs +0 -303
  264. package/datepicker/esm2020/bs-daterangepicker-inline.component.mjs +0 -163
  265. package/datepicker/esm2020/bs-daterangepicker.component.mjs +0 -296
  266. package/datepicker/esm2020/reducer/bs-datepicker.actions.mjs +0 -143
  267. package/datepicker/esm2020/themes/bs/bs-datepicker-container.component.mjs +0 -192
  268. package/datepicker/esm2020/themes/bs/bs-daterangepicker-container.component.mjs +0 -261
  269. package/datepicker/fesm2015/ngx-bootstrap-datepicker.mjs +0 -3971
  270. package/datepicker/fesm2015/ngx-bootstrap-datepicker.mjs.map +0 -1
  271. package/datepicker/fesm2020/ngx-bootstrap-datepicker.mjs.map +0 -1
  272. package/dropdown/esm2020/bs-dropdown-container.component.mjs +0 -79
  273. package/dropdown/esm2020/bs-dropdown.directive.mjs +0 -340
  274. package/dropdown/fesm2015/ngx-bootstrap-dropdown.mjs +0 -603
  275. package/dropdown/fesm2015/ngx-bootstrap-dropdown.mjs.map +0 -1
  276. package/dropdown/fesm2020/ngx-bootstrap-dropdown.mjs.map +0 -1
  277. package/fesm2015/ngx-bootstrap.mjs.map +0 -1
  278. package/fesm2020/ngx-bootstrap.mjs +0 -6
  279. package/fesm2020/ngx-bootstrap.mjs.map +0 -1
  280. package/focus-trap/esm2020/focus-trap.mjs +0 -399
  281. package/focus-trap/fesm2015/ngx-bootstrap-focus-trap.mjs +0 -800
  282. package/focus-trap/fesm2015/ngx-bootstrap-focus-trap.mjs.map +0 -1
  283. package/focus-trap/fesm2020/ngx-bootstrap-focus-trap.mjs.map +0 -1
  284. package/locale/fesm2015/ngx-bootstrap-locale.mjs.map +0 -1
  285. package/locale/fesm2020/ngx-bootstrap-locale.mjs +0 -6
  286. package/locale/fesm2020/ngx-bootstrap-locale.mjs.map +0 -1
  287. package/mini-ngrx/fesm2015/ngx-bootstrap-mini-ngrx.mjs +0 -64
  288. package/mini-ngrx/fesm2015/ngx-bootstrap-mini-ngrx.mjs.map +0 -1
  289. package/mini-ngrx/fesm2020/ngx-bootstrap-mini-ngrx.mjs.map +0 -1
  290. package/modal/esm2020/modal-backdrop.component.mjs +0 -50
  291. package/modal/esm2020/modal.directive.mjs +0 -364
  292. package/modal/fesm2015/ngx-bootstrap-modal.mjs +0 -888
  293. package/modal/fesm2015/ngx-bootstrap-modal.mjs.map +0 -1
  294. package/modal/fesm2020/ngx-bootstrap-modal.mjs.map +0 -1
  295. package/pagination/fesm2015/ngx-bootstrap-pagination.mjs +0 -565
  296. package/pagination/fesm2015/ngx-bootstrap-pagination.mjs.map +0 -1
  297. package/pagination/fesm2020/ngx-bootstrap-pagination.mjs.map +0 -1
  298. package/popover/esm2020/popover-container.component.mjs +0 -46
  299. package/popover/esm2020/popover.directive.mjs +0 -241
  300. package/popover/fesm2015/ngx-bootstrap-popover.mjs +0 -339
  301. package/popover/fesm2015/ngx-bootstrap-popover.mjs.map +0 -1
  302. package/popover/fesm2020/ngx-bootstrap-popover.mjs.map +0 -1
  303. package/positioning/fesm2015/ngx-bootstrap-positioning.mjs +0 -1018
  304. package/positioning/fesm2015/ngx-bootstrap-positioning.mjs.map +0 -1
  305. package/positioning/fesm2020/ngx-bootstrap-positioning.mjs.map +0 -1
  306. package/progressbar/esm2020/progressbar.component.mjs +0 -53
  307. package/progressbar/fesm2015/ngx-bootstrap-progressbar.mjs +0 -163
  308. package/progressbar/fesm2015/ngx-bootstrap-progressbar.mjs.map +0 -1
  309. package/progressbar/fesm2020/ngx-bootstrap-progressbar.mjs.map +0 -1
  310. package/rating/fesm2015/ngx-bootstrap-rating.mjs.map +0 -1
  311. package/rating/fesm2020/ngx-bootstrap-rating.mjs +0 -163
  312. package/rating/fesm2020/ngx-bootstrap-rating.mjs.map +0 -1
  313. package/sortable/esm2020/sortable.component.mjs +0 -266
  314. package/sortable/fesm2015/ngx-bootstrap-sortable.mjs +0 -324
  315. package/sortable/fesm2015/ngx-bootstrap-sortable.mjs.map +0 -1
  316. package/sortable/fesm2020/ngx-bootstrap-sortable.mjs.map +0 -1
  317. package/tabs/esm2020/ng-transclude.directive.mjs +0 -28
  318. package/tabs/esm2020/tab.directive.mjs +0 -115
  319. package/tabs/esm2020/tabset.component.mjs +0 -216
  320. package/tabs/fesm2015/ngx-bootstrap-tabs.mjs.map +0 -1
  321. package/tabs/fesm2020/ngx-bootstrap-tabs.mjs +0 -427
  322. package/tabs/fesm2020/ngx-bootstrap-tabs.mjs.map +0 -1
  323. package/timepicker/esm2020/reducer/timepicker.actions.mjs +0 -53
  324. package/timepicker/fesm2015/ngx-bootstrap-timepicker.mjs +0 -830
  325. package/timepicker/fesm2015/ngx-bootstrap-timepicker.mjs.map +0 -1
  326. package/timepicker/fesm2020/ngx-bootstrap-timepicker.mjs.map +0 -1
  327. package/tooltip/esm2020/tooltip.directive.mjs +0 -342
  328. package/tooltip/fesm2015/ngx-bootstrap-tooltip.mjs +0 -431
  329. package/tooltip/fesm2015/ngx-bootstrap-tooltip.mjs.map +0 -1
  330. package/tooltip/fesm2020/ngx-bootstrap-tooltip.mjs.map +0 -1
  331. package/typeahead/esm2020/typeahead-container.component.mjs +0 -311
  332. package/typeahead/fesm2015/ngx-bootstrap-typeahead.mjs +0 -1890
  333. package/typeahead/fesm2015/ngx-bootstrap-typeahead.mjs.map +0 -1
  334. package/typeahead/fesm2020/ngx-bootstrap-typeahead.mjs.map +0 -1
  335. package/utils/fesm2015/ngx-bootstrap-utils.mjs +0 -523
  336. package/utils/fesm2015/ngx-bootstrap-utils.mjs.map +0 -1
  337. package/utils/fesm2020/ngx-bootstrap-utils.mjs.map +0 -1
  338. /package/accordion/{esm2020 → esm2022}/index.mjs +0 -0
  339. /package/accordion/{esm2020 → esm2022}/ngx-bootstrap-accordion.mjs +0 -0
  340. /package/accordion/{esm2020 → esm2022}/public_api.mjs +0 -0
  341. /package/alert/{esm2020 → esm2022}/index.mjs +0 -0
  342. /package/alert/{esm2020 → esm2022}/ngx-bootstrap-alert.mjs +0 -0
  343. /package/alert/{esm2020 → esm2022}/public_api.mjs +0 -0
  344. /package/buttons/{esm2020 → esm2022}/index.mjs +0 -0
  345. /package/buttons/{esm2020 → esm2022}/ngx-bootstrap-buttons.mjs +0 -0
  346. /package/buttons/{esm2020 → esm2022}/public_api.mjs +0 -0
  347. /package/carousel/{esm2020 → esm2022}/index.mjs +0 -0
  348. /package/carousel/{esm2020 → esm2022}/models/index.mjs +0 -0
  349. /package/carousel/{esm2020 → esm2022}/ngx-bootstrap-carousel.mjs +0 -0
  350. /package/carousel/{esm2020 → esm2022}/public_api.mjs +0 -0
  351. /package/carousel/{esm2020 → esm2022}/utils.mjs +0 -0
  352. /package/chronos/{esm2020 → esm2022}/create/check-overflow.mjs +0 -0
  353. /package/chronos/{esm2020 → esm2022}/create/clone.mjs +0 -0
  354. /package/chronos/{esm2020 → esm2022}/create/date-from-array.mjs +0 -0
  355. /package/chronos/{esm2020 → esm2022}/create/from-anything.mjs +0 -0
  356. /package/chronos/{esm2020 → esm2022}/create/from-array.mjs +0 -0
  357. /package/chronos/{esm2020 → esm2022}/create/from-object.mjs +0 -0
  358. /package/chronos/{esm2020 → esm2022}/create/from-string-and-array.mjs +0 -0
  359. /package/chronos/{esm2020 → esm2022}/create/from-string-and-format.mjs +0 -0
  360. /package/chronos/{esm2020 → esm2022}/create/from-string.mjs +0 -0
  361. /package/chronos/{esm2020 → esm2022}/create/local.mjs +0 -0
  362. /package/chronos/{esm2020 → esm2022}/create/parsing-flags.mjs +0 -0
  363. /package/chronos/{esm2020 → esm2022}/create/parsing.types.mjs +0 -0
  364. /package/chronos/{esm2020 → esm2022}/create/valid.mjs +0 -0
  365. /package/chronos/{esm2020 → esm2022}/duration/bubble.mjs +0 -0
  366. /package/chronos/{esm2020 → esm2022}/duration/constructor.mjs +0 -0
  367. /package/chronos/{esm2020 → esm2022}/duration/create.mjs +0 -0
  368. /package/chronos/{esm2020 → esm2022}/duration/humanize.mjs +0 -0
  369. /package/chronos/{esm2020 → esm2022}/duration/valid.mjs +0 -0
  370. /package/chronos/{esm2020 → esm2022}/format/format.mjs +0 -0
  371. /package/chronos/{esm2020 → esm2022}/format.mjs +0 -0
  372. /package/chronos/{esm2020 → esm2022}/i18n/ar.mjs +0 -0
  373. /package/chronos/{esm2020 → esm2022}/i18n/bg.mjs +0 -0
  374. /package/chronos/{esm2020 → esm2022}/i18n/ca.mjs +0 -0
  375. /package/chronos/{esm2020 → esm2022}/i18n/cs.mjs +0 -0
  376. /package/chronos/{esm2020 → esm2022}/i18n/da.mjs +0 -0
  377. /package/chronos/{esm2020 → esm2022}/i18n/de.mjs +0 -0
  378. /package/chronos/{esm2020 → esm2022}/i18n/en-gb.mjs +0 -0
  379. /package/chronos/{esm2020 → esm2022}/i18n/es-do.mjs +0 -0
  380. /package/chronos/{esm2020 → esm2022}/i18n/es-pr.mjs +0 -0
  381. /package/chronos/{esm2020 → esm2022}/i18n/es-us.mjs +0 -0
  382. /package/chronos/{esm2020 → esm2022}/i18n/es.mjs +0 -0
  383. /package/chronos/{esm2020 → esm2022}/i18n/et.mjs +0 -0
  384. /package/chronos/{esm2020 → esm2022}/i18n/fi.mjs +0 -0
  385. /package/chronos/{esm2020 → esm2022}/i18n/fr.mjs +0 -0
  386. /package/chronos/{esm2020 → esm2022}/i18n/gl.mjs +0 -0
  387. /package/chronos/{esm2020 → esm2022}/i18n/he.mjs +0 -0
  388. /package/chronos/{esm2020 → esm2022}/i18n/hi.mjs +0 -0
  389. /package/chronos/{esm2020 → esm2022}/i18n/hr.mjs +0 -0
  390. /package/chronos/{esm2020 → esm2022}/i18n/hu.mjs +0 -0
  391. /package/chronos/{esm2020 → esm2022}/i18n/id.mjs +0 -0
  392. /package/chronos/{esm2020 → esm2022}/i18n/it.mjs +0 -0
  393. /package/chronos/{esm2020 → esm2022}/i18n/ja.mjs +0 -0
  394. /package/chronos/{esm2020 → esm2022}/i18n/ka.mjs +0 -0
  395. /package/chronos/{esm2020 → esm2022}/i18n/kk.mjs +0 -0
  396. /package/chronos/{esm2020 → esm2022}/i18n/ko.mjs +0 -0
  397. /package/chronos/{esm2020 → esm2022}/i18n/lt.mjs +0 -0
  398. /package/chronos/{esm2020 → esm2022}/i18n/lv.mjs +0 -0
  399. /package/chronos/{esm2020 → esm2022}/i18n/mn.mjs +0 -0
  400. /package/chronos/{esm2020 → esm2022}/i18n/nb.mjs +0 -0
  401. /package/chronos/{esm2020 → esm2022}/i18n/nl-be.mjs +0 -0
  402. /package/chronos/{esm2020 → esm2022}/i18n/nl.mjs +0 -0
  403. /package/chronos/{esm2020 → esm2022}/i18n/pl.mjs +0 -0
  404. /package/chronos/{esm2020 → esm2022}/i18n/pt-br.mjs +0 -0
  405. /package/chronos/{esm2020 → esm2022}/i18n/ro.mjs +0 -0
  406. /package/chronos/{esm2020 → esm2022}/i18n/ru.mjs +0 -0
  407. /package/chronos/{esm2020 → esm2022}/i18n/sk.mjs +0 -0
  408. /package/chronos/{esm2020 → esm2022}/i18n/sl.mjs +0 -0
  409. /package/chronos/{esm2020 → esm2022}/i18n/sq.mjs +0 -0
  410. /package/chronos/{esm2020 → esm2022}/i18n/sv.mjs +0 -0
  411. /package/chronos/{esm2020 → esm2022}/i18n/th-be.mjs +0 -0
  412. /package/chronos/{esm2020 → esm2022}/i18n/th.mjs +0 -0
  413. /package/chronos/{esm2020 → esm2022}/i18n/tr.mjs +0 -0
  414. /package/chronos/{esm2020 → esm2022}/i18n/uk.mjs +0 -0
  415. /package/chronos/{esm2020 → esm2022}/i18n/vi.mjs +0 -0
  416. /package/chronos/{esm2020 → esm2022}/i18n/zh-cn.mjs +0 -0
  417. /package/chronos/{esm2020 → esm2022}/index.mjs +0 -0
  418. /package/chronos/{esm2020 → esm2022}/locale/calendar.mjs +0 -0
  419. /package/chronos/{esm2020 → esm2022}/locale/locale.class.mjs +0 -0
  420. /package/chronos/{esm2020 → esm2022}/locale/locale.defaults.mjs +0 -0
  421. /package/chronos/{esm2020 → esm2022}/locale/locales.mjs +0 -0
  422. /package/chronos/{esm2020 → esm2022}/moment/add-subtract.mjs +0 -0
  423. /package/chronos/{esm2020 → esm2022}/moment/calendar.mjs +0 -0
  424. /package/chronos/{esm2020 → esm2022}/moment/diff.mjs +0 -0
  425. /package/chronos/{esm2020 → esm2022}/moment/min-max.mjs +0 -0
  426. /package/chronos/{esm2020 → esm2022}/ngx-bootstrap-chronos.mjs +0 -0
  427. /package/chronos/{esm2020 → esm2022}/parse/regex.mjs +0 -0
  428. /package/chronos/{esm2020 → esm2022}/parse/token.mjs +0 -0
  429. /package/chronos/{esm2020 → esm2022}/public_api.mjs +0 -0
  430. /package/chronos/{esm2020 → esm2022}/testing/chain.mjs +0 -0
  431. /package/chronos/{esm2020 → esm2022}/types.mjs +0 -0
  432. /package/chronos/{esm2020 → esm2022}/units/aliases.mjs +0 -0
  433. /package/chronos/{esm2020 → esm2022}/units/constants.mjs +0 -0
  434. /package/chronos/{esm2020 → esm2022}/units/day-of-month.mjs +0 -0
  435. /package/chronos/{esm2020 → esm2022}/units/day-of-week.mjs +0 -0
  436. /package/chronos/{esm2020 → esm2022}/units/day-of-year.mjs +0 -0
  437. /package/chronos/{esm2020 → esm2022}/units/hour.mjs +0 -0
  438. /package/chronos/{esm2020 → esm2022}/units/index.mjs +0 -0
  439. /package/chronos/{esm2020 → esm2022}/units/millisecond.mjs +0 -0
  440. /package/chronos/{esm2020 → esm2022}/units/minute.mjs +0 -0
  441. /package/chronos/{esm2020 → esm2022}/units/month.mjs +0 -0
  442. /package/chronos/{esm2020 → esm2022}/units/offset.mjs +0 -0
  443. /package/chronos/{esm2020 → esm2022}/units/priorities.mjs +0 -0
  444. /package/chronos/{esm2020 → esm2022}/units/quarter.mjs +0 -0
  445. /package/chronos/{esm2020 → esm2022}/units/second.mjs +0 -0
  446. /package/chronos/{esm2020 → esm2022}/units/timestamp.mjs +0 -0
  447. /package/chronos/{esm2020 → esm2022}/units/timezone.mjs +0 -0
  448. /package/chronos/{esm2020 → esm2022}/units/week-calendar-utils.mjs +0 -0
  449. /package/chronos/{esm2020 → esm2022}/units/week-year.mjs +0 -0
  450. /package/chronos/{esm2020 → esm2022}/units/week.mjs +0 -0
  451. /package/chronos/{esm2020 → esm2022}/units/year.mjs +0 -0
  452. /package/chronos/{esm2020 → esm2022}/utils/abs-ceil.mjs +0 -0
  453. /package/chronos/{esm2020 → esm2022}/utils/abs-round.mjs +0 -0
  454. /package/chronos/{esm2020 → esm2022}/utils/compare-arrays.mjs +0 -0
  455. /package/chronos/{esm2020 → esm2022}/utils/date-compare.mjs +0 -0
  456. /package/chronos/{esm2020 → esm2022}/utils/date-getters.mjs +0 -0
  457. /package/chronos/{esm2020 → esm2022}/utils/date-setters.mjs +0 -0
  458. /package/chronos/{esm2020 → esm2022}/utils/defaults.mjs +0 -0
  459. /package/chronos/{esm2020 → esm2022}/utils/start-end-of.mjs +0 -0
  460. /package/chronos/{esm2020 → esm2022}/utils/type-checks.mjs +0 -0
  461. /package/chronos/{esm2020 → esm2022}/utils/zero-fill.mjs +0 -0
  462. /package/chronos/{esm2020 → esm2022}/utils.mjs +0 -0
  463. /package/collapse/{esm2020 → esm2022}/collapse-animations.mjs +0 -0
  464. /package/collapse/{esm2020 → esm2022}/index.mjs +0 -0
  465. /package/collapse/{esm2020 → esm2022}/ngx-bootstrap-collapse.mjs +0 -0
  466. /package/collapse/{esm2020 → esm2022}/public_api.mjs +0 -0
  467. /package/component-loader/{esm2020 → esm2022}/bs-component-ref.class.mjs +0 -0
  468. /package/component-loader/{esm2020 → esm2022}/component-loader.class.mjs +0 -0
  469. /package/component-loader/{esm2020 → esm2022}/content-ref.class.mjs +0 -0
  470. /package/component-loader/{esm2020 → esm2022}/index.mjs +0 -0
  471. /package/component-loader/{esm2020 → esm2022}/listen-options.model.mjs +0 -0
  472. /package/component-loader/{esm2020 → esm2022}/ngx-bootstrap-component-loader.mjs +0 -0
  473. /package/component-loader/{esm2020 → esm2022}/public_api.mjs +0 -0
  474. /package/datepicker/{esm2020 → esm2022}/base/bs-datepicker-container.mjs +0 -0
  475. /package/datepicker/{esm2020 → esm2022}/datepicker-animations.mjs +0 -0
  476. /package/datepicker/{esm2020 → esm2022}/engine/calc-days-calendar.mjs +0 -0
  477. /package/datepicker/{esm2020 → esm2022}/engine/flag-days-calendar.mjs +0 -0
  478. /package/datepicker/{esm2020 → esm2022}/engine/flag-months-calendar.mjs +0 -0
  479. /package/datepicker/{esm2020 → esm2022}/engine/flag-years-calendar.mjs +0 -0
  480. /package/datepicker/{esm2020 → esm2022}/engine/format-days-calendar.mjs +0 -0
  481. /package/datepicker/{esm2020 → esm2022}/engine/format-months-calendar.mjs +0 -0
  482. /package/datepicker/{esm2020 → esm2022}/engine/format-years-calendar.mjs +0 -0
  483. /package/datepicker/{esm2020 → esm2022}/engine/view-mode.mjs +0 -0
  484. /package/datepicker/{esm2020 → esm2022}/index.mjs +0 -0
  485. /package/datepicker/{esm2020 → esm2022}/models/index.mjs +0 -0
  486. /package/datepicker/{esm2020 → esm2022}/ngx-bootstrap-datepicker.mjs +0 -0
  487. /package/datepicker/{esm2020 → esm2022}/public_api.mjs +0 -0
  488. /package/datepicker/{esm2020 → esm2022}/reducer/_defaults.mjs +0 -0
  489. /package/datepicker/{esm2020 → esm2022}/reducer/bs-datepicker.reducer.mjs +0 -0
  490. /package/datepicker/{esm2020 → esm2022}/reducer/bs-datepicker.state.mjs +0 -0
  491. /package/datepicker/{esm2020 → esm2022}/utils/bs-calendar-utils.mjs +0 -0
  492. /package/datepicker/{esm2020 → esm2022}/utils/copy-time-utils.mjs +0 -0
  493. /package/datepicker/{esm2020 → esm2022}/utils/matrix-utils.mjs +0 -0
  494. /package/dropdown/{esm2020 → esm2022}/dropdown-animations.mjs +0 -0
  495. /package/dropdown/{esm2020 → esm2022}/index.mjs +0 -0
  496. /package/dropdown/{esm2020 → esm2022}/ngx-bootstrap-dropdown.mjs +0 -0
  497. /package/dropdown/{esm2020 → esm2022}/public_api.mjs +0 -0
  498. /package/{esm2020 → esm2022}/index.mjs +0 -0
  499. /package/{esm2020 → esm2022}/ngx-bootstrap.mjs +0 -0
  500. /package/{fesm2015 → fesm2022}/ngx-bootstrap.mjs +0 -0
  501. /package/focus-trap/{esm2020 → esm2022}/boolean-property.mjs +0 -0
  502. /package/focus-trap/{esm2020 → esm2022}/index.mjs +0 -0
  503. /package/focus-trap/{esm2020 → esm2022}/ngx-bootstrap-focus-trap.mjs +0 -0
  504. /package/focus-trap/{esm2020 → esm2022}/public_api.mjs +0 -0
  505. /package/locale/{esm2020 → esm2022}/index.mjs +0 -0
  506. /package/locale/{esm2020 → esm2022}/ngx-bootstrap-locale.mjs +0 -0
  507. /package/locale/{esm2020 → esm2022}/public_api.mjs +0 -0
  508. /package/locale/{fesm2015 → fesm2022}/ngx-bootstrap-locale.mjs +0 -0
  509. /package/mini-ngrx/{esm2020 → esm2022}/index.mjs +0 -0
  510. /package/mini-ngrx/{esm2020 → esm2022}/ngx-bootstrap-mini-ngrx.mjs +0 -0
  511. /package/mini-ngrx/{esm2020 → esm2022}/public_api.mjs +0 -0
  512. /package/mini-ngrx/{esm2020 → esm2022}/state.class.mjs +0 -0
  513. /package/mini-ngrx/{esm2020 → esm2022}/store.class.mjs +0 -0
  514. /package/mini-ngrx/{fesm2020 → fesm2022}/ngx-bootstrap-mini-ngrx.mjs +0 -0
  515. /package/modal/{esm2020 → esm2022}/index.mjs +0 -0
  516. /package/modal/{esm2020 → esm2022}/modal-backdrop.options.mjs +0 -0
  517. /package/modal/{esm2020 → esm2022}/models/index.mjs +0 -0
  518. /package/modal/{esm2020 → esm2022}/ngx-bootstrap-modal.mjs +0 -0
  519. /package/modal/{esm2020 → esm2022}/public_api.mjs +0 -0
  520. /package/pagination/{esm2020 → esm2022}/index.mjs +0 -0
  521. /package/pagination/{esm2020 → esm2022}/models/index.mjs +0 -0
  522. /package/pagination/{esm2020 → esm2022}/ngx-bootstrap-pagination.mjs +0 -0
  523. /package/pagination/{esm2020 → esm2022}/public_api.mjs +0 -0
  524. /package/popover/{esm2020 → esm2022}/index.mjs +0 -0
  525. /package/popover/{esm2020 → esm2022}/ngx-bootstrap-popover.mjs +0 -0
  526. /package/popover/{esm2020 → esm2022}/public_api.mjs +0 -0
  527. /package/positioning/{esm2020 → esm2022}/index.mjs +0 -0
  528. /package/positioning/{esm2020 → esm2022}/models/index.mjs +0 -0
  529. /package/positioning/{esm2020 → esm2022}/modifiers/arrow.mjs +0 -0
  530. /package/positioning/{esm2020 → esm2022}/modifiers/flip.mjs +0 -0
  531. /package/positioning/{esm2020 → esm2022}/modifiers/index.mjs +0 -0
  532. /package/positioning/{esm2020 → esm2022}/modifiers/initData.mjs +0 -0
  533. /package/positioning/{esm2020 → esm2022}/modifiers/preventOverflow.mjs +0 -0
  534. /package/positioning/{esm2020 → esm2022}/modifiers/shift.mjs +0 -0
  535. /package/positioning/{esm2020 → esm2022}/ng-positioning.mjs +0 -0
  536. /package/positioning/{esm2020 → esm2022}/ngx-bootstrap-positioning.mjs +0 -0
  537. /package/positioning/{esm2020 → esm2022}/public_api.mjs +0 -0
  538. /package/positioning/{esm2020 → esm2022}/utils/checkMargin.mjs +0 -0
  539. /package/positioning/{esm2020 → esm2022}/utils/computeAutoPlacement.mjs +0 -0
  540. /package/positioning/{esm2020 → esm2022}/utils/findCommonOffsetParent.mjs +0 -0
  541. /package/positioning/{esm2020 → esm2022}/utils/getBordersSize.mjs +0 -0
  542. /package/positioning/{esm2020 → esm2022}/utils/getBoundaries.mjs +0 -0
  543. /package/positioning/{esm2020 → esm2022}/utils/getBoundingClientRect.mjs +0 -0
  544. /package/positioning/{esm2020 → esm2022}/utils/getClientRect.mjs +0 -0
  545. /package/positioning/{esm2020 → esm2022}/utils/getFixedPositionOffsetParent.mjs +0 -0
  546. /package/positioning/{esm2020 → esm2022}/utils/getOffsetParent.mjs +0 -0
  547. /package/positioning/{esm2020 → esm2022}/utils/getOffsetRectRelativeToArbitraryNode.mjs +0 -0
  548. /package/positioning/{esm2020 → esm2022}/utils/getOffsets.mjs +0 -0
  549. /package/positioning/{esm2020 → esm2022}/utils/getOppositePlacement.mjs +0 -0
  550. /package/positioning/{esm2020 → esm2022}/utils/getOppositeVariation.mjs +0 -0
  551. /package/positioning/{esm2020 → esm2022}/utils/getOuterSizes.mjs +0 -0
  552. /package/positioning/{esm2020 → esm2022}/utils/getParentNode.mjs +0 -0
  553. /package/positioning/{esm2020 → esm2022}/utils/getReferenceOffsets.mjs +0 -0
  554. /package/positioning/{esm2020 → esm2022}/utils/getRoot.mjs +0 -0
  555. /package/positioning/{esm2020 → esm2022}/utils/getScroll.mjs +0 -0
  556. /package/positioning/{esm2020 → esm2022}/utils/getScrollParent.mjs +0 -0
  557. /package/positioning/{esm2020 → esm2022}/utils/getStyleComputedProperty.mjs +0 -0
  558. /package/positioning/{esm2020 → esm2022}/utils/getTargetOffsets.mjs +0 -0
  559. /package/positioning/{esm2020 → esm2022}/utils/getViewportOffsetRectRelativeToArtbitraryNode.mjs +0 -0
  560. /package/positioning/{esm2020 → esm2022}/utils/getWindowSizes.mjs +0 -0
  561. /package/positioning/{esm2020 → esm2022}/utils/includeScroll.mjs +0 -0
  562. /package/positioning/{esm2020 → esm2022}/utils/index.mjs +0 -0
  563. /package/positioning/{esm2020 → esm2022}/utils/isFixed.mjs +0 -0
  564. /package/positioning/{esm2020 → esm2022}/utils/isModifierEnabled.mjs +0 -0
  565. /package/positioning/{esm2020 → esm2022}/utils/isNumeric.mjs +0 -0
  566. /package/positioning/{esm2020 → esm2022}/utils/isOffsetContainer.mjs +0 -0
  567. /package/positioning/{esm2020 → esm2022}/utils/setStyles.mjs +0 -0
  568. /package/positioning/{esm2020 → esm2022}/utils/updateContainerClass.mjs +0 -0
  569. /package/progressbar/{esm2020 → esm2022}/index.mjs +0 -0
  570. /package/progressbar/{esm2020 → esm2022}/ngx-bootstrap-progressbar.mjs +0 -0
  571. /package/progressbar/{esm2020 → esm2022}/progressbar-type.interface.mjs +0 -0
  572. /package/progressbar/{esm2020 → esm2022}/public_api.mjs +0 -0
  573. /package/rating/{esm2020 → esm2022}/index.mjs +0 -0
  574. /package/rating/{esm2020 → esm2022}/models/index.mjs +0 -0
  575. /package/rating/{esm2020 → esm2022}/ngx-bootstrap-rating.mjs +0 -0
  576. /package/rating/{esm2020 → esm2022}/public_api.mjs +0 -0
  577. /package/sortable/{esm2020 → esm2022}/draggable-item.mjs +0 -0
  578. /package/sortable/{esm2020 → esm2022}/index.mjs +0 -0
  579. /package/sortable/{esm2020 → esm2022}/ngx-bootstrap-sortable.mjs +0 -0
  580. /package/sortable/{esm2020 → esm2022}/public_api.mjs +0 -0
  581. /package/tabs/{esm2020 → esm2022}/index.mjs +0 -0
  582. /package/tabs/{esm2020 → esm2022}/ngx-bootstrap-tabs.mjs +0 -0
  583. /package/tabs/{esm2020 → esm2022}/public_api.mjs +0 -0
  584. /package/timepicker/{esm2020 → esm2022}/index.mjs +0 -0
  585. /package/timepicker/{esm2020 → esm2022}/models/index.mjs +0 -0
  586. /package/timepicker/{esm2020 → esm2022}/ngx-bootstrap-timepicker.mjs +0 -0
  587. /package/timepicker/{esm2020 → esm2022}/public_api.mjs +0 -0
  588. /package/timepicker/{esm2020 → esm2022}/reducer/timepicker.reducer.mjs +0 -0
  589. /package/timepicker/{esm2020 → esm2022}/timepicker-controls.util.mjs +0 -0
  590. /package/timepicker/{esm2020 → esm2022}/timepicker.models.mjs +0 -0
  591. /package/timepicker/{esm2020 → esm2022}/timepicker.utils.mjs +0 -0
  592. /package/tooltip/{esm2020 → esm2022}/index.mjs +0 -0
  593. /package/tooltip/{esm2020 → esm2022}/ngx-bootstrap-tooltip.mjs +0 -0
  594. /package/tooltip/{esm2020 → esm2022}/public_api.mjs +0 -0
  595. /package/typeahead/{esm2020 → esm2022}/index.mjs +0 -0
  596. /package/typeahead/{esm2020 → esm2022}/latin-map.mjs +0 -0
  597. /package/typeahead/{esm2020 → esm2022}/models/index.mjs +0 -0
  598. /package/typeahead/{esm2020 → esm2022}/ngx-bootstrap-typeahead.mjs +0 -0
  599. /package/typeahead/{esm2020 → esm2022}/public_api.mjs +0 -0
  600. /package/typeahead/{esm2020 → esm2022}/typeahead-animations.mjs +0 -0
  601. /package/typeahead/{esm2020 → esm2022}/typeahead-match.class.mjs +0 -0
  602. /package/typeahead/{esm2020 → esm2022}/typeahead-options.class.mjs +0 -0
  603. /package/typeahead/{esm2020 → esm2022}/typeahead-order.class.mjs +0 -0
  604. /package/typeahead/{esm2020 → esm2022}/typeahead-utils.mjs +0 -0
  605. /package/utils/{esm2020 → esm2022}/decorators.mjs +0 -0
  606. /package/utils/{esm2020 → esm2022}/facade/browser.mjs +0 -0
  607. /package/utils/{esm2020 → esm2022}/index.mjs +0 -0
  608. /package/utils/{esm2020 → esm2022}/linked-list.class.mjs +0 -0
  609. /package/utils/{esm2020 → esm2022}/ngx-bootstrap-utils.mjs +0 -0
  610. /package/utils/{esm2020 → esm2022}/public_api.mjs +0 -0
  611. /package/utils/{esm2020 → esm2022}/theme-provider.mjs +0 -0
  612. /package/utils/{esm2020 → esm2022}/trigger.class.mjs +0 -0
  613. /package/utils/{esm2020 → esm2022}/triggers.mjs +0 -0
  614. /package/utils/{esm2020 → esm2022}/utils.class.mjs +0 -0
  615. /package/utils/{esm2020 → esm2022}/warn-once.mjs +0 -0
  616. /package/utils/{fesm2020 → fesm2022}/ngx-bootstrap-utils.mjs +0 -0
@@ -1,399 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- /* eslint-disable */
9
- import { coerceBooleanProperty } from './boolean-property';
10
- import { DOCUMENT } from '@angular/common';
11
- import { Directive, ElementRef, Inject, Injectable, Input, NgZone } from '@angular/core';
12
- import { take } from 'rxjs/operators';
13
- import { InteractivityChecker } from './interactivity-checker';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "./interactivity-checker";
16
- /**
17
- * Class that allows for trapping focus within a DOM element.
18
- *
19
- * This class currently uses a relatively simple approach to focus trapping.
20
- * It assumes that the tab order is the same as DOM order, which is not necessarily true.
21
- * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to misalign.
22
- *
23
- * @deprecated Use `ConfigurableFocusTrap` instead.
24
- * @breaking-change for 11.0.0 Remove this class.
25
- */
26
- export class FocusTrap {
27
- constructor(_element, _checker, _ngZone, _document, deferAnchors = false) {
28
- this._element = _element;
29
- this._checker = _checker;
30
- this._ngZone = _ngZone;
31
- this._document = _document;
32
- this._hasAttached = false;
33
- // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.
34
- this.startAnchorListener = () => this.focusLastTabbableElement();
35
- this.endAnchorListener = () => this.focusFirstTabbableElement();
36
- this._enabled = true;
37
- if (!deferAnchors) {
38
- this.attachAnchors();
39
- }
40
- }
41
- /** Whether the focus trap is active. */
42
- get enabled() {
43
- return this._enabled;
44
- }
45
- set enabled(value) {
46
- this._enabled = value;
47
- if (this._startAnchor && this._endAnchor) {
48
- this._toggleAnchorTabIndex(value, this._startAnchor);
49
- this._toggleAnchorTabIndex(value, this._endAnchor);
50
- }
51
- }
52
- /** Destroys the focus trap by cleaning up the anchors. */
53
- destroy() {
54
- const startAnchor = this._startAnchor;
55
- const endAnchor = this._endAnchor;
56
- if (startAnchor) {
57
- startAnchor.removeEventListener('focus', this.startAnchorListener);
58
- if (startAnchor.parentNode) {
59
- startAnchor.parentNode.removeChild(startAnchor);
60
- }
61
- }
62
- if (endAnchor) {
63
- endAnchor.removeEventListener('focus', this.endAnchorListener);
64
- if (endAnchor.parentNode) {
65
- endAnchor.parentNode.removeChild(endAnchor);
66
- }
67
- }
68
- this._startAnchor = this._endAnchor = null;
69
- this._hasAttached = false;
70
- }
71
- /**
72
- * Inserts the anchors into the DOM. This is usually done automatically
73
- * in the constructor, but can be deferred for cases like directives with `*ngIf`.
74
- * @returns Whether the focus trap managed to attach successfuly. This may not be the case
75
- * if the target element isn't currently in the DOM.
76
- */
77
- attachAnchors() {
78
- // If we're not on the browser, there can be no focus to trap.
79
- if (this._hasAttached) {
80
- return true;
81
- }
82
- this._ngZone.runOutsideAngular(() => {
83
- if (!this._startAnchor) {
84
- this._startAnchor = this._createAnchor();
85
- this._startAnchor.addEventListener('focus', this.startAnchorListener);
86
- }
87
- if (!this._endAnchor) {
88
- this._endAnchor = this._createAnchor();
89
- this._endAnchor.addEventListener('focus', this.endAnchorListener);
90
- }
91
- });
92
- if (this._element.parentNode) {
93
- this._element.parentNode.insertBefore(this._startAnchor, this._element);
94
- this._element.parentNode.insertBefore(this._endAnchor, this._element.nextSibling);
95
- this._hasAttached = true;
96
- }
97
- return this._hasAttached;
98
- }
99
- /**
100
- * Waits for the zone to stabilize, then either focuses the first element that the
101
- * user specified, or the first tabbable element.
102
- * @returns Returns a promise that resolves with a boolean, depending
103
- * on whether focus was moved successfully.
104
- */
105
- focusInitialElementWhenReady() {
106
- return new Promise(resolve => {
107
- this._executeOnStable(() => resolve(this.focusInitialElement()));
108
- });
109
- }
110
- /**
111
- * Waits for the zone to stabilize, then focuses
112
- * the first tabbable element within the focus trap region.
113
- * @returns Returns a promise that resolves with a boolean, depending
114
- * on whether focus was moved successfully.
115
- */
116
- focusFirstTabbableElementWhenReady() {
117
- return new Promise(resolve => {
118
- this._executeOnStable(() => resolve(this.focusFirstTabbableElement()));
119
- });
120
- }
121
- /**
122
- * Waits for the zone to stabilize, then focuses
123
- * the last tabbable element within the focus trap region.
124
- * @returns Returns a promise that resolves with a boolean, depending
125
- * on whether focus was moved successfully.
126
- */
127
- focusLastTabbableElementWhenReady() {
128
- return new Promise(resolve => {
129
- this._executeOnStable(() => resolve(this.focusLastTabbableElement()));
130
- });
131
- }
132
- /**
133
- * Get the specified boundary element of the trapped region.
134
- * @param bound The boundary to get (start or end of trapped region).
135
- * @returns The boundary element.
136
- */
137
- _getRegionBoundary(bound) {
138
- // Contains the deprecated version of selector, for temporary backwards comparability.
139
- let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` +
140
- `[cdkFocusRegion${bound}], ` +
141
- `[cdk-focus-${bound}]`);
142
- for (let i = 0; i < markers.length; i++) {
143
- // @breaking-change 8.0.0
144
- if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {
145
- console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}', ` +
146
- `use 'cdkFocusRegion${bound}' instead. The deprecated ` +
147
- `attribute will be removed in 8.0.0.`, markers[i]);
148
- }
149
- else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {
150
- console.warn(`Found use of deprecated attribute 'cdk-focus-region-${bound}', ` +
151
- `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` +
152
- `will be removed in 8.0.0.`, markers[i]);
153
- }
154
- }
155
- if (bound == 'start') {
156
- return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);
157
- }
158
- return markers.length ?
159
- markers[markers.length - 1] : this._getLastTabbableElement(this._element);
160
- }
161
- /**
162
- * Focuses the element that should be focused when the focus trap is initialized.
163
- * @returns Whether focus was moved successfully.
164
- */
165
- focusInitialElement() {
166
- // Contains the deprecated version of selector, for temporary backwards comparability.
167
- const redirectToElement = this._element.querySelector(`[cdk-focus-initial], ` +
168
- `[cdkFocusInitial]`);
169
- if (redirectToElement) {
170
- // @breaking-change 8.0.0
171
- if (redirectToElement.hasAttribute(`cdk-focus-initial`)) {
172
- console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` +
173
- `use 'cdkFocusInitial' instead. The deprecated attribute ` +
174
- `will be removed in 8.0.0`, redirectToElement);
175
- }
176
- // Warn the consumer if the element they've pointed to
177
- // isn't focusable, when not in production mode.
178
- if (!this._checker.isFocusable(redirectToElement)) {
179
- const focusableChild = this._getFirstTabbableElement(redirectToElement);
180
- focusableChild?.focus();
181
- return !!focusableChild;
182
- }
183
- redirectToElement.focus();
184
- return true;
185
- }
186
- return this.focusFirstTabbableElement();
187
- }
188
- /**
189
- * Focuses the first tabbable element within the focus trap region.
190
- * @returns Whether focus was moved successfully.
191
- */
192
- focusFirstTabbableElement() {
193
- const redirectToElement = this._getRegionBoundary('start');
194
- if (redirectToElement) {
195
- redirectToElement.focus();
196
- }
197
- return !!redirectToElement;
198
- }
199
- /**
200
- * Focuses the last tabbable element within the focus trap region.
201
- * @returns Whether focus was moved successfully.
202
- */
203
- focusLastTabbableElement() {
204
- const redirectToElement = this._getRegionBoundary('end');
205
- if (redirectToElement) {
206
- redirectToElement.focus();
207
- }
208
- return !!redirectToElement;
209
- }
210
- /**
211
- * Checks whether the focus trap has successfully been attached.
212
- */
213
- hasAttached() {
214
- return this._hasAttached;
215
- }
216
- /** Get the first tabbable element from a DOM subtree (inclusive). */
217
- _getFirstTabbableElement(root) {
218
- if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {
219
- return root;
220
- }
221
- // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall
222
- // back to `childNodes` which includes text nodes, comments etc.
223
- let children = root.children || root.childNodes;
224
- for (let i = 0; i < children.length; i++) {
225
- let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?
226
- this._getFirstTabbableElement(children[i]) :
227
- null;
228
- if (tabbableChild) {
229
- return tabbableChild;
230
- }
231
- }
232
- return null;
233
- }
234
- /** Get the last tabbable element from a DOM subtree (inclusive). */
235
- _getLastTabbableElement(root) {
236
- if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {
237
- return root;
238
- }
239
- // Iterate in reverse DOM order.
240
- let children = root.children || root.childNodes;
241
- for (let i = children.length - 1; i >= 0; i--) {
242
- let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?
243
- this._getLastTabbableElement(children[i]) :
244
- null;
245
- if (tabbableChild) {
246
- return tabbableChild;
247
- }
248
- }
249
- return null;
250
- }
251
- /** Creates an anchor element. */
252
- _createAnchor() {
253
- const anchor = this._document.createElement('div');
254
- this._toggleAnchorTabIndex(this._enabled, anchor);
255
- anchor.classList.add('cdk-visually-hidden');
256
- anchor.classList.add('cdk-focus-trap-anchor');
257
- anchor.setAttribute('aria-hidden', 'true');
258
- return anchor;
259
- }
260
- /**
261
- * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.
262
- * @param isEnabled Whether the focus trap is enabled.
263
- * @param anchor Anchor on which to toggle the tabindex.
264
- */
265
- _toggleAnchorTabIndex(isEnabled, anchor) {
266
- // Remove the tabindex completely, rather than setting it to -1, because if the
267
- // element has a tabindex, the user might still hit it when navigating with the arrow keys.
268
- isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');
269
- }
270
- /**
271
- * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.
272
- * @param enabled: Whether the anchors should trap Tab.
273
- */
274
- toggleAnchors(enabled) {
275
- if (this._startAnchor && this._endAnchor) {
276
- this._toggleAnchorTabIndex(enabled, this._startAnchor);
277
- this._toggleAnchorTabIndex(enabled, this._endAnchor);
278
- }
279
- }
280
- /** Executes a function when the zone is stable. */
281
- _executeOnStable(fn) {
282
- if (this._ngZone.isStable) {
283
- fn();
284
- }
285
- else {
286
- this._ngZone.onStable.pipe(take(1)).subscribe(fn);
287
- }
288
- }
289
- }
290
- /**
291
- * Factory that allows easy instantiation of focus traps.
292
- * @deprecated Use `ConfigurableFocusTrapFactory` instead.
293
- * @breaking-change for 11.0.0 Remove this class.
294
- */
295
- export class FocusTrapFactory {
296
- constructor(_checker, _ngZone, _document) {
297
- this._checker = _checker;
298
- this._ngZone = _ngZone;
299
- this._document = _document;
300
- }
301
- /**
302
- * Creates a focus-trapped region around the given element.
303
- * @param element The element around which focus will be trapped.
304
- * @param deferCaptureElements Defers the creation of focus-capturing elements to be done
305
- * manually by the user.
306
- * @returns The created focus trap instance.
307
- */
308
- create(element, deferCaptureElements = false) {
309
- return new FocusTrap(element, this._checker, this._ngZone, this._document, deferCaptureElements);
310
- }
311
- }
312
- FocusTrapFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FocusTrapFactory, deps: [{ token: i1.InteractivityChecker }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
313
- FocusTrapFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FocusTrapFactory, providedIn: 'root' });
314
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FocusTrapFactory, decorators: [{
315
- type: Injectable,
316
- args: [{ providedIn: 'root' }]
317
- }], ctorParameters: function () { return [{ type: i1.InteractivityChecker }, { type: i0.NgZone }, { type: undefined, decorators: [{
318
- type: Inject,
319
- args: [DOCUMENT]
320
- }] }]; } });
321
- /** Directive for trapping focus within a region. */
322
- export class FocusTrapDirective {
323
- constructor(_elementRef, _focusTrapFactory, _document) {
324
- this._elementRef = _elementRef;
325
- this._focusTrapFactory = _focusTrapFactory;
326
- /** Previously focused element to restore focus to upon destroy when using autoCapture. */
327
- this._previouslyFocusedElement = null;
328
- this._autoCapture = false;
329
- this._document = _document;
330
- this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);
331
- }
332
- /** Whether the focus trap is active. */
333
- get enabled() {
334
- return this.focusTrap.enabled;
335
- }
336
- set enabled(value) {
337
- this.focusTrap.enabled = coerceBooleanProperty(value);
338
- }
339
- /**
340
- * Whether the directive should automatically move focus into the trapped region upon
341
- * initialization and return focus to the previous activeElement upon destruction.
342
- */
343
- get autoCapture() {
344
- return this._autoCapture;
345
- }
346
- set autoCapture(value) {
347
- this._autoCapture = coerceBooleanProperty(value);
348
- }
349
- ngOnDestroy() {
350
- this.focusTrap.destroy();
351
- // If we stored a previously focused element when using autoCapture, return focus to that
352
- // element now that the trapped region is being destroyed.
353
- if (this._previouslyFocusedElement) {
354
- this._previouslyFocusedElement.focus();
355
- this._previouslyFocusedElement = null;
356
- }
357
- }
358
- ngAfterContentInit() {
359
- this.focusTrap.attachAnchors();
360
- if (this.autoCapture) {
361
- this._captureFocus();
362
- }
363
- }
364
- ngDoCheck() {
365
- if (!this.focusTrap.hasAttached()) {
366
- this.focusTrap.attachAnchors();
367
- }
368
- }
369
- ngOnChanges(changes) {
370
- const autoCaptureChange = changes['autoCapture'];
371
- if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture &&
372
- this.focusTrap.hasAttached()) {
373
- this._captureFocus();
374
- }
375
- }
376
- _captureFocus() {
377
- this._previouslyFocusedElement = this._document.activeElement;
378
- this.focusTrap.focusInitialElementWhenReady();
379
- }
380
- }
381
- FocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: FocusTrapFactory }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
382
- FocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: FocusTrapDirective, selector: "[focusTrap]", inputs: { enabled: ["cdkTrapFocus", "enabled"], autoCapture: ["cdkTrapFocusAutoCapture", "autoCapture"] }, exportAs: ["focusTrap"], usesOnChanges: true, ngImport: i0 });
383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FocusTrapDirective, decorators: [{
384
- type: Directive,
385
- args: [{
386
- selector: '[focusTrap]',
387
- exportAs: 'focusTrap'
388
- }]
389
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: FocusTrapFactory }, { type: undefined, decorators: [{
390
- type: Inject,
391
- args: [DOCUMENT]
392
- }] }]; }, propDecorators: { enabled: [{
393
- type: Input,
394
- args: ['cdkTrapFocus']
395
- }], autoCapture: [{
396
- type: Input,
397
- args: ['cdkTrapFocusAutoCapture']
398
- }] } });
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mb2N1cy10cmFwL2ZvY3VzLXRyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsb0JBQW9CO0FBRXBCLE9BQU8sRUFBRSxxQkFBcUIsRUFBZ0IsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRy9EOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBeUJwQixZQUNXLFFBQXFCLEVBQ3RCLFFBQThCLEVBQzdCLE9BQWUsRUFDZixTQUFtQixFQUM1QixZQUFZLEdBQUcsS0FBSztRQUpYLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDN0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVU7UUExQnRCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGtHQUFrRztRQUN4Rix3QkFBbUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxzQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQWdCM0QsYUFBUSxHQUFZLElBQUksQ0FBQztRQVNqQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENB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QUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakQsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVztZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQTRCLENBQUM7UUFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ2hELENBQUM7OytHQWhGVSxrQkFBa0IseUVBcUNuQixRQUFRO21HQXJDUCxrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFLFdBQVc7aUJBQ3RCOzswQkFzQ0ksTUFBTTsyQkFBQyxRQUFROzRDQTFCZCxPQUFPO3NCQURWLEtBQUs7dUJBQUMsY0FBYztnQkFjakIsV0FBVztzQkFEZCxLQUFLO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIEJvb2xlYW5JbnB1dCB9IGZyb20gJy4vYm9vbGVhbi1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBEb0NoZWNrLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpdml0eUNoZWNrZXIgfSBmcm9tICcuL2ludGVyYWN0aXZpdHktY2hlY2tlcic7XG5cblxuLyoqXG4gKiBDbGFzcyB0aGF0IGFsbG93cyBmb3IgdHJhcHBpbmcgZm9jdXMgd2l0aGluIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogVGhpcyBjbGFzcyBjdXJyZW50bHkgdXNlcyBhIHJlbGF0aXZlbHkgc2ltcGxlIGFwcHJvYWNoIHRvIGZvY3VzIHRyYXBwaW5nLlxuICogSXQgYXNzdW1lcyB0aGF0IHRoZSB0YWIgb3JkZXIgaXMgdGhlIHNhbWUgYXMgRE9NIG9yZGVyLCB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS5cbiAqIFRoaW5ncyBsaWtlIGB0YWJJbmRleCA+IDBgLCBmbGV4IGBvcmRlcmAsIGFuZCBzaGFkb3cgcm9vdHMgY2FuIGNhdXNlIHRoZSB0d28gdG8gbWlzYWxpZ24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBDb25maWd1cmFibGVGb2N1c1RyYXBgIGluc3RlYWQuXG4gKiBAYnJlYWtpbmctY2hhbmdlIGZvciAxMS4wLjAgUmVtb3ZlIHRoaXMgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBGb2N1c1RyYXAge1xuICBwcml2YXRlIF9zdGFydEFuY2hvcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgcHJpdmF0ZSBfZW5kQW5jaG9yPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcml2YXRlIF9oYXNBdHRhY2hlZCA9IGZhbHNlO1xuXG4gIC8vIEV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIGFuY2hvcnMuIE5lZWQgdG8gYmUgcmVndWxhciBmdW5jdGlvbnMgc28gdGhhdCB3ZSBjYW4gdW5iaW5kIHRoZW0gbGF0ZXIuXG4gIHByb3RlY3RlZCBzdGFydEFuY2hvckxpc3RlbmVyID0gKCkgPT4gdGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKTtcbiAgcHJvdGVjdGVkIGVuZEFuY2hvckxpc3RlbmVyID0gKCkgPT4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZvY3VzIHRyYXAgaXMgYWN0aXZlLiAqL1xuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX3N0YXJ0QW5jaG9yICYmIHRoaXMuX2VuZEFuY2hvcikge1xuICAgICAgdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodmFsdWUsIHRoaXMuX3N0YXJ0QW5jaG9yKTtcbiAgICAgIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHZhbHVlLCB0aGlzLl9lbmRBbmNob3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgX2VsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHByaXZhdGUgX2NoZWNrZXI6IEludGVyYWN0aXZpdHlDaGVja2VyLFxuICAgIHJlYWRvbmx5IF9uZ1pvbmU6IE5nWm9uZSxcbiAgICByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIGRlZmVyQW5jaG9ycyA9IGZhbHNlKSB7XG5cbiAgICBpZiAoIWRlZmVyQW5jaG9ycykge1xuICAgICAgdGhpcy5hdHRhY2hBbmNob3JzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlc3Ryb3lzIHRoZSBmb2N1cyB0cmFwIGJ5IGNsZWFuaW5nIHVwIHRoZSBhbmNob3JzLiAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IHN0YXJ0QW5jaG9yID0gdGhpcy5fc3RhcnRBbmNob3I7XG4gICAgY29uc3QgZW5kQW5jaG9yID0gdGhpcy5fZW5kQW5jaG9yO1xuXG4gICAgaWYgKHN0YXJ0QW5jaG9yKSB7XG4gICAgICBzdGFydEFuY2hvci5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcik7XG5cbiAgICAgIGlmIChzdGFydEFuY2hvci5wYXJlbnROb2RlKSB7XG4gICAgICAgIHN0YXJ0QW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3RhcnRBbmNob3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmRBbmNob3IpIHtcbiAgICAgIGVuZEFuY2hvci5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpO1xuXG4gICAgICBpZiAoZW5kQW5jaG9yLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZW5kQW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZW5kQW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9zdGFydEFuY2hvciA9IHRoaXMuX2VuZEFuY2hvciA9IG51bGw7XG4gICAgdGhpcy5faGFzQXR0YWNoZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIHRoZSBhbmNob3JzIGludG8gdGhlIERPTS4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgYXV0b21hdGljYWxseVxuICAgKiBpbiB0aGUgY29uc3RydWN0b3IsIGJ1dCBjYW4gYmUgZGVmZXJyZWQgZm9yIGNhc2VzIGxpa2UgZGlyZWN0aXZlcyB3aXRoIGAqbmdJZmAuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZvY3VzIHRyYXAgbWFuYWdlZCB0byBhdHRhY2ggc3VjY2Vzc2Z1bHkuIFRoaXMgbWF5IG5vdCBiZSB0aGUgY2FzZVxuICAgKiBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXNuJ3QgY3VycmVudGx5IGluIHRoZSBET00uXG4gICAqL1xuICBhdHRhY2hBbmNob3JzKCk6IGJvb2xlYW4ge1xuICAgIC8vIElmIHdlJ3JlIG5vdCBvbiB0aGUgYnJvd3NlciwgdGhlcmUgY2FuIGJlIG5vIGZvY3VzIHRvIHRyYXAuXG4gICAgaWYgKHRoaXMuX2hhc0F0dGFjaGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGFydEFuY2hvcikge1xuICAgICAgICB0aGlzLl9zdGFydEFuY2hvciA9IHRoaXMuX2NyZWF0ZUFuY2hvcigpO1xuICAgICAgICB0aGlzLl9zdGFydEFuY2hvciEuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2VuZEFuY2hvcikge1xuICAgICAgICB0aGlzLl9lbmRBbmNob3IgPSB0aGlzLl9jcmVhdGVBbmNob3IoKTtcbiAgICAgICAgdGhpcy5fZW5kQW5jaG9yIS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvciEsIHRoaXMuX2VsZW1lbnQpO1xuICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IhLCB0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKTtcbiAgICAgIHRoaXMuX2hhc0F0dGFjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faGFzQXR0YWNoZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSB6b25lIHRvIHN0YWJpbGl6ZSwgdGhlbiBlaXRoZXIgZm9jdXNlcyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHRoZVxuICAgKiB1c2VyIHNwZWNpZmllZCwgb3IgdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGJvb2xlYW4sIGRlcGVuZGluZ1xuICAgKiBvbiB3aGV0aGVyIGZvY3VzIHdhcyBtb3ZlZCBzdWNjZXNzZnVsbHkuXG4gICAqL1xuICBmb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKSA9PiByZXNvbHZlKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCgpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSB6b25lIHRvIHN0YWJpbGl6ZSwgdGhlbiBmb2N1c2VzXG4gICAqIHRoZSBmaXJzdCB0YWJiYWJsZSBlbGVtZW50IHdpdGhpbiB0aGUgZm9jdXMgdHJhcCByZWdpb24uXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGJvb2xlYW4sIGRlcGVuZGluZ1xuICAgKiBvbiB3aGV0aGVyIGZvY3VzIHdhcyBtb3ZlZCBzdWNjZXNzZnVsbHkuXG4gICAqL1xuICBmb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKSA9PiByZXNvbHZlKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSB6b25lIHRvIHN0YWJpbGl6ZSwgdGhlbiBmb2N1c2VzXG4gICAqIHRoZSBsYXN0IHRhYmJhYmxlIGVsZW1lbnQgd2l0aGluIHRoZSBmb2N1cyB0cmFwIHJlZ2lvbi5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgYm9vbGVhbiwgZGVwZW5kaW5nXG4gICAqIG9uIHdoZXRoZXIgZm9jdXMgd2FzIG1vdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICovXG4gIGZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLl9leGVjdXRlT25TdGFibGUoKCkgPT4gcmVzb2x2ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzcGVjaWZpZWQgYm91bmRhcnkgZWxlbWVudCBvZiB0aGUgdHJhcHBlZCByZWdpb24uXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgYm91bmRhcnkgdG8gZ2V0IChzdGFydCBvciBlbmQgb2YgdHJhcHBlZCByZWdpb24pLlxuICAgKiBAcmV0dXJucyBUaGUgYm91bmRhcnkgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgX2dldFJlZ2lvbkJvdW5kYXJ5KGJvdW5kOiAnc3RhcnQnIHwgJ2VuZCcpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIC8vIENvbnRhaW5zIHRoZSBkZXByZWNhdGVkIHZlcnNpb24gb2Ygc2VsZWN0b3IsIGZvciB0ZW1wb3JhcnkgYmFja3dhcmRzIGNvbXBhcmFiaWxpdHkuXG4gICAgbGV0IG1hcmtlcnMgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7Ym91bmR9XSwgYCArXG4gICAgICBgW2Nka0ZvY3VzUmVnaW9uJHtib3VuZH1dLCBgICtcbiAgICAgIGBbY2RrLWZvY3VzLSR7Ym91bmR9XWApIGFzIE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4gICAgICBpZiAobWFya2Vyc1tpXS5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy0ke2JvdW5kfWApKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtJHtib3VuZH0nLCBgICtcbiAgICAgICAgICBgdXNlICdjZGtGb2N1c1JlZ2lvbiR7Ym91bmR9JyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBgICtcbiAgICAgICAgICBgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMC5gLCBtYXJrZXJzW2ldKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2Vyc1tpXS5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy1yZWdpb24tJHtib3VuZH1gKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0ke2JvdW5kfScsIGAgK1xuICAgICAgICAgIGB1c2UgJ2Nka0ZvY3VzUmVnaW9uJHtib3VuZH0nIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSBgICtcbiAgICAgICAgICBgd2lsbCBiZSByZW1vdmVkIGluIDguMC4wLmAsIG1hcmtlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChib3VuZCA9PSAnc3RhcnQnKSB7XG4gICAgICByZXR1cm4gbWFya2Vycy5sZW5ndGggPyBtYXJrZXJzWzBdIDogdGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJzLmxlbmd0aCA/XG4gICAgICBtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV0gOiB0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgZm9jdXNlZCB3aGVuIHRoZSBmb2N1cyB0cmFwIGlzIGluaXRpYWxpemVkLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGZvY3VzIHdhcyBtb3ZlZCBzdWNjZXNzZnVsbHkuXG4gICAqL1xuICBmb2N1c0luaXRpYWxFbGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIENvbnRhaW5zIHRoZSBkZXByZWNhdGVkIHZlcnNpb24gb2Ygc2VsZWN0b3IsIGZvciB0ZW1wb3JhcnkgYmFja3dhcmRzIGNvbXBhcmFiaWxpdHkuXG4gICAgY29uc3QgcmVkaXJlY3RUb0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtjZGstZm9jdXMtaW5pdGlhbF0sIGAgK1xuICAgICAgYFtjZGtGb2N1c0luaXRpYWxdYCkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAocmVkaXJlY3RUb0VsZW1lbnQpIHtcbiAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiAgICAgIGlmIChyZWRpcmVjdFRvRWxlbWVudC5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy1pbml0aWFsYCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy1pbml0aWFsJywgYCArXG4gICAgICAgICAgYHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgYCArXG4gICAgICAgICAgYHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMGAsIHJlZGlyZWN0VG9FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FybiB0aGUgY29uc3VtZXIgaWYgdGhlIGVsZW1lbnQgdGhleSd2ZSBwb2ludGVkIHRvXG4gICAgICAvLyBpc24ndCBmb2N1c2FibGUsIHdoZW4gbm90IGluIHByb2R1Y3Rpb24gbW9kZS5cblxuICAgICAgaWYgKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHJlZGlyZWN0VG9FbGVtZW50KSkge1xuICAgICAgICBjb25zdCBmb2N1c2FibGVDaGlsZCA9IHRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHJlZGlyZWN0VG9FbGVtZW50KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZm9jdXNhYmxlQ2hpbGQ/LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiAhIWZvY3VzYWJsZUNoaWxkO1xuICAgICAgfVxuXG4gICAgICByZWRpcmVjdFRvRWxlbWVudC5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgd2l0aGluIHRoZSBmb2N1cyB0cmFwIHJlZ2lvbi5cbiAgICogQHJldHVybnMgV2hldGhlciBmb2N1cyB3YXMgbW92ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWRpcmVjdFRvRWxlbWVudCA9IHRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCdzdGFydCcpO1xuXG4gICAgaWYgKHJlZGlyZWN0VG9FbGVtZW50KSB7XG4gICAgICByZWRpcmVjdFRvRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHJldHVybiAhIXJlZGlyZWN0VG9FbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGxhc3QgdGFiYmFibGUgZWxlbWVudCB3aXRoaW4gdGhlIGZvY3VzIHRyYXAgcmVnaW9uLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGZvY3VzIHdhcyBtb3ZlZCBzdWNjZXNzZnVsbHkuXG4gICAqL1xuICBmb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVkaXJlY3RUb0VsZW1lbnQgPSB0aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgnZW5kJyk7XG5cbiAgICBpZiAocmVkaXJlY3RUb0VsZW1lbnQpIHtcbiAgICAgIHJlZGlyZWN0VG9FbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhcmVkaXJlY3RUb0VsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZvY3VzIHRyYXAgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGF0dGFjaGVkLlxuICAgKi9cbiAgaGFzQXR0YWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgZmlyc3QgdGFiYmFibGUgZWxlbWVudCBmcm9tIGEgRE9NIHN1YnRyZWUgKGluY2x1c2l2ZSkuICovXG4gIHByaXZhdGUgX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShyb290KSAmJiB0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUocm9vdCkpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgaW4gRE9NIG9yZGVyLiBOb3RlIHRoYXQgSUUgZG9lc24ndCBoYXZlIGBjaGlsZHJlbmAgZm9yIFNWRyBzbyB3ZSBmYWxsXG4gICAgLy8gYmFjayB0byBgY2hpbGROb2Rlc2Agd2hpY2ggaW5jbHVkZXMgdGV4dCBub2RlcywgY29tbWVudHMgZXRjLlxuICAgIGxldCBjaGlsZHJlbiA9IHJvb3QuY2hpbGRyZW4gfHwgcm9vdC5jaGlsZE5vZGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHRhYmJhYmxlQ2hpbGQgPSBjaGlsZHJlbltpXS5ub2RlVHlwZSA9PT0gdGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFID9cbiAgICAgICAgdGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoY2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQpIDpcbiAgICAgICAgbnVsbDtcblxuICAgICAgaWYgKHRhYmJhYmxlQ2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRhYmJhYmxlQ2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogR2V0IHRoZSBsYXN0IHRhYmJhYmxlIGVsZW1lbnQgZnJvbSBhIERPTSBzdWJ0cmVlIChpbmNsdXNpdmUpLiAqL1xuICBwcml2YXRlIF9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShyb290KSAmJiB0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUocm9vdCkpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgaW4gcmV2ZXJzZSBET00gb3JkZXIuXG4gICAgbGV0IGNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbiB8fCByb290LmNoaWxkTm9kZXM7XG5cbiAgICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB0YWJiYWJsZUNoaWxkID0gY2hpbGRyZW5baV0ubm9kZVR5cGUgPT09IHRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSA/XG4gICAgICAgIHRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoY2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQpIDpcbiAgICAgICAgbnVsbDtcblxuICAgICAgaWYgKHRhYmJhYmxlQ2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRhYmJhYmxlQ2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhbiBhbmNob3IgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQW5jaG9yKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLCBhbmNob3IpO1xuICAgIGFuY2hvci5jbGFzc0xpc3QuYWRkKCdjZGstdmlzdWFsbHktaGlkZGVuJyk7XG4gICAgYW5jaG9yLmNsYXNzTGlzdC5hZGQoJ2Nkay1mb2N1cy10cmFwLWFuY2hvcicpO1xuICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICByZXR1cm4gYW5jaG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGB0YWJpbmRleGAgb2YgYW4gYW5jaG9yLCBiYXNlZCBvbiB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgZm9jdXMgdHJhcC5cbiAgICogQHBhcmFtIGlzRW5hYmxlZCBXaGV0aGVyIHRoZSBmb2N1cyB0cmFwIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSBhbmNob3IgQW5jaG9yIG9uIHdoaWNoIHRvIHRvZ2dsZSB0aGUgdGFiaW5kZXguXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVBbmNob3JUYWJJbmRleChpc0VuYWJsZWQ6IGJvb2xlYW4sIGFuY2hvcjogSFRNTEVsZW1lbnQpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHRhYmluZGV4IGNvbXBsZXRlbHksIHJhdGhlciB0aGFuIHNldHRpbmcgaXQgdG8gLTEsIGJlY2F1c2UgaWYgdGhlXG4gICAgLy8gZWxlbWVudCBoYXMgYSB0YWJpbmRleCwgdGhlIHVzZXIgbWlnaHQgc3RpbGwgaGl0IGl0IHdoZW4gbmF2aWdhdGluZyB3aXRoIHRoZSBhcnJvdyBrZXlzLlxuICAgIGlzRW5hYmxlZCA/IGFuY2hvci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKSA6IGFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGVgdGFiaW5kZXhgIG9mIGJvdGggYW5jaG9ycyB0byBlaXRoZXIgdHJhcCBUYWIgZm9jdXMgb3IgYWxsb3cgaXQgdG8gZXNjYXBlLlxuICAgKiBAcGFyYW0gZW5hYmxlZDogV2hldGhlciB0aGUgYW5jaG9ycyBzaG91bGQgdHJhcCBUYWIuXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9nZ2xlQW5jaG9ycyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0QW5jaG9yICYmIHRoaXMuX2VuZEFuY2hvcikge1xuICAgICAgdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgoZW5hYmxlZCwgdGhpcy5fc3RhcnRBbmNob3IpO1xuICAgICAgdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgoZW5hYmxlZCwgdGhpcy5fZW5kQW5jaG9yKTtcbiAgICB9XG4gIH1cblxuICAvKiogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aGVuIHRoZSB6b25lIGlzIHN0YWJsZS4gKi9cbiAgcHJpdmF0ZSBfZXhlY3V0ZU9uU3RhYmxlKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbmdab25lLmlzU3RhYmxlKSB7XG4gICAgICBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgdGhhdCBhbGxvd3MgZWFzeSBpbnN0YW50aWF0aW9uIG9mIGZvY3VzIHRyYXBzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5YCBpbnN0ZWFkLlxuICogQGJyZWFraW5nLWNoYW5nZSBmb3IgMTEuMC4wIFJlbW92ZSB0aGlzIGNsYXNzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZvY3VzVHJhcEZhY3Rvcnkge1xuICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hlY2tlcjogSW50ZXJhY3Rpdml0eUNoZWNrZXIsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChET0NVTUVOVCkgX2RvY3VtZW50OiBhbnkpIHtcblxuICAgIHRoaXMuX2RvY3VtZW50ID0gX2RvY3VtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb2N1cy10cmFwcGVkIHJlZ2lvbiBhcm91bmQgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IGFyb3VuZCB3aGljaCBmb2N1cyB3aWxsIGJlIHRyYXBwZWQuXG4gICAqIEBwYXJhbSBkZWZlckNhcHR1cmVFbGVtZW50cyBEZWZlcnMgdGhlIGNyZWF0aW9uIG9mIGZvY3VzLWNhcHR1cmluZyBlbGVtZW50cyB0byBiZSBkb25lXG4gICAqICAgICBtYW51YWxseSBieSB0aGUgdXNlci5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgZm9jdXMgdHJhcCBpbnN0YW5jZS5cbiAgICovXG4gIGNyZWF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCwgZGVmZXJDYXB0dXJlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZSk6IEZvY3VzVHJhcCB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoXG4gICAgICBlbGVtZW50LCB0aGlzLl9jaGVja2VyLCB0aGlzLl9uZ1pvbmUsIHRoaXMuX2RvY3VtZW50LCBkZWZlckNhcHR1cmVFbGVtZW50cyk7XG4gIH1cbn1cblxuLyoqIERpcmVjdGl2ZSBmb3IgdHJhcHBpbmcgZm9jdXMgd2l0aGluIGEgcmVnaW9uLiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZvY3VzVHJhcF0nLFxuICBleHBvcnRBczogJ2ZvY3VzVHJhcCdcbn0pXG5leHBvcnQgY2xhc3MgRm9jdXNUcmFwRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIERvQ2hlY2sge1xuICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG5cbiAgLyoqIFVuZGVybHlpbmcgRm9jdXNUcmFwIGluc3RhbmNlLiAqL1xuICBmb2N1c1RyYXA6IEZvY3VzVHJhcDtcblxuICAvKiogUHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgdG8gcmVzdG9yZSBmb2N1cyB0byB1cG9uIGRlc3Ryb3kgd2hlbiB1c2luZyBhdXRvQ2FwdHVyZS4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyB0cmFwIGlzIGFjdGl2ZS4gKi9cbiAgQElucHV0KCdjZGtUcmFwRm9jdXMnKVxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c1RyYXAuZW5hYmxlZDtcbiAgfVxuXG4gIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mb2N1c1RyYXAuZW5hYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGlyZWN0aXZlIHNob3VsZCBhdXRvbWF0aWNhbGx5IG1vdmUgZm9jdXMgaW50byB0aGUgdHJhcHBlZCByZWdpb24gdXBvblxuICAgKiBpbml0aWFsaXphdGlvbiBhbmQgcmV0dXJuIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBhY3RpdmVFbGVtZW50IHVwb24gZGVzdHJ1Y3Rpb24uXG4gICAqL1xuICBASW5wdXQoJ2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlJylcbiAgZ2V0IGF1dG9DYXB0dXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvQ2FwdHVyZTtcbiAgfVxuXG4gIHNldCBhdXRvQ2FwdHVyZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9DYXB0dXJlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F1dG9DYXB0dXJlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfZm9jdXNUcmFwRmFjdG9yeTogRm9jdXNUcmFwRmFjdG9yeSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBfZG9jdW1lbnQ6IGFueSkge1xuXG4gICAgdGhpcy5fZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gICAgdGhpcy5mb2N1c1RyYXAgPSB0aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpO1xuXG4gICAgLy8gSWYgd2Ugc3RvcmVkIGEgcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgd2hlbiB1c2luZyBhdXRvQ2FwdHVyZSwgcmV0dXJuIGZvY3VzIHRvIHRoYXRcbiAgICAvLyBlbGVtZW50IG5vdyB0aGF0IHRoZSB0cmFwcGVkIHJlZ2lvbiBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCkge1xuICAgICAgdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCk7XG5cbiAgICBpZiAodGhpcy5hdXRvQ2FwdHVyZSkge1xuICAgICAgdGhpcy5fY2FwdHVyZUZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICghdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBhdXRvQ2FwdHVyZUNoYW5nZSA9IGNoYW5nZXNbJ2F1dG9DYXB0dXJlJ107XG5cbiAgICBpZiAoYXV0b0NhcHR1cmVDaGFuZ2UgJiYgIWF1dG9DYXB0dXJlQ2hhbmdlLmZpcnN0Q2hhbmdlICYmIHRoaXMuYXV0b0NhcHR1cmUgJiZcbiAgICAgIHRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRoaXMuX2NhcHR1cmVGb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhcHR1cmVGb2N1cygpIHtcbiAgICB0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lbmFibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hdXRvQ2FwdHVyZTogQm9vbGVhbklucHV0O1xufVxuIl19