@wavemaker/app-ng-runtime 12.0.0-next.45001 → 12.0.0-next.45005

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 (1480) hide show
  1. app-ng-runtime/build-task/.npmignore +2 -0
  2. app-ng-runtime/build-task/bundles/index.umd.js +341 -344
  3. app-ng-runtime/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +5 -3
  4. app-ng-runtime/build-task/esm2022/advanced/carousel/carousel.build.mjs +1 -1
  5. app-ng-runtime/build-task/esm2022/basic/default/label/label.build.mjs +1 -1
  6. app-ng-runtime/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
  7. app-ng-runtime/build-task/esm2022/containers/accordion/accordion.build.mjs +1 -1
  8. app-ng-runtime/build-task/esm2022/containers/repeat-template.build.mjs +5 -3
  9. app-ng-runtime/build-task/esm2022/containers/tabs/tabs.build.mjs +1 -1
  10. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +1 -1
  11. app-ng-runtime/build-task/esm2022/data/form/form.build.mjs +5 -2
  12. app-ng-runtime/build-task/esm2022/data/list/list.build.mjs +1 -1
  13. app-ng-runtime/build-task/esm2022/data/media-list/media-list.build.mjs +1 -1
  14. app-ng-runtime/build-task/esm2022/data/table/table-column/table-column.build.mjs +1 -1
  15. app-ng-runtime/build-task/esm2022/data/table/table.build.mjs +1 -1
  16. app-ng-runtime/build-task/esm2022/dialogs/partial-dialog/partial-dialog.build.mjs +1 -1
  17. app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +1 -1
  18. app-ng-runtime/build-task/esm2022/navigation/menu/menu.build.mjs +8 -3
  19. app-ng-runtime/build-task/esm2022/navigation/popover/popover.build.mjs +1 -1
  20. app-ng-runtime/build-task/esm2022/page/page-content/page-content.build.mjs +1 -1
  21. app-ng-runtime/build-task/esm2022/page/page.build.mjs +3 -2
  22. app-ng-runtime/build-task/esm2022/public_api.mjs +1 -2
  23. app-ng-runtime/build-task/esm2022/utils/utils.mjs +1 -1
  24. app-ng-runtime/build-task/fesm2022/index.mjs +340 -341
  25. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  26. app-ng-runtime/build-task/public_api.d.ts +0 -1
  27. app-ng-runtime/components/advanced/carousel/.npmignore +2 -0
  28. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +29 -18
  29. app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +3 -3
  30. app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -2
  31. app-ng-runtime/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +15 -9
  32. app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
  33. app-ng-runtime/components/advanced/carousel/esm2022/carousel.directive.mjs +12 -7
  34. app-ng-runtime/components/advanced/carousel/esm2022/carousel.module.mjs +2 -2
  35. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +28 -16
  36. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  37. app-ng-runtime/components/advanced/custom/.npmignore +2 -0
  38. app-ng-runtime/components/advanced/custom/bundles/index.umd.js +31 -94
  39. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +2 -0
  40. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +1 -0
  41. app-ng-runtime/components/advanced/custom/custom-widget.module.d.ts +4 -5
  42. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +21 -13
  43. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +5 -2
  44. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.directive.mjs +5 -5
  45. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.module.mjs +2 -9
  46. app-ng-runtime/components/advanced/custom/esm2022/public_api.mjs +1 -2
  47. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +31 -93
  48. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  49. app-ng-runtime/components/advanced/custom/public_api.d.ts +0 -1
  50. app-ng-runtime/components/advanced/login/.npmignore +2 -0
  51. app-ng-runtime/components/advanced/login/bundles/index.umd.js +19 -13
  52. app-ng-runtime/components/advanced/login/esm2022/login.component.mjs +17 -10
  53. app-ng-runtime/components/advanced/login/esm2022/login.module.mjs +2 -2
  54. app-ng-runtime/components/advanced/login/fesm2022/index.mjs +18 -11
  55. app-ng-runtime/components/advanced/login/fesm2022/index.mjs.map +1 -1
  56. app-ng-runtime/components/advanced/login/login.component.d.ts +2 -2
  57. app-ng-runtime/components/advanced/marquee/.npmignore +2 -0
  58. app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +11 -6
  59. app-ng-runtime/components/advanced/marquee/esm2022/marquee.directive.mjs +12 -7
  60. app-ng-runtime/components/advanced/marquee/esm2022/marquee.module.mjs +2 -2
  61. app-ng-runtime/components/advanced/marquee/fesm2022/index.mjs +13 -8
  62. app-ng-runtime/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
  63. app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -2
  64. app-ng-runtime/components/base/.npmignore +2 -0
  65. app-ng-runtime/components/base/bundles/index.umd.js +400 -312
  66. app-ng-runtime/components/base/directives/show-in-device.directive.d.ts +3 -6
  67. app-ng-runtime/components/base/esm2022/components.module.mjs +2 -2
  68. app-ng-runtime/components/base/esm2022/directives/show-in-device.directive.mjs +13 -15
  69. app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +35 -34
  70. app-ng-runtime/components/base/esm2022/pipes/image.pipe.mjs +2 -2
  71. app-ng-runtime/components/base/esm2022/pipes/sanitize.pipe.mjs +3 -3
  72. app-ng-runtime/components/base/esm2022/pipes/trust-as.pipe.mjs +3 -3
  73. app-ng-runtime/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
  74. app-ng-runtime/components/base/esm2022/public_api.mjs +2 -1
  75. app-ng-runtime/components/base/esm2022/utils/data-utils.mjs +30 -29
  76. app-ng-runtime/components/base/esm2022/utils/form-utils.mjs +48 -42
  77. app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -7
  78. app-ng-runtime/components/base/esm2022/utils/widget-utils.mjs +28 -27
  79. app-ng-runtime/components/base/esm2022/widgets/common/base/base-container.component.mjs +8 -7
  80. app-ng-runtime/components/base/esm2022/widgets/common/base/base-field-validations.mjs +23 -22
  81. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +63 -42
  82. app-ng-runtime/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +4 -4
  83. app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +52 -18
  84. app-ng-runtime/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +6 -5
  85. app-ng-runtime/components/base/esm2022/widgets/common/base/stylable.component.mjs +3 -3
  86. app-ng-runtime/components/base/esm2022/widgets/common/base/text-content.directive.mjs +3 -3
  87. app-ng-runtime/components/base/esm2022/widgets/common/container/container.directive.mjs +12 -7
  88. app-ng-runtime/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +5 -4
  89. app-ng-runtime/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +12 -7
  90. app-ng-runtime/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +14 -7
  91. app-ng-runtime/components/base/esm2022/widgets/common/message/message.component.mjs +16 -10
  92. app-ng-runtime/components/base/esm2022/widgets/common/partial/partial.directive.mjs +14 -8
  93. app-ng-runtime/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +9 -8
  94. app-ng-runtime/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +1 -1
  95. app-ng-runtime/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +4 -4
  96. app-ng-runtime/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +15 -9
  97. app-ng-runtime/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +11 -10
  98. app-ng-runtime/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
  99. app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
  100. app-ng-runtime/components/base/esm2022/widgets/framework/styler.mjs +1 -1
  101. app-ng-runtime/components/base/esm2022/widgets/framework/widget-props.mjs +1 -1
  102. app-ng-runtime/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
  103. app-ng-runtime/components/base/esm2022/widgets/framework/widget-registry.mjs +1 -1
  104. app-ng-runtime/components/base/fesm2022/index.mjs +405 -315
  105. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  106. app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
  107. app-ng-runtime/components/base/public_api.d.ts +1 -0
  108. app-ng-runtime/components/base/utils/data-utils.d.ts +1 -0
  109. app-ng-runtime/components/base/utils/widget-utils.d.ts +2 -2
  110. app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -1
  111. app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
  112. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +22 -4
  113. app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -1
  114. app-ng-runtime/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
  115. app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -2
  116. app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +2 -2
  117. app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -2
  118. app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -2
  119. app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +2 -2
  120. app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +3 -3
  121. app-ng-runtime/components/basic/default/.npmignore +2 -0
  122. app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +2 -2
  123. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -2
  124. app-ng-runtime/components/basic/default/bundles/index.umd.js +158 -115
  125. app-ng-runtime/components/basic/default/esm2022/anchor/anchor.component.mjs +31 -27
  126. app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +13 -7
  127. app-ng-runtime/components/basic/default/esm2022/basic.module.mjs +2 -2
  128. app-ng-runtime/components/basic/default/esm2022/html/html.directive.mjs +13 -8
  129. app-ng-runtime/components/basic/default/esm2022/icon/icon.component.mjs +19 -14
  130. app-ng-runtime/components/basic/default/esm2022/iframe/iframe.component.mjs +15 -9
  131. app-ng-runtime/components/basic/default/esm2022/label/label.directive.mjs +15 -9
  132. app-ng-runtime/components/basic/default/esm2022/picture/picture.directive.mjs +12 -7
  133. app-ng-runtime/components/basic/default/esm2022/picture/picture.props.mjs +1 -1
  134. app-ng-runtime/components/basic/default/esm2022/spinner/spinner.component.mjs +34 -30
  135. app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +21 -17
  136. app-ng-runtime/components/basic/default/fesm2022/index.mjs +157 -113
  137. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  138. app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -2
  139. app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -2
  140. app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -2
  141. app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -2
  142. app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -2
  143. app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -2
  144. app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -2
  145. app-ng-runtime/components/basic/progress/.npmignore +2 -0
  146. app-ng-runtime/components/basic/progress/bundles/index.umd.js +40 -28
  147. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +22 -15
  148. app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +17 -10
  149. app-ng-runtime/components/basic/progress/esm2022/progress.module.mjs +2 -2
  150. app-ng-runtime/components/basic/progress/esm2022/utils.mjs +3 -3
  151. app-ng-runtime/components/basic/progress/fesm2022/index.mjs +39 -26
  152. app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
  153. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -2
  154. app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -2
  155. app-ng-runtime/components/basic/rich-text-editor/.npmignore +2 -0
  156. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +19 -13
  157. app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +17 -10
  158. app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.module.mjs +2 -2
  159. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +18 -11
  160. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  161. app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
  162. app-ng-runtime/components/basic/search/.npmignore +2 -0
  163. app-ng-runtime/components/basic/search/bundles/index.umd.js +186 -175
  164. app-ng-runtime/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
  165. app-ng-runtime/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
  166. app-ng-runtime/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
  167. app-ng-runtime/components/basic/search/esm2022/scrollable.directive.mjs +3 -3
  168. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +148 -138
  169. app-ng-runtime/components/basic/search/esm2022/search.module.mjs +2 -2
  170. app-ng-runtime/components/basic/search/fesm2022/index.mjs +186 -174
  171. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  172. app-ng-runtime/components/basic/search/search.component.d.ts +2 -2
  173. app-ng-runtime/components/basic/tree/.npmignore +2 -0
  174. app-ng-runtime/components/basic/tree/bundles/index.umd.js +23 -17
  175. app-ng-runtime/components/basic/tree/esm2022/tree.component.mjs +21 -14
  176. app-ng-runtime/components/basic/tree/esm2022/tree.module.mjs +2 -2
  177. app-ng-runtime/components/basic/tree/fesm2022/index.mjs +22 -15
  178. app-ng-runtime/components/basic/tree/fesm2022/index.mjs.map +1 -1
  179. app-ng-runtime/components/basic/tree/tree.component.d.ts +2 -2
  180. app-ng-runtime/components/chart/.npmignore +2 -0
  181. app-ng-runtime/components/chart/bundles/index.umd.js +97 -84
  182. app-ng-runtime/components/chart/chart.component.d.ts +3 -3
  183. app-ng-runtime/components/chart/chart.utils.d.ts +3 -3
  184. app-ng-runtime/components/chart/esm2022/chart.component.mjs +82 -68
  185. app-ng-runtime/components/chart/esm2022/chart.module.mjs +2 -2
  186. app-ng-runtime/components/chart/esm2022/chart.utils.mjs +14 -13
  187. app-ng-runtime/components/chart/fesm2022/index.mjs +95 -81
  188. app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
  189. app-ng-runtime/components/containers/accordion/.npmignore +2 -0
  190. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -2
  191. app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +2 -2
  192. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +51 -40
  193. app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +23 -17
  194. app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.props.mjs +4 -4
  195. app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +25 -19
  196. app-ng-runtime/components/containers/accordion/esm2022/accordion.module.mjs +2 -2
  197. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +50 -38
  198. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  199. app-ng-runtime/components/containers/layout-grid/.npmignore +2 -0
  200. app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +32 -17
  201. app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +13 -8
  202. app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +12 -7
  203. app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +12 -7
  204. app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid.module.mjs +2 -2
  205. app-ng-runtime/components/containers/layout-grid/fesm2022/index.mjs +34 -19
  206. app-ng-runtime/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
  207. app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +2 -2
  208. app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -2
  209. app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -2
  210. app-ng-runtime/components/containers/linear-layout/.npmignore +2 -0
  211. app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +21 -11
  212. app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +12 -7
  213. app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +12 -7
  214. app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout.module.mjs +2 -2
  215. app-ng-runtime/components/containers/linear-layout/fesm2022/index.mjs +23 -13
  216. app-ng-runtime/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
  217. app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -2
  218. app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -2
  219. app-ng-runtime/components/containers/panel/.npmignore +2 -0
  220. app-ng-runtime/components/containers/panel/bundles/index.umd.js +85 -85
  221. app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +83 -82
  222. app-ng-runtime/components/containers/panel/esm2022/panel.module.mjs +2 -2
  223. app-ng-runtime/components/containers/panel/fesm2022/index.mjs +84 -83
  224. app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
  225. app-ng-runtime/components/containers/panel/panel.component.d.ts +3 -3
  226. app-ng-runtime/components/containers/tabs/.npmignore +2 -0
  227. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +74 -63
  228. app-ng-runtime/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +14 -8
  229. app-ng-runtime/components/containers/tabs/esm2022/tab-pane/tab-pane.props.mjs +4 -4
  230. app-ng-runtime/components/containers/tabs/esm2022/tabs.animator.mjs +1 -1
  231. app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +57 -51
  232. app-ng-runtime/components/containers/tabs/esm2022/tabs.module.mjs +2 -2
  233. app-ng-runtime/components/containers/tabs/esm2022/tabs.props.mjs +1 -1
  234. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +73 -61
  235. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  236. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -2
  237. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +2 -2
  238. app-ng-runtime/components/containers/tile/.npmignore +2 -0
  239. app-ng-runtime/components/containers/tile/bundles/index.umd.js +11 -6
  240. app-ng-runtime/components/containers/tile/esm2022/tile.directive.mjs +12 -7
  241. app-ng-runtime/components/containers/tile/esm2022/tile.module.mjs +2 -2
  242. app-ng-runtime/components/containers/tile/fesm2022/index.mjs +13 -8
  243. app-ng-runtime/components/containers/tile/fesm2022/index.mjs.map +1 -1
  244. app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -2
  245. app-ng-runtime/components/containers/wizard/.npmignore +2 -0
  246. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +102 -98
  247. app-ng-runtime/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +13 -8
  248. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +92 -93
  249. app-ng-runtime/components/containers/wizard/esm2022/wizard.module.mjs +2 -2
  250. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +104 -100
  251. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  252. app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -2
  253. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -2
  254. app-ng-runtime/components/data/card/.npmignore +2 -0
  255. app-ng-runtime/components/data/card/bundles/index.umd.js +70 -50
  256. app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -2
  257. app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -2
  258. app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -2
  259. app-ng-runtime/components/data/card/card.component.d.ts +2 -2
  260. app-ng-runtime/components/data/card/esm2022/card-actions/card-actions.directive.mjs +12 -7
  261. app-ng-runtime/components/data/card/esm2022/card-content/card-content.component.mjs +15 -9
  262. app-ng-runtime/components/data/card/esm2022/card-footer/card-footer.directive.mjs +12 -7
  263. app-ng-runtime/components/data/card/esm2022/card.component.mjs +38 -34
  264. app-ng-runtime/components/data/card/esm2022/card.module.mjs +2 -2
  265. app-ng-runtime/components/data/card/fesm2022/index.mjs +72 -52
  266. app-ng-runtime/components/data/card/fesm2022/index.mjs.map +1 -1
  267. app-ng-runtime/components/data/form/.npmignore +2 -0
  268. app-ng-runtime/components/data/form/bundles/index.umd.js +197 -184
  269. app-ng-runtime/components/data/form/esm2022/form-action/form-action.directive.mjs +15 -9
  270. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +21 -15
  271. app-ng-runtime/components/data/form/esm2022/form-field/form-field.props.mjs +1 -1
  272. app-ng-runtime/components/data/form/esm2022/form-widget.directive.mjs +4 -4
  273. app-ng-runtime/components/data/form/esm2022/form.component.mjs +138 -134
  274. app-ng-runtime/components/data/form/esm2022/form.module.mjs +2 -2
  275. app-ng-runtime/components/data/form/esm2022/form.props.mjs +1 -1
  276. app-ng-runtime/components/data/form/esm2022/live-actions/dependson.directive.mjs +4 -4
  277. app-ng-runtime/components/data/form/esm2022/live-actions/live-actions.directive.mjs +4 -4
  278. app-ng-runtime/components/data/form/esm2022/live-filter/live-filter.directive.mjs +7 -6
  279. app-ng-runtime/components/data/form/esm2022/live-form/live-form.directive.mjs +14 -13
  280. app-ng-runtime/components/data/form/fesm2022/index.mjs +201 -187
  281. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  282. app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -2
  283. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +2 -2
  284. app-ng-runtime/components/data/form/form.component.d.ts +4 -4
  285. app-ng-runtime/components/data/form/live-form/live-form.directive.d.ts +1 -1
  286. app-ng-runtime/components/data/list/.npmignore +2 -0
  287. app-ng-runtime/components/data/list/bundles/index.umd.js +829 -818
  288. app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +9 -4
  289. app-ng-runtime/components/data/list/esm2022/list.animator.mjs +5 -3
  290. app-ng-runtime/components/data/list/esm2022/list.component.mjs +817 -810
  291. app-ng-runtime/components/data/list/esm2022/list.module.mjs +2 -2
  292. app-ng-runtime/components/data/list/fesm2022/index.mjs +828 -816
  293. app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
  294. app-ng-runtime/components/data/list/list-item.directive.d.ts +4 -0
  295. app-ng-runtime/components/data/list/list.component.d.ts +55 -54
  296. app-ng-runtime/components/data/live-table/.npmignore +2 -0
  297. app-ng-runtime/components/data/live-table/bundles/index.umd.js +13 -7
  298. app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +14 -8
  299. app-ng-runtime/components/data/live-table/esm2022/live-table.module.mjs +2 -2
  300. app-ng-runtime/components/data/live-table/fesm2022/index.mjs +15 -9
  301. app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
  302. app-ng-runtime/components/data/live-table/live-table.component.d.ts +2 -2
  303. app-ng-runtime/components/data/pagination/.npmignore +2 -0
  304. app-ng-runtime/components/data/pagination/bundles/index.umd.js +113 -110
  305. app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +111 -107
  306. app-ng-runtime/components/data/pagination/esm2022/pagination.module.mjs +2 -2
  307. app-ng-runtime/components/data/pagination/fesm2022/index.mjs +112 -108
  308. app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
  309. app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -2
  310. app-ng-runtime/components/data/table/.npmignore +2 -0
  311. app-ng-runtime/components/data/table/bundles/index.umd.js +314 -269
  312. app-ng-runtime/components/data/table/esm2022/table-action/table-action.directive.mjs +15 -9
  313. app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +40 -25
  314. app-ng-runtime/components/data/table/esm2022/table-column/table-column.props.mjs +2 -2
  315. app-ng-runtime/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +13 -8
  316. app-ng-runtime/components/data/table/esm2022/table-cud.directive.mjs +10 -9
  317. app-ng-runtime/components/data/table/esm2022/table-filter.directive.mjs +56 -58
  318. app-ng-runtime/components/data/table/esm2022/table-row/table-row.directive.mjs +13 -8
  319. app-ng-runtime/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +14 -8
  320. app-ng-runtime/components/data/table/esm2022/table.component.mjs +165 -150
  321. app-ng-runtime/components/data/table/esm2022/table.module.mjs +2 -2
  322. app-ng-runtime/components/data/table/esm2022/table.props.mjs +2 -2
  323. app-ng-runtime/components/data/table/fesm2022/index.mjs +313 -267
  324. app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
  325. app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -2
  326. app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +8 -8
  327. app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -2
  328. app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -2
  329. app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -2
  330. app-ng-runtime/components/data/table/table.component.d.ts +4 -4
  331. app-ng-runtime/components/dialogs/alert-dialog/.npmignore +2 -0
  332. app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -2
  333. app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +15 -9
  334. app-ng-runtime/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +16 -10
  335. app-ng-runtime/components/dialogs/alert-dialog/esm2022/alert-dialog.module.mjs +2 -2
  336. app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs +17 -11
  337. app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  338. app-ng-runtime/components/dialogs/confirm-dialog/.npmignore +2 -0
  339. app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +17 -11
  340. app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -2
  341. app-ng-runtime/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +18 -12
  342. app-ng-runtime/components/dialogs/confirm-dialog/esm2022/confirm-dialog.module.mjs +2 -2
  343. app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs +19 -13
  344. app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  345. app-ng-runtime/components/dialogs/default/.npmignore +2 -0
  346. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +2 -2
  347. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +75 -71
  348. app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -2
  349. app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +14 -9
  350. app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +4 -4
  351. app-ng-runtime/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +12 -7
  352. app-ng-runtime/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +49 -55
  353. app-ng-runtime/components/dialogs/default/esm2022/dialog.module.mjs +2 -2
  354. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +76 -72
  355. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  356. app-ng-runtime/components/dialogs/design-dialog/.npmignore +2 -0
  357. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +20 -14
  358. app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -2
  359. app-ng-runtime/components/dialogs/design-dialog/esm2022/design-dialog.module.mjs +2 -2
  360. app-ng-runtime/components/dialogs/design-dialog/esm2022/dialog.component.mjs +21 -15
  361. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs +22 -16
  362. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  363. app-ng-runtime/components/dialogs/iframe-dialog/.npmignore +2 -0
  364. app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +20 -14
  365. app-ng-runtime/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +21 -15
  366. app-ng-runtime/components/dialogs/iframe-dialog/esm2022/iframe-dialog.module.mjs +2 -2
  367. app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs +22 -16
  368. app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  369. app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -2
  370. app-ng-runtime/components/dialogs/login-dialog/.npmignore +2 -0
  371. app-ng-runtime/components/dialogs/login-dialog/bundles/index.umd.js +4 -4
  372. app-ng-runtime/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +4 -4
  373. app-ng-runtime/components/dialogs/login-dialog/esm2022/login-dialog.module.mjs +2 -2
  374. app-ng-runtime/components/dialogs/login-dialog/fesm2022/index.mjs +4 -4
  375. app-ng-runtime/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
  376. app-ng-runtime/components/dialogs/partial-dialog/.npmignore +2 -0
  377. app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +16 -10
  378. app-ng-runtime/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +17 -11
  379. app-ng-runtime/components/dialogs/partial-dialog/esm2022/partial-dialog.module.mjs +2 -2
  380. app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs +18 -12
  381. app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  382. app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +2 -2
  383. app-ng-runtime/components/input/calendar/.npmignore +2 -0
  384. app-ng-runtime/components/input/calendar/bundles/index.umd.js +46 -38
  385. app-ng-runtime/components/input/calendar/calendar.component.d.ts +2 -2
  386. app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +44 -35
  387. app-ng-runtime/components/input/calendar/esm2022/calendar.module.mjs +2 -2
  388. app-ng-runtime/components/input/calendar/fesm2022/index.mjs +45 -36
  389. app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
  390. app-ng-runtime/components/input/chips/.npmignore +2 -0
  391. app-ng-runtime/components/input/chips/bundles/index.umd.js +69 -61
  392. app-ng-runtime/components/input/chips/chips.component.d.ts +3 -3
  393. app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +67 -58
  394. app-ng-runtime/components/input/chips/esm2022/chips.module.mjs +2 -2
  395. app-ng-runtime/components/input/chips/fesm2022/index.mjs +67 -58
  396. app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
  397. app-ng-runtime/components/input/color-picker/.npmignore +2 -0
  398. app-ng-runtime/components/input/color-picker/bundles/index.umd.js +25 -12
  399. app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -2
  400. app-ng-runtime/components/input/color-picker/esm2022/color-picker.component.mjs +26 -13
  401. app-ng-runtime/components/input/color-picker/esm2022/color-picker.module.mjs +2 -2
  402. app-ng-runtime/components/input/color-picker/fesm2022/index.mjs +26 -13
  403. app-ng-runtime/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  404. app-ng-runtime/components/input/currency/.npmignore +2 -0
  405. app-ng-runtime/components/input/currency/bundles/index.umd.js +18 -11
  406. app-ng-runtime/components/input/currency/currency.component.d.ts +2 -2
  407. app-ng-runtime/components/input/currency/esm2022/currency.component.mjs +19 -12
  408. app-ng-runtime/components/input/currency/esm2022/currency.module.mjs +2 -2
  409. app-ng-runtime/components/input/currency/fesm2022/index.mjs +19 -12
  410. app-ng-runtime/components/input/currency/fesm2022/index.mjs.map +1 -1
  411. app-ng-runtime/components/input/default/.npmignore +2 -0
  412. app-ng-runtime/components/input/default/base-form.component.d.ts +3 -3
  413. app-ng-runtime/components/input/default/bundles/index.umd.js +583 -450
  414. app-ng-runtime/components/input/default/button/button.component.d.ts +2 -2
  415. app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -2
  416. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +3 -2
  417. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -2
  418. app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -2
  419. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +4 -4
  420. app-ng-runtime/components/input/default/esm2022/base-form-custom.component.mjs +3 -3
  421. app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +17 -11
  422. app-ng-runtime/components/input/default/esm2022/button/button.component.mjs +32 -28
  423. app-ng-runtime/components/input/default/esm2022/button-group/button-group.directive.mjs +12 -7
  424. app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +5 -4
  425. app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +27 -17
  426. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +107 -103
  427. app-ng-runtime/components/input/default/esm2022/composite/composite.directive.mjs +12 -7
  428. app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +32 -26
  429. app-ng-runtime/components/input/default/esm2022/input.module.mjs +2 -2
  430. app-ng-runtime/components/input/default/esm2022/number/number.component.mjs +17 -10
  431. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +105 -102
  432. app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +43 -32
  433. app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +38 -31
  434. app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +18 -11
  435. app-ng-runtime/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +23 -12
  436. app-ng-runtime/components/input/default/esm2022/text/color/input-color.component.mjs +23 -12
  437. app-ng-runtime/components/input/default/esm2022/text/email/input-email.component.mjs +20 -11
  438. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +35 -24
  439. app-ng-runtime/components/input/default/esm2022/text/number/input-number.component.mjs +21 -12
  440. app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +20 -11
  441. app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +21 -12
  442. app-ng-runtime/components/input/default/fesm2022/index.mjs +586 -451
  443. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  444. app-ng-runtime/components/input/default/number/number.component.d.ts +2 -2
  445. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -2
  446. app-ng-runtime/components/input/default/select/select.component.d.ts +2 -2
  447. app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -2
  448. app-ng-runtime/components/input/default/text/base/base-input.d.ts +3 -2
  449. app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -2
  450. app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -2
  451. app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -2
  452. app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +1 -1
  453. app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -2
  454. app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -2
  455. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -2
  456. app-ng-runtime/components/input/epoch/.npmignore +2 -0
  457. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +2 -2
  458. app-ng-runtime/components/input/epoch/bundles/index.umd.js +200 -163
  459. app-ng-runtime/components/input/epoch/date/date.component.d.ts +2 -2
  460. app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +2 -2
  461. app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +44 -36
  462. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +29 -21
  463. app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -2
  464. app-ng-runtime/components/input/epoch/esm2022/date/imaskUtil.mjs +1 -1
  465. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +42 -41
  466. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +49 -37
  467. app-ng-runtime/components/input/epoch/esm2022/epoch.module.mjs +2 -2
  468. app-ng-runtime/components/input/epoch/esm2022/picker/picker.component.mjs +7 -5
  469. app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +35 -24
  470. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +197 -159
  471. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  472. app-ng-runtime/components/input/epoch/time/time.component.d.ts +2 -2
  473. app-ng-runtime/components/input/file-upload/.npmignore +2 -0
  474. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +133 -135
  475. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +131 -132
  476. app-ng-runtime/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
  477. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +132 -133
  478. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  479. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +2 -2
  480. app-ng-runtime/components/input/rating/.npmignore +2 -0
  481. app-ng-runtime/components/input/rating/bundles/index.umd.js +60 -51
  482. app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +58 -48
  483. app-ng-runtime/components/input/rating/esm2022/rating.module.mjs +2 -2
  484. app-ng-runtime/components/input/rating/fesm2022/index.mjs +58 -48
  485. app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
  486. app-ng-runtime/components/input/rating/rating.component.d.ts +2 -2
  487. app-ng-runtime/components/input/slider/.npmignore +2 -0
  488. app-ng-runtime/components/input/slider/bundles/index.umd.js +23 -13
  489. app-ng-runtime/components/input/slider/esm2022/slider.component.mjs +24 -14
  490. app-ng-runtime/components/input/slider/esm2022/slider.module.mjs +2 -2
  491. app-ng-runtime/components/input/slider/fesm2022/index.mjs +24 -14
  492. app-ng-runtime/components/input/slider/fesm2022/index.mjs.map +1 -1
  493. app-ng-runtime/components/input/slider/slider.component.d.ts +2 -2
  494. app-ng-runtime/components/navigation/breadcrumb/.npmignore +2 -0
  495. app-ng-runtime/components/navigation/breadcrumb/breadcrumb.component.d.ts +2 -2
  496. app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +33 -28
  497. app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +34 -29
  498. app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.module.mjs +2 -2
  499. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +35 -30
  500. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  501. app-ng-runtime/components/navigation/menu/.npmignore +2 -0
  502. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +160 -145
  503. app-ng-runtime/components/navigation/menu/esm2022/menu-adapator.component.mjs +13 -7
  504. app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +5 -4
  505. app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +27 -26
  506. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +44 -40
  507. app-ng-runtime/components/navigation/menu/esm2022/menu.module.mjs +4 -3
  508. app-ng-runtime/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +14 -8
  509. app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +63 -63
  510. app-ng-runtime/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +3 -3
  511. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +160 -144
  512. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  513. app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -1
  514. app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
  515. app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -2
  516. app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -3
  517. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -4
  518. app-ng-runtime/components/navigation/navbar/.npmignore +2 -0
  519. app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +29 -22
  520. app-ng-runtime/components/navigation/navbar/esm2022/navbar.component.mjs +30 -23
  521. app-ng-runtime/components/navigation/navbar/esm2022/navbar.module.mjs +2 -2
  522. app-ng-runtime/components/navigation/navbar/fesm2022/index.mjs +31 -24
  523. app-ng-runtime/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  524. app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -2
  525. app-ng-runtime/components/navigation/popover/.npmignore +2 -0
  526. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +18 -11
  527. app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +19 -12
  528. app-ng-runtime/components/navigation/popover/esm2022/popover.module.mjs +2 -2
  529. app-ng-runtime/components/navigation/popover/fesm2022/index.mjs +20 -13
  530. app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  531. app-ng-runtime/components/navigation/popover/popover.component.d.ts +2 -2
  532. app-ng-runtime/components/page/default/.npmignore +2 -0
  533. app-ng-runtime/components/page/default/bundles/index.umd.js +63 -31
  534. app-ng-runtime/components/page/default/content/content.component.d.ts +2 -2
  535. app-ng-runtime/components/page/default/esm2022/content/content.component.mjs +13 -7
  536. app-ng-runtime/components/page/default/esm2022/layout.directive.mjs +12 -7
  537. app-ng-runtime/components/page/default/esm2022/page-content/page-content.component.mjs +13 -7
  538. app-ng-runtime/components/page/default/esm2022/page.directive.mjs +12 -7
  539. app-ng-runtime/components/page/default/esm2022/page.module.mjs +2 -2
  540. app-ng-runtime/components/page/default/esm2022/router-outlet.directive.mjs +12 -7
  541. app-ng-runtime/components/page/default/esm2022/spa-page.directive.mjs +12 -7
  542. app-ng-runtime/components/page/default/fesm2022/index.mjs +65 -33
  543. app-ng-runtime/components/page/default/fesm2022/index.mjs.map +1 -1
  544. app-ng-runtime/components/page/default/layout.directive.d.ts +2 -2
  545. app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +2 -2
  546. app-ng-runtime/components/page/default/page.directive.d.ts +2 -2
  547. app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -2
  548. app-ng-runtime/components/page/default/spa-page.directive.d.ts +2 -2
  549. app-ng-runtime/components/page/footer/.npmignore +2 -0
  550. app-ng-runtime/components/page/footer/bundles/index.umd.js +11 -6
  551. app-ng-runtime/components/page/footer/esm2022/footer.directive.mjs +12 -7
  552. app-ng-runtime/components/page/footer/esm2022/footer.module.mjs +2 -2
  553. app-ng-runtime/components/page/footer/fesm2022/index.mjs +13 -8
  554. app-ng-runtime/components/page/footer/fesm2022/index.mjs.map +1 -1
  555. app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -2
  556. app-ng-runtime/components/page/header/.npmignore +2 -0
  557. app-ng-runtime/components/page/header/bundles/index.umd.js +12 -6
  558. app-ng-runtime/components/page/header/esm2022/header.component.mjs +13 -7
  559. app-ng-runtime/components/page/header/esm2022/header.module.mjs +2 -2
  560. app-ng-runtime/components/page/header/fesm2022/index.mjs +14 -8
  561. app-ng-runtime/components/page/header/fesm2022/index.mjs.map +1 -1
  562. app-ng-runtime/components/page/header/header.component.d.ts +2 -2
  563. app-ng-runtime/components/page/left-panel/.npmignore +2 -0
  564. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +12 -7
  565. app-ng-runtime/components/page/left-panel/esm2022/left-panel.animator.mjs +1 -1
  566. app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +13 -8
  567. app-ng-runtime/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
  568. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +14 -9
  569. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  570. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
  571. app-ng-runtime/components/page/right-panel/.npmignore +2 -0
  572. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +11 -6
  573. app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +12 -7
  574. app-ng-runtime/components/page/right-panel/esm2022/right-panel.module.mjs +2 -2
  575. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +13 -8
  576. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  577. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -2
  578. app-ng-runtime/components/page/top-nav/.npmignore +2 -0
  579. app-ng-runtime/components/page/top-nav/bundles/index.umd.js +11 -6
  580. app-ng-runtime/components/page/top-nav/esm2022/top-nav.directive.mjs +12 -7
  581. app-ng-runtime/components/page/top-nav/esm2022/top-nav.module.mjs +2 -2
  582. app-ng-runtime/components/page/top-nav/fesm2022/index.mjs +13 -8
  583. app-ng-runtime/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  584. app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -2
  585. app-ng-runtime/components/prefab/.npmignore +2 -0
  586. app-ng-runtime/components/prefab/bundles/index.umd.js +28 -18
  587. app-ng-runtime/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +14 -8
  588. app-ng-runtime/components/prefab/esm2022/prefab.directive.mjs +15 -9
  589. app-ng-runtime/components/prefab/esm2022/prefab.module.mjs +2 -2
  590. app-ng-runtime/components/prefab/fesm2022/index.mjs +26 -15
  591. app-ng-runtime/components/prefab/fesm2022/index.mjs.map +1 -1
  592. app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +2 -2
  593. app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -2
  594. app-ng-runtime/core/.npmignore +2 -0
  595. app-ng-runtime/core/bundles/index.umd.js +158 -146
  596. app-ng-runtime/core/esm2022/core.module.mjs +2 -2
  597. app-ng-runtime/core/esm2022/public_api.mjs +3 -2
  598. app-ng-runtime/core/esm2022/services/constant.service.mjs +2 -2
  599. app-ng-runtime/core/esm2022/services/custom-icons-loader.service.mjs +26 -0
  600. app-ng-runtime/core/esm2022/services/field-type.service.mjs +5 -4
  601. app-ng-runtime/core/esm2022/services/field-widget.service.mjs +5 -4
  602. app-ng-runtime/core/esm2022/services/pagination.service.mjs +8 -7
  603. app-ng-runtime/core/esm2022/services/script-loader.service.mjs +3 -3
  604. app-ng-runtime/core/esm2022/services/state-persistence.service.mjs +18 -17
  605. app-ng-runtime/core/esm2022/services/user-custom-pipe-manager.service.mjs +2 -2
  606. app-ng-runtime/core/esm2022/services/utils.service.mjs +5 -4
  607. app-ng-runtime/core/esm2022/services/viewport.service.mjs +5 -4
  608. app-ng-runtime/core/esm2022/utils/build-utils.mjs +5 -4
  609. app-ng-runtime/core/esm2022/utils/dom.mjs +1 -1
  610. app-ng-runtime/core/esm2022/utils/event-notifier.mjs +1 -1
  611. app-ng-runtime/core/esm2022/utils/expression-parser.mjs +6 -5
  612. app-ng-runtime/core/esm2022/utils/id-generator.mjs +1 -1
  613. app-ng-runtime/core/esm2022/utils/lru-cache.mjs +3 -2
  614. app-ng-runtime/core/esm2022/utils/utils.mjs +79 -82
  615. app-ng-runtime/core/esm2022/utils/watcher.mjs +9 -7
  616. app-ng-runtime/core/esm2022/utils/wm-project-properties.mjs +1 -1
  617. app-ng-runtime/core/fesm2022/index.mjs +158 -142
  618. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  619. app-ng-runtime/core/public_api.d.ts +2 -1
  620. app-ng-runtime/core/services/custom-icons-loader.service.d.ts +7 -0
  621. app-ng-runtime/core/services/pagination.service.d.ts +1 -1
  622. app-ng-runtime/core/utils/utils.d.ts +5 -9
  623. app-ng-runtime/http/.npmignore +2 -0
  624. app-ng-runtime/http/bundles/index.umd.js +10 -10
  625. app-ng-runtime/http/esm2022/http-service.module.mjs +2 -2
  626. app-ng-runtime/http/esm2022/http.service.mjs +7 -6
  627. app-ng-runtime/http/esm2022/wm-http-request.mjs +1 -1
  628. app-ng-runtime/http/esm2022/wm-http-response.mjs +1 -1
  629. app-ng-runtime/http/fesm2022/index.mjs +7 -6
  630. app-ng-runtime/http/fesm2022/index.mjs.map +1 -1
  631. app-ng-runtime/locales/angular/global/af-na.js +4 -4
  632. app-ng-runtime/locales/angular/global/af.js +4 -4
  633. app-ng-runtime/locales/angular/global/agq.js +4 -4
  634. app-ng-runtime/locales/angular/global/ak.js +4 -4
  635. app-ng-runtime/locales/angular/global/am.js +4 -4
  636. app-ng-runtime/locales/angular/global/ar-ae.js +4 -4
  637. app-ng-runtime/locales/angular/global/ar-bh.js +4 -4
  638. app-ng-runtime/locales/angular/global/ar-dj.js +4 -4
  639. app-ng-runtime/locales/angular/global/ar-dz.js +4 -4
  640. app-ng-runtime/locales/angular/global/ar-eg.js +4 -4
  641. app-ng-runtime/locales/angular/global/ar-eh.js +4 -4
  642. app-ng-runtime/locales/angular/global/ar-er.js +4 -4
  643. app-ng-runtime/locales/angular/global/ar-il.js +4 -4
  644. app-ng-runtime/locales/angular/global/ar-iq.js +4 -4
  645. app-ng-runtime/locales/angular/global/ar-jo.js +4 -4
  646. app-ng-runtime/locales/angular/global/ar-km.js +4 -4
  647. app-ng-runtime/locales/angular/global/ar-kw.js +4 -4
  648. app-ng-runtime/locales/angular/global/ar-lb.js +4 -4
  649. app-ng-runtime/locales/angular/global/ar-ly.js +4 -4
  650. app-ng-runtime/locales/angular/global/ar-ma.js +4 -4
  651. app-ng-runtime/locales/angular/global/ar-mr.js +4 -4
  652. app-ng-runtime/locales/angular/global/ar-om.js +4 -4
  653. app-ng-runtime/locales/angular/global/ar-ps.js +4 -4
  654. app-ng-runtime/locales/angular/global/ar-qa.js +4 -4
  655. app-ng-runtime/locales/angular/global/ar-sa.js +4 -4
  656. app-ng-runtime/locales/angular/global/ar-sd.js +4 -4
  657. app-ng-runtime/locales/angular/global/ar-so.js +4 -4
  658. app-ng-runtime/locales/angular/global/ar-ss.js +4 -4
  659. app-ng-runtime/locales/angular/global/ar-sy.js +4 -4
  660. app-ng-runtime/locales/angular/global/ar-td.js +4 -4
  661. app-ng-runtime/locales/angular/global/ar-tn.js +4 -4
  662. app-ng-runtime/locales/angular/global/ar-ye.js +4 -4
  663. app-ng-runtime/locales/angular/global/ar.js +4 -4
  664. app-ng-runtime/locales/angular/global/as.js +4 -4
  665. app-ng-runtime/locales/angular/global/asa.js +4 -4
  666. app-ng-runtime/locales/angular/global/ast.js +4 -4
  667. app-ng-runtime/locales/angular/global/az-cyrl.js +4 -4
  668. app-ng-runtime/locales/angular/global/az-latn.js +4 -4
  669. app-ng-runtime/locales/angular/global/az.js +4 -4
  670. app-ng-runtime/locales/angular/global/bas.js +4 -4
  671. app-ng-runtime/locales/angular/global/be-tarask.js +4 -4
  672. app-ng-runtime/locales/angular/global/be.js +4 -4
  673. app-ng-runtime/locales/angular/global/bem.js +4 -4
  674. app-ng-runtime/locales/angular/global/bez.js +4 -4
  675. app-ng-runtime/locales/angular/global/bg.js +4 -4
  676. app-ng-runtime/locales/angular/global/bm.js +4 -4
  677. app-ng-runtime/locales/angular/global/bn-in.js +4 -4
  678. app-ng-runtime/locales/angular/global/bn.js +4 -4
  679. app-ng-runtime/locales/angular/global/bo-in.js +4 -4
  680. app-ng-runtime/locales/angular/global/bo.js +4 -4
  681. app-ng-runtime/locales/angular/global/br.js +4 -4
  682. app-ng-runtime/locales/angular/global/brx.js +4 -4
  683. app-ng-runtime/locales/angular/global/bs-cyrl.js +4 -4
  684. app-ng-runtime/locales/angular/global/bs-latn.js +4 -4
  685. app-ng-runtime/locales/angular/global/bs.js +4 -4
  686. app-ng-runtime/locales/angular/global/ca-ad.js +4 -4
  687. app-ng-runtime/locales/angular/global/ca-es-valencia.js +4 -4
  688. app-ng-runtime/locales/angular/global/ca-fr.js +4 -4
  689. app-ng-runtime/locales/angular/global/ca-it.js +4 -4
  690. app-ng-runtime/locales/angular/global/ca.js +4 -4
  691. app-ng-runtime/locales/angular/global/ccp-in.js +4 -4
  692. app-ng-runtime/locales/angular/global/ccp.js +4 -4
  693. app-ng-runtime/locales/angular/global/ce.js +4 -4
  694. app-ng-runtime/locales/angular/global/ceb.js +4 -4
  695. app-ng-runtime/locales/angular/global/cgg.js +4 -4
  696. app-ng-runtime/locales/angular/global/chr.js +4 -4
  697. app-ng-runtime/locales/angular/global/ckb-ir.js +4 -4
  698. app-ng-runtime/locales/angular/global/ckb.js +4 -4
  699. app-ng-runtime/locales/angular/global/cs.js +4 -4
  700. app-ng-runtime/locales/angular/global/cy.js +4 -4
  701. app-ng-runtime/locales/angular/global/da-gl.js +4 -4
  702. app-ng-runtime/locales/angular/global/da.js +4 -4
  703. app-ng-runtime/locales/angular/global/dav.js +4 -4
  704. app-ng-runtime/locales/angular/global/de-at.js +4 -4
  705. app-ng-runtime/locales/angular/global/de-be.js +4 -4
  706. app-ng-runtime/locales/angular/global/de-ch.js +4 -4
  707. app-ng-runtime/locales/angular/global/de-it.js +4 -4
  708. app-ng-runtime/locales/angular/global/de-li.js +4 -4
  709. app-ng-runtime/locales/angular/global/de-lu.js +4 -4
  710. app-ng-runtime/locales/angular/global/de.js +4 -4
  711. app-ng-runtime/locales/angular/global/dje.js +4 -4
  712. app-ng-runtime/locales/angular/global/doi.js +4 -4
  713. app-ng-runtime/locales/angular/global/dsb.js +4 -4
  714. app-ng-runtime/locales/angular/global/dua.js +4 -4
  715. app-ng-runtime/locales/angular/global/dyo.js +4 -4
  716. app-ng-runtime/locales/angular/global/dz.js +4 -4
  717. app-ng-runtime/locales/angular/global/ebu.js +4 -4
  718. app-ng-runtime/locales/angular/global/ee-tg.js +4 -4
  719. app-ng-runtime/locales/angular/global/ee.js +4 -4
  720. app-ng-runtime/locales/angular/global/el-cy.js +4 -4
  721. app-ng-runtime/locales/angular/global/el.js +4 -4
  722. app-ng-runtime/locales/angular/global/en-001.js +4 -4
  723. app-ng-runtime/locales/angular/global/en-150.js +4 -4
  724. app-ng-runtime/locales/angular/global/en-ae.js +4 -4
  725. app-ng-runtime/locales/angular/global/en-ag.js +4 -4
  726. app-ng-runtime/locales/angular/global/en-ai.js +4 -4
  727. app-ng-runtime/locales/angular/global/en-as.js +4 -4
  728. app-ng-runtime/locales/angular/global/en-at.js +4 -4
  729. app-ng-runtime/locales/angular/global/en-au.js +4 -4
  730. app-ng-runtime/locales/angular/global/en-bb.js +4 -4
  731. app-ng-runtime/locales/angular/global/en-be.js +4 -4
  732. app-ng-runtime/locales/angular/global/en-bi.js +4 -4
  733. app-ng-runtime/locales/angular/global/en-bm.js +4 -4
  734. app-ng-runtime/locales/angular/global/en-bs.js +4 -4
  735. app-ng-runtime/locales/angular/global/en-bw.js +4 -4
  736. app-ng-runtime/locales/angular/global/en-bz.js +4 -4
  737. app-ng-runtime/locales/angular/global/en-ca.js +4 -4
  738. app-ng-runtime/locales/angular/global/en-cc.js +4 -4
  739. app-ng-runtime/locales/angular/global/en-ch.js +4 -4
  740. app-ng-runtime/locales/angular/global/en-ck.js +4 -4
  741. app-ng-runtime/locales/angular/global/en-cm.js +4 -4
  742. app-ng-runtime/locales/angular/global/en-cx.js +4 -4
  743. app-ng-runtime/locales/angular/global/en-cy.js +4 -4
  744. app-ng-runtime/locales/angular/global/en-de.js +4 -4
  745. app-ng-runtime/locales/angular/global/en-dg.js +4 -4
  746. app-ng-runtime/locales/angular/global/en-dk.js +4 -4
  747. app-ng-runtime/locales/angular/global/en-dm.js +4 -4
  748. app-ng-runtime/locales/angular/global/en-er.js +4 -4
  749. app-ng-runtime/locales/angular/global/en-fi.js +4 -4
  750. app-ng-runtime/locales/angular/global/en-fj.js +4 -4
  751. app-ng-runtime/locales/angular/global/en-fk.js +4 -4
  752. app-ng-runtime/locales/angular/global/en-fm.js +4 -4
  753. app-ng-runtime/locales/angular/global/en-gb.js +4 -4
  754. app-ng-runtime/locales/angular/global/en-gd.js +4 -4
  755. app-ng-runtime/locales/angular/global/en-gg.js +4 -4
  756. app-ng-runtime/locales/angular/global/en-gh.js +4 -4
  757. app-ng-runtime/locales/angular/global/en-gi.js +4 -4
  758. app-ng-runtime/locales/angular/global/en-gm.js +4 -4
  759. app-ng-runtime/locales/angular/global/en-gu.js +4 -4
  760. app-ng-runtime/locales/angular/global/en-gy.js +4 -4
  761. app-ng-runtime/locales/angular/global/en-hk.js +4 -4
  762. app-ng-runtime/locales/angular/global/en-ie.js +4 -4
  763. app-ng-runtime/locales/angular/global/en-il.js +4 -4
  764. app-ng-runtime/locales/angular/global/en-im.js +4 -4
  765. app-ng-runtime/locales/angular/global/en-in.js +4 -4
  766. app-ng-runtime/locales/angular/global/en-io.js +4 -4
  767. app-ng-runtime/locales/angular/global/en-je.js +4 -4
  768. app-ng-runtime/locales/angular/global/en-jm.js +4 -4
  769. app-ng-runtime/locales/angular/global/en-ke.js +4 -4
  770. app-ng-runtime/locales/angular/global/en-ki.js +4 -4
  771. app-ng-runtime/locales/angular/global/en-kn.js +4 -4
  772. app-ng-runtime/locales/angular/global/en-ky.js +4 -4
  773. app-ng-runtime/locales/angular/global/en-lc.js +4 -4
  774. app-ng-runtime/locales/angular/global/en-lr.js +4 -4
  775. app-ng-runtime/locales/angular/global/en-ls.js +4 -4
  776. app-ng-runtime/locales/angular/global/en-mg.js +4 -4
  777. app-ng-runtime/locales/angular/global/en-mh.js +4 -4
  778. app-ng-runtime/locales/angular/global/en-mo.js +4 -4
  779. app-ng-runtime/locales/angular/global/en-mp.js +4 -4
  780. app-ng-runtime/locales/angular/global/en-ms.js +4 -4
  781. app-ng-runtime/locales/angular/global/en-mt.js +4 -4
  782. app-ng-runtime/locales/angular/global/en-mu.js +4 -4
  783. app-ng-runtime/locales/angular/global/en-mv.js +4 -4
  784. app-ng-runtime/locales/angular/global/en-mw.js +4 -4
  785. app-ng-runtime/locales/angular/global/en-my.js +4 -4
  786. app-ng-runtime/locales/angular/global/en-na.js +4 -4
  787. app-ng-runtime/locales/angular/global/en-nf.js +4 -4
  788. app-ng-runtime/locales/angular/global/en-ng.js +4 -4
  789. app-ng-runtime/locales/angular/global/en-nl.js +4 -4
  790. app-ng-runtime/locales/angular/global/en-nr.js +4 -4
  791. app-ng-runtime/locales/angular/global/en-nu.js +4 -4
  792. app-ng-runtime/locales/angular/global/en-nz.js +4 -4
  793. app-ng-runtime/locales/angular/global/en-pg.js +4 -4
  794. app-ng-runtime/locales/angular/global/en-ph.js +4 -4
  795. app-ng-runtime/locales/angular/global/en-pk.js +4 -4
  796. app-ng-runtime/locales/angular/global/en-pn.js +4 -4
  797. app-ng-runtime/locales/angular/global/en-pr.js +4 -4
  798. app-ng-runtime/locales/angular/global/en-pw.js +4 -4
  799. app-ng-runtime/locales/angular/global/en-rw.js +4 -4
  800. app-ng-runtime/locales/angular/global/en-sb.js +4 -4
  801. app-ng-runtime/locales/angular/global/en-sc.js +4 -4
  802. app-ng-runtime/locales/angular/global/en-sd.js +4 -4
  803. app-ng-runtime/locales/angular/global/en-se.js +4 -4
  804. app-ng-runtime/locales/angular/global/en-sg.js +4 -4
  805. app-ng-runtime/locales/angular/global/en-sh.js +4 -4
  806. app-ng-runtime/locales/angular/global/en-si.js +4 -4
  807. app-ng-runtime/locales/angular/global/en-sl.js +4 -4
  808. app-ng-runtime/locales/angular/global/en-ss.js +4 -4
  809. app-ng-runtime/locales/angular/global/en-sx.js +4 -4
  810. app-ng-runtime/locales/angular/global/en-sz.js +4 -4
  811. app-ng-runtime/locales/angular/global/en-tc.js +4 -4
  812. app-ng-runtime/locales/angular/global/en-tk.js +4 -4
  813. app-ng-runtime/locales/angular/global/en-to.js +4 -4
  814. app-ng-runtime/locales/angular/global/en-tt.js +4 -4
  815. app-ng-runtime/locales/angular/global/en-tv.js +4 -4
  816. app-ng-runtime/locales/angular/global/en-tz.js +4 -4
  817. app-ng-runtime/locales/angular/global/en-ug.js +4 -4
  818. app-ng-runtime/locales/angular/global/en-um.js +4 -4
  819. app-ng-runtime/locales/angular/global/en-vc.js +4 -4
  820. app-ng-runtime/locales/angular/global/en-vg.js +4 -4
  821. app-ng-runtime/locales/angular/global/en-vi.js +4 -4
  822. app-ng-runtime/locales/angular/global/en-vu.js +4 -4
  823. app-ng-runtime/locales/angular/global/en-ws.js +4 -4
  824. app-ng-runtime/locales/angular/global/en-za.js +4 -4
  825. app-ng-runtime/locales/angular/global/en-zm.js +4 -4
  826. app-ng-runtime/locales/angular/global/en-zw.js +4 -4
  827. app-ng-runtime/locales/angular/global/en.js +4 -4
  828. app-ng-runtime/locales/angular/global/eo.js +4 -4
  829. app-ng-runtime/locales/angular/global/es-419.js +4 -4
  830. app-ng-runtime/locales/angular/global/es-ar.js +4 -4
  831. app-ng-runtime/locales/angular/global/es-bo.js +4 -4
  832. app-ng-runtime/locales/angular/global/es-br.js +4 -4
  833. app-ng-runtime/locales/angular/global/es-bz.js +4 -4
  834. app-ng-runtime/locales/angular/global/es-cl.js +4 -4
  835. app-ng-runtime/locales/angular/global/es-co.js +4 -4
  836. app-ng-runtime/locales/angular/global/es-cr.js +4 -4
  837. app-ng-runtime/locales/angular/global/es-cu.js +4 -4
  838. app-ng-runtime/locales/angular/global/es-do.js +4 -4
  839. app-ng-runtime/locales/angular/global/es-ea.js +4 -4
  840. app-ng-runtime/locales/angular/global/es-ec.js +4 -4
  841. app-ng-runtime/locales/angular/global/es-gq.js +4 -4
  842. app-ng-runtime/locales/angular/global/es-gt.js +4 -4
  843. app-ng-runtime/locales/angular/global/es-hn.js +4 -4
  844. app-ng-runtime/locales/angular/global/es-ic.js +4 -4
  845. app-ng-runtime/locales/angular/global/es-mx.js +4 -4
  846. app-ng-runtime/locales/angular/global/es-ni.js +4 -4
  847. app-ng-runtime/locales/angular/global/es-pa.js +4 -4
  848. app-ng-runtime/locales/angular/global/es-pe.js +4 -4
  849. app-ng-runtime/locales/angular/global/es-ph.js +4 -4
  850. app-ng-runtime/locales/angular/global/es-pr.js +4 -4
  851. app-ng-runtime/locales/angular/global/es-py.js +4 -4
  852. app-ng-runtime/locales/angular/global/es-sv.js +4 -4
  853. app-ng-runtime/locales/angular/global/es-us.js +4 -4
  854. app-ng-runtime/locales/angular/global/es-uy.js +4 -4
  855. app-ng-runtime/locales/angular/global/es-ve.js +4 -4
  856. app-ng-runtime/locales/angular/global/es.js +4 -4
  857. app-ng-runtime/locales/angular/global/et.js +4 -4
  858. app-ng-runtime/locales/angular/global/eu.js +4 -4
  859. app-ng-runtime/locales/angular/global/ewo.js +4 -4
  860. app-ng-runtime/locales/angular/global/fa-af.js +4 -4
  861. app-ng-runtime/locales/angular/global/fa.js +4 -4
  862. app-ng-runtime/locales/angular/global/ff-adlm-bf.js +4 -4
  863. app-ng-runtime/locales/angular/global/ff-adlm-cm.js +4 -4
  864. app-ng-runtime/locales/angular/global/ff-adlm-gh.js +4 -4
  865. app-ng-runtime/locales/angular/global/ff-adlm-gm.js +4 -4
  866. app-ng-runtime/locales/angular/global/ff-adlm-gw.js +4 -4
  867. app-ng-runtime/locales/angular/global/ff-adlm-lr.js +4 -4
  868. app-ng-runtime/locales/angular/global/ff-adlm-mr.js +4 -4
  869. app-ng-runtime/locales/angular/global/ff-adlm-ne.js +4 -4
  870. app-ng-runtime/locales/angular/global/ff-adlm-ng.js +4 -4
  871. app-ng-runtime/locales/angular/global/ff-adlm-sl.js +4 -4
  872. app-ng-runtime/locales/angular/global/ff-adlm-sn.js +4 -4
  873. app-ng-runtime/locales/angular/global/ff-adlm.js +4 -4
  874. app-ng-runtime/locales/angular/global/ff-cm.js +58 -44
  875. app-ng-runtime/locales/angular/global/ff-gn.js +58 -44
  876. app-ng-runtime/locales/angular/global/ff-latn-bf.js +4 -4
  877. app-ng-runtime/locales/angular/global/ff-latn-cm.js +4 -4
  878. app-ng-runtime/locales/angular/global/ff-latn-gh.js +4 -4
  879. app-ng-runtime/locales/angular/global/ff-latn-gm.js +4 -4
  880. app-ng-runtime/locales/angular/global/ff-latn-gn.js +4 -4
  881. app-ng-runtime/locales/angular/global/ff-latn-gw.js +4 -4
  882. app-ng-runtime/locales/angular/global/ff-latn-lr.js +4 -4
  883. app-ng-runtime/locales/angular/global/ff-latn-mr.js +4 -4
  884. app-ng-runtime/locales/angular/global/ff-latn-ne.js +4 -4
  885. app-ng-runtime/locales/angular/global/ff-latn-ng.js +4 -4
  886. app-ng-runtime/locales/angular/global/ff-latn-sl.js +4 -4
  887. app-ng-runtime/locales/angular/global/ff-latn.js +4 -4
  888. app-ng-runtime/locales/angular/global/ff-mr.js +58 -44
  889. app-ng-runtime/locales/angular/global/ff.js +4 -4
  890. app-ng-runtime/locales/angular/global/fi.js +4 -4
  891. app-ng-runtime/locales/angular/global/fil.js +4 -4
  892. app-ng-runtime/locales/angular/global/fo-dk.js +4 -4
  893. app-ng-runtime/locales/angular/global/fo.js +4 -4
  894. app-ng-runtime/locales/angular/global/fr-be.js +4 -4
  895. app-ng-runtime/locales/angular/global/fr-bf.js +4 -4
  896. app-ng-runtime/locales/angular/global/fr-bi.js +4 -4
  897. app-ng-runtime/locales/angular/global/fr-bj.js +4 -4
  898. app-ng-runtime/locales/angular/global/fr-bl.js +4 -4
  899. app-ng-runtime/locales/angular/global/fr-ca.js +4 -4
  900. app-ng-runtime/locales/angular/global/fr-cd.js +4 -4
  901. app-ng-runtime/locales/angular/global/fr-cf.js +4 -4
  902. app-ng-runtime/locales/angular/global/fr-cg.js +4 -4
  903. app-ng-runtime/locales/angular/global/fr-ch.js +4 -4
  904. app-ng-runtime/locales/angular/global/fr-ci.js +4 -4
  905. app-ng-runtime/locales/angular/global/fr-cm.js +4 -4
  906. app-ng-runtime/locales/angular/global/fr-dj.js +4 -4
  907. app-ng-runtime/locales/angular/global/fr-dz.js +4 -4
  908. app-ng-runtime/locales/angular/global/fr-ga.js +4 -4
  909. app-ng-runtime/locales/angular/global/fr-gf.js +4 -4
  910. app-ng-runtime/locales/angular/global/fr-gn.js +4 -4
  911. app-ng-runtime/locales/angular/global/fr-gp.js +4 -4
  912. app-ng-runtime/locales/angular/global/fr-gq.js +4 -4
  913. app-ng-runtime/locales/angular/global/fr-ht.js +4 -4
  914. app-ng-runtime/locales/angular/global/fr-km.js +4 -4
  915. app-ng-runtime/locales/angular/global/fr-lu.js +4 -4
  916. app-ng-runtime/locales/angular/global/fr-ma.js +4 -4
  917. app-ng-runtime/locales/angular/global/fr-mc.js +4 -4
  918. app-ng-runtime/locales/angular/global/fr-mf.js +4 -4
  919. app-ng-runtime/locales/angular/global/fr-mg.js +4 -4
  920. app-ng-runtime/locales/angular/global/fr-ml.js +4 -4
  921. app-ng-runtime/locales/angular/global/fr-mq.js +4 -4
  922. app-ng-runtime/locales/angular/global/fr-mr.js +4 -4
  923. app-ng-runtime/locales/angular/global/fr-mu.js +4 -4
  924. app-ng-runtime/locales/angular/global/fr-nc.js +4 -4
  925. app-ng-runtime/locales/angular/global/fr-ne.js +4 -4
  926. app-ng-runtime/locales/angular/global/fr-pf.js +4 -4
  927. app-ng-runtime/locales/angular/global/fr-pm.js +4 -4
  928. app-ng-runtime/locales/angular/global/fr-re.js +4 -4
  929. app-ng-runtime/locales/angular/global/fr-rw.js +4 -4
  930. app-ng-runtime/locales/angular/global/fr-sc.js +4 -4
  931. app-ng-runtime/locales/angular/global/fr-sn.js +4 -4
  932. app-ng-runtime/locales/angular/global/fr-sy.js +4 -4
  933. app-ng-runtime/locales/angular/global/fr-td.js +4 -4
  934. app-ng-runtime/locales/angular/global/fr-tg.js +4 -4
  935. app-ng-runtime/locales/angular/global/fr-tn.js +4 -4
  936. app-ng-runtime/locales/angular/global/fr-vu.js +4 -4
  937. app-ng-runtime/locales/angular/global/fr-wf.js +4 -4
  938. app-ng-runtime/locales/angular/global/fr-yt.js +4 -4
  939. app-ng-runtime/locales/angular/global/fr.js +4 -4
  940. app-ng-runtime/locales/angular/global/fur.js +4 -4
  941. app-ng-runtime/locales/angular/global/fy.js +4 -4
  942. app-ng-runtime/locales/angular/global/ga-gb.js +4 -4
  943. app-ng-runtime/locales/angular/global/ga.js +4 -4
  944. app-ng-runtime/locales/angular/global/gd.js +4 -4
  945. app-ng-runtime/locales/angular/global/gl.js +4 -4
  946. app-ng-runtime/locales/angular/global/gsw-fr.js +4 -4
  947. app-ng-runtime/locales/angular/global/gsw-li.js +4 -4
  948. app-ng-runtime/locales/angular/global/gsw.js +4 -4
  949. app-ng-runtime/locales/angular/global/gu.js +4 -4
  950. app-ng-runtime/locales/angular/global/guz.js +4 -4
  951. app-ng-runtime/locales/angular/global/gv.js +4 -4
  952. app-ng-runtime/locales/angular/global/ha-gh.js +4 -4
  953. app-ng-runtime/locales/angular/global/ha-ne.js +4 -4
  954. app-ng-runtime/locales/angular/global/ha.js +4 -4
  955. app-ng-runtime/locales/angular/global/haw.js +4 -4
  956. app-ng-runtime/locales/angular/global/he.js +4 -4
  957. app-ng-runtime/locales/angular/global/hi-latn.js +4 -4
  958. app-ng-runtime/locales/angular/global/hi.js +4 -4
  959. app-ng-runtime/locales/angular/global/hr-ba.js +4 -4
  960. app-ng-runtime/locales/angular/global/hr.js +4 -4
  961. app-ng-runtime/locales/angular/global/hsb.js +4 -4
  962. app-ng-runtime/locales/angular/global/hu.js +4 -4
  963. app-ng-runtime/locales/angular/global/hy.js +4 -4
  964. app-ng-runtime/locales/angular/global/ia.js +4 -4
  965. app-ng-runtime/locales/angular/global/id.js +4 -4
  966. app-ng-runtime/locales/angular/global/ig.js +4 -4
  967. app-ng-runtime/locales/angular/global/ii.js +4 -4
  968. app-ng-runtime/locales/angular/global/is.js +4 -4
  969. app-ng-runtime/locales/angular/global/it-ch.js +4 -4
  970. app-ng-runtime/locales/angular/global/it-sm.js +4 -4
  971. app-ng-runtime/locales/angular/global/it-va.js +4 -4
  972. app-ng-runtime/locales/angular/global/it.js +4 -4
  973. app-ng-runtime/locales/angular/global/ja.js +4 -4
  974. app-ng-runtime/locales/angular/global/jgo.js +4 -4
  975. app-ng-runtime/locales/angular/global/jmc.js +4 -4
  976. app-ng-runtime/locales/angular/global/jv.js +4 -4
  977. app-ng-runtime/locales/angular/global/ka.js +4 -4
  978. app-ng-runtime/locales/angular/global/kab.js +4 -4
  979. app-ng-runtime/locales/angular/global/kam.js +4 -4
  980. app-ng-runtime/locales/angular/global/kde.js +4 -4
  981. app-ng-runtime/locales/angular/global/kea.js +4 -4
  982. app-ng-runtime/locales/angular/global/kgp.js +4 -4
  983. app-ng-runtime/locales/angular/global/khq.js +4 -4
  984. app-ng-runtime/locales/angular/global/ki.js +4 -4
  985. app-ng-runtime/locales/angular/global/kk.js +4 -4
  986. app-ng-runtime/locales/angular/global/kkj.js +4 -4
  987. app-ng-runtime/locales/angular/global/kl.js +4 -4
  988. app-ng-runtime/locales/angular/global/kln.js +4 -4
  989. app-ng-runtime/locales/angular/global/km.js +4 -4
  990. app-ng-runtime/locales/angular/global/kn.js +4 -4
  991. app-ng-runtime/locales/angular/global/ko-kp.js +4 -4
  992. app-ng-runtime/locales/angular/global/ko.js +4 -4
  993. app-ng-runtime/locales/angular/global/kok.js +4 -4
  994. app-ng-runtime/locales/angular/global/ks-arab.js +4 -4
  995. app-ng-runtime/locales/angular/global/ks-deva.js +4 -4
  996. app-ng-runtime/locales/angular/global/ks.js +4 -4
  997. app-ng-runtime/locales/angular/global/ksb.js +4 -4
  998. app-ng-runtime/locales/angular/global/ksf.js +4 -4
  999. app-ng-runtime/locales/angular/global/ksh.js +4 -4
  1000. app-ng-runtime/locales/angular/global/ku.js +4 -4
  1001. app-ng-runtime/locales/angular/global/kw.js +4 -4
  1002. app-ng-runtime/locales/angular/global/ky.js +4 -4
  1003. app-ng-runtime/locales/angular/global/lag.js +4 -4
  1004. app-ng-runtime/locales/angular/global/lb.js +4 -4
  1005. app-ng-runtime/locales/angular/global/lg.js +4 -4
  1006. app-ng-runtime/locales/angular/global/lkt.js +4 -4
  1007. app-ng-runtime/locales/angular/global/ln-ao.js +4 -4
  1008. app-ng-runtime/locales/angular/global/ln-cf.js +4 -4
  1009. app-ng-runtime/locales/angular/global/ln-cg.js +4 -4
  1010. app-ng-runtime/locales/angular/global/ln.js +4 -4
  1011. app-ng-runtime/locales/angular/global/lo.js +4 -4
  1012. app-ng-runtime/locales/angular/global/lrc-iq.js +4 -4
  1013. app-ng-runtime/locales/angular/global/lrc.js +4 -4
  1014. app-ng-runtime/locales/angular/global/lt.js +4 -4
  1015. app-ng-runtime/locales/angular/global/lu.js +4 -4
  1016. app-ng-runtime/locales/angular/global/luo.js +4 -4
  1017. app-ng-runtime/locales/angular/global/luy.js +4 -4
  1018. app-ng-runtime/locales/angular/global/lv.js +4 -4
  1019. app-ng-runtime/locales/angular/global/mai.js +4 -4
  1020. app-ng-runtime/locales/angular/global/mas-tz.js +4 -4
  1021. app-ng-runtime/locales/angular/global/mas.js +4 -4
  1022. app-ng-runtime/locales/angular/global/mer.js +4 -4
  1023. app-ng-runtime/locales/angular/global/mfe.js +4 -4
  1024. app-ng-runtime/locales/angular/global/mg.js +4 -4
  1025. app-ng-runtime/locales/angular/global/mgh.js +4 -4
  1026. app-ng-runtime/locales/angular/global/mgo.js +4 -4
  1027. app-ng-runtime/locales/angular/global/mi.js +4 -4
  1028. app-ng-runtime/locales/angular/global/mk.js +4 -4
  1029. app-ng-runtime/locales/angular/global/ml.js +4 -4
  1030. app-ng-runtime/locales/angular/global/mn.js +4 -4
  1031. app-ng-runtime/locales/angular/global/mni-beng.js +4 -4
  1032. app-ng-runtime/locales/angular/global/mni.js +4 -4
  1033. app-ng-runtime/locales/angular/global/mr.js +4 -4
  1034. app-ng-runtime/locales/angular/global/ms-bn.js +4 -4
  1035. app-ng-runtime/locales/angular/global/ms-id.js +4 -4
  1036. app-ng-runtime/locales/angular/global/ms-sg.js +4 -4
  1037. app-ng-runtime/locales/angular/global/ms.js +4 -4
  1038. app-ng-runtime/locales/angular/global/mt.js +4 -4
  1039. app-ng-runtime/locales/angular/global/mua.js +4 -4
  1040. app-ng-runtime/locales/angular/global/my.js +4 -4
  1041. app-ng-runtime/locales/angular/global/mzn.js +4 -4
  1042. app-ng-runtime/locales/angular/global/naq.js +4 -4
  1043. app-ng-runtime/locales/angular/global/nb-sj.js +4 -4
  1044. app-ng-runtime/locales/angular/global/nb.js +4 -4
  1045. app-ng-runtime/locales/angular/global/nd.js +4 -4
  1046. app-ng-runtime/locales/angular/global/nds-nl.js +4 -4
  1047. app-ng-runtime/locales/angular/global/nds.js +4 -4
  1048. app-ng-runtime/locales/angular/global/ne-in.js +4 -4
  1049. app-ng-runtime/locales/angular/global/ne.js +4 -4
  1050. app-ng-runtime/locales/angular/global/nl-aw.js +4 -4
  1051. app-ng-runtime/locales/angular/global/nl-be.js +4 -4
  1052. app-ng-runtime/locales/angular/global/nl-bq.js +4 -4
  1053. app-ng-runtime/locales/angular/global/nl-cw.js +4 -4
  1054. app-ng-runtime/locales/angular/global/nl-sr.js +4 -4
  1055. app-ng-runtime/locales/angular/global/nl-sx.js +4 -4
  1056. app-ng-runtime/locales/angular/global/nl.js +4 -4
  1057. app-ng-runtime/locales/angular/global/nmg.js +4 -4
  1058. app-ng-runtime/locales/angular/global/nn.js +4 -4
  1059. app-ng-runtime/locales/angular/global/nnh.js +4 -4
  1060. app-ng-runtime/locales/angular/global/no.js +4 -4
  1061. app-ng-runtime/locales/angular/global/nus.js +4 -4
  1062. app-ng-runtime/locales/angular/global/nyn.js +4 -4
  1063. app-ng-runtime/locales/angular/global/om-ke.js +4 -4
  1064. app-ng-runtime/locales/angular/global/om.js +4 -4
  1065. app-ng-runtime/locales/angular/global/or.js +4 -4
  1066. app-ng-runtime/locales/angular/global/os-ru.js +4 -4
  1067. app-ng-runtime/locales/angular/global/os.js +4 -4
  1068. app-ng-runtime/locales/angular/global/pa-arab.js +4 -4
  1069. app-ng-runtime/locales/angular/global/pa-guru.js +4 -4
  1070. app-ng-runtime/locales/angular/global/pa.js +4 -4
  1071. app-ng-runtime/locales/angular/global/pcm.js +4 -4
  1072. app-ng-runtime/locales/angular/global/pl.js +4 -4
  1073. app-ng-runtime/locales/angular/global/ps-pk.js +4 -4
  1074. app-ng-runtime/locales/angular/global/ps.js +4 -4
  1075. app-ng-runtime/locales/angular/global/pt-ao.js +4 -4
  1076. app-ng-runtime/locales/angular/global/pt-ch.js +4 -4
  1077. app-ng-runtime/locales/angular/global/pt-cv.js +4 -4
  1078. app-ng-runtime/locales/angular/global/pt-gq.js +4 -4
  1079. app-ng-runtime/locales/angular/global/pt-gw.js +4 -4
  1080. app-ng-runtime/locales/angular/global/pt-lu.js +4 -4
  1081. app-ng-runtime/locales/angular/global/pt-mo.js +4 -4
  1082. app-ng-runtime/locales/angular/global/pt-mz.js +4 -4
  1083. app-ng-runtime/locales/angular/global/pt-pt.js +4 -4
  1084. app-ng-runtime/locales/angular/global/pt-st.js +4 -4
  1085. app-ng-runtime/locales/angular/global/pt-tl.js +4 -4
  1086. app-ng-runtime/locales/angular/global/pt.js +4 -4
  1087. app-ng-runtime/locales/angular/global/qu-bo.js +4 -4
  1088. app-ng-runtime/locales/angular/global/qu-ec.js +4 -4
  1089. app-ng-runtime/locales/angular/global/qu.js +4 -4
  1090. app-ng-runtime/locales/angular/global/rm.js +4 -4
  1091. app-ng-runtime/locales/angular/global/rn.js +4 -4
  1092. app-ng-runtime/locales/angular/global/ro-md.js +4 -4
  1093. app-ng-runtime/locales/angular/global/ro.js +4 -4
  1094. app-ng-runtime/locales/angular/global/rof.js +4 -4
  1095. app-ng-runtime/locales/angular/global/ru-by.js +4 -4
  1096. app-ng-runtime/locales/angular/global/ru-kg.js +4 -4
  1097. app-ng-runtime/locales/angular/global/ru-kz.js +4 -4
  1098. app-ng-runtime/locales/angular/global/ru-md.js +4 -4
  1099. app-ng-runtime/locales/angular/global/ru-ua.js +4 -4
  1100. app-ng-runtime/locales/angular/global/ru.js +4 -4
  1101. app-ng-runtime/locales/angular/global/rw.js +4 -4
  1102. app-ng-runtime/locales/angular/global/rwk.js +4 -4
  1103. app-ng-runtime/locales/angular/global/sa.js +4 -4
  1104. app-ng-runtime/locales/angular/global/sah.js +4 -4
  1105. app-ng-runtime/locales/angular/global/saq.js +4 -4
  1106. app-ng-runtime/locales/angular/global/sat-olck.js +4 -4
  1107. app-ng-runtime/locales/angular/global/sat.js +4 -4
  1108. app-ng-runtime/locales/angular/global/sbp.js +4 -4
  1109. app-ng-runtime/locales/angular/global/sc.js +4 -4
  1110. app-ng-runtime/locales/angular/global/sd-arab.js +4 -4
  1111. app-ng-runtime/locales/angular/global/sd-deva.js +4 -4
  1112. app-ng-runtime/locales/angular/global/sd.js +4 -4
  1113. app-ng-runtime/locales/angular/global/se-fi.js +4 -4
  1114. app-ng-runtime/locales/angular/global/se-se.js +4 -4
  1115. app-ng-runtime/locales/angular/global/se.js +4 -4
  1116. app-ng-runtime/locales/angular/global/seh.js +4 -4
  1117. app-ng-runtime/locales/angular/global/ses.js +4 -4
  1118. app-ng-runtime/locales/angular/global/sg.js +4 -4
  1119. app-ng-runtime/locales/angular/global/shi-latn.js +4 -4
  1120. app-ng-runtime/locales/angular/global/shi-tfng.js +4 -4
  1121. app-ng-runtime/locales/angular/global/shi.js +4 -4
  1122. app-ng-runtime/locales/angular/global/si.js +4 -4
  1123. app-ng-runtime/locales/angular/global/sk.js +4 -4
  1124. app-ng-runtime/locales/angular/global/sl.js +4 -4
  1125. app-ng-runtime/locales/angular/global/smn.js +4 -4
  1126. app-ng-runtime/locales/angular/global/sn.js +4 -4
  1127. app-ng-runtime/locales/angular/global/so-dj.js +4 -4
  1128. app-ng-runtime/locales/angular/global/so-et.js +4 -4
  1129. app-ng-runtime/locales/angular/global/so-ke.js +4 -4
  1130. app-ng-runtime/locales/angular/global/so.js +4 -4
  1131. app-ng-runtime/locales/angular/global/sq-mk.js +4 -4
  1132. app-ng-runtime/locales/angular/global/sq-xk.js +4 -4
  1133. app-ng-runtime/locales/angular/global/sq.js +4 -4
  1134. app-ng-runtime/locales/angular/global/sr-cyrl-ba.js +4 -4
  1135. app-ng-runtime/locales/angular/global/sr-cyrl-me.js +4 -4
  1136. app-ng-runtime/locales/angular/global/sr-cyrl-xk.js +4 -4
  1137. app-ng-runtime/locales/angular/global/sr-cyrl.js +4 -4
  1138. app-ng-runtime/locales/angular/global/sr-latn-ba.js +4 -4
  1139. app-ng-runtime/locales/angular/global/sr-latn-me.js +4 -4
  1140. app-ng-runtime/locales/angular/global/sr-latn-xk.js +4 -4
  1141. app-ng-runtime/locales/angular/global/sr-latn.js +4 -4
  1142. app-ng-runtime/locales/angular/global/sr.js +4 -4
  1143. app-ng-runtime/locales/angular/global/su-latn.js +4 -4
  1144. app-ng-runtime/locales/angular/global/su.js +4 -4
  1145. app-ng-runtime/locales/angular/global/sv-ax.js +4 -4
  1146. app-ng-runtime/locales/angular/global/sv-fi.js +4 -4
  1147. app-ng-runtime/locales/angular/global/sv.js +4 -4
  1148. app-ng-runtime/locales/angular/global/sw-cd.js +4 -4
  1149. app-ng-runtime/locales/angular/global/sw-ke.js +4 -4
  1150. app-ng-runtime/locales/angular/global/sw-ug.js +4 -4
  1151. app-ng-runtime/locales/angular/global/sw.js +4 -4
  1152. app-ng-runtime/locales/angular/global/ta-lk.js +4 -4
  1153. app-ng-runtime/locales/angular/global/ta-my.js +4 -4
  1154. app-ng-runtime/locales/angular/global/ta-sg.js +4 -4
  1155. app-ng-runtime/locales/angular/global/ta.js +4 -4
  1156. app-ng-runtime/locales/angular/global/te.js +4 -4
  1157. app-ng-runtime/locales/angular/global/teo-ke.js +4 -4
  1158. app-ng-runtime/locales/angular/global/teo.js +4 -4
  1159. app-ng-runtime/locales/angular/global/tg.js +4 -4
  1160. app-ng-runtime/locales/angular/global/th.js +4 -4
  1161. app-ng-runtime/locales/angular/global/ti-er.js +4 -4
  1162. app-ng-runtime/locales/angular/global/ti.js +4 -4
  1163. app-ng-runtime/locales/angular/global/tk.js +4 -4
  1164. app-ng-runtime/locales/angular/global/to.js +4 -4
  1165. app-ng-runtime/locales/angular/global/tr-cy.js +4 -4
  1166. app-ng-runtime/locales/angular/global/tr.js +4 -4
  1167. app-ng-runtime/locales/angular/global/tt.js +4 -4
  1168. app-ng-runtime/locales/angular/global/twq.js +4 -4
  1169. app-ng-runtime/locales/angular/global/tzm.js +4 -4
  1170. app-ng-runtime/locales/angular/global/ug.js +4 -4
  1171. app-ng-runtime/locales/angular/global/uk.js +4 -4
  1172. app-ng-runtime/locales/angular/global/und.js +4 -4
  1173. app-ng-runtime/locales/angular/global/ur-in.js +4 -4
  1174. app-ng-runtime/locales/angular/global/ur.js +4 -4
  1175. app-ng-runtime/locales/angular/global/uz-arab.js +4 -4
  1176. app-ng-runtime/locales/angular/global/uz-cyrl.js +4 -4
  1177. app-ng-runtime/locales/angular/global/uz-latn.js +4 -4
  1178. app-ng-runtime/locales/angular/global/uz.js +4 -4
  1179. app-ng-runtime/locales/angular/global/vai-latn.js +4 -4
  1180. app-ng-runtime/locales/angular/global/vai-vaii.js +4 -4
  1181. app-ng-runtime/locales/angular/global/vai.js +4 -4
  1182. app-ng-runtime/locales/angular/global/vi.js +4 -4
  1183. app-ng-runtime/locales/angular/global/vun.js +4 -4
  1184. app-ng-runtime/locales/angular/global/wae.js +4 -4
  1185. app-ng-runtime/locales/angular/global/wo.js +4 -4
  1186. app-ng-runtime/locales/angular/global/xh.js +4 -4
  1187. app-ng-runtime/locales/angular/global/xog.js +4 -4
  1188. app-ng-runtime/locales/angular/global/yav.js +4 -4
  1189. app-ng-runtime/locales/angular/global/yi.js +4 -4
  1190. app-ng-runtime/locales/angular/global/yo-bj.js +4 -4
  1191. app-ng-runtime/locales/angular/global/yo.js +4 -4
  1192. app-ng-runtime/locales/angular/global/yrl-co.js +4 -4
  1193. app-ng-runtime/locales/angular/global/yrl-ve.js +4 -4
  1194. app-ng-runtime/locales/angular/global/yrl.js +4 -4
  1195. app-ng-runtime/locales/angular/global/yue-hans.js +4 -4
  1196. app-ng-runtime/locales/angular/global/yue-hant.js +4 -4
  1197. app-ng-runtime/locales/angular/global/yue.js +4 -4
  1198. app-ng-runtime/locales/angular/global/zgh.js +4 -4
  1199. app-ng-runtime/locales/angular/global/zh-hans-hk.js +4 -4
  1200. app-ng-runtime/locales/angular/global/zh-hans-mo.js +4 -4
  1201. app-ng-runtime/locales/angular/global/zh-hans-sg.js +4 -4
  1202. app-ng-runtime/locales/angular/global/zh-hans.js +4 -4
  1203. app-ng-runtime/locales/angular/global/zh-hant-hk.js +4 -4
  1204. app-ng-runtime/locales/angular/global/zh-hant-mo.js +4 -4
  1205. app-ng-runtime/locales/angular/global/zh-hant.js +4 -4
  1206. app-ng-runtime/locales/angular/global/zh.js +4 -4
  1207. app-ng-runtime/locales/angular/global/zu.js +4 -4
  1208. app-ng-runtime/mobile/components/basic/default/.npmignore +2 -0
  1209. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +148 -143
  1210. app-ng-runtime/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +8 -7
  1211. app-ng-runtime/mobile/components/basic/default/esm2022/app-update/app-update.component.mjs +7 -6
  1212. app-ng-runtime/mobile/components/basic/default/esm2022/basic.module.mjs +2 -2
  1213. app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +47 -43
  1214. app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +7 -5
  1215. app-ng-runtime/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +6 -5
  1216. app-ng-runtime/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +49 -47
  1217. app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-management.service.mjs +2 -2
  1218. app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +31 -32
  1219. app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs +146 -140
  1220. app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
  1221. app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +2 -2
  1222. app-ng-runtime/mobile/components/basic/search/.npmignore +2 -0
  1223. app-ng-runtime/mobile/components/basic/search/bundles/index.umd.js +3 -3
  1224. app-ng-runtime/mobile/components/basic/search/esm2022/search.directive.mjs +3 -3
  1225. app-ng-runtime/mobile/components/basic/search/esm2022/search.module.mjs +2 -2
  1226. app-ng-runtime/mobile/components/basic/search/fesm2022/index.mjs +3 -3
  1227. app-ng-runtime/mobile/components/basic/search/fesm2022/index.mjs.map +1 -1
  1228. app-ng-runtime/mobile/components/containers/segmented-control/.npmignore +2 -0
  1229. app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +42 -30
  1230. app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +14 -8
  1231. app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +28 -21
  1232. app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.module.mjs +2 -2
  1233. app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs +41 -28
  1234. app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
  1235. app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -2
  1236. app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -2
  1237. app-ng-runtime/mobile/components/data/media-list/.npmignore +2 -0
  1238. app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +53 -48
  1239. app-ng-runtime/mobile/components/data/media-list/esm2022/media-list-item/media-list-item.directive.mjs +2 -2
  1240. app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.component.mjs +48 -42
  1241. app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.module.mjs +2 -2
  1242. app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs +50 -44
  1243. app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
  1244. app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -2
  1245. app-ng-runtime/mobile/components/device/barcode-scanner/.npmignore +2 -0
  1246. app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -2
  1247. app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +14 -8
  1248. app-ng-runtime/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.component.mjs +15 -9
  1249. app-ng-runtime/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.module.mjs +2 -2
  1250. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs +16 -10
  1251. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +1 -1
  1252. app-ng-runtime/mobile/components/device/camera/.npmignore +2 -0
  1253. app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +15 -9
  1254. app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -2
  1255. app-ng-runtime/mobile/components/device/camera/esm2022/camera.component.mjs +16 -10
  1256. app-ng-runtime/mobile/components/device/camera/esm2022/camera.module.mjs +2 -2
  1257. app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs +17 -11
  1258. app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs.map +1 -1
  1259. app-ng-runtime/mobile/components/input/file-upload/.npmignore +2 -0
  1260. app-ng-runtime/mobile/components/input/file-upload/bundles/index.umd.js +3 -3
  1261. app-ng-runtime/mobile/components/input/file-upload/esm2022/file-upload.directive.mjs +3 -3
  1262. app-ng-runtime/mobile/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
  1263. app-ng-runtime/mobile/components/input/file-upload/fesm2022/index.mjs +3 -3
  1264. app-ng-runtime/mobile/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  1265. app-ng-runtime/mobile/components/page/default/.npmignore +2 -0
  1266. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +11 -10
  1267. app-ng-runtime/mobile/components/page/default/esm2022/page-content-loader/page-content-loader.component.mjs +4 -3
  1268. app-ng-runtime/mobile/components/page/default/esm2022/page.directive.mjs +5 -4
  1269. app-ng-runtime/mobile/components/page/default/esm2022/page.module.mjs +2 -2
  1270. app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs +8 -6
  1271. app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
  1272. app-ng-runtime/mobile/components/page/left-panel/.npmignore +2 -0
  1273. app-ng-runtime/mobile/components/page/left-panel/bundles/index.umd.js +3 -3
  1274. app-ng-runtime/mobile/components/page/left-panel/esm2022/left-panel.directive.mjs +3 -3
  1275. app-ng-runtime/mobile/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
  1276. app-ng-runtime/mobile/components/page/left-panel/fesm2022/index.mjs +3 -3
  1277. app-ng-runtime/mobile/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  1278. app-ng-runtime/mobile/components/page/mobile-navbar/.npmignore +2 -0
  1279. app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +40 -35
  1280. app-ng-runtime/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +41 -36
  1281. app-ng-runtime/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.module.mjs +2 -2
  1282. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2022/index.mjs +41 -36
  1283. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +1 -1
  1284. app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +2 -2
  1285. app-ng-runtime/mobile/components/page/tab-bar/.npmignore +2 -0
  1286. app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +52 -46
  1287. app-ng-runtime/mobile/components/page/tab-bar/esm2022/tab-bar.module.mjs +2 -2
  1288. app-ng-runtime/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +50 -43
  1289. app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs +51 -44
  1290. app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
  1291. app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -2
  1292. app-ng-runtime/mobile/core/.npmignore +2 -0
  1293. app-ng-runtime/mobile/core/bundles/index.umd.js +43 -43
  1294. app-ng-runtime/mobile/core/esm2022/core.module.mjs +3 -3
  1295. app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +1 -1
  1296. app-ng-runtime/mobile/core/esm2022/services/device-file-cache.service.mjs +3 -3
  1297. app-ng-runtime/mobile/core/esm2022/services/device-file-download.service.mjs +7 -6
  1298. app-ng-runtime/mobile/core/esm2022/services/device-file-opener.service.mjs +5 -4
  1299. app-ng-runtime/mobile/core/esm2022/services/device-file-upload.service.mjs +6 -5
  1300. app-ng-runtime/mobile/core/esm2022/services/device-file.service.mjs +8 -7
  1301. app-ng-runtime/mobile/core/esm2022/services/device.service.mjs +5 -4
  1302. app-ng-runtime/mobile/core/esm2022/services/ext-app-message.service.mjs +7 -6
  1303. app-ng-runtime/mobile/core/esm2022/services/network.service.mjs +11 -10
  1304. app-ng-runtime/mobile/core/fesm2022/index.mjs +40 -39
  1305. app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
  1306. app-ng-runtime/mobile/core/services/ext-app-message.service.d.ts +1 -1
  1307. app-ng-runtime/mobile/core/services/network.service.d.ts +7 -1
  1308. app-ng-runtime/mobile/offline/.npmignore +2 -0
  1309. app-ng-runtime/mobile/offline/bundles/index.umd.js +176 -159
  1310. app-ng-runtime/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
  1311. app-ng-runtime/mobile/offline/esm2022/offline.module.mjs +3 -3
  1312. app-ng-runtime/mobile/offline/esm2022/services/change-log.service.mjs +9 -8
  1313. app-ng-runtime/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +39 -37
  1314. app-ng-runtime/mobile/offline/esm2022/services/local-db-management.service.mjs +56 -47
  1315. app-ng-runtime/mobile/offline/esm2022/services/local-db.service.mjs +7 -6
  1316. app-ng-runtime/mobile/offline/esm2022/services/local-key-value.service.mjs +2 -2
  1317. app-ng-runtime/mobile/offline/esm2022/services/push.service.mjs +3 -3
  1318. app-ng-runtime/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
  1319. app-ng-runtime/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
  1320. app-ng-runtime/mobile/offline/esm2022/services/workers/id-resolver.mjs +3 -3
  1321. app-ng-runtime/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
  1322. app-ng-runtime/mobile/offline/esm2022/utils/file-upload.utils.mjs +1 -1
  1323. app-ng-runtime/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
  1324. app-ng-runtime/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
  1325. app-ng-runtime/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
  1326. app-ng-runtime/mobile/offline/esm2022/utils/utils.mjs +1 -1
  1327. app-ng-runtime/mobile/offline/fesm2022/index.mjs +171 -153
  1328. app-ng-runtime/mobile/offline/fesm2022/index.mjs.map +1 -1
  1329. app-ng-runtime/mobile/placeholder/runtime/.npmignore +2 -0
  1330. app-ng-runtime/mobile/placeholder/runtime/bundles/index.umd.js +3 -2
  1331. app-ng-runtime/mobile/placeholder/runtime/esm2022/components/app-ext.component.mjs +3 -2
  1332. app-ng-runtime/mobile/placeholder/runtime/esm2022/mobile-runtime.module.mjs +2 -2
  1333. app-ng-runtime/mobile/placeholder/runtime/fesm2022/index.mjs +3 -2
  1334. app-ng-runtime/mobile/placeholder/runtime/fesm2022/index.mjs.map +1 -1
  1335. app-ng-runtime/mobile/placeholder/runtime-dynamic/.npmignore +2 -0
  1336. app-ng-runtime/mobile/placeholder/runtime-dynamic/bundles/index.umd.js +1 -1
  1337. app-ng-runtime/mobile/placeholder/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
  1338. app-ng-runtime/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs +1 -1
  1339. app-ng-runtime/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs.map +1 -1
  1340. app-ng-runtime/mobile/runtime/.npmignore +2 -0
  1341. app-ng-runtime/mobile/runtime/bundles/index.umd.js +21 -17
  1342. app-ng-runtime/mobile/runtime/esm2022/components/app-ext.component.mjs +4 -3
  1343. app-ng-runtime/mobile/runtime/esm2022/mobile-runtime.module.mjs +5 -4
  1344. app-ng-runtime/mobile/runtime/esm2022/services/cookie.service.mjs +7 -3
  1345. app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +6 -5
  1346. app-ng-runtime/mobile/runtime/esm2022/services/webprocess.service.mjs +3 -3
  1347. app-ng-runtime/mobile/runtime/fesm2022/index.mjs +18 -13
  1348. app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
  1349. app-ng-runtime/mobile/runtime-dynamic/.npmignore +2 -0
  1350. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +5 -5
  1351. app-ng-runtime/mobile/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
  1352. app-ng-runtime/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +5 -5
  1353. app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs +5 -5
  1354. app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
  1355. app-ng-runtime/mobile/variables/.npmignore +2 -0
  1356. app-ng-runtime/mobile/variables/bundles/index.umd.js +28 -21
  1357. app-ng-runtime/mobile/variables/esm2022/services/camera-service.mjs +5 -5
  1358. app-ng-runtime/mobile/variables/esm2022/services/contacts-service.mjs +1 -1
  1359. app-ng-runtime/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
  1360. app-ng-runtime/mobile/variables/esm2022/services/device-service/device-service.mjs +1 -1
  1361. app-ng-runtime/mobile/variables/esm2022/services/device-service/location-service.mjs +1 -1
  1362. app-ng-runtime/mobile/variables/esm2022/services/file-service.mjs +11 -3
  1363. app-ng-runtime/mobile/variables/esm2022/services/scan-service.mjs +1 -1
  1364. app-ng-runtime/mobile/variables/esm2022/variables.module.mjs +3 -3
  1365. app-ng-runtime/mobile/variables/fesm2022/index.mjs +24 -16
  1366. app-ng-runtime/mobile/variables/fesm2022/index.mjs.map +1 -1
  1367. app-ng-runtime/oAuth/.npmignore +2 -0
  1368. app-ng-runtime/oAuth/bundles/index.umd.js +15 -15
  1369. app-ng-runtime/oAuth/esm2022/oAuth.module.mjs +2 -2
  1370. app-ng-runtime/oAuth/esm2022/oAuth.service.mjs +6 -5
  1371. app-ng-runtime/oAuth/esm2022/oAuth.utils.mjs +8 -7
  1372. app-ng-runtime/oAuth/fesm2022/index.mjs +12 -11
  1373. app-ng-runtime/oAuth/fesm2022/index.mjs.map +1 -1
  1374. app-ng-runtime/package.json +1 -1
  1375. app-ng-runtime/runtime/base/.npmignore +2 -0
  1376. app-ng-runtime/runtime/base/bundles/index.umd.js +263 -247
  1377. app-ng-runtime/runtime/base/components/app-component/app.component.d.ts +3 -1
  1378. app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +1 -1
  1379. app-ng-runtime/runtime/base/directives/accessroles.directive.d.ts +4 -3
  1380. app-ng-runtime/runtime/base/esm2022/components/app-component/app.component.mjs +34 -30
  1381. app-ng-runtime/runtime/base/esm2022/components/app-spinner.component.mjs +9 -8
  1382. app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +5 -5
  1383. app-ng-runtime/runtime/base/esm2022/components/base-layout.component.mjs +5 -4
  1384. app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +16 -15
  1385. app-ng-runtime/runtime/base/esm2022/components/base-partial.component.mjs +15 -14
  1386. app-ng-runtime/runtime/base/esm2022/components/base-prefab.component.mjs +17 -16
  1387. app-ng-runtime/runtime/base/esm2022/components/base-spa-page.component.mjs +16 -15
  1388. app-ng-runtime/runtime/base/esm2022/components/custom-toaster.component.mjs +17 -15
  1389. app-ng-runtime/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +4 -3
  1390. app-ng-runtime/runtime/base/esm2022/components/prefab-preview.component.mjs +4 -3
  1391. app-ng-runtime/runtime/base/esm2022/directives/accessroles.directive.mjs +24 -16
  1392. app-ng-runtime/runtime/base/esm2022/directives/prefab.directive.mjs +4 -4
  1393. app-ng-runtime/runtime/base/esm2022/guards/auth.guard.mjs +3 -3
  1394. app-ng-runtime/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +3 -3
  1395. app-ng-runtime/runtime/base/esm2022/guards/page-not-found.guard.mjs +3 -3
  1396. app-ng-runtime/runtime/base/esm2022/guards/role.guard.mjs +5 -4
  1397. app-ng-runtime/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +4 -4
  1398. app-ng-runtime/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +5 -5
  1399. app-ng-runtime/runtime/base/esm2022/resolves/app-extension.resolve.mjs +3 -3
  1400. app-ng-runtime/runtime/base/esm2022/resolves/app-js.resolve.mjs +3 -3
  1401. app-ng-runtime/runtime/base/esm2022/resolves/app-variables.resolve.mjs +3 -3
  1402. app-ng-runtime/runtime/base/esm2022/resolves/i18n.resolve.mjs +3 -3
  1403. app-ng-runtime/runtime/base/esm2022/resolves/metadata.resolve.mjs +3 -3
  1404. app-ng-runtime/runtime/base/esm2022/resolves/security-config.resolve.mjs +3 -3
  1405. app-ng-runtime/runtime/base/esm2022/runtime-base.module.mjs +3 -3
  1406. app-ng-runtime/runtime/base/esm2022/services/app-defaults.service.mjs +3 -3
  1407. app-ng-runtime/runtime/base/esm2022/services/app.manager.service.mjs +19 -16
  1408. app-ng-runtime/runtime/base/esm2022/services/app.service.mjs +9 -8
  1409. app-ng-runtime/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +5 -4
  1410. app-ng-runtime/runtime/base/esm2022/services/http-interceptor.services.mjs +6 -5
  1411. app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +15 -13
  1412. app-ng-runtime/runtime/base/esm2022/services/navigation.service.mjs +10 -9
  1413. app-ng-runtime/runtime/base/esm2022/services/pipe-provider.service.mjs +3 -3
  1414. app-ng-runtime/runtime/base/esm2022/services/pipe.service.mjs +3 -3
  1415. app-ng-runtime/runtime/base/esm2022/services/prefab-manager.service.mjs +5 -4
  1416. app-ng-runtime/runtime/base/esm2022/services/spinner.service.mjs +9 -8
  1417. app-ng-runtime/runtime/base/esm2022/services/toaster.service.mjs +8 -7
  1418. app-ng-runtime/runtime/base/esm2022/util/fragment-monitor.mjs +3 -3
  1419. app-ng-runtime/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +7 -8
  1420. app-ng-runtime/runtime/base/fesm2022/index.mjs +273 -256
  1421. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
  1422. app-ng-runtime/runtime/base/overrides/wm_dom_renderer.d.ts +2 -2
  1423. app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
  1424. app-ng-runtime/runtime/dynamic/.npmignore +2 -0
  1425. app-ng-runtime/runtime/dynamic/bundles/index.umd.js +22 -21
  1426. app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +1 -1
  1427. app-ng-runtime/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +4 -3
  1428. app-ng-runtime/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +3 -3
  1429. app-ng-runtime/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +3 -3
  1430. app-ng-runtime/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +3 -3
  1431. app-ng-runtime/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +3 -3
  1432. app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +6 -5
  1433. app-ng-runtime/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +3 -3
  1434. app-ng-runtime/runtime/dynamic/esm2022/main.mjs +3 -2
  1435. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +21 -19
  1436. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  1437. app-ng-runtime/scripts/datatable/datatable.js +2 -2
  1438. app-ng-runtime/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
  1439. app-ng-runtime/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
  1440. app-ng-runtime/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
  1441. app-ng-runtime/security/.npmignore +2 -0
  1442. app-ng-runtime/security/bundles/index.umd.js +17 -17
  1443. app-ng-runtime/security/esm2022/security.module.mjs +2 -2
  1444. app-ng-runtime/security/esm2022/security.service.mjs +14 -13
  1445. app-ng-runtime/security/fesm2022/index.mjs +14 -13
  1446. app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
  1447. app-ng-runtime/security/security.service.d.ts +1 -1
  1448. app-ng-runtime/swipey/.npmignore +2 -0
  1449. app-ng-runtime/swipey/esm2022/swipe.animation.mjs +1 -1
  1450. app-ng-runtime/swipey/fesm2022/index.mjs.map +1 -1
  1451. app-ng-runtime/transpiler/.npmignore +2 -0
  1452. app-ng-runtime/transpiler/bundles/index.umd.js +10 -9
  1453. app-ng-runtime/transpiler/esm2022/build.mjs +8 -6
  1454. app-ng-runtime/transpiler/fesm2022/index.mjs +7 -5
  1455. app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
  1456. app-ng-runtime/variables/.npmignore +2 -0
  1457. app-ng-runtime/variables/bundles/index.umd.js +160 -150
  1458. app-ng-runtime/variables/esm2022/factory/variable.factory.mjs +1 -1
  1459. app-ng-runtime/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
  1460. app-ng-runtime/variables/esm2022/manager/action/logout-action.manager.mjs +1 -1
  1461. app-ng-runtime/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
  1462. app-ng-runtime/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
  1463. app-ng-runtime/variables/esm2022/manager/variable/device-variable-manager.mjs +1 -1
  1464. app-ng-runtime/variables/esm2022/manager/variable/device-variable-service.mjs +1 -1
  1465. app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
  1466. app-ng-runtime/variables/esm2022/model/action/notification-action.mjs +1 -1
  1467. app-ng-runtime/variables/esm2022/service/metadata-service/metadata.service.mjs +3 -3
  1468. app-ng-runtime/variables/esm2022/service/variables.service.mjs +9 -8
  1469. app-ng-runtime/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
  1470. app-ng-runtime/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
  1471. app-ng-runtime/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
  1472. app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +75 -70
  1473. app-ng-runtime/variables/esm2022/variables.module.mjs +2 -2
  1474. app-ng-runtime/variables/fesm2022/index.mjs +174 -163
  1475. app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
  1476. app-ng-runtime/variables/util/variable/service-variable.utils.d.ts +1 -1
  1477. app-ng-runtime/build-task/advanced/custom-widget-prop/custom-widget-prop.build.d.ts +0 -2
  1478. app-ng-runtime/build-task/esm2022/advanced/custom-widget-prop/custom-widget-prop.build.mjs +0 -10
  1479. app-ng-runtime/components/advanced/custom/custom-widget-container-prop/custom-widget-container-prop.directive.d.ts +0 -20
  1480. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container-prop/custom-widget-container-prop.directive.mjs +0 -70
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
2
2
  import { AppVersion } from '@awesome-cordova-plugins/app-version/ngx';
3
3
  import { File } from '@awesome-cordova-plugins/file/ngx';
4
4
  import { SQLite } from '@awesome-cordova-plugins/sqlite/ngx';
5
- import { DataType, DEFAULT_FORMATS, executePromiseChain, extractType, isAndroid, isArray, isIos, noop, toPromise, transformFileURI } from '@wm/core';
5
+ import { DataType, DEFAULT_FORMATS, executePromiseChain, extractType, isAndroid, isIos, noop, toPromise, transformFileURI } from '@wm/core';
6
6
  import { DeviceFileService, DeviceService } from '@wm/mobile/core';
7
7
  import { SecurityService } from '@wm/security';
8
8
  import { formatDate } from '@wm/variables';
@@ -10,6 +10,7 @@ import { LocalKeyValueService } from './local-key-value.service';
10
10
  import { LocalDBStore } from '../models/local-db-store';
11
11
  import { escapeName } from '../utils/utils';
12
12
  import { ColumnInfo, DBInfo, PullType } from '../models/config';
13
+ import { chain, find, forEach, isEmpty, isUndefined, map, now, parseInt, replace, toUpper, toString, values, isArray, assignIn } from "lodash-es";
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@awesome-cordova-plugins/app-version/ngx";
15
16
  import * as i2 from "@wm/mobile/core";
@@ -117,7 +118,8 @@ export class LocalDBManagementService {
117
118
  return new Promise((resolve, reject) => {
118
119
  // Before closing databases, give some time for the pending transactions (if any).
119
120
  setTimeout(() => {
120
- const closePromises = _.map(_.values(this.databases), db => db.sqliteObject.close());
121
+ // @ts-ignore
122
+ const closePromises = map(values(this.databases), db => db.sqliteObject.close());
121
123
  Promise.all(closePromises).then(resolve, reject);
122
124
  }, 1000);
123
125
  });
@@ -141,14 +143,14 @@ export class LocalDBManagementService {
141
143
  return Promise.reject(`Query by name ' ${queryName} ' Not Found`);
142
144
  }
143
145
  queryData = this.databases[dbName].queries[queryName];
144
- paramPromises = _.chain(queryData.params)
146
+ paramPromises = chain(queryData.params)
145
147
  .filter(p => p.variableType !== 'PROMPT')
146
148
  .forEach(p => {
147
149
  const paramValue = this.systemProperties[p.variableType].value(p.name, params);
148
150
  return toPromise(paramValue).then(v => params[p.name] = v);
149
151
  }).value();
150
152
  return Promise.all(paramPromises).then(() => {
151
- params = _.map(queryData.params, p => {
153
+ params = map(queryData.params, p => {
152
154
  // Sqlite will accept DateTime value as below format.
153
155
  if (typeof params[p.name] !== 'string'
154
156
  && (p.type === DataType.DATETIME || p.type === DataType.LOCALDATETIME)) {
@@ -163,18 +165,18 @@ export class LocalDBManagementService {
163
165
  return this.executeSQLQuery(dbName, queryData.query, params)
164
166
  .then(result => {
165
167
  let firstRow, needTransform;
166
- if (!_.isEmpty(result.rows)) {
168
+ if (!isEmpty(result.rows)) {
167
169
  firstRow = result.rows[0];
168
- needTransform = _.find(queryData.response.properties, p => !firstRow.hasOwnProperty(p.fieldName));
169
- if (!_.isUndefined(needTransform)) {
170
- result.rows = _.map(result.rows, row => {
170
+ needTransform = find(queryData.response.properties, p => !firstRow.hasOwnProperty(p.fieldName));
171
+ if (!isUndefined(needTransform)) {
172
+ result.rows = map(result.rows, row => {
171
173
  const transformedRow = {}, rowWithUpperKeys = {};
172
174
  // This is to make search for data as case-insensitive
173
- _.forEach(row, (v, k) => rowWithUpperKeys[k.toUpperCase()] = v);
174
- _.forEach(queryData.response.properties, p => {
175
+ forEach(row, (v, k) => rowWithUpperKeys[k.toUpperCase()] = v);
176
+ forEach(queryData.response.properties, p => {
175
177
  // format the value depending on the typeRef specified in properties.
176
178
  const propType = extractType(p.fieldType.typeRef);
177
- const formatValue = DEFAULT_FORMATS[_.toUpper(propType)];
179
+ const formatValue = DEFAULT_FORMATS[toUpper(propType)];
178
180
  const fieldVal = row[p.name];
179
181
  if (fieldVal && typeof fieldVal !== 'string'
180
182
  && (propType === DataType.DATETIME || propType === DataType.LOCALDATETIME || propType === DataType.DATE)) {
@@ -208,7 +210,7 @@ export class LocalDBManagementService {
208
210
  */
209
211
  exportDB() {
210
212
  return new Promise((resolve, reject) => {
211
- const folderToExport = 'offline_temp_' + _.now(), folderToExportFullPath = cordova.file.cacheDirectory + folderToExport + '/', zipFileName = '_offline_data.zip', metaInfo = {
213
+ const folderToExport = 'offline_temp_' + now(), folderToExportFullPath = cordova.file.cacheDirectory + folderToExport + '/', zipFileName = '_offline_data.zip', metaInfo = {
212
214
  app: null,
213
215
  OS: '',
214
216
  createdOn: 0
@@ -238,7 +240,7 @@ export class LocalDBManagementService {
238
240
  else if (isAndroid()) {
239
241
  metaInfo.OS = 'ANDROID';
240
242
  }
241
- metaInfo.createdOn = _.now();
243
+ metaInfo.createdOn = now();
242
244
  return metaInfo;
243
245
  }).then(() => executePromiseChain(this.getCallbacksFor('preExport'), [folderToExportFullPath, metaInfo]))
244
246
  .then(() => {
@@ -291,7 +293,7 @@ export class LocalDBManagementService {
291
293
  */
292
294
  importDB(zipPath, revertIfFails) {
293
295
  return new Promise((resolve, reject) => {
294
- const importFolder = 'offline_temp_' + _.now(), importFolderFullPath = cordova.file.cacheDirectory + importFolder + '/';
296
+ const importFolder = 'offline_temp_' + now(), importFolderFullPath = cordova.file.cacheDirectory + importFolder + '/';
295
297
  let zipMeta;
296
298
  // Create a temporary folder to unzip the contents of the zip.
297
299
  this.file.createDir(cordova.file.cacheDirectory, importFolder, false)
@@ -411,7 +413,7 @@ export class LocalDBManagementService {
411
413
  .then(metadata => this.loadNamedQueries(metadata))
412
414
  .then(metadata => this.loadOfflineConfig(metadata))
413
415
  .then(metadata => {
414
- return Promise.all(_.map(metadata, dbMetadata => {
416
+ return Promise.all(map(metadata, dbMetadata => {
415
417
  return this.openDatabase(dbMetadata)
416
418
  .then(database => {
417
419
  this.databases[dbMetadata.schema.name] = database;
@@ -430,9 +432,9 @@ export class LocalDBManagementService {
430
432
  .then(() => this.disableForeignKeys())
431
433
  .then(() => this.deviceService.getAppBuildTime())
432
434
  .then(dbSeedCreationTime => {
433
- return executePromiseChain(_.map(this.callbacks, 'onDbCreate'), [{
435
+ return executePromiseChain(map(this.callbacks, 'onDbCreate'), [{
434
436
  'databases': this.databases,
435
- 'dbCreatedOn': _.now(),
437
+ 'dbCreatedOn': now(),
436
438
  'dbSeedCreatedOn': dbSeedCreationTime
437
439
  }]);
438
440
  }).then(() => this.databases);
@@ -492,13 +494,13 @@ export class LocalDBManagementService {
492
494
  let defaultValue = col.columnValue ? col.columnValue.defaultValue : '';
493
495
  const type = col.sqlType;
494
496
  if (type === 'number' && !col.primaryKey) {
495
- defaultValue = _.isEmpty(defaultValue) ? null : _.parseInt(defaultValue);
497
+ defaultValue = isEmpty(defaultValue) ? null : parseInt(defaultValue);
496
498
  }
497
499
  else if (type === 'boolean') {
498
- defaultValue = _.isEmpty(defaultValue) ? null : (defaultValue === 'true' ? 1 : 0);
500
+ defaultValue = isEmpty(defaultValue) ? null : (defaultValue === 'true' ? 1 : 0);
499
501
  }
500
502
  else {
501
- defaultValue = _.isEmpty(defaultValue) ? null : defaultValue;
503
+ defaultValue = isEmpty(defaultValue) ? null : defaultValue;
502
504
  }
503
505
  reqEntity.columns.push({
504
506
  name: col['name'],
@@ -509,10 +511,10 @@ export class LocalDBManagementService {
509
511
  defaultValue: defaultValue
510
512
  });
511
513
  });
512
- _.forEach(entity.relations, r => {
514
+ forEach(entity.relations, r => {
513
515
  let targetEntitySchema, targetEntity, col, sourceColumn, mapping;
514
516
  if (r.cardinality === 'ManyToOne' || r.cardinality === 'OneToOne') {
515
- targetEntity = _.find(schema.tables, t => t.name === r.targetTable);
517
+ targetEntity = find(schema.tables, t => t.name === r.targetTable);
516
518
  mapping = r.mappings[0];
517
519
  if (targetEntity) {
518
520
  targetEntity = targetEntity.entityName;
@@ -529,7 +531,8 @@ export class LocalDBManagementService {
529
531
  targetFieldName: targetEntitySchema.columns.find(column => column.name === mapping.targetColumn).fieldName
530
532
  };
531
533
  foreignRelation.targetPath = foreignRelation.sourceFieldName + '.' + foreignRelation.targetFieldName;
532
- foreignRelation.dataMapper = _.chain(targetEntitySchema.columns)
534
+ // @ts-ignore
535
+ foreignRelation.dataMapper = chain(targetEntitySchema.columns)
533
536
  .keyBy(childCol => foreignRelation.sourceFieldName + '.' + childCol.fieldName)
534
537
  .mapValues(childCol => new ColumnInfo(childCol.name, childCol.fieldName)).value();
535
538
  col.foreignRelations = col.foreignRelations || [];
@@ -542,25 +545,25 @@ export class LocalDBManagementService {
542
545
  // Loads necessary details of queries
543
546
  compactQueries(queriesByDB) {
544
547
  const queries = new Map();
545
- _.forEach(queriesByDB.queries, queryData => {
548
+ forEach(queriesByDB.queries, queryData => {
546
549
  let query, params;
547
550
  if (queryData.nativeSql && queryData.type === 'SELECT') {
548
- query = _.isEmpty(queryData.offlineQueryString) ? queryData.queryString : queryData.offlineQueryString;
549
- params = _.map(this.extractQueryParams(query), p => {
550
- const paramObj = _.find(queryData.parameters, { 'name': p });
551
+ query = isEmpty(queryData.offlineQueryString) ? queryData.queryString : queryData.offlineQueryString;
552
+ params = map(this.extractQueryParams(query), p => {
553
+ const paramObj = find(queryData.parameters, { 'name': p });
551
554
  return {
552
555
  name: paramObj.name,
553
556
  type: paramObj.type,
554
557
  variableType: paramObj.variableType
555
558
  };
556
559
  });
557
- params.forEach(p => query = _.replace(query, ':' + p.name, '?'));
560
+ params.forEach(p => query = replace(query, ':' + p.name, '?'));
558
561
  queries[queryData.name] = {
559
562
  name: queryData.name,
560
563
  query: query,
561
564
  params: params,
562
565
  response: {
563
- properties: _.map(queryData.response.properties, p => {
566
+ properties: map(queryData.response.properties, p => {
564
567
  p.nameInUpperCase = p.name.toUpperCase();
565
568
  return p;
566
569
  })
@@ -586,7 +589,7 @@ export class LocalDBManagementService {
586
589
  return dbInfo;
587
590
  }
588
591
  convertBoolToInt(bool) {
589
- return _.toString(bool) === 'true' ? 1 : 0;
592
+ return toString(bool) === 'true' ? 1 : 0;
590
593
  }
591
594
  convertIntToBool(int) {
592
595
  return int ? true : false;
@@ -596,7 +599,8 @@ export class LocalDBManagementService {
596
599
  * @returns {*}
597
600
  */
598
601
  disableForeignKeys() {
599
- return Promise.all(_.map(this.databases, db => this.executeSQLQuery(db.schema.name, 'PRAGMA foreign_keys = OFF')));
602
+ // @ts-ignore
603
+ return Promise.all(map(this.databases, db => this.executeSQLQuery(db.schema.name, 'PRAGMA foreign_keys = OFF')));
600
604
  }
601
605
  /**
602
606
  * Executes SQL query;
@@ -679,7 +683,7 @@ export class LocalDBManagementService {
679
683
  getMetaInfo(fileNameRegex) {
680
684
  const folder = cordova.file.applicationDirectory + META_LOCATION + '/';
681
685
  return this.deviceFileService.listFiles(folder, fileNameRegex)
682
- .then(files => Promise.all(_.map(files, f => {
686
+ .then(files => Promise.all(map(files, f => {
683
687
  return new Promise((resolve, reject) => {
684
688
  // Cordova File reader has buffer issues with large files.
685
689
  // so, using ajax to retrieve local json
@@ -725,7 +729,7 @@ export class LocalDBManagementService {
725
729
  loadNamedQueries(metadata) {
726
730
  return this.getMetaInfo(/.+_query\.json$/)
727
731
  .then((queriesByDBs) => {
728
- queriesByDBs = _.isArray(queriesByDBs) ? queriesByDBs : [queriesByDBs];
732
+ queriesByDBs = isArray(queriesByDBs) ? queriesByDBs : [queriesByDBs];
729
733
  queriesByDBs.map(e => metadata[e.name].queries = this.compactQueries(e));
730
734
  return metadata;
731
735
  });
@@ -739,10 +743,12 @@ export class LocalDBManagementService {
739
743
  loadOfflineConfig(metadata) {
740
744
  return this.getMetaInfo(/.+_offline\.json$/)
741
745
  .then(configs => {
742
- _.forEach(configs, config => {
743
- _.forEach(config.entities, entityConfig => {
744
- const entitySchema = _.find(metadata[config.name].schema.entities, schema => schema.name === entityConfig.name);
745
- _.assignIn(entitySchema, entityConfig);
746
+ forEach(configs, config => {
747
+ // @ts-ignore
748
+ forEach(config.entities, entityConfig => {
749
+ // @ts-ignore
750
+ const entitySchema = find(metadata[config.name].schema.entities, schema => schema.name === entityConfig.name);
751
+ assignIn(entitySchema, entityConfig);
746
752
  });
747
753
  });
748
754
  return metadata;
@@ -751,14 +757,14 @@ export class LocalDBManagementService {
751
757
  logSql(sqliteObject) {
752
758
  const logger = console, originalExecuteSql = sqliteObject.executeSql;
753
759
  sqliteObject.executeSql = (sql, params, logOutput) => {
754
- const startTime = _.now();
760
+ const startTime = now();
755
761
  return originalExecuteSql.call(sqliteObject, sql, params).then(result => {
756
762
  if (logOutput || this._logSql) {
757
763
  const objArr = [], rowCount = result.rows.length;
758
764
  for (let i = 0; i < rowCount; i++) {
759
765
  objArr.push(result.rows.item(i));
760
766
  }
761
- logger.debug('SQL "%s" with params %O took [%d ms]. And the result is %O', sql, params, _.now() - startTime, objArr);
767
+ logger.debug('SQL "%s" with params %O took [%d ms]. And the result is %O', sql, params, now() - startTime, objArr);
762
768
  }
763
769
  return result;
764
770
  }, error => {
@@ -786,10 +792,12 @@ export class LocalDBManagementService {
786
792
  * @returns {*}
787
793
  */
788
794
  normalizeData() {
789
- return Promise.all(_.map(this.databases, database => {
790
- return Promise.all(_.map(database.schema.entities, entitySchema => {
791
- return Promise.all(_.map(entitySchema.columns, column => {
795
+ return Promise.all(map(this.databases, database => {
796
+ // @ts-ignore
797
+ return Promise.all(map(database.schema.entities, entitySchema => {
798
+ return Promise.all(map(entitySchema.columns, column => {
792
799
  if (column.sqlType === 'boolean') {
800
+ // @ts-ignore
793
801
  return this.normalizeBooleanData(database.schema.name, entitySchema.name, column.name);
794
802
  }
795
803
  }));
@@ -803,12 +811,13 @@ export class LocalDBManagementService {
803
811
  }).then(sqliteObject => {
804
812
  database.sqliteObject = sqliteObject;
805
813
  this.logSql(sqliteObject);
806
- const storePromises = _.map(database.schema.entities, entitySchema => {
814
+ const storePromises = map(database.schema.entities, entitySchema => {
815
+ // @ts-ignore
807
816
  const store = new LocalDBStore(this.deviceFileService, entitySchema, this.file, this, sqliteObject);
808
817
  return store.create();
809
818
  });
810
819
  return Promise.all(storePromises).then(stores => {
811
- _.forEach(stores, store => {
820
+ forEach(stores, store => {
812
821
  database.stores[store.entitySchema.entityName] = store;
813
822
  });
814
823
  return database;
@@ -839,8 +848,8 @@ export class LocalDBManagementService {
839
848
  static { this.ɵfac = function LocalDBManagementService_Factory(t) { return new (t || LocalDBManagementService)(i0.ɵɵinject(i1.AppVersion), i0.ɵɵinject(i2.DeviceService), i0.ɵɵinject(i2.DeviceFileService), i0.ɵɵinject(i3.File), i0.ɵɵinject(i4.LocalKeyValueService), i0.ɵɵinject(i5.SecurityService), i0.ɵɵinject(i6.SQLite)); }; }
840
849
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LocalDBManagementService, factory: LocalDBManagementService.ɵfac, providedIn: 'root' }); }
841
850
  }
842
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalDBManagementService, [{
851
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalDBManagementService, [{
843
852
  type: Injectable,
844
853
  args: [{ providedIn: 'root' }]
845
- }], function () { return [{ type: i1.AppVersion }, { type: i2.DeviceService }, { type: i2.DeviceFileService }, { type: i3.File }, { type: i4.LocalKeyValueService }, { type: i5.SecurityService }, { type: i6.SQLite }]; }, null); })();
846
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZGItbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9iaWxlL29mZmxpbmUvc3JjL3NlcnZpY2VzL2xvY2FsLWRiLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNySixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQThCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQU81RixNQUFPLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztBQUNsRCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQztB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O1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYztRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFO2FBQ3RDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtnQkFDN0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUU7cUJBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1AsTUFBTSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7eUZBOXlCUSx3QkFBd0I7dUVBQXhCLHdCQUF3QixXQUF4Qix3QkFBd0IsbUJBRFosTUFBTTs7dUZBQ2xCLHdCQUF3QjtjQURwQyxVQUFVO2VBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBWZXJzaW9uIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2FwcC12ZXJzaW9uL25neCc7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2ZpbGUvbmd4JztcbmltcG9ydCB7IFNRTGl0ZSwgU1FMaXRlT2JqZWN0IH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3NxbGl0ZS9uZ3gnO1xuXG5pbXBvcnQgeyBEYXRhVHlwZSwgREVGQVVMVF9GT1JNQVRTLCBleGVjdXRlUHJvbWlzZUNoYWluLCBleHRyYWN0VHlwZSwgaXNBbmRyb2lkLCBpc0FycmF5LCBpc0lvcywgbm9vcCwgdG9Qcm9taXNlLCB0cmFuc2Zvcm1GaWxlVVJJIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRmlsZVNlcnZpY2UsIERldmljZVNlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAd20vdmFyaWFibGVzJztcblxuaW1wb3J0IHsgTG9jYWxLZXlWYWx1ZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWtleS12YWx1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsREJTdG9yZSB9IGZyb20gJy4uL21vZGVscy9sb2NhbC1kYi1zdG9yZSc7XG5pbXBvcnQgeyBlc2NhcGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbywgREJJbmZvLCBFbnRpdHlJbmZvLCBOYW1lZFF1ZXJ5SW5mbywgUHVsbFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvY29uZmlnJztcblxuZGVjbGFyZSBjb25zdCBfO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5kZWNsYXJlIGNvbnN0IFplZXA7XG5cbmNvbnN0ICBORVhUX0lEX0NPVU5UID0gJ2xvY2FsREJTdG9yZS5uZXh0SWRDb3VudCc7XG5jb25zdCBNRVRBX0xPQ0FUSU9OID0gJ3d3dy9tZXRhZGF0YS9hcHAnO1xuY29uc3QgT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BID0ge1xuICAgIG5hbWU6ICd3YXZlbWFrZXInLFxuICAgIHZlcnNpb246IDEsXG4gICAgaXNJbnRlcm5hbDogdHJ1ZSxcbiAgICB0YWJsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2tleV92YWx1ZScsXG4gICAgICAgICAgICBlbnRpdHlOYW1lOiAna2V5LXZhbHVlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IFt7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZSA6ICdkYXRhYmFzZUlkZW50aXR5JyxcbiAgICAgICAgICAgICAgICBzcWxUeXBlIDogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogdHJ1ZVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ29mZmxpbmVDaGFuZ2VMb2cnLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogJ29mZmxpbmVDaGFuZ2VMb2cnLFxuICAgICAgICAgICAgY29sdW1uczogW3tcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JUeXBlOiAnZGF0YWJhc2VJZGVudGl0eScsXG4gICAgICAgICAgICAgICAgc3FsVHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogdHJ1ZVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdzZXJ2aWNlJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdvcGVyYXRpb24nLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ29wZXJhdGlvbidcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdwYXJhbXMnXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RpbWVzdGFtcCcsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAndGltZXN0YW1wJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNFcnJvcicsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaGFzRXJyb3InXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Vycm9yTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnZXJyb3JNZXNzYWdlJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgIF1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEJhY2sge1xuICAgIG9uRGJDcmVhdGU/OiAoaW5mbzogYW55KSA9PiBhbnk7XG4gICAgcG9zdEltcG9ydD86IChpbXBvcnRGb2xkZXJQYXRoOiBzdHJpbmcsIG1ldGFJbmZvOiBhbnkpID0+IGFueTtcbiAgICBwcmVFeHBvcnQ/OiAoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aDogc3RyaW5nLCBtZXRhSW5mbzogYW55KSA9PiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIExvY2FsREJNYW5hZ2VtZW50U2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IFNFUlZJQ0VfTkFNRSA9ICdMb2NhbERCTWFuYWdlbWVudFNlcnZpY2UnO1xuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBDYWxsQmFja1tdID0gW107XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGRiSW5zdGFsbERpcmVjdG9yeU5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIGRiSW5zdGFsbFBhcmVudERpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF0YWJhc2VzOiBNYXA8c3RyaW5nLCBEQkluZm8+O1xuICAgIHByaXZhdGUgX2xvZ1NxbCA9IGZhbHNlO1xuICAgIHB1YmxpYyBuZXh0SWQgPSAxMDAwMDAwMDAwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1Qcm9wZXJ0aWVzID0ge1xuICAgICAgICAnVVNFUl9JRCcgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVVNFUl9JRCcsXG4gICAgICAgICAgICAndmFsdWUnIDogKCkgPT4gdGhpcy5zZWN1cml0eVNlcnZpY2UuZ2V0TG9nZ2VkSW5Vc2VyKCkudGhlbiggdXNlckluZm8gPT4gdXNlckluZm8udXNlcklkKVxuICAgICAgICB9LFxuICAgICAgICAnVVNFUl9OQU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdVU0VSX05BTUUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldExvZ2dlZEluVXNlcigpLnRoZW4oIHVzZXJJbmZvID0+IHVzZXJJbmZvLnVzZXJOYW1lKVxuICAgICAgICB9LFxuICAgICAgICAnREFURV9USU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdEQVRFX1RJTUUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERFRoaDptbTpzcycpXG4gICAgICAgIH0sXG4gICAgICAgICdEQVRFJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdDVVJSRU5UX0RBVEUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgIH0sXG4gICAgICAgICdUSU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdUSU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ2hoOm1tOnNzJylcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBWZXJzaW9uOiBBcHBWZXJzaW9uLFxuICAgICAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGV2aWNlRmlsZVNlcnZpY2U6IERldmljZUZpbGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGU6IEZpbGUsXG4gICAgICAgIHByaXZhdGUgbG9jYWxLZXlWYWx1ZVNlcnZpY2U6IExvY2FsS2V5VmFsdWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNxbGl0ZTogU1FMaXRlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIGFsbCBkYXRhYmFzZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UuXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBCZWZvcmUgY2xvc2luZyBkYXRhYmFzZXMsIGdpdmUgc29tZSB0aW1lIGZvciB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbnMgKGlmIGFueSkuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVByb21pc2VzID0gXy5tYXAoXy52YWx1ZXModGhpcy5kYXRhYmFzZXMpLCBkYiA9PiBkYi5zcWxpdGVPYmplY3QuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcykudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0SWRDb3VudCgpIHtcbiAgICAgICAgdGhpcy5uZXh0SWQgPSB0aGlzLm5leHRJZCArIDE7XG4gICAgICAgIHRoaXMubG9jYWxLZXlWYWx1ZVNlcnZpY2UucHV0KE5FWFRfSURfQ09VTlQsIHRoaXMubmV4dElkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgbmFtZWQgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGJOYW1lIG5hbWUgb2YgZGF0YWJhc2Ugb24gd2hpY2ggdGhlIG5hbWVkIHF1ZXJ5IGhhcyB0byBiZSBydW5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlOYW1lIG5hbWUgb2YgdGhlIHF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgcHJvbWlzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZU5hbWVkUXVlcnkoZGJOYW1lOiBzdHJpbmcsIHF1ZXJ5TmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgICAgICBsZXQgcXVlcnlEYXRhLCBwYXJhbVByb21pc2VzO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2VzW2RiTmFtZV0gfHwgIXRoaXMuZGF0YWJhc2VzW2RiTmFtZV0ucXVlcmllc1txdWVyeU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYFF1ZXJ5IGJ5IG5hbWUgJyAke3F1ZXJ5TmFtZX0gJyBOb3QgRm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeURhdGEgPSB0aGlzLmRhdGFiYXNlc1tkYk5hbWVdLnF1ZXJpZXNbcXVlcnlOYW1lXTtcbiAgICAgICAgcGFyYW1Qcm9taXNlcyA9IF8uY2hhaW4ocXVlcnlEYXRhLnBhcmFtcylcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiBwLnZhcmlhYmxlVHlwZSAhPT0gJ1BST01QVCcpXG4gICAgICAgICAgICAuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5zeXN0ZW1Qcm9wZXJ0aWVzW3AudmFyaWFibGVUeXBlXS52YWx1ZShwLm5hbWUsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvUHJvbWlzZShwYXJhbVZhbHVlKS50aGVuKHYgPT4gcGFyYW1zW3AubmFtZV0gPSB2KTtcbiAgICAgICAgICAgIH0pLnZhbHVlKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwYXJhbVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IF8ubWFwKHF1ZXJ5RGF0YS5wYXJhbXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNxbGl0ZSB3aWxsIGFjY2VwdCBEYXRlVGltZSB2YWx1ZSBhcyBiZWxvdyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbcC5uYW1lXSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgJiYgKHAudHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcC50eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJhbXNbcC5uYW1lXSwgcC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3FsaXRlIGFjY2VwdHMgdGhlIGJvb2wgdmFsIGFzIDEsMCBoZW5jZSBjb252ZXJ0IHRoZSBib29sZWFuIHZhbHVlIHRvIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEJvb2xUb0ludChwYXJhbXNbcC5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXNbcC5uYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgcXVlcnlEYXRhLnF1ZXJ5LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkocmVzdWx0LnJvd3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJvdyA9IHJlc3VsdC5yb3dzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybSA9IF8uZmluZChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiAhZmlyc3RSb3cuaGFzT3duUHJvcGVydHkocC5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChuZWVkVHJhbnNmb3JtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3dzID0gXy5tYXAocmVzdWx0LnJvd3MsIHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93ID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dXaXRoVXBwZXJLZXlzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzZWFyY2ggZm9yIGRhdGEgYXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmZvckVhY2gocm93LCAodiwgaykgPT4gcm93V2l0aFVwcGVyS2V5c1trLnRvVXBwZXJDYXNlKCldID0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgdHlwZVJlZiBzcGVjaWZpZWQgaW4gcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gZXh0cmFjdFR5cGUocC5maWVsZFR5cGUudHlwZVJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IERFRkFVTFRfRk9STUFUU1tfLnRvVXBwZXIocHJvcFR5cGUpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWwgJiYgdHlwZW9mIGZpZWxkVmFsICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcm9wVHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcHJvcFR5cGUgPT09IERhdGFUeXBlLkxPQ0FMREFURVRJTUUgfHwgcHJvcFR5cGUgPT09IERhdGFUeXBlLkRBVEUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vbWVudChmaWVsZFZhbCkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gZm9ybWF0RGF0ZShmaWVsZFZhbCwgcHJvcFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9tZW50KGZpZWxkVmFsLCAnSEg6bW0nKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGluIEhIOm1tOnNzIGZvcm1hdCwgaXQgcmV0dXJucyBhIHdyb25nIGRhdGUuIFNvIGFwcGVuZCB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgdG8gZ2V0IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3AubmFtZV0gPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICdUJyArIGZpZWxkVmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wVHlwZSA9PT0gRGF0YVR5cGUuQk9PTEVBTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gdGhpcy5jb252ZXJ0SW50VG9Cb29sKGZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1dpdGhVcHBlcktleXNbcC5uYW1lSW5VcHBlckNhc2VdID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1twLm5hbWVdID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1twLmZpZWxkTmFtZV0gPSByb3dbcC5maWVsZE5hbWVdIHx8IHJvd1dpdGhVcHBlcktleXNbcC5uYW1lSW5VcHBlckNhc2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBleHBvcnQgdGhlIGRhdGFiYXNlcyBpbiBhIHppcCBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHppcCBpcyBjcmVhdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnREQigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZXJUb0V4cG9ydCA9ICdvZmZsaW5lX3RlbXBfJyArIF8ubm93KCksXG4gICAgICAgICAgICAgICAgZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCA9IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSArIGZvbGRlclRvRXhwb3J0ICsgJy8nLFxuICAgICAgICAgICAgICAgIHppcEZpbGVOYW1lID0gJ19vZmZsaW5lX2RhdGEuemlwJyxcbiAgICAgICAgICAgICAgICBtZXRhSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBPUzogJycsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRPbjogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgemlwRGlyZWN0b3J5O1xuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBJT1MsIHNhdmUgemlwIHRvIGRvY3VtZW50cyBkaXJlY3Rvcnkgc28gdGhhdCB1c2VyIGNhbiBleHBvcnQgdGhlIGZpbGUgZnJvbSBJT1MgZGV2aWNlcyB1c2luZyBpVFVORVMuXG4gICAgICAgICAgICAgICAgemlwRGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmRvY3VtZW50c0RpcmVjdG9yeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gQW5kcm9pZCwgc2F2ZSB6aXAgdG8gZG93bmxvYWQgZGlyZWN0b3J5LlxuICAgICAgICAgICAgICAgIHppcERpcmVjdG9yeSA9IGNvcmRvdmEuZmlsZS5leHRlcm5hbFJvb3REaXJlY3RvcnkgKyAnRG93bmxvYWQvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmb2xkZXIgdG8gY29weSBhbGwgdGhlIGNvbnRlbnQgdG8gZXhwb3J0XG4gICAgICAgICAgICB0aGlzLmZpbGUuY3JlYXRlRGlyKGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSwgZm9sZGVyVG9FeHBvcnQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBkYXRhYmFzZXMgdG8gdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY29weURpcih0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSwgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lLCBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLCAnZGF0YWJhc2VzJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIG1ldGEgaW5mbyB0byBpZGVudGlmeSB0aGUgemlwIGFuZCBvdGhlciBpbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihhcHBJbmZvID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5hcHAgPSAoYXBwSW5mbyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLk9TID0gJ0lPUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FuZHJvaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5PUyA9ICdBTkRST0lEJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUluZm8uY3JlYXRlZE9uID0gXy5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0YUluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4odGhpcy5nZXRDYWxsYmFja3NGb3IoJ3ByZUV4cG9ydCcpLCBbZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgbWV0YUluZm9dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBtZXRhIGRhdGEgdG8gTUVUQS5qc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS53cml0ZUZpbGUoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgJ01FVEEuanNvbicsIEpTT04uc3RyaW5naWZ5KG1ldGFJbmZvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcC5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwcE5hbWUgPSBtZXRhSW5mby5hcHAubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSA9IGFwcE5hbWUucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5uZXdGaWxlTmFtZSh6aXBEaXJlY3RvcnksIGFwcE5hbWUgKyB6aXBGaWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZpbGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaaXAgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZm9yIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplZXAuemlwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gOiBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gICA6IHppcERpcmVjdG9yeSArIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHJzKHppcERpcmVjdG9yeSArIGZpbGVOYW1lKSwgcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBmb2xkZXJUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICByZXR1cm5zIHN0b3JlIGJvdW5kIHRvIHRoZSBkYXRhTW9kZWxOYW1lIGFuZCBlbnRpdHlOYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdG9yZShkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8TG9jYWxEQlN0b3JlPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXNbZGF0YU1vZGVsTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZGF0YWJhc2VzW2RhdGFNb2RlbE5hbWVdLnN0b3Jlc1tlbnRpdHlOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoYHN0b3JlIHdpdGggbmFtZScke2VudGl0eU5hbWV9JyBpbiBkYXRhbW9kZWwgJyR7ZGF0YU1vZGVsTmFtZX0nIGlzIG5vdCBmb3VuZGApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVwbGFjZSB0aGUgZGF0YWJhc2VzIHdpdGggdGhlIGZpbGVzIHByb3ZpZGVkIGluIHppcC4gSWYgaW1wb3J0IGdldHMgZmFpbGVkLFxuICAgICAqIHRoZW4gYXBwIHJldmVydHMgYmFjayB0byB1c2Ugb2xkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6aXBQYXRoIGxvY2F0aW9uIG9mIHRoZSB6aXAgZmlsZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldmVydElmRmFpbHMgSWYgdHJ1ZSwgdGhlbiBhIGJhY2t1cCBpcyBjcmVhdGVkIGFuZCB3aGVuIGltcG9ydCBmYWlscywgYmFja3VwIGlzIHJldmVydGVkIGJhY2suXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW1wb3J0REIoemlwUGF0aDogc3RyaW5nLCByZXZlcnRJZkZhaWxzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRGb2xkZXIgPSAnb2ZmbGluZV90ZW1wXycgKyBfLm5vdygpLFxuICAgICAgICAgICAgICAgIGltcG9ydEZvbGRlckZ1bGxQYXRoID0gY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgaW1wb3J0Rm9sZGVyICsgJy8nO1xuICAgICAgICAgICAgbGV0IHppcE1ldGE7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZm9sZGVyIHRvIHVuemlwIHRoZSBjb250ZW50cyBvZiB0aGUgemlwLlxuICAgICAgICAgICAgdGhpcy5maWxlLmNyZWF0ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnksIGltcG9ydEZvbGRlciwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChycywgcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuemlwIHRvIHRlbXBvcmFyeSBsb2NhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgWmVlcC51bnppcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogemlwUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogaW1wb3J0Rm9sZGVyRnVsbFBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJzLCByZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogcmVhZCBtZXRhIGRhdGEgYW5kIGFsbG93IGltcG9ydCBvbmx5IHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIGZyb20gd2hpY2ggdGhpcyB6aXAgaXMgY3JlYXRlZFxuICAgICAgICAgICAgICAgICAqIGFuZCB0aGUgcGFja2FnZSBuYW1lIG9mIHRoaXMgYXBwIGFyZSBzYW1lLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUucmVhZEFzVGV4dChpbXBvcnRGb2xkZXJGdWxsUGF0aCwgJ01FVEEuanNvbicpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB6aXBNZXRhID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYXBwSW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghemlwTWV0YS5hcHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnbWV0YSBpbmZvcm1hdGlvbiBpcyBub3QgZm91bmQgaW4gemlwJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHppcE1ldGEuYXBwLnBhY2thZ2VOYW1lICE9PSBhcHBJbmZvLnBhY2thZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ2RhdGFiYXNlIHppcCBvZiBhcHAgd2l0aCBzYW1lIHBhY2thZ2UgbmFtZSBjYW4gb25seSBiZSBpbXBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYmFja3VwWmlwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVydElmRmFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmFja3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0REIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihwYXRoID0+IGJhY2t1cFppcCA9IHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBleGlzdGluZyBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcih0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSBpbXBvcnRlZCBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY29weURpcihpbXBvcnRGb2xkZXJGdWxsUGF0aCwgJ2RhdGFiYXNlcycsIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbG9hZCBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhYmFzZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiBleGVjdXRlUHJvbWlzZUNoYWluKHRoaXMuZ2V0Q2FsbGJhY2tzRm9yKCdwb3N0SW1wb3J0JyksIFtpbXBvcnRGb2xkZXJGdWxsUGF0aCwgemlwTWV0YV0pKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3VwWmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UucmVtb3ZlRmlsZShiYWNrdXBaaXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3VwWmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0REIoYmFja3VwWmlwLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVGaWxlKGJhY2t1cFppcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKHJlc29sdmUsIHJlamVjdClcbiAgICAgICAgICAgIC5jYXRjaChub29wKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBpbXBvcnRGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhTW9kZWxOYW1lIE5hbWUgb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBlbnRpdHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIE5hbWUgb2YgdGhlIG9wZXJhdGlvbiAoUkVBRCwgSU5TRVJULCBVUERBVEUsIERFTEVURSlcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlLCBpZiB0aGUgZ2l2ZW4gb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYXMgcGVyIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGlzT3BlcmF0aW9uQWxsb3dlZChkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbiggc3RvcmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdSRUFEJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy5yZWFkRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdJTlNFUlQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmVudGl0eVNjaGVtYS5wdXNoQ29uZmlnLmluc2VydEVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnVVBEQVRFJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy51cGRhdGVFbmFibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ0RFTEVURScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcuZGVsZXRlRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZERhdGFiYXNlcygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBsZXQgbmV3RGF0YWJhc2VzQ3JlYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kYXRhYmFzZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUgPSAnTG9jYWxEYXRhYmFzZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kYkluc3RhbGxQYXJlbnREaXJlY3RvcnkgPSBjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25TdG9yYWdlRGlyZWN0b3J5ICsgICdMaWJyYXJ5Lyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5TmFtZSA9ICdkYXRhYmFzZXMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uU3RvcmFnZURpcmVjdG9yeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5ID0gdGhpcy5kYkluc3RhbGxQYXJlbnREaXJlY3RvcnkgKyB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWU7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VzID0gbmV3IE1hcDxzdHJpbmcsIERCSW5mbz4oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFVwRGF0YWJhc2VzKClcbiAgICAgICAgICAgICAgICAudGhlbiggZmxhZyA9PiBuZXdEYXRhYmFzZXNDcmVhdGVkID0gZmxhZylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvYWREQlNjaGVtYXMoKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB0aGlzLmxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHRoaXMubG9hZE9mZmxpbmVDb25maWcobWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF8ubWFwKG1ldGFkYXRhLCBkYk1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5EYXRhYmFzZShkYk1ldGFkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGRhdGFiYXNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZXNbZGJNZXRhZGF0YS5zY2hlbWEubmFtZV0gPSBkYXRhYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZSgnd2F2ZW1ha2VyJywgJ2tleS12YWx1ZScpLnRoZW4oIHN0b3JlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxLZXlWYWx1ZVNlcnZpY2UuaW5pdChzdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbEtleVZhbHVlU2VydmljZS5nZXQoTkVYVF9JRF9DT1VOVCkudGhlbih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0SWQgPSB2YWwgfHwgdGhpcy5uZXh0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdEYXRhYmFzZXNDcmVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVEYXRhKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRpc2FibGVGb3JlaWduS2V5cygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZGV2aWNlU2VydmljZS5nZXRBcHBCdWlsZFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihkYlNlZWRDcmVhdGlvblRpbWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0ZVByb21pc2VDaGFpbihfLm1hcCh0aGlzLmNhbGxiYWNrcywgJ29uRGJDcmVhdGUnKSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhYmFzZXMnIDogdGhpcy5kYXRhYmFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJDcmVhdGVkT24nIDogXy5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYlNlZWRDcmVhdGVkT24nIDogZGJTZWVkQ3JlYXRpb25UaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXNpbmcgdGhpcyBmdW5jdGlvbiBvbmUgY2FuIGxpc3RlbiBldmVudHMgc3VjaCBhcyBvbkRiQ3JlYXRlLCAncHJlRXhwb3J0JyBhbmQgJ3Bvc3RJbXBvcnQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGxpc3RlbmVyIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9ucyBtYXBwZWQgdG8gZXZlbnQgbmFtZXMuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyQ2FsbGJhY2sobGlzdGVuZXI6IENhbGxCYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2dTUWwoZmxhZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2dTcWwgPSBmbGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYW55IGV4aXN0aW5nIGRhdGFiYXNlcyAoZXhjZXB0IHdhdmVtYWtlciBkYikgYW5kIGNvcGllcyB0aGUgZGF0YWJhc2VzIHRoYXQgYXJlIHBhY2thZ2VkIHdpdGggdGhlIGFwcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYW5BbmRDb3B5RGF0YWJhc2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRiU2VlZEZvbGRlciA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArIE1FVEFfTE9DQVRJT047XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyh0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgLy4rXFwuZGIkLykpXG4gICAgICAgICAgICAudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZpbGVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmWyduYW1lJ10gIT09ICd3YXZlbWFrZXIuZGInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5yZW1vdmVGaWxlKHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5LCBmWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyhkYlNlZWRGb2xkZXIsIC8uK1xcLmRiJC8pKVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBQcm9taXNlLmFsbChmaWxlcy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPT4gdGhpcy5maWxlLmNvcHlGaWxlKGRiU2VlZEZvbGRlciwgZlsnbmFtZSddLCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgZlsnbmFtZSddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpY2tzIGVzc2VudGlhbCBkZXRhaWxzIGZyb20gdGhlIGdpdmVuIHNjaGVtYS5cbiAgICBwcml2YXRlIGNvbXBhY3RFbnRpdHlTY2hlbWEoc2NoZW1hLCBlbnRpdHksIHRyYW5zZm9ybWVkU2NoZW1hcyk6IEVudGl0eUluZm8ge1xuICAgICAgICBjb25zdCByZXFFbnRpdHkgPSB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5WydlbnRpdHlOYW1lJ11dIGFzIEVudGl0eUluZm87XG4gICAgICAgIHJlcUVudGl0eS5lbnRpdHlOYW1lID0gZW50aXR5WydlbnRpdHlOYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5uYW1lID0gZW50aXR5WyduYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5jb2x1bW5zID0gW107XG4gICAgICAgIGVudGl0eS5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBjb2wuY29sdW1uVmFsdWUgPyBjb2wuY29sdW1uVmFsdWUuZGVmYXVsdFZhbHVlIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gY29sLnNxbFR5cGU7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIWNvbC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gXy5pc0VtcHR5KGRlZmF1bHRWYWx1ZSkgPyBudWxsIDogXy5wYXJzZUludChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfLmlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiAoZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgPyAxIDogMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF8uaXNFbXB0eShkZWZhdWx0VmFsdWUpID8gbnVsbCA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcUVudGl0eS5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvbFsnbmFtZSddLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogY29sWydmaWVsZE5hbWUnXSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JUeXBlOiBjb2xbJ2dlbmVyYXRvclR5cGUnXSxcbiAgICAgICAgICAgICAgICBzcWxUeXBlOiBjb2xbJ3NxbFR5cGUnXSxcbiAgICAgICAgICAgICAgICBwcmltYXJ5S2V5OiBjb2xbJ3ByaW1hcnlLZXknXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF8uZm9yRWFjaChlbnRpdHkucmVsYXRpb25zLCByID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXRFbnRpdHlTY2hlbWEsIHRhcmdldEVudGl0eSwgY29sLCBzb3VyY2VDb2x1bW4sIG1hcHBpbmc7XG4gICAgICAgICAgICBpZiAoci5jYXJkaW5hbGl0eSA9PT0gJ01hbnlUb09uZScgfHwgci5jYXJkaW5hbGl0eSA9PT0gJ09uZVRvT25lJykge1xuICAgICAgICAgICAgICAgIHRhcmdldEVudGl0eSA9IF8uZmluZChzY2hlbWEudGFibGVzLCB0ID0+IHQubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgbWFwcGluZyA9IHIubWFwcGluZ3NbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHkgPSB0YXJnZXRFbnRpdHkuZW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ29sdW1uID0gbWFwcGluZy5zb3VyY2VDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IHJlcUVudGl0eS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBzb3VyY2VDb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHlTY2hlbWEgPSBzY2hlbWEudGFibGVzLmZpbmQodGFibGUgPT4gdGFibGUubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25SZWxhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkTmFtZTogci5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHk6IHRhcmdldEVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxlOiByLnRhcmdldFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uOiBtYXBwaW5nLnRhcmdldENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcHBlcjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWU6IHRhcmdldEVudGl0eVNjaGVtYS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBtYXBwaW5nLnRhcmdldENvbHVtbikuZmllbGROYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRQYXRoID0gZm9yZWlnblJlbGF0aW9uLnNvdXJjZUZpZWxkTmFtZSArICcuJyArIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRGaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi5kYXRhTWFwcGVyID0gXy5jaGFpbih0YXJnZXRFbnRpdHlTY2hlbWEuY29sdW1ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5rZXlCeShjaGlsZENvbCA9PiBmb3JlaWduUmVsYXRpb24uc291cmNlRmllbGROYW1lICsgJy4nICsgY2hpbGRDb2wuZmllbGROYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFZhbHVlcyhjaGlsZENvbCA9PiBuZXcgQ29sdW1uSW5mbyhjaGlsZENvbC5uYW1lLCBjaGlsZENvbC5maWVsZE5hbWUpKS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucyA9IGNvbC5mb3JlaWduUmVsYXRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucy5wdXNoKGZvcmVpZ25SZWxhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcUVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBuZWNlc3NhcnkgZGV0YWlscyBvZiBxdWVyaWVzXG4gICAgcHJpdmF0ZSBjb21wYWN0UXVlcmllcyhxdWVyaWVzQnlEQik6IE1hcDxzdHJpbmcsIE5hbWVkUXVlcnlJbmZvPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBuZXcgTWFwPHN0cmluZywgTmFtZWRRdWVyeUluZm8+KCk7XG5cbiAgICAgICAgXy5mb3JFYWNoKHF1ZXJpZXNCeURCLnF1ZXJpZXMsIHF1ZXJ5RGF0YSA9PiB7XG4gICAgICAgICAgICBsZXQgcXVlcnksIHBhcmFtcztcbiAgICAgICAgICAgIGlmIChxdWVyeURhdGEubmF0aXZlU3FsICYmIHF1ZXJ5RGF0YS50eXBlID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXy5pc0VtcHR5KHF1ZXJ5RGF0YS5vZmZsaW5lUXVlcnlTdHJpbmcpID8gcXVlcnlEYXRhLnF1ZXJ5U3RyaW5nIDogcXVlcnlEYXRhLm9mZmxpbmVRdWVyeVN0cmluZztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBfLm1hcCh0aGlzLmV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSksIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbU9iaiA9IF8uZmluZChxdWVyeURhdGEucGFyYW1ldGVycywgeyduYW1lJzogcH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyYW1PYmoubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBhcmFtT2JqLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVR5cGU6IHBhcmFtT2JqLnZhcmlhYmxlVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mb3JFYWNoKHAgPT4gcXVlcnkgPSBfLnJlcGxhY2UocXVlcnksICc6JyArIHAubmFtZSwgJz8nKSk7XG4gICAgICAgICAgICAgICAgcXVlcmllc1txdWVyeURhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHF1ZXJ5RGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogXy5tYXAocXVlcnlEYXRhLnJlc3BvbnNlLnByb3BlcnRpZXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAubmFtZUluVXBwZXJDYXNlID0gcC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBxdWVyaWVzO1xuICAgIH1cblxuICAgIC8vIExvYWRzIG5lY2Vzc2FyeSBkZXRhaWxzIG9mIHJlbW90ZSBzY2hlbWFcbiAgICBwcml2YXRlIGNvbXBhY3RTY2hlbWEoc2NoZW1hKTogREJJbmZvIHtcbiAgICAgICAgY29uc3QgZGJJbmZvID0gbmV3IERCSW5mbygpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5SW5mbz4oKTtcbiAgICAgICAgc2NoZW1hLnRhYmxlcy5mb3JFYWNoKGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5U2NoZW1hLmVudGl0eU5hbWVdID0ge307XG4gICAgICAgIH0pO1xuICAgICAgICBzY2hlbWEudGFibGVzLmZvckVhY2goZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFjdEVudGl0eVNjaGVtYShzY2hlbWEsIGVudGl0eVNjaGVtYSwgdHJhbnNmb3JtZWRTY2hlbWFzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiSW5mby5zY2hlbWEubmFtZSA9IHNjaGVtYS5uYW1lO1xuICAgICAgICBkYkluZm8uc2NoZW1hLmlzSW50ZXJuYWwgPSBzY2hlbWEuaXNJbnRlcm5hbDtcbiAgICAgICAgZGJJbmZvLnNjaGVtYS5lbnRpdGllcyA9IHRyYW5zZm9ybWVkU2NoZW1hcztcbiAgICAgICAgcmV0dXJuIGRiSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRCb29sVG9JbnQoYm9vbDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gXy50b1N0cmluZyhib29sKSA9PT0gJ3RydWUnID8gMSA6IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0SW50VG9Cb29sKGludDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpbnQgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHVybnMgb2ZmIGZvcmVpZ24ga2V5c1xuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgZGlzYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXy5tYXAodGhpcy5kYXRhYmFzZXMsIGRiID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYi5zY2hlbWEubmFtZSwgJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPRkYnKVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBTUUwgcXVlcnk7XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGJOYW1lXG4gICAgICogQHBhcmFtIHNxbFxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgc3FsLCBwYXJhbXM/OiBhbnlbXSwgbG9nT3V0cHV0PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBkYiA9IHRoaXMuZGF0YWJhc2VzW2RiTmFtZV07XG4gICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgcmV0dXJuIGRiLnNxbGl0ZU9iamVjdC5leGVjdXRlU3FsKHNxbCwgcGFyYW1zLCBsb2dPdXRwdXQpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93cyA9IHJlc3VsdC5yb3dzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3dzLml0ZW0oaSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAncm93c0FmZmVjdGVkJyAgOiByZXN1bHQucm93c0FmZmVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Jvd3MnICAgICAgICAgIDogZGF0YVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgTm8gRGF0YWJhc2Ugd2l0aCBuYW1lICR7ZGJOYW1lfSBmb3VuZGApO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgcGFyYW1zIG9mIHRoZSBxdWVyeSBvciBwcm9jZWR1cmUuXG4gICAgcHJpdmF0ZSBleHRyYWN0UXVlcnlQYXJhbXMocXVlcnkpIHtcbiAgICAgICAgbGV0IHBhcmFtcywgYWxpYXNQYXJhbXM7XG4gICAgICAgIGFsaWFzUGFyYW1zID0gcXVlcnkubWF0Y2goL1teXCInXFx3XFxcXF06XFxzKlxcdytcXHMqL2cpIHx8IFtdO1xuICAgICAgICBpZiAoYWxpYXNQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBhbGlhc1BhcmFtcy5tYXAoeCA9PiAoL1s9fFxcV10vZy50ZXN0KHgpKSA/IHgucmVwbGFjZSgvXFxXL2csICcnKS50cmltKCkgOiB4LnRyaW0oKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGFwcGxpY2F0aW9uIGluZm8gc3VjaCBhcyBwYWNrYWdlTmFtZSwgYXBwTmFtZSwgdmVyc2lvbk51bWJlciwgdmVyc2lvbkNvZGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBcHBJbmZvKCkge1xuICAgICAgICBjb25zdCBhcHBJbmZvID0ge1xuICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogJycsXG4gICAgICAgICAgICB2ZXJzaW9uTnVtYmVyOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb25Db2RlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0UGFja2FnZU5hbWUoKVxuICAgICAgICAgICAgLnRoZW4ocGFja2FnZU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGFwcEluZm8ucGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldEFwcE5hbWUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oYXBwTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby5uYW1lID0gYXBwTmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldFZlcnNpb25OdW1iZXIoKTtcbiAgICAgICAgICAgIH0pLnRoZW4odmVyc2lvbk51bWJlciA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby52ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldFZlcnNpb25Db2RlKCk7XG4gICAgICAgICAgICB9KS50aGVuKHZlcnNpb25Db2RlID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLnZlcnNpb25Db2RlID0gKHZlcnNpb25Db2RlIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcEluZm87XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhbGxiYWNrc0ZvcihldmVudDogc3RyaW5nKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFja3MubWFwKGMgPT4ge1xuICAgICAgICAgICAgaWYgKGNbZXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNbZXZlbnRdLmJpbmQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgZm9yIHRoZSBmaWxlcyB3aXRoIGdpdmVuIHJlZ2V4IGluICd3d3cvbWV0YWRhdGEvYXBwJ2FuZCByZXR1cm5zIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIEpTT05cbiAgICAgKiBjb250ZW50IHByZXNlbnQgaW4gZWFjaCBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lUmVnZXggcmVnZXggcGF0dGVybiB0byBzZWFyY2ggZm9yIGZpbGVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGFuIGFycmF5XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNZXRhSW5mbyhmaWxlTmFtZVJlZ2V4OiBSZWdFeHApIHtcbiAgICAgICAgY29uc3QgZm9sZGVyID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5ICsgTUVUQV9MT0NBVElPTiArICcvJztcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UubGlzdEZpbGVzKGZvbGRlciwgZmlsZU5hbWVSZWdleClcbiAgICAgICAgICAgIC50aGVuKGZpbGVzID0+IFByb21pc2UuYWxsKF8ubWFwKGZpbGVzLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmRvdmEgRmlsZSByZWFkZXIgaGFzIGJ1ZmZlciBpc3N1ZXMgd2l0aCBsYXJnZSBmaWxlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvLCB1c2luZyBhamF4IHRvIHJldHJpZXZlIGxvY2FsIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICQuZ2V0SlNPTih0cmFuc2Zvcm1GaWxlVVJJKGZvbGRlcikgKyBmWyduYW1lJ10sIGRhdGEgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBlbnRpdHkncyBkYXRhIGlzIGJ1bmRsZWQgYWxvbmcgd2l0aCBhcHBsaWNhdGlvbiBpbnN0YWxsZXIuXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIG5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGlzQnVuZGxlZChkYXRhTW9kZWxOYW1lLCBlbnRpdHlOYW1lKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbihzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1bGxDb25maWcucHVsbFR5cGUgPT09IFB1bGxUeXBlLkJVTkRMRUQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGxvY2FsIGRhdGFiYXNlIHNjaGVtYXMgZnJvbSAqX2RhdGFfbW9kZWwuanNvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERCU2NoZW1hcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERCSW5mbz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX2RhdGFNb2RlbFxcLmpzb24kLylcbiAgICAgICAgICAgIC50aGVuKCAoc2NoZW1hczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWFwPHN0cmluZywgREJJbmZvPigpO1xuICAgICAgICAgICAgICAgIHNjaGVtYXMgPSBpc0FycmF5KHNjaGVtYXMpID8gc2NoZW1hcyA6IFtzY2hlbWFzXTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BKTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLm1hcChzID0+IHRoaXMuY29tcGFjdFNjaGVtYShzKSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2gocyA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbcy5zY2hlbWEubmFtZV0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIG5hbWVkIHF1ZXJpZXMgZnJvbSAqX3F1ZXJ5Lmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX3F1ZXJ5XFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oKHF1ZXJpZXNCeURCczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzID0gXy5pc0FycmF5KHF1ZXJpZXNCeURCcykgPyBxdWVyaWVzQnlEQnMgOiBbcXVlcmllc0J5REJzXTtcbiAgICAgICAgICAgICAgICBxdWVyaWVzQnlEQnMubWFwKGUgPT4gbWV0YWRhdGFbZS5uYW1lXS5xdWVyaWVzID0gdGhpcy5jb21wYWN0UXVlcmllcyhlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBvZmZsaW5lIGNvbmZpZ3VyYXRpb24gZnJvbSAqX29mZmxpbmUuanNvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyB7Kn0gQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCBtZXRhZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZE9mZmxpbmVDb25maWcobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX29mZmxpbmVcXC5qc29uJC8pXG4gICAgICAgICAgICAudGhlbihjb25maWdzID0+IHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2goY29uZmlncywgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXy5mb3JFYWNoKGNvbmZpZy5lbnRpdGllcywgZW50aXR5Q29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVNjaGVtYSA9IF8uZmluZChtZXRhZGF0YVtjb25maWcubmFtZV0uc2NoZW1hLmVudGl0aWVzLCBzY2hlbWEgPT4gc2NoZW1hLm5hbWUgPT09IGVudGl0eUNvbmZpZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uYXNzaWduSW4oZW50aXR5U2NoZW1hLCBlbnRpdHlDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ1NxbChzcWxpdGVPYmplY3Q6IFNRTGl0ZU9iamVjdCkge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBjb25zb2xlLFxuICAgICAgICAgICAgb3JpZ2luYWxFeGVjdXRlU3FsID0gc3FsaXRlT2JqZWN0LmV4ZWN1dGVTcWw7XG4gICAgICAgIHNxbGl0ZU9iamVjdC5leGVjdXRlU3FsID0gKHNxbCwgcGFyYW1zLCBsb2dPdXRwdXQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBfLm5vdygpO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXhlY3V0ZVNxbC5jYWxsKHNxbGl0ZU9iamVjdCwgc3FsLCBwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobG9nT3V0cHV0IHx8IHRoaXMuX2xvZ1NxbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpBcnIgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gcmVzdWx0LnJvd3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iakFyci5wdXNoKHJlc3VsdC5yb3dzLml0ZW0oaSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnU1FMIFwiJXNcIiAgd2l0aCBwYXJhbXMgJU8gdG9vayBbJWQgbXNdLiBBbmQgdGhlIHJlc3VsdCBpcyAlTycsIHNxbCwgcGFyYW1zLCBfLm5vdygpIC0gc3RhcnRUaW1lLCBvYmpBcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU1FMIFwiJXNcIiB3aXRoIHBhcmFtcyAlTyBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlICVzJywgc3FsLCBwYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIGRhdGEuIEluc3RlYWQgb2YgdXNpbmcgYm9vbGVhbiB2YWx1ZXMsIGRhdGEgd2lsbCBiZSBjaGFuZ2VkIHRvIDAgb3IgMS5cbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3RydWUnLCB0aGVuIDEgaXMgc2V0IGFzIHZhbHVlLiBJZiB2YWx1ZSBpcyBub3QgMSBub3IgbnVsbCwgdGhlbiBjb2x1bW4gdmFsdWUgaXMgc2V0IGFzIDAuXG4gICAgICogQHBhcmFtIGRiTmFtZVxuICAgICAqIEBwYXJhbSB0YWJsZU5hbWVcbiAgICAgKiBAcGFyYW0gY29sTmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhbkRhdGEoZGJOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpIHtcbiAgICAgICAgY29uc3QgdHJ1ZVRvMVF1ZXJ5ID0gYHVwZGF0ZSAke2VzY2FwZU5hbWUodGFibGVOYW1lKX0gc2V0ICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAxIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAndHJ1ZSdgLFxuICAgICAgICAgICAgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSA9IGB1cGRhdGUgJHtlc2NhcGVOYW1lKHRhYmxlTmFtZSl9IHNldCAke2VzY2FwZU5hbWUoY29sTmFtZSl9ID0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gaXMgbm90IG51bGwgYW5kICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gIT0gMWA7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYk5hbWUsIHRydWVUbzFRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGRhdGEgdG8gc3VwcG9ydCBTUUxpdGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRhKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXy5tYXAodGhpcy5kYXRhYmFzZXMsIGRhdGFiYXNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChfLm1hcChkYXRhYmFzZS5zY2hlbWEuZW50aXRpZXMsIGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF8ubWFwKGVudGl0eVNjaGVtYS5jb2x1bW5zLCBjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNxbFR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplQm9vbGVhbkRhdGEoZGF0YWJhc2Uuc2NoZW1hLm5hbWUsIGVudGl0eVNjaGVtYS5uYW1lLCBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EYXRhYmFzZShkYXRhYmFzZTogREJJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNxbGl0ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGFiYXNlLnNjaGVtYS5uYW1lICsgJy5kYicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdkZWZhdWx0J1xuICAgICAgICB9KS50aGVuKHNxbGl0ZU9iamVjdCA9PiB7XG4gICAgICAgICAgICBkYXRhYmFzZS5zcWxpdGVPYmplY3QgPSBzcWxpdGVPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmxvZ1NxbChzcWxpdGVPYmplY3QpO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVQcm9taXNlcyA9IF8ubWFwKGRhdGFiYXNlLnNjaGVtYS5lbnRpdGllcywgZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IG5ldyBMb2NhbERCU3RvcmUodGhpcy5kZXZpY2VGaWxlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5U2NoZW1hLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIHNxbGl0ZU9iamVjdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5jcmVhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHN0b3JlUHJvbWlzZXMpLnRoZW4oc3RvcmVzID0+IHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2goc3RvcmVzLCBzdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnN0b3Jlc1tzdG9yZS5lbnRpdHlTY2hlbWEuZW50aXR5TmFtZV0gPSBzdG9yZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBhcHAgaXMgb3BlbmVkIGZvciBmaXJzdCB0aW1lICBhZnRlciBhIGZyZXNoIGluc3RhbGwgb3IgdXBkYXRlLCB0aGVuIG9sZCBkYXRhYmFzZXMgYXJlIHJlbW92ZWQgYW5kXG4gICAgICogbmV3IGRhdGFiYXNlcyBhcmUgY3JlYXRlZCB1c2luZyBidW5kbGVkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRydWUsIGlmIHRoZSBkYXRhYmFzZXMgYXJlIG5ld2x5IGNyZWF0ZWQgb3IgcmVzb2x2ZWQgd2l0aCBmYWxzZVxuICAgICAqIGlmIGV4aXN0aW5nIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFVwRGF0YWJhc2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpXG4gICAgICAgICAgICAudGhlbigoYnVpbGRUaW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGJJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEVudHJ5KCdkYXRhYmFzZScpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmxhc3RCdWlsZFRpbWUgfHwgZGJJbmZvLmxhc3RCdWlsZFRpbWUgIT09IGJ1aWxkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbkFuZENvcHlEYXRhYmFzZXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSW5mby5sYXN0QnVpbGRUaW1lID0gYnVpbGRUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZVNlcnZpY2Uuc3RvcmVFbnRyeSgnZGF0YWJhc2UnLCBkYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
854
+ }], () => [{ type: i1.AppVersion }, { type: i2.DeviceService }, { type: i2.DeviceFileService }, { type: i3.File }, { type: i4.LocalKeyValueService }, { type: i5.SecurityService }, { type: i6.SQLite }], null); })();
855
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZGItbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9iaWxlL29mZmxpbmUvc3JjL3NlcnZpY2VzL2xvY2FsLWRiLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUNSLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFNBQVMsRUFDVCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUE4QixRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RixPQUFPLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsT0FBTyxFQUNQLFdBQVcsRUFDWCxHQUFHLEVBQ0gsR0FBRyxF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RkFDbEIsd0JBQXdCO2NBRHBDLFVBQVU7ZUFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcFZlcnNpb24gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvYXBwLXZlcnNpb24vbmd4JztcbmltcG9ydCB7IEZpbGUgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZmlsZS9uZ3gnO1xuaW1wb3J0IHsgU1FMaXRlLCBTUUxpdGVPYmplY3QgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvc3FsaXRlL25neCc7XG5cbmltcG9ydCB7XG4gICAgRGF0YVR5cGUsXG4gICAgREVGQVVMVF9GT1JNQVRTLFxuICAgIGV4ZWN1dGVQcm9taXNlQ2hhaW4sXG4gICAgZXh0cmFjdFR5cGUsXG4gICAgaXNBbmRyb2lkLFxuICAgIGlzSW9zLFxuICAgIG5vb3AsXG4gICAgdG9Qcm9taXNlLFxuICAgIHRyYW5zZm9ybUZpbGVVUklcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRmlsZVNlcnZpY2UsIERldmljZVNlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAd20vdmFyaWFibGVzJztcblxuaW1wb3J0IHsgTG9jYWxLZXlWYWx1ZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWtleS12YWx1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsREJTdG9yZSB9IGZyb20gJy4uL21vZGVscy9sb2NhbC1kYi1zdG9yZSc7XG5pbXBvcnQgeyBlc2NhcGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbywgREJJbmZvLCBFbnRpdHlJbmZvLCBOYW1lZFF1ZXJ5SW5mbywgUHVsbFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvY29uZmlnJztcbmltcG9ydCB7XG4gICAgY2hhaW4sXG4gICAgZmluZCxcbiAgICBmb3JFYWNoLFxuICAgIGlzRW1wdHksXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbWFwLFxuICAgIG5vdyxcbiAgICBwYXJzZUludCxcbiAgICByZXBsYWNlLFxuICAgIHRvVXBwZXIsXG4gICAgdG9TdHJpbmcsXG4gICAgdmFsdWVzLFxuICAgIGlzQXJyYXksIGFzc2lnbkluXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuZGVjbGFyZSBjb25zdCBaZWVwO1xuXG5jb25zdCAgTkVYVF9JRF9DT1VOVCA9ICdsb2NhbERCU3RvcmUubmV4dElkQ291bnQnO1xuY29uc3QgTUVUQV9MT0NBVElPTiA9ICd3d3cvbWV0YWRhdGEvYXBwJztcbmNvbnN0IE9GRkxJTkVfV0FWRU1BS0VSX0RBVEFCQVNFX1NDSEVNQSA9IHtcbiAgICBuYW1lOiAnd2F2ZW1ha2VyJyxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGlzSW50ZXJuYWw6IHRydWUsXG4gICAgdGFibGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdrZXlfdmFsdWUnLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogJ2tleS12YWx1ZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBbe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvclR5cGUgOiAnZGF0YWJhc2VJZGVudGl0eScsXG4gICAgICAgICAgICAgICAgc3FsVHlwZSA6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IHRydWVcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICd2YWx1ZSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdvZmZsaW5lQ2hhbmdlTG9nJyxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6ICdvZmZsaW5lQ2hhbmdlTG9nJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IFt7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZTogJ2RhdGFiYXNlSWRlbnRpdHknLFxuICAgICAgICAgICAgICAgIHNxbFR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IHRydWVcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2VydmljZScsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnc2VydmljZSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdvcGVyYXRpb24nXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAncGFyYW1zJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ3RpbWVzdGFtcCdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzRXJyb3InLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2hhc0Vycm9yJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlcnJvck1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2Vycm9yTWVzc2FnZSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICBdXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxCYWNrIHtcbiAgICBvbkRiQ3JlYXRlPzogKGluZm86IGFueSkgPT4gYW55O1xuICAgIHBvc3RJbXBvcnQ/OiAoaW1wb3J0Rm9sZGVyUGF0aDogc3RyaW5nLCBtZXRhSW5mbzogYW55KSA9PiBhbnk7XG4gICAgcHJlRXhwb3J0PzogKGZvbGRlclRvRXhwb3J0RnVsbFBhdGg6IHN0cmluZywgbWV0YUluZm86IGFueSkgPT4gYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBMb2NhbERCTWFuYWdlbWVudFNlcnZpY2Uge1xuICAgIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX05BTUUgPSAnTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlJztcbiAgICBwcml2YXRlIGNhbGxiYWNrczogQ2FsbEJhY2tbXSA9IFtdO1xuICAgIHByaXZhdGUgZGJJbnN0YWxsRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxEaXJlY3RvcnlOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxQYXJlbnREaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGRhdGFiYXNlczogTWFwPHN0cmluZywgREJJbmZvPjtcbiAgICBwcml2YXRlIF9sb2dTcWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgbmV4dElkID0gMTAwMDAwMDAwMDAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtUHJvcGVydGllcyA9IHtcbiAgICAgICAgJ1VTRVJfSUQnIDoge1xuICAgICAgICAgICAgJ25hbWUnIDogJ1VTRVJfSUQnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldExvZ2dlZEluVXNlcigpLnRoZW4oIHVzZXJJbmZvID0+IHVzZXJJbmZvLnVzZXJJZClcbiAgICAgICAgfSxcbiAgICAgICAgJ1VTRVJfTkFNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVVNFUl9OQU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiB0aGlzLnNlY3VyaXR5U2VydmljZS5nZXRMb2dnZWRJblVzZXIoKS50aGVuKCB1c2VySW5mbyA9PiB1c2VySW5mby51c2VyTmFtZSlcbiAgICAgICAgfSxcbiAgICAgICAgJ0RBVEVfVElNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnREFURV9USU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERUaGg6bW06c3MnKVxuICAgICAgICB9LFxuICAgICAgICAnREFURScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnQ1VSUkVOVF9EQVRFJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICB9LFxuICAgICAgICAnVElNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVElNRScsXG4gICAgICAgICAgICAndmFsdWUnIDogKCkgPT4gbW9tZW50KCkuZm9ybWF0KCdoaDptbTpzcycpXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXBwVmVyc2lvbjogQXBwVmVyc2lvbixcbiAgICAgICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRldmljZUZpbGVTZXJ2aWNlOiBEZXZpY2VGaWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgICAgICBwcml2YXRlIGxvY2FsS2V5VmFsdWVTZXJ2aWNlOiBMb2NhbEtleVZhbHVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcWxpdGU6IFNRTGl0ZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyBhbGwgZGF0YWJhc2VzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gQmVmb3JlIGNsb3NpbmcgZGF0YWJhc2VzLCBnaXZlIHNvbWUgdGltZSBmb3IgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb25zIChpZiBhbnkpLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBtYXAodmFsdWVzKHRoaXMuZGF0YWJhc2VzKSwgZGIgPT4gZGIuc3FsaXRlT2JqZWN0LmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dElkQ291bnQoKSB7XG4gICAgICAgIHRoaXMubmV4dElkID0gdGhpcy5uZXh0SWQgKyAxO1xuICAgICAgICB0aGlzLmxvY2FsS2V5VmFsdWVTZXJ2aWNlLnB1dChORVhUX0lEX0NPVU5ULCB0aGlzLm5leHRJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhIG5hbWVkIHF1ZXJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSBuYW1lIG9mIGRhdGFiYXNlIG9uIHdoaWNoIHRoZSBuYW1lZCBxdWVyeSBoYXMgdG8gYmUgcnVuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5TmFtZSBuYW1lIG9mIHRoZSBxdWVyeSB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UuXG4gICAgICovXG4gICAgcHVibGljIGV4ZWN1dGVOYW1lZFF1ZXJ5KGRiTmFtZTogc3RyaW5nLCBxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgbGV0IHF1ZXJ5RGF0YSwgcGFyYW1Qcm9taXNlcztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlc1tkYk5hbWVdIHx8ICF0aGlzLmRhdGFiYXNlc1tkYk5hbWVdLnF1ZXJpZXNbcXVlcnlOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBRdWVyeSBieSBuYW1lICcgJHtxdWVyeU5hbWV9ICcgTm90IEZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlEYXRhID0gdGhpcy5kYXRhYmFzZXNbZGJOYW1lXS5xdWVyaWVzW3F1ZXJ5TmFtZV07XG4gICAgICAgIHBhcmFtUHJvbWlzZXMgPSBjaGFpbihxdWVyeURhdGEucGFyYW1zKVxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHAudmFyaWFibGVUeXBlICE9PSAnUFJPTVBUJylcbiAgICAgICAgICAgIC5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSB0aGlzLnN5c3RlbVByb3BlcnRpZXNbcC52YXJpYWJsZVR5cGVdLnZhbHVlKHAubmFtZSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Qcm9taXNlKHBhcmFtVmFsdWUpLnRoZW4odiA9PiBwYXJhbXNbcC5uYW1lXSA9IHYpO1xuICAgICAgICAgICAgfSkudmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBhcmFtUHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcGFyYW1zID0gbWFwKHF1ZXJ5RGF0YS5wYXJhbXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNxbGl0ZSB3aWxsIGFjY2VwdCBEYXRlVGltZSB2YWx1ZSBhcyBiZWxvdyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbcC5uYW1lXSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgJiYgKHAudHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcC50eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJhbXNbcC5uYW1lXSwgcC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3FsaXRlIGFjY2VwdHMgdGhlIGJvb2wgdmFsIGFzIDEsMCBoZW5jZSBjb252ZXJ0IHRoZSBib29sZWFuIHZhbHVlIHRvIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEJvb2xUb0ludChwYXJhbXNbcC5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXNbcC5uYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgcXVlcnlEYXRhLnF1ZXJ5LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHJlc3VsdC5yb3dzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb3cgPSByZXN1bHQucm93c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUcmFuc2Zvcm0gPSBmaW5kKHF1ZXJ5RGF0YS5yZXNwb25zZS5wcm9wZXJ0aWVzLCBwID0+ICFmaXJzdFJvdy5oYXNPd25Qcm9wZXJ0eShwLmZpZWxkTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChuZWVkVHJhbnNmb3JtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3dzID0gbWFwKHJlc3VsdC5yb3dzLCByb3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJvdyA9IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93V2l0aFVwcGVyS2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc2VhcmNoIGZvciBkYXRhIGFzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChyb3csICh2LCBrKSA9PiByb3dXaXRoVXBwZXJLZXlzW2sudG9VcHBlckNhc2UoKV0gPSB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgdHlwZVJlZiBzcGVjaWZpZWQgaW4gcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gZXh0cmFjdFR5cGUocC5maWVsZFR5cGUudHlwZVJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IERFRkFVTFRfRk9STUFUU1t0b1VwcGVyKHByb3BUeXBlKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbCA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsICYmIHR5cGVvZiBmaWVsZFZhbCAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocHJvcFR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FIHx8IHByb3BUeXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FIHx8IHByb3BUeXBlID09PSBEYXRhVHlwZS5EQVRFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb21lbnQoZmllbGRWYWwpLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbcC5uYW1lXSA9IGZvcm1hdERhdGUoZmllbGRWYWwsIHByb3BUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vbWVudChmaWVsZFZhbCwgJ0hIOm1tJykuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBpbiBISDptbTpzcyBmb3JtYXQsIGl0IHJldHVybnMgYSB3cm9uZyBkYXRlLiBTbyBhcHBlbmQgdGhlIGRhdGUgdG8gdGhlIGdpdmVuIHZhbHVlIHRvIGdldCBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnVCcgKyBmaWVsZFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbcC5uYW1lXSA9IHRoaXMuY29udmVydEludFRvQm9vbChmaWVsZFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dXaXRoVXBwZXJLZXlzW3AubmFtZUluVXBwZXJDYXNlXSA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbcC5uYW1lXSA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbcC5maWVsZE5hbWVdID0gcm93W3AuZmllbGROYW1lXSB8fCByb3dXaXRoVXBwZXJLZXlzW3AubmFtZUluVXBwZXJDYXNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhwb3J0IHRoZSBkYXRhYmFzZXMgaW4gYSB6aXAgZm9ybWF0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0REIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyVG9FeHBvcnQgPSAnb2ZmbGluZV90ZW1wXycgKyBub3coKSxcbiAgICAgICAgICAgICAgICBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoID0gY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgZm9sZGVyVG9FeHBvcnQgKyAnLycsXG4gICAgICAgICAgICAgICAgemlwRmlsZU5hbWUgPSAnX29mZmxpbmVfZGF0YS56aXAnLFxuICAgICAgICAgICAgICAgIG1ldGFJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBhcHA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIE9TOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZE9uOiAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCB6aXBEaXJlY3Rvcnk7XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEluIElPUywgc2F2ZSB6aXAgdG8gZG9jdW1lbnRzIGRpcmVjdG9yeSBzbyB0aGF0IHVzZXIgY2FuIGV4cG9ydCB0aGUgZmlsZSBmcm9tIElPUyBkZXZpY2VzIHVzaW5nIGlUVU5FUy5cbiAgICAgICAgICAgICAgICB6aXBEaXJlY3RvcnkgPSBjb3Jkb3ZhLmZpbGUuZG9jdW1lbnRzRGlyZWN0b3J5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBBbmRyb2lkLCBzYXZlIHppcCB0byBkb3dubG9hZCBkaXJlY3RvcnkuXG4gICAgICAgICAgICAgICAgemlwRGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmV4dGVybmFsUm9vdERpcmVjdG9yeSArICdEb3dubG9hZC8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZvbGRlciB0byBjb3B5IGFsbCB0aGUgY29udGVudCB0byBleHBvcnRcbiAgICAgICAgICAgIHRoaXMuZmlsZS5jcmVhdGVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5LCBmb2xkZXJUb0V4cG9ydCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IGRhdGFiYXNlcyB0byB0ZW1wb3JhcnkgZm9sZGVyIGZvciBleHBvcnRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5jb3B5RGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZvbGRlclRvRXhwb3J0RnVsbFBhdGgsICdkYXRhYmFzZXMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBhcmUgbWV0YSBpbmZvIHRvIGlkZW50aWZ5IHRoZSB6aXAgYW5kIG90aGVyIGluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGFwcEluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLmFwcCA9IChhcHBJbmZvIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUluZm8uT1MgPSAnSU9TJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQW5kcm9pZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLk9TID0gJ0FORFJPSUQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5jcmVhdGVkT24gPSBub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0YUluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4odGhpcy5nZXRDYWxsYmFja3NGb3IoJ3ByZUV4cG9ydCcpLCBbZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgbWV0YUluZm9dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBtZXRhIGRhdGEgdG8gTUVUQS5qc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS53cml0ZUZpbGUoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgJ01FVEEuanNvbicsIEpTT04uc3RyaW5naWZ5KG1ldGFJbmZvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcC5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwcE5hbWUgPSBtZXRhSW5mby5hcHAubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSA9IGFwcE5hbWUucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5uZXdGaWxlTmFtZSh6aXBEaXJlY3RvcnksIGFwcE5hbWUgKyB6aXBGaWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZpbGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaaXAgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZm9yIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplZXAuemlwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gOiBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gICA6IHppcERpcmVjdG9yeSArIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHJzKHppcERpcmVjdG9yeSArIGZpbGVOYW1lKSwgcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBmb2xkZXJUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICByZXR1cm5zIHN0b3JlIGJvdW5kIHRvIHRoZSBkYXRhTW9kZWxOYW1lIGFuZCBlbnRpdHlOYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdG9yZShkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8TG9jYWxEQlN0b3JlPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXNbZGF0YU1vZGVsTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZGF0YWJhc2VzW2RhdGFNb2RlbE5hbWVdLnN0b3Jlc1tlbnRpdHlOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoYHN0b3JlIHdpdGggbmFtZScke2VudGl0eU5hbWV9JyBpbiBkYXRhbW9kZWwgJyR7ZGF0YU1vZGVsTmFtZX0nIGlzIG5vdCBmb3VuZGApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVwbGFjZSB0aGUgZGF0YWJhc2VzIHdpdGggdGhlIGZpbGVzIHByb3ZpZGVkIGluIHppcC4gSWYgaW1wb3J0IGdldHMgZmFpbGVkLFxuICAgICAqIHRoZW4gYXBwIHJldmVydHMgYmFjayB0byB1c2Ugb2xkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6aXBQYXRoIGxvY2F0aW9uIG9mIHRoZSB6aXAgZmlsZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldmVydElmRmFpbHMgSWYgdHJ1ZSwgdGhlbiBhIGJhY2t1cCBpcyBjcmVhdGVkIGFuZCB3aGVuIGltcG9ydCBmYWlscywgYmFja3VwIGlzIHJldmVydGVkIGJhY2suXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW1wb3J0REIoemlwUGF0aDogc3RyaW5nLCByZXZlcnRJZkZhaWxzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRGb2xkZXIgPSAnb2ZmbGluZV90ZW1wXycgKyBub3coKSxcbiAgICAgICAgICAgICAgICBpbXBvcnRGb2xkZXJGdWxsUGF0aCA9IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSArIGltcG9ydEZvbGRlciArICcvJztcbiAgICAgICAgICAgIGxldCB6aXBNZXRhO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZvbGRlciB0byB1bnppcCB0aGUgY29udGVudHMgb2YgdGhlIHppcC5cbiAgICAgICAgICAgIHRoaXMuZmlsZS5jcmVhdGVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5LCBpbXBvcnRGb2xkZXIsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnppcCB0byB0ZW1wb3JhcnkgbG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFplZXAudW56aXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHppcFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IGltcG9ydEZvbGRlckZ1bGxQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBycywgcmUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIHJlYWQgbWV0YSBkYXRhIGFuZCBhbGxvdyBpbXBvcnQgb25seSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcCBmcm9tIHdoaWNoIHRoaXMgemlwIGlzIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICAgKiBhbmQgdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGlzIGFwcCBhcmUgc2FtZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlLnJlYWRBc1RleHQoaW1wb3J0Rm9sZGVyRnVsbFBhdGgsICdNRVRBLmpzb24nKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih0ZXh0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgemlwTWV0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFwcEluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXppcE1ldGEuYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ21ldGEgaW5mb3JtYXRpb24gaXMgbm90IGZvdW5kIGluIHppcCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh6aXBNZXRhLmFwcC5wYWNrYWdlTmFtZSAhPT0gYXBwSW5mby5wYWNrYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdkYXRhYmFzZSB6aXAgb2YgYXBwIHdpdGggc2FtZSBwYWNrYWdlIG5hbWUgY2FuIG9ubHkgYmUgaW1wb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGJhY2t1cFppcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnRJZkZhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGJhY2t1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydERCKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocGF0aCA9PiBiYWNrdXBaaXAgPSBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgZXhpc3RpbmcgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVEaXIodGhpcy5kYkluc3RhbGxEaXJlY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcHkgaW1wb3J0ZWQgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlLmNvcHlEaXIoaW1wb3J0Rm9sZGVyRnVsbFBhdGgsICdkYXRhYmFzZXMnLCB0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSwgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWxvYWQgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YWJhc2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbih0aGlzLmdldENhbGxiYWNrc0ZvcigncG9zdEltcG9ydCcpLCBbaW1wb3J0Rm9sZGVyRnVsbFBhdGgsIHppcE1ldGFdKSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t1cFppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZUZpbGUoYmFja3VwWmlwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t1cFppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydERCKGJhY2t1cFppcCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UucmVtb3ZlRmlsZShiYWNrdXBaaXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAuY2F0Y2gobm9vcClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgaW1wb3J0Rm9sZGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YU1vZGVsTmFtZSBOYW1lIG9mIHRoZSBkYXRhIG1vZGVsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgZW50aXR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbiBOYW1lIG9mIHRoZSBvcGVyYXRpb24gKFJFQUQsIElOU0VSVCwgVVBEQVRFLCBERUxFVEUpXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGdpdmVuIG9wZXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGFzIHBlciBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc09wZXJhdGlvbkFsbG93ZWQoZGF0YU1vZGVsTmFtZTogc3RyaW5nLCBlbnRpdHlOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGRhdGFNb2RlbE5hbWUsIGVudGl0eU5hbWUpLnRoZW4oIHN0b3JlID0+IHtcbiAgICAgICAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnUkVBRCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcucmVhZEVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnSU5TRVJUJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy5pbnNlcnRFbmFibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ1VQREFURScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcudXBkYXRlRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmVudGl0eVNjaGVtYS5wdXNoQ29uZmlnLmRlbGV0ZUVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWREYXRhYmFzZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IG5ld0RhdGFiYXNlc0NyZWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YWJhc2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lID0gJ0xvY2FsRGF0YWJhc2UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uU3RvcmFnZURpcmVjdG9yeSArICAnTGlicmFyeS8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUgPSAnZGF0YWJhc2VzJztcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvblN0b3JhZ2VEaXJlY3Rvcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSA9IHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ICsgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBEQkluZm8+KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVcERhdGFiYXNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oIGZsYWcgPT4gbmV3RGF0YWJhc2VzQ3JlYXRlZCA9IGZsYWcpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkREJTY2hlbWFzKCkpXG4gICAgICAgICAgICAgICAgLnRoZW4obWV0YWRhdGEgPT4gdGhpcy5sb2FkTmFtZWRRdWVyaWVzKG1ldGFkYXRhKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB0aGlzLmxvYWRPZmZsaW5lQ29uZmlnKG1ldGFkYXRhKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXAobWV0YWRhdGEsIGRiTWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRhdGFiYXNlKGRiTWV0YWRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YWJhc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlc1tkYk1ldGFkYXRhLnNjaGVtYS5uYW1lXSA9IGRhdGFiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKCd3YXZlbWFrZXInLCAna2V5LXZhbHVlJykudGhlbiggc3RvcmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbEtleVZhbHVlU2VydmljZS5pbml0KHN0b3JlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsS2V5VmFsdWVTZXJ2aWNlLmdldChORVhUX0lEX0NPVU5UKS50aGVuKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRJZCA9IHZhbCB8fCB0aGlzLm5leHRJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0RhdGFiYXNlc0NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZURhdGEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZGlzYWJsZUZvcmVpZ25LZXlzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGRiU2VlZENyZWF0aW9uVGltZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRlUHJvbWlzZUNoYWluKG1hcCh0aGlzLmNhbGxiYWNrcywgJ29uRGJDcmVhdGUnKSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhYmFzZXMnIDogdGhpcy5kYXRhYmFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJDcmVhdGVkT24nOiBub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYlNlZWRDcmVhdGVkT24nIDogZGJTZWVkQ3JlYXRpb25UaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXNpbmcgdGhpcyBmdW5jdGlvbiBvbmUgY2FuIGxpc3RlbiBldmVudHMgc3VjaCBhcyBvbkRiQ3JlYXRlLCAncHJlRXhwb3J0JyBhbmQgJ3Bvc3RJbXBvcnQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGxpc3RlbmVyIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9ucyBtYXBwZWQgdG8gZXZlbnQgbmFtZXMuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyQ2FsbGJhY2sobGlzdGVuZXI6IENhbGxCYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2dTUWwoZmxhZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2dTcWwgPSBmbGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYW55IGV4aXN0aW5nIGRhdGFiYXNlcyAoZXhjZXB0IHdhdmVtYWtlciBkYikgYW5kIGNvcGllcyB0aGUgZGF0YWJhc2VzIHRoYXQgYXJlIHBhY2thZ2VkIHdpdGggdGhlIGFwcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYW5BbmRDb3B5RGF0YWJhc2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRiU2VlZEZvbGRlciA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArIE1FVEFfTE9DQVRJT047XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyh0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgLy4rXFwuZGIkLykpXG4gICAgICAgICAgICAudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZpbGVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmWyduYW1lJ10gIT09ICd3YXZlbWFrZXIuZGInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5yZW1vdmVGaWxlKHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5LCBmWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyhkYlNlZWRGb2xkZXIsIC8uK1xcLmRiJC8pKVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBQcm9taXNlLmFsbChmaWxlcy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPT4gdGhpcy5maWxlLmNvcHlGaWxlKGRiU2VlZEZvbGRlciwgZlsnbmFtZSddLCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgZlsnbmFtZSddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpY2tzIGVzc2VudGlhbCBkZXRhaWxzIGZyb20gdGhlIGdpdmVuIHNjaGVtYS5cbiAgICBwcml2YXRlIGNvbXBhY3RFbnRpdHlTY2hlbWEoc2NoZW1hLCBlbnRpdHksIHRyYW5zZm9ybWVkU2NoZW1hcyk6IEVudGl0eUluZm8ge1xuICAgICAgICBjb25zdCByZXFFbnRpdHkgPSB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5WydlbnRpdHlOYW1lJ11dIGFzIEVudGl0eUluZm87XG4gICAgICAgIHJlcUVudGl0eS5lbnRpdHlOYW1lID0gZW50aXR5WydlbnRpdHlOYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5uYW1lID0gZW50aXR5WyduYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5jb2x1bW5zID0gW107XG4gICAgICAgIGVudGl0eS5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBjb2wuY29sdW1uVmFsdWUgPyBjb2wuY29sdW1uVmFsdWUuZGVmYXVsdFZhbHVlIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gY29sLnNxbFR5cGU7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIWNvbC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gaXNFbXB0eShkZWZhdWx0VmFsdWUpID8gbnVsbCA6IHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiAoZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgPyAxIDogMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXFFbnRpdHkuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2xbJ25hbWUnXSxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGNvbFsnZmllbGROYW1lJ10sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZTogY29sWydnZW5lcmF0b3JUeXBlJ10sXG4gICAgICAgICAgICAgICAgc3FsVHlwZTogY29sWydzcWxUeXBlJ10sXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogY29sWydwcmltYXJ5S2V5J10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3JFYWNoKGVudGl0eS5yZWxhdGlvbnMsIHIgPT4ge1xuICAgICAgICAgICAgbGV0IHRhcmdldEVudGl0eVNjaGVtYSwgdGFyZ2V0RW50aXR5LCBjb2wsIHNvdXJjZUNvbHVtbiwgbWFwcGluZztcbiAgICAgICAgICAgIGlmIChyLmNhcmRpbmFsaXR5ID09PSAnTWFueVRvT25lJyB8fCByLmNhcmRpbmFsaXR5ID09PSAnT25lVG9PbmUnKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RW50aXR5ID0gZmluZChzY2hlbWEudGFibGVzLCB0ID0+IHQubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgbWFwcGluZyA9IHIubWFwcGluZ3NbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHkgPSB0YXJnZXRFbnRpdHkuZW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ29sdW1uID0gbWFwcGluZy5zb3VyY2VDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IHJlcUVudGl0eS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBzb3VyY2VDb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHlTY2hlbWEgPSBzY2hlbWEudGFibGVzLmZpbmQodGFibGUgPT4gdGFibGUubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25SZWxhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkTmFtZTogci5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHk6IHRhcmdldEVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxlOiByLnRhcmdldFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uOiBtYXBwaW5nLnRhcmdldENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcHBlcjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWU6IHRhcmdldEVudGl0eVNjaGVtYS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBtYXBwaW5nLnRhcmdldENvbHVtbikuZmllbGROYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRQYXRoID0gZm9yZWlnblJlbGF0aW9uLnNvdXJjZUZpZWxkTmFtZSArICcuJyArIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRGaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnblJlbGF0aW9uLmRhdGFNYXBwZXIgPSBjaGFpbih0YXJnZXRFbnRpdHlTY2hlbWEuY29sdW1ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5rZXlCeShjaGlsZENvbCA9PiBmb3JlaWduUmVsYXRpb24uc291cmNlRmllbGROYW1lICsgJy4nICsgY2hpbGRDb2wuZmllbGROYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFZhbHVlcyhjaGlsZENvbCA9PiBuZXcgQ29sdW1uSW5mbyhjaGlsZENvbC5uYW1lLCBjaGlsZENvbC5maWVsZE5hbWUpKS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucyA9IGNvbC5mb3JlaWduUmVsYXRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucy5wdXNoKGZvcmVpZ25SZWxhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcUVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBuZWNlc3NhcnkgZGV0YWlscyBvZiBxdWVyaWVzXG4gICAgcHJpdmF0ZSBjb21wYWN0UXVlcmllcyhxdWVyaWVzQnlEQik6IE1hcDxzdHJpbmcsIE5hbWVkUXVlcnlJbmZvPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBuZXcgTWFwPHN0cmluZywgTmFtZWRRdWVyeUluZm8+KCk7XG5cbiAgICAgICAgZm9yRWFjaChxdWVyaWVzQnlEQi5xdWVyaWVzLCBxdWVyeURhdGEgPT4ge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5LCBwYXJhbXM7XG4gICAgICAgICAgICBpZiAocXVlcnlEYXRhLm5hdGl2ZVNxbCAmJiBxdWVyeURhdGEudHlwZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IGlzRW1wdHkocXVlcnlEYXRhLm9mZmxpbmVRdWVyeVN0cmluZykgPyBxdWVyeURhdGEucXVlcnlTdHJpbmcgOiBxdWVyeURhdGEub2ZmbGluZVF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IG1hcCh0aGlzLmV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSksIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbU9iaiA9IGZpbmQocXVlcnlEYXRhLnBhcmFtZXRlcnMsIHsnbmFtZSc6IHB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtT2JqLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXJhbU9iai50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUeXBlOiBwYXJhbU9iai52YXJpYWJsZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZm9yRWFjaChwID0+IHF1ZXJ5ID0gcmVwbGFjZShxdWVyeSwgJzonICsgcC5uYW1lLCAnPycpKTtcbiAgICAgICAgICAgICAgICBxdWVyaWVzW3F1ZXJ5RGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcXVlcnlEYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBtYXAocXVlcnlEYXRhLnJlc3BvbnNlLnByb3BlcnRpZXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAubmFtZUluVXBwZXJDYXNlID0gcC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBxdWVyaWVzO1xuICAgIH1cblxuICAgIC8vIExvYWRzIG5lY2Vzc2FyeSBkZXRhaWxzIG9mIHJlbW90ZSBzY2hlbWFcbiAgICBwcml2YXRlIGNvbXBhY3RTY2hlbWEoc2NoZW1hKTogREJJbmZvIHtcbiAgICAgICAgY29uc3QgZGJJbmZvID0gbmV3IERCSW5mbygpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5SW5mbz4oKTtcbiAgICAgICAgc2NoZW1hLnRhYmxlcy5mb3JFYWNoKGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5U2NoZW1hLmVudGl0eU5hbWVdID0ge307XG4gICAgICAgIH0pO1xuICAgICAgICBzY2hlbWEudGFibGVzLmZvckVhY2goZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFjdEVudGl0eVNjaGVtYShzY2hlbWEsIGVudGl0eVNjaGVtYSwgdHJhbnNmb3JtZWRTY2hlbWFzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiSW5mby5zY2hlbWEubmFtZSA9IHNjaGVtYS5uYW1lO1xuICAgICAgICBkYkluZm8uc2NoZW1hLmlzSW50ZXJuYWwgPSBzY2hlbWEuaXNJbnRlcm5hbDtcbiAgICAgICAgZGJJbmZvLnNjaGVtYS5lbnRpdGllcyA9IHRyYW5zZm9ybWVkU2NoZW1hcztcbiAgICAgICAgcmV0dXJuIGRiSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRCb29sVG9JbnQoYm9vbDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcoYm9vbCkgPT09ICd0cnVlJyA/IDEgOiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydEludFRvQm9vbChpbnQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW50ID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR1cm5zIG9mZiBmb3JlaWduIGtleXNcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGRpc2FibGVGb3JlaWduS2V5cygpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKHRoaXMuZGF0YWJhc2VzLCBkYiA9PiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYi5zY2hlbWEubmFtZSwgJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPRkYnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIFNRTCBxdWVyeTtcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYk5hbWVcbiAgICAgKiBAcGFyYW0gc3FsXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlU1FMUXVlcnkoZGJOYW1lLCBzcWwsIHBhcmFtcz86IGFueVtdLCBsb2dPdXRwdXQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRiID0gdGhpcy5kYXRhYmFzZXNbZGJOYW1lXTtcbiAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGIuc3FsaXRlT2JqZWN0LmV4ZWN1dGVTcWwoc3FsLCBwYXJhbXMsIGxvZ091dHB1dClcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dzID0gcmVzdWx0LnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHJvd3MuaXRlbShpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyb3dzQWZmZWN0ZWQnICA6IHJlc3VsdC5yb3dzQWZmZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAncm93cycgICAgICAgICAgOiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBObyBEYXRhYmFzZSB3aXRoIG5hbWUgJHtkYk5hbWV9IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBwYXJhbXMgb2YgdGhlIHF1ZXJ5IG9yIHByb2NlZHVyZS5cbiAgICBwcml2YXRlIGV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSkge1xuICAgICAgICBsZXQgcGFyYW1zLCBhbGlhc1BhcmFtcztcbiAgICAgICAgYWxpYXNQYXJhbXMgPSBxdWVyeS5tYXRjaCgvW15cIidcXHdcXFxcXTpcXHMqXFx3K1xccyovZykgfHwgW107XG4gICAgICAgIGlmIChhbGlhc1BhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IGFsaWFzUGFyYW1zLm1hcCh4ID0+ICgvWz18XFxXXS9nLnRlc3QoeCkpID8geC5yZXBsYWNlKC9cXFcvZywgJycpLnRyaW0oKSA6IHgudHJpbSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggYXBwbGljYXRpb24gaW5mbyBzdWNoIGFzIHBhY2thZ2VOYW1lLCBhcHBOYW1lLCB2ZXJzaW9uTnVtYmVyLCB2ZXJzaW9uQ29kZS5cbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEFwcEluZm8oKSB7XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB7XG4gICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb25OdW1iZXI6ICcnLFxuICAgICAgICAgICAgdmVyc2lvbkNvZGU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwVmVyc2lvbi5nZXRQYWNrYWdlTmFtZSgpXG4gICAgICAgICAgICAudGhlbihwYWNrYWdlTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby5wYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0QXBwTmFtZSgpO1xuICAgICAgICAgICAgfSkudGhlbihhcHBOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLm5hbWUgPSBhcHBOYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0VmVyc2lvbk51bWJlcigpO1xuICAgICAgICAgICAgfSkudGhlbih2ZXJzaW9uTnVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLnZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uTnVtYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0VmVyc2lvbkNvZGUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4odmVyc2lvbkNvZGUgPT4ge1xuICAgICAgICAgICAgICAgIGFwcEluZm8udmVyc2lvbkNvZGUgPSAodmVyc2lvbkNvZGUgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwSW5mbztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2FsbGJhY2tzRm9yKGV2ZW50OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrcy5tYXAoYyA9PiB7XG4gICAgICAgICAgICBpZiAoY1tldmVudF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY1tldmVudF0uYmluZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2hlcyBmb3IgdGhlIGZpbGVzIHdpdGggZ2l2ZW4gcmVnZXggaW4gJ3d3dy9tZXRhZGF0YS9hcHAnYW5kIHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgSlNPTlxuICAgICAqIGNvbnRlbnQgcHJlc2VudCBpbiBlYWNoIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVSZWdleCByZWdleCBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgZmlsZXMuXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggYW4gYXJyYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1ldGFJbmZvKGZpbGVOYW1lUmVnZXg6IFJlZ0V4cCkge1xuICAgICAgICBjb25zdCBmb2xkZXIgPSBjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkgKyBNRVRBX0xPQ0FUSU9OICsgJy8nO1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5saXN0RmlsZXMoZm9sZGVyLCBmaWxlTmFtZVJlZ2V4KVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4gUHJvbWlzZS5hbGwobWFwKGZpbGVzLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmRvdmEgRmlsZSByZWFkZXIgaGFzIGJ1ZmZlciBpc3N1ZXMgd2l0aCBsYXJnZSBmaWxlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvLCB1c2luZyBhamF4IHRvIHJldHJpZXZlIGxvY2FsIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICQuZ2V0SlNPTih0cmFuc2Zvcm1GaWxlVVJJKGZvbGRlcikgKyBmWyduYW1lJ10sIGRhdGEgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBlbnRpdHkncyBkYXRhIGlzIGJ1bmRsZWQgYWxvbmcgd2l0aCBhcHBsaWNhdGlvbiBpbnN0YWxsZXIuXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIG5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGlzQnVuZGxlZChkYXRhTW9kZWxOYW1lLCBlbnRpdHlOYW1lKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbihzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1bGxDb25maWcucHVsbFR5cGUgPT09IFB1bGxUeXBlLkJVTkRMRUQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGxvY2FsIGRhdGFiYXNlIHNjaGVtYXMgZnJvbSAqX2RhdGFfbW9kZWwuanNvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERCU2NoZW1hcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERCSW5mbz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX2RhdGFNb2RlbFxcLmpzb24kLylcbiAgICAgICAgICAgIC50aGVuKCAoc2NoZW1hczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWFwPHN0cmluZywgREJJbmZvPigpO1xuICAgICAgICAgICAgICAgIHNjaGVtYXMgPSBpc0FycmF5KHNjaGVtYXMpID8gc2NoZW1hcyA6IFtzY2hlbWFzXTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BKTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLm1hcChzID0+IHRoaXMuY29tcGFjdFNjaGVtYShzKSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2gocyA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbcy5zY2hlbWEubmFtZV0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIG5hbWVkIHF1ZXJpZXMgZnJvbSAqX3F1ZXJ5Lmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX3F1ZXJ5XFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oKHF1ZXJpZXNCeURCczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzID0gaXNBcnJheShxdWVyaWVzQnlEQnMpID8gcXVlcmllc0J5REJzIDogW3F1ZXJpZXNCeURCc107XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzLm1hcChlID0+IG1ldGFkYXRhW2UubmFtZV0ucXVlcmllcyA9IHRoaXMuY29tcGFjdFF1ZXJpZXMoZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgb2ZmbGluZSBjb25maWd1cmF0aW9uIGZyb20gKl9vZmZsaW5lLmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRPZmZsaW5lQ29uZmlnKG1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFJbmZvKC8uK19vZmZsaW5lXFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oY29uZmlncyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChjb25maWdzLCBjb25maWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2goY29uZmlnLmVudGl0aWVzLCBlbnRpdHlDb25maWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U2NoZW1hID0gZmluZChtZXRhZGF0YVtjb25maWcubmFtZV0uc2NoZW1hLmVudGl0aWVzLCBzY2hlbWEgPT4gc2NoZW1hLm5hbWUgPT09IGVudGl0eUNvbmZpZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbkluKGVudGl0eVNjaGVtYSwgZW50aXR5Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dTcWwoc3FsaXRlT2JqZWN0OiBTUUxpdGVPYmplY3QpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gY29uc29sZSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXhlY3V0ZVNxbCA9IHNxbGl0ZU9iamVjdC5leGVjdXRlU3FsO1xuICAgICAgICBzcWxpdGVPYmplY3QuZXhlY3V0ZVNxbCA9IChzcWwsIHBhcmFtcywgbG9nT3V0cHV0PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxFeGVjdXRlU3FsLmNhbGwoc3FsaXRlT2JqZWN0LCBzcWwsIHBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dPdXRwdXQgfHwgdGhpcy5fbG9nU3FsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakFyciA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSByZXN1bHQucm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqQXJyLnB1c2gocmVzdWx0LnJvd3MuaXRlbShpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTUUwgXCIlc1wiICB3aXRoIHBhcmFtcyAlTyB0b29rIFslZCBtc10uIEFuZCB0aGUgcmVzdWx0IGlzICVPJywgc3FsLCBwYXJhbXMsIG5vdygpIC0gc3RhcnRUaW1lLCBvYmpBcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU1FMIFwiJXNcIiB3aXRoIHBhcmFtcyAlTyBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlICVzJywgc3FsLCBwYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIGRhdGEuIEluc3RlYWQgb2YgdXNpbmcgYm9vbGVhbiB2YWx1ZXMsIGRhdGEgd2lsbCBiZSBjaGFuZ2VkIHRvIDAgb3IgMS5cbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3RydWUnLCB0aGVuIDEgaXMgc2V0IGFzIHZhbHVlLiBJZiB2YWx1ZSBpcyBub3QgMSBub3IgbnVsbCwgdGhlbiBjb2x1bW4gdmFsdWUgaXMgc2V0IGFzIDAuXG4gICAgICogQHBhcmFtIGRiTmFtZVxuICAgICAqIEBwYXJhbSB0YWJsZU5hbWVcbiAgICAgKiBAcGFyYW0gY29sTmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhbkRhdGEoZGJOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpIHtcbiAgICAgICAgY29uc3QgdHJ1ZVRvMVF1ZXJ5ID0gYHVwZGF0ZSAke2VzY2FwZU5hbWUodGFibGVOYW1lKX0gc2V0ICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAxIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAndHJ1ZSdgLFxuICAgICAgICAgICAgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSA9IGB1cGRhdGUgJHtlc2NhcGVOYW1lKHRhYmxlTmFtZSl9IHNldCAke2VzY2FwZU5hbWUoY29sTmFtZSl9ID0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gaXMgbm90IG51bGwgYW5kICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gIT0gMWA7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYk5hbWUsIHRydWVUbzFRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGRhdGEgdG8gc3VwcG9ydCBTUUxpdGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRhKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKHRoaXMuZGF0YWJhc2VzLCBkYXRhYmFzZSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKGRhdGFiYXNlLnNjaGVtYS5lbnRpdGllcywgZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKGVudGl0eVNjaGVtYS5jb2x1bW5zLCBjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNxbFR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplQm9vbGVhbkRhdGEoZGF0YWJhc2Uuc2NoZW1hLm5hbWUsIGVudGl0eVNjaGVtYS5uYW1lLCBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EYXRhYmFzZShkYXRhYmFzZTogREJJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNxbGl0ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGFiYXNlLnNjaGVtYS5uYW1lICsgJy5kYicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdkZWZhdWx0J1xuICAgICAgICB9KS50aGVuKHNxbGl0ZU9iamVjdCA9PiB7XG4gICAgICAgICAgICBkYXRhYmFzZS5zcWxpdGVPYmplY3QgPSBzcWxpdGVPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmxvZ1NxbChzcWxpdGVPYmplY3QpO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVQcm9taXNlcyA9IG1hcChkYXRhYmFzZS5zY2hlbWEuZW50aXRpZXMsIGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gbmV3IExvY2FsREJTdG9yZSh0aGlzLmRldmljZUZpbGVTZXJ2aWNlLCBlbnRpdHlTY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgc3FsaXRlT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNyZWF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc3RvcmVQcm9taXNlcykudGhlbihzdG9yZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvckVhY2goc3RvcmVzLCBzdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnN0b3Jlc1tzdG9yZS5lbnRpdHlTY2hlbWEuZW50aXR5TmFtZV0gPSBzdG9yZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBhcHAgaXMgb3BlbmVkIGZvciBmaXJzdCB0aW1lICBhZnRlciBhIGZyZXNoIGluc3RhbGwgb3IgdXBkYXRlLCB0aGVuIG9sZCBkYXRhYmFzZXMgYXJlIHJlbW92ZWQgYW5kXG4gICAgICogbmV3IGRhdGFiYXNlcyBhcmUgY3JlYXRlZCB1c2luZyBidW5kbGVkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRydWUsIGlmIHRoZSBkYXRhYmFzZXMgYXJlIG5ld2x5IGNyZWF0ZWQgb3IgcmVzb2x2ZWQgd2l0aCBmYWxzZVxuICAgICAqIGlmIGV4aXN0aW5nIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFVwRGF0YWJhc2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpXG4gICAgICAgICAgICAudGhlbigoYnVpbGRUaW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGJJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEVudHJ5KCdkYXRhYmFzZScpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmxhc3RCdWlsZFRpbWUgfHwgZGJJbmZvLmxhc3RCdWlsZFRpbWUgIT09IGJ1aWxkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbkFuZENvcHlEYXRhYmFzZXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSW5mby5sYXN0QnVpbGRUaW1lID0gYnVpbGRUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZVNlcnZpY2Uuc3RvcmVFbnRyeSgnZGF0YWJhc2UnLCBkYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19