@wavemaker/app-ng-runtime 11.8.0-next.24904 → 11.8.0-next.27301

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 (346) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +5 -5
  2. app-ng-runtime/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
  3. app-ng-runtime/build-task/esm2022/page/page.build.mjs +3 -2
  4. app-ng-runtime/build-task/fesm2022/index.mjs +2 -1
  5. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  6. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +5 -5
  7. app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
  8. app-ng-runtime/components/advanced/carousel/esm2022/carousel.directive.mjs +1 -1
  9. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +2 -1
  10. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  11. app-ng-runtime/components/advanced/login/bundles/index.umd.js +6 -6
  12. app-ng-runtime/components/advanced/login/esm2022/login.component.mjs +4 -3
  13. app-ng-runtime/components/advanced/login/fesm2022/index.mjs +3 -2
  14. app-ng-runtime/components/advanced/login/fesm2022/index.mjs.map +1 -1
  15. app-ng-runtime/components/base/bundles/index.umd.js +203 -171
  16. app-ng-runtime/components/base/esm2022/directives/show-in-device.directive.mjs +1 -1
  17. app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +12 -11
  18. app-ng-runtime/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
  19. app-ng-runtime/components/base/esm2022/utils/data-utils.mjs +30 -29
  20. app-ng-runtime/components/base/esm2022/utils/form-utils.mjs +47 -41
  21. app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -7
  22. app-ng-runtime/components/base/esm2022/utils/widget-utils.mjs +28 -27
  23. app-ng-runtime/components/base/esm2022/widgets/common/base/base-container.component.mjs +4 -3
  24. app-ng-runtime/components/base/esm2022/widgets/common/base/base-field-validations.mjs +24 -21
  25. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +12 -11
  26. app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +40 -14
  27. app-ng-runtime/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +3 -2
  28. app-ng-runtime/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +3 -2
  29. app-ng-runtime/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +1 -1
  30. app-ng-runtime/components/base/esm2022/widgets/common/partial/partial.directive.mjs +3 -2
  31. app-ng-runtime/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +3 -2
  32. app-ng-runtime/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +6 -5
  33. app-ng-runtime/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
  34. app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
  35. app-ng-runtime/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
  36. app-ng-runtime/components/base/fesm2022/index.mjs +206 -173
  37. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  38. app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
  39. app-ng-runtime/components/base/utils/data-utils.d.ts +0 -1
  40. app-ng-runtime/components/base/utils/widget-utils.d.ts +2 -2
  41. app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
  42. app-ng-runtime/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
  43. app-ng-runtime/components/basic/default/bundles/index.umd.js +10 -10
  44. app-ng-runtime/components/basic/default/esm2022/label/label.directive.mjs +4 -3
  45. app-ng-runtime/components/basic/default/esm2022/spinner/spinner.component.mjs +6 -5
  46. app-ng-runtime/components/basic/default/fesm2022/index.mjs +7 -6
  47. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  48. app-ng-runtime/components/basic/progress/bundles/index.umd.js +13 -13
  49. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +5 -4
  50. app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +6 -5
  51. app-ng-runtime/components/basic/progress/esm2022/utils.mjs +3 -3
  52. app-ng-runtime/components/basic/progress/fesm2022/index.mjs +10 -9
  53. app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
  54. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +15 -10
  55. app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +14 -8
  56. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +13 -7
  57. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  58. app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
  59. app-ng-runtime/components/basic/search/bundles/index.umd.js +67 -65
  60. app-ng-runtime/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
  61. app-ng-runtime/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
  62. app-ng-runtime/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
  63. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +31 -30
  64. app-ng-runtime/components/basic/search/fesm2022/index.mjs +66 -63
  65. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  66. app-ng-runtime/components/basic/tree/bundles/index.umd.js +9 -9
  67. app-ng-runtime/components/basic/tree/esm2022/tree.component.mjs +7 -6
  68. app-ng-runtime/components/basic/tree/fesm2022/index.mjs +6 -5
  69. app-ng-runtime/components/basic/tree/fesm2022/index.mjs.map +1 -1
  70. app-ng-runtime/components/chart/bundles/index.umd.js +72 -63
  71. app-ng-runtime/components/chart/chart.component.d.ts +1 -1
  72. app-ng-runtime/components/chart/chart.utils.d.ts +3 -3
  73. app-ng-runtime/components/chart/esm2022/chart.component.mjs +58 -48
  74. app-ng-runtime/components/chart/esm2022/chart.utils.mjs +14 -13
  75. app-ng-runtime/components/chart/fesm2022/index.mjs +69 -59
  76. app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
  77. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +16 -16
  78. app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +14 -13
  79. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +13 -12
  80. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  81. app-ng-runtime/components/containers/panel/bundles/index.umd.js +5 -5
  82. app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +3 -2
  83. app-ng-runtime/components/containers/panel/fesm2022/index.mjs +2 -1
  84. app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
  85. app-ng-runtime/components/containers/panel/panel.component.d.ts +1 -1
  86. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +17 -17
  87. app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +15 -14
  88. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +14 -13
  89. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  90. app-ng-runtime/components/data/form/bundles/index.umd.js +75 -75
  91. app-ng-runtime/components/data/form/esm2022/form-action/form-action.directive.mjs +3 -2
  92. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +10 -9
  93. app-ng-runtime/components/data/form/esm2022/form.component.mjs +54 -53
  94. app-ng-runtime/components/data/form/esm2022/live-filter/live-filter.directive.mjs +3 -2
  95. app-ng-runtime/components/data/form/esm2022/live-form/live-form.directive.mjs +11 -10
  96. app-ng-runtime/components/data/form/fesm2022/index.mjs +77 -76
  97. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  98. app-ng-runtime/components/data/form/form.component.d.ts +2 -2
  99. app-ng-runtime/components/data/form/live-form/live-form.directive.d.ts +1 -1
  100. app-ng-runtime/components/data/list/bundles/index.umd.js +692 -687
  101. app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +1 -1
  102. app-ng-runtime/components/data/list/esm2022/list.animator.mjs +5 -3
  103. app-ng-runtime/components/data/list/esm2022/list.component.mjs +687 -682
  104. app-ng-runtime/components/data/list/fesm2022/index.mjs +690 -684
  105. app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
  106. app-ng-runtime/components/data/list/list.component.d.ts +53 -53
  107. app-ng-runtime/components/data/live-table/bundles/index.umd.js +1 -1
  108. app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +2 -2
  109. app-ng-runtime/components/data/live-table/fesm2022/index.mjs +1 -1
  110. app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
  111. app-ng-runtime/components/data/pagination/bundles/index.umd.js +14 -14
  112. app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +12 -11
  113. app-ng-runtime/components/data/pagination/fesm2022/index.mjs +11 -10
  114. app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
  115. app-ng-runtime/components/data/table/bundles/index.umd.js +175 -172
  116. app-ng-runtime/components/data/table/esm2022/table-action/table-action.directive.mjs +3 -2
  117. app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +19 -18
  118. app-ng-runtime/components/data/table/esm2022/table-cud.directive.mjs +7 -6
  119. app-ng-runtime/components/data/table/esm2022/table-filter.directive.mjs +53 -55
  120. app-ng-runtime/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +3 -2
  121. app-ng-runtime/components/data/table/esm2022/table.component.mjs +98 -91
  122. app-ng-runtime/components/data/table/fesm2022/index.mjs +172 -168
  123. app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
  124. app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +6 -6
  125. app-ng-runtime/components/data/table/table.component.d.ts +2 -2
  126. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +2 -2
  127. app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +3 -3
  128. app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +1 -1
  129. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +1 -1
  130. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  131. app-ng-runtime/components/input/calendar/bundles/index.umd.js +33 -31
  132. app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +31 -28
  133. app-ng-runtime/components/input/calendar/fesm2022/index.mjs +30 -27
  134. app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
  135. app-ng-runtime/components/input/chips/bundles/index.umd.js +29 -28
  136. app-ng-runtime/components/input/chips/chips.component.d.ts +1 -1
  137. app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +27 -25
  138. app-ng-runtime/components/input/chips/fesm2022/index.mjs +26 -24
  139. app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
  140. app-ng-runtime/components/input/default/base-form.component.d.ts +3 -3
  141. app-ng-runtime/components/input/default/bundles/index.umd.js +75 -62
  142. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +1 -0
  143. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +4 -4
  144. app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +14 -8
  145. app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +3 -2
  146. app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +2 -2
  147. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +6 -4
  148. app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +29 -23
  149. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +4 -3
  150. app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +4 -3
  151. app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +6 -5
  152. app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +4 -3
  153. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -18
  154. app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +2 -2
  155. app-ng-runtime/components/input/default/fesm2022/index.mjs +75 -62
  156. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  157. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -1
  158. app-ng-runtime/components/input/epoch/bundles/index.umd.js +53 -51
  159. app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +34 -31
  160. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +5 -4
  161. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +5 -4
  162. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +7 -6
  163. app-ng-runtime/components/input/epoch/esm2022/picker/picker.component.mjs +1 -1
  164. app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +6 -5
  165. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +48 -45
  166. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  167. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +15 -15
  168. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +13 -12
  169. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +12 -11
  170. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  171. app-ng-runtime/components/input/rating/bundles/index.umd.js +12 -12
  172. app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +10 -9
  173. app-ng-runtime/components/input/rating/fesm2022/index.mjs +9 -8
  174. app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
  175. app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +1 -1
  176. app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +2 -2
  177. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +1 -1
  178. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  179. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +23 -22
  180. app-ng-runtime/components/navigation/menu/esm2022/menu-adapator.component.mjs +3 -2
  181. app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +6 -5
  182. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +8 -7
  183. app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +10 -8
  184. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +20 -18
  185. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  186. app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
  187. app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +1 -1
  188. app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  189. app-ng-runtime/components/prefab/bundles/index.umd.js +6 -6
  190. app-ng-runtime/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +3 -2
  191. app-ng-runtime/components/prefab/esm2022/prefab.directive.mjs +3 -2
  192. app-ng-runtime/components/prefab/fesm2022/index.mjs +3 -2
  193. app-ng-runtime/components/prefab/fesm2022/index.mjs.map +1 -1
  194. app-ng-runtime/core/bundles/index.umd.js +119 -130
  195. app-ng-runtime/core/esm2022/public_api.mjs +2 -2
  196. app-ng-runtime/core/esm2022/services/field-type.service.mjs +3 -2
  197. app-ng-runtime/core/esm2022/services/field-widget.service.mjs +3 -2
  198. app-ng-runtime/core/esm2022/services/pagination.service.mjs +7 -6
  199. app-ng-runtime/core/esm2022/services/state-persistence.service.mjs +17 -16
  200. app-ng-runtime/core/esm2022/services/utils.service.mjs +3 -2
  201. app-ng-runtime/core/esm2022/services/viewport.service.mjs +3 -2
  202. app-ng-runtime/core/esm2022/utils/build-utils.mjs +5 -4
  203. app-ng-runtime/core/esm2022/utils/expression-parser.mjs +5 -4
  204. app-ng-runtime/core/esm2022/utils/lru-cache.mjs +3 -2
  205. app-ng-runtime/core/esm2022/utils/utils.mjs +79 -82
  206. app-ng-runtime/core/esm2022/utils/watcher.mjs +9 -7
  207. app-ng-runtime/core/fesm2022/index.mjs +117 -123
  208. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  209. app-ng-runtime/core/public_api.d.ts +1 -1
  210. app-ng-runtime/core/services/pagination.service.d.ts +1 -1
  211. app-ng-runtime/core/utils/utils.d.ts +5 -9
  212. app-ng-runtime/http/bundles/index.umd.js +7 -7
  213. app-ng-runtime/http/esm2022/http.service.mjs +5 -4
  214. app-ng-runtime/http/esm2022/wm-http-request.mjs +1 -1
  215. app-ng-runtime/http/esm2022/wm-http-response.mjs +1 -1
  216. app-ng-runtime/http/fesm2022/index.mjs +4 -3
  217. app-ng-runtime/http/fesm2022/index.mjs.map +1 -1
  218. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +24 -20
  219. app-ng-runtime/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +5 -4
  220. app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +12 -8
  221. app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +5 -3
  222. app-ng-runtime/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +3 -2
  223. app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +5 -4
  224. app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs +21 -16
  225. app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
  226. app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +7 -7
  227. app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +2 -2
  228. app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +4 -3
  229. app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs +4 -3
  230. app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
  231. app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +8 -8
  232. app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.component.mjs +4 -3
  233. app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs +3 -2
  234. app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
  235. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +5 -5
  236. app-ng-runtime/mobile/components/page/default/esm2022/page.directive.mjs +3 -2
  237. app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs +2 -1
  238. app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
  239. app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +9 -9
  240. app-ng-runtime/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +7 -6
  241. app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs +6 -5
  242. app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
  243. app-ng-runtime/mobile/core/bundles/index.umd.js +25 -25
  244. app-ng-runtime/mobile/core/esm2022/services/device-file-download.service.mjs +5 -4
  245. app-ng-runtime/mobile/core/esm2022/services/device-file-opener.service.mjs +3 -2
  246. app-ng-runtime/mobile/core/esm2022/services/device-file-upload.service.mjs +4 -3
  247. app-ng-runtime/mobile/core/esm2022/services/device-file.service.mjs +6 -5
  248. app-ng-runtime/mobile/core/esm2022/services/device.service.mjs +3 -2
  249. app-ng-runtime/mobile/core/esm2022/services/ext-app-message.service.mjs +5 -4
  250. app-ng-runtime/mobile/core/esm2022/services/network.service.mjs +9 -8
  251. app-ng-runtime/mobile/core/fesm2022/index.mjs +22 -21
  252. app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
  253. app-ng-runtime/mobile/core/services/ext-app-message.service.d.ts +1 -1
  254. app-ng-runtime/mobile/core/services/network.service.d.ts +7 -1
  255. app-ng-runtime/mobile/offline/bundles/index.umd.js +161 -144
  256. app-ng-runtime/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
  257. app-ng-runtime/mobile/offline/esm2022/services/change-log.service.mjs +7 -6
  258. app-ng-runtime/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +37 -35
  259. app-ng-runtime/mobile/offline/esm2022/services/local-db-management.service.mjs +54 -45
  260. app-ng-runtime/mobile/offline/esm2022/services/local-db.service.mjs +5 -4
  261. app-ng-runtime/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
  262. app-ng-runtime/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
  263. app-ng-runtime/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
  264. app-ng-runtime/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
  265. app-ng-runtime/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
  266. app-ng-runtime/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
  267. app-ng-runtime/mobile/offline/fesm2022/index.mjs +156 -138
  268. app-ng-runtime/mobile/offline/fesm2022/index.mjs.map +1 -1
  269. app-ng-runtime/mobile/runtime/bundles/index.umd.js +11 -8
  270. app-ng-runtime/mobile/runtime/esm2022/mobile-runtime.module.mjs +3 -2
  271. app-ng-runtime/mobile/runtime/esm2022/services/cookie.service.mjs +6 -2
  272. app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +4 -3
  273. app-ng-runtime/mobile/runtime/fesm2022/index.mjs +8 -4
  274. app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
  275. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +2 -2
  276. app-ng-runtime/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +3 -3
  277. app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs +2 -2
  278. app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
  279. app-ng-runtime/mobile/variables/bundles/index.umd.js +23 -16
  280. app-ng-runtime/mobile/variables/esm2022/services/camera-service.mjs +2 -2
  281. app-ng-runtime/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
  282. app-ng-runtime/mobile/variables/esm2022/services/file-service.mjs +11 -3
  283. app-ng-runtime/mobile/variables/fesm2022/index.mjs +19 -11
  284. app-ng-runtime/mobile/variables/fesm2022/index.mjs.map +1 -1
  285. app-ng-runtime/oAuth/bundles/index.umd.js +12 -12
  286. app-ng-runtime/oAuth/esm2022/oAuth.service.mjs +4 -3
  287. app-ng-runtime/oAuth/esm2022/oAuth.utils.mjs +8 -7
  288. app-ng-runtime/oAuth/fesm2022/index.mjs +9 -8
  289. app-ng-runtime/oAuth/fesm2022/index.mjs.map +1 -1
  290. app-ng-runtime/package.json +1 -1
  291. app-ng-runtime/runtime/base/bundles/index.umd.js +121 -120
  292. app-ng-runtime/runtime/base/esm2022/components/base-layout.component.mjs +4 -3
  293. app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +14 -13
  294. app-ng-runtime/runtime/base/esm2022/components/base-partial.component.mjs +13 -12
  295. app-ng-runtime/runtime/base/esm2022/components/base-prefab.component.mjs +15 -14
  296. app-ng-runtime/runtime/base/esm2022/components/base-spa-page.component.mjs +14 -13
  297. app-ng-runtime/runtime/base/esm2022/components/custom-toaster.component.mjs +6 -5
  298. app-ng-runtime/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -10
  299. app-ng-runtime/runtime/base/esm2022/guards/page-not-found.guard.mjs +1 -1
  300. app-ng-runtime/runtime/base/esm2022/guards/role.guard.mjs +3 -2
  301. app-ng-runtime/runtime/base/esm2022/services/app-defaults.service.mjs +1 -1
  302. app-ng-runtime/runtime/base/esm2022/services/app.manager.service.mjs +17 -14
  303. app-ng-runtime/runtime/base/esm2022/services/app.service.mjs +7 -6
  304. app-ng-runtime/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +3 -2
  305. app-ng-runtime/runtime/base/esm2022/services/http-interceptor.services.mjs +4 -3
  306. app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +12 -10
  307. app-ng-runtime/runtime/base/esm2022/services/navigation.service.mjs +8 -7
  308. app-ng-runtime/runtime/base/esm2022/services/prefab-manager.service.mjs +3 -2
  309. app-ng-runtime/runtime/base/esm2022/services/spinner.service.mjs +7 -6
  310. app-ng-runtime/runtime/base/esm2022/services/toaster.service.mjs +6 -5
  311. app-ng-runtime/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +6 -7
  312. app-ng-runtime/runtime/base/fesm2022/index.mjs +119 -117
  313. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
  314. app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
  315. app-ng-runtime/runtime/dynamic/bundles/index.umd.js +7 -7
  316. app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +4 -3
  317. app-ng-runtime/runtime/dynamic/esm2022/main.mjs +3 -2
  318. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +4 -3
  319. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  320. app-ng-runtime/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
  321. app-ng-runtime/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
  322. app-ng-runtime/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
  323. app-ng-runtime/security/bundles/index.umd.js +14 -14
  324. app-ng-runtime/security/esm2022/security.service.mjs +12 -11
  325. app-ng-runtime/security/fesm2022/index.mjs +11 -10
  326. app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
  327. app-ng-runtime/security/security.service.d.ts +1 -1
  328. app-ng-runtime/swipey/esm2022/swipe.animation.mjs +1 -1
  329. app-ng-runtime/swipey/fesm2022/index.mjs.map +1 -1
  330. app-ng-runtime/transpiler/bundles/index.umd.js +10 -9
  331. app-ng-runtime/transpiler/esm2022/build.mjs +8 -6
  332. app-ng-runtime/transpiler/fesm2022/index.mjs +7 -5
  333. app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
  334. app-ng-runtime/variables/bundles/index.umd.js +155 -145
  335. app-ng-runtime/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
  336. app-ng-runtime/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
  337. app-ng-runtime/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
  338. app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
  339. app-ng-runtime/variables/esm2022/service/variables.service.mjs +7 -6
  340. app-ng-runtime/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
  341. app-ng-runtime/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
  342. app-ng-runtime/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
  343. app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +75 -70
  344. app-ng-runtime/variables/fesm2022/index.mjs +169 -158
  345. app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
  346. app-ng-runtime/variables/util/variable/service-variable.utils.d.ts +1 -1
@@ -1,5 +1,6 @@
1
1
  import { Validators } from '@angular/forms';
2
2
  import { VALIDATOR, $watch, $unwatch, FormWidgetType } from '@wm/core';
3
+ import { cloneDeep, concat, extend, filter, find, forEach, get, isEmpty, isFunction, toUpper } from "lodash-es";
3
4
  const DEFAULT_VALIDATOR = {
4
5
  pattern: 'regexp',
5
6
  max: 'maxvalue',
@@ -48,7 +49,7 @@ export class BaseFieldValidations {
48
49
  if (this.instance.regexp) {
49
50
  _validator.push(Validators.pattern(this.instance.regexp));
50
51
  }
51
- if (this.formwidget && _.isFunction(this.formwidget.validate)) {
52
+ if (this.formwidget && isFunction(this.formwidget.validate)) {
52
53
  _validator.push(this.formwidget.validate.bind(this.formwidget));
53
54
  }
54
55
  return _validator;
@@ -75,7 +76,7 @@ export class BaseFieldValidations {
75
76
  }
76
77
  getPromiseList(validators) {
77
78
  const arr = [];
78
- _.forEach(validators, (fn, index) => {
79
+ forEach(validators, (fn, index) => {
79
80
  let promise = fn;
80
81
  if (fn instanceof Function && fn.bind) {
81
82
  promise = fn(this.widgetControl, this.widgetContext);
@@ -97,10 +98,11 @@ export class BaseFieldValidations {
97
98
  // if err obj has validationMessage key, then set validationMessage using this value
98
99
  // else return the value of the first key in the err object as validation message.
99
100
  if (err.hasOwnProperty('errorMessage')) {
100
- this.instance.validationmessage = _.get(err, 'errorMessage');
101
+ this.instance.validationmessage = get(err, 'errorMessage');
101
102
  }
102
103
  else {
103
- const keys = _.keys(err);
104
+ // @ts-ignore
105
+ const keys = keys(err);
104
106
  this.instance.validationmessage = (err[keys[0]]).toString();
105
107
  }
106
108
  return err;
@@ -133,7 +135,7 @@ export class BaseFieldValidations {
133
135
  }
134
136
  }
135
137
  isDefaultValidator(type) {
136
- return _.get(VALIDATOR, _.toUpper(type));
138
+ return get(VALIDATOR, toUpper(type));
137
139
  }
138
140
  // default validator is bound to a function then watch for value changes
139
141
  // otherwise set the value of default validator directly
@@ -149,10 +151,10 @@ export class BaseFieldValidations {
149
151
  }
150
152
  // sets the default validation on the form field
151
153
  setValidators(validators) {
152
- let _cloneValidators = _.cloneDeep(validators);
154
+ let _cloneValidators = cloneDeep(validators);
153
155
  this.hasValidators = true;
154
156
  this._syncValidators = [];
155
- _.forEach(_cloneValidators, (obj, index) => {
157
+ forEach(_cloneValidators, (obj, index) => {
156
158
  // custom validation is bound to function.
157
159
  if (obj && obj instanceof Function) {
158
160
  // passing formfield and form as arguments to the obj (i.e. validator function)
@@ -161,17 +163,17 @@ export class BaseFieldValidations {
161
163
  }
162
164
  else {
163
165
  // checks for default validator like required, maxchars etc.
164
- const key = _.get(obj, 'type');
165
- this.defaultValidatorMessages[key] = _.get(obj, 'errorMessage');
166
+ const key = get(obj, 'type');
167
+ this.defaultValidatorMessages[key] = get(obj, 'errorMessage');
166
168
  if (this.isDefaultValidator(key)) {
167
- const value = _.get(obj, 'validator');
169
+ const value = get(obj, 'validator');
168
170
  this.setDefaultValidator(key, value);
169
171
  _cloneValidators[index] = '';
170
172
  }
171
173
  }
172
174
  });
173
175
  // _syncValidators contains all the custom validations on the form field. will not include default validators.
174
- this._syncValidators = _.filter(_cloneValidators, val => {
176
+ this._syncValidators = filter(_cloneValidators, val => {
175
177
  if (val) {
176
178
  return val;
177
179
  }
@@ -179,8 +181,8 @@ export class BaseFieldValidations {
179
181
  this.applyDefaultValidators();
180
182
  }
181
183
  observeOn(fields, context) {
182
- _.forEach(fields, field => {
183
- const formfield = _.find(this.widgetContext[context], { 'key': field });
184
+ forEach(fields, field => {
185
+ const formfield = find(this.widgetContext[context], { 'key': field });
184
186
  if (formfield) {
185
187
  if (!formfield.notifyForFields) {
186
188
  formfield.notifyForFields = [];
@@ -211,13 +213,13 @@ export class BaseFieldValidations {
211
213
  const watchName = `${this.instance.widgetId}_` + key + '_formField';
212
214
  $unwatch(watchName);
213
215
  //[Todo-CSP]: Need clarity generate this expr fn if form is present in the page
214
- this.instance.registerDestroyListener($watch('boundFn(fn)', _.extend(this.instance, this.instance.viewParent), { fn }, (nv, ov) => {
216
+ this.instance.registerDestroyListener($watch('boundFn(fn)', extend(this.instance, this.instance.viewParent), { fn }, (nv, ov) => {
215
217
  this.instance.widget[key] = nv;
216
218
  this.applyDefaultValidators();
217
219
  }, watchName));
218
220
  }
219
221
  isNullOrEmptyOrFalsy(value) {
220
- return _.isEmpty(value);
222
+ return isEmpty(value);
221
223
  }
222
224
  // invokes both custom sync validations and default validations.
223
225
  applyDefaultValidators() {
@@ -228,7 +230,7 @@ export class BaseFieldValidations {
228
230
  if (this.formwidget && (this.instance.value === this.formwidget.prevDatavalue || this.isNullOrEmptyOrFalsy(this.instance.value))) {
229
231
  opt['emitEvent'] = false;
230
232
  }
231
- this.widgetControl.setValidators(_.concat(this._syncValidators || [], validators));
233
+ this.widgetControl.setValidators(concat(this._syncValidators || [], validators));
232
234
  this.widgetControl.updateValueAndValidity(opt);
233
235
  this.setCustomValidationMessage();
234
236
  }
@@ -238,14 +240,15 @@ export class BaseFieldValidations {
238
240
  return;
239
241
  }
240
242
  if (fieldErrors.hasOwnProperty('errorMessage')) {
241
- this.instance.validationmessage = _.get(fieldErrors, 'errorMessage');
243
+ this.instance.validationmessage = get(fieldErrors, 'errorMessage');
242
244
  }
243
245
  else {
244
- const keys = _.keys(fieldErrors);
246
+ // @ts-ignore
247
+ const keys = keys(fieldErrors);
245
248
  const key = keys[0];
246
- const validationMsgKey = _.get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
249
+ const validationMsgKey = get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
247
250
  if (validationMsgKey) {
248
- const msg = _.get(this.defaultValidatorMessages, validationMsgKey) || this.instance.validationmessage;
251
+ const msg = get(this.defaultValidatorMessages, validationMsgKey) || this.instance.validationmessage;
249
252
  if (msg && msg instanceof Function) {
250
253
  // passing formfield and form as arguments to the errorMessage function.
251
254
  this.instance.validationmessage = msg(this.widgetControl, this.widgetContext);
@@ -261,4 +264,4 @@ export class BaseFieldValidations {
261
264
  }
262
265
  }
263
266
  }
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSXZFLE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsT0FBTyxFQUFFLFFBQVE7SUFDakIsR0FBRyxFQUFFLFVBQVU7SUFDZixHQUFHLEVBQUUsVUFBVTtJQUNmLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLGFBQWEsRUFBQyxlQUFlO0NBQ2hDLENBQUM7QUFFRixNQUFNLE9BQU8sb0JBQW9CO0lBb0I3QixZQUFZLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBZTtRQUN2RixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFD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O2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUN2RixJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLFFBQVEsRUFBRSxDQUFDO29CQUNqQyx3RUFBd0U7b0JBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7Z0JBQzFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osd0ZBQXdGO2dCQUN4RixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFZBTElEQVRPUiwgJHdhdGNoLCAkdW53YXRjaCwgRm9ybVdpZGdldFR5cGUgfSBmcm9tICdAd20vY29yZSc7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgREVGQVVMVF9WQUxJREFUT1IgPSB7XG4gICAgcGF0dGVybjogJ3JlZ2V4cCcsXG4gICAgbWF4OiAnbWF4dmFsdWUnLFxuICAgIG1pbjogJ21pbnZhbHVlJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgICBtYXhsZW5ndGg6ICdtYXhjaGFycycsXG4gICAgbWluZGF0ZTogJ21pbmRhdGUnLFxuICAgIG1heGRhdGU6ICdtYXhkYXRlJyxcbiAgICBleGNsdWRlZGF0ZXM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIGV4Y2x1ZGVkYXlzOiAnZXhjbHVkZWRheXMnLFxuICAgIGludmFsaWROdW1iZXI6J2ludmFsaWROdW1iZXInXG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUZpZWxkVmFsaWRhdGlvbnMge1xuICAgIHByaXZhdGUgaGFzVmFsaWRhdG9ycztcblxuICAgIC8vIEluc3RhbmNlIG9mIHRoZSBkaXJlY3RpdmUgdGFibGUtY29sdW1uLCBmb3JtLWZpZWxkLi5cbiAgICBwcml2YXRlIGluc3RhbmNlO1xuICAgIC8vIElubGluZSBmb3JtIHdpZGdldFxuICAgIHB1YmxpYyBmb3Jtd2lkZ2V0O1xuICAgIC8vIFdpZGdldCB0eXBlXG4gICAgcHJpdmF0ZSB3aWRnZXR0eXBlO1xuICAgIC8vIEZyb20gY29udHJvbFxuICAgIHByaXZhdGUgd2lkZ2V0Q29udHJvbDtcbiAgICAvLyBQYXJlbnQgd2lkZ2V0IGNvbnRleHQgVGFibGUsIEZvcm0uLlxuICAgIHByaXZhdGUgd2lkZ2V0Q29udGV4dDtcbiAgICAvLyBPcHRpb25hbCB0YWJsZSBjb2x1bW4gdHlwZSBxdWlja2VkaXQgbmV3cm93LyBpbmxpbmUgZWRpdFxuICAgIHByaXZhdGUgdGFibGVGaWVsZFR5cGU7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlczogYW55O1xuICAgIHByaXZhdGUgX3N5bmNWYWxpZGF0b3JzOiBhbnk7XG4gICAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JGbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2UsIGZvcm13aWRnZXQsIHdpZGdldHR5cGUsIHdpZGdldENvbnRyb2wsIHdpZGdldENvbnRleHQsIHRhYmxlRmllbGRUeXBlPyl7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgdGhpcy5mb3Jtd2lkZ2V0ID0gZm9ybXdpZGdldDtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gd2lkZ2V0dHlwZTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sID0gd2lkZ2V0Q29udHJvbDtcbiAgICAgICAgdGhpcy53aWRnZXRDb250ZXh0ID0gd2lkZ2V0Q29udGV4dDtcblxuICAgICAgICB0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcyA9IFtdO1xuICAgICAgICBpZiAodGFibGVGaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGaWVsZFR5cGUgPSB0YWJsZUZpZWxkVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydGVkIGRlZmF1bHQgdmFsaWRhdG9yc1xuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVxdWlyZWQgJiYgdGhpcy5pbnN0YW5jZS5zaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94L3RvZ2dsZSB3aWRnZXQsIHJlcXVpcmVkIHZhbGlkYXRpb24gc2hvdWxkIGNvbnNpZGVyIHRydWUgdmFsdWUgb25seVxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1ggfHwgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBfLmlzRnVuY3Rpb24odGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlKSkge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZS5iaW5kKHRoaXMuZm9ybXdpZGdldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdmFsaWRhdG9yO1xuICAgIH1cblxuICAgIC8vIE9uIGNoYW5nZSBvZiBhbnkgdmFsaWRhdGlvbiBwcm9wZXJ0eSwgc2V0IHRoZSBhbmd1bGFyIGZvcm0gdmFsaWRhdG9yc1xuICAgIHNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3I/KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuXG4gICAgICAgIGlmIChjdXN0b21WYWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMucHVzaChjdXN0b21WYWxpZGF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb21pc2VMaXN0KHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIF8uZm9yRWFjaCh2YWxpZGF0b3JzLCAoZm4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IGZuO1xuICAgICAgICAgICAgaWYgKGZuIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgZm4uYmluZCkge1xuICAgICAgICAgICAgICAgIHByb21pc2UgPSBmbih0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChwcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2Qgc2V0cyB0aGUgYXN5bmNWYWxpZGF0aW9uIG9uIHRoZSBmb3JtIGZpZWxkLiBBc3NpZ25zIHZhbGlkYXRpb25tZXNzYWdlcyBmcm9tIHRoZSByZXR1cm5lZCByZXNwb25zZVxuICAgIHNldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLmdldFByb21pc2VMaXN0KHZhbGlkYXRvcnMpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBlcnIgb2JqIGhhcyB2YWxpZGF0aW9uTWVzc2FnZSBrZXksIHRoZW4gc2V0IHZhbGlkYXRpb25NZXNzYWdlIHVzaW5nIHRoaXMgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBrZXkgaW4gdGhlIGVyciBvYmplY3QgYXMgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmhhc093blByb3BlcnR5KCdlcnJvck1lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IF8uZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IF8ua2V5cyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IChlcnJba2V5c1swXV0pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybSBjb250cm9sIHN0YXR1cyBpcyBub3QgY2hhbmdlZCBmcm9tIHBlbmRpbmcuIFRoaXMgaXMgYW4gYW5ndWxhciBpc3N1ZSByZWZlciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzIwMFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja0ZvclN0YXR1c0NoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JTdGF0dXNDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLm9uU3RhdHVzQ2hhbmdlKHRoaXMud2lkZ2V0Q29udHJvbC5zdGF0dXMsIHRoaXMudGFibGVGaWVsZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhbdGhpcy5fYXN5bmNWYWxpZGF0b3JGbigpXSk7XG4gICAgICAgIGlmKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0udG91Y2hlZCl7XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAgICAgLy8gZW1pdEV2ZW50IGZsYWcgd2lsbCBwcmV2ZW50IGZyb20gZW1pdHRpbmcgdGhlIHZhbHVlQ2hhbmdlcyB3aGVuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBwcmV2RGF0YXZhbHVlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNEZWZhdWx0VmFsaWRhdG9yKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KFZBTElEQVRPUiwgXy50b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IF8uY2xvbmVEZWVwKHZhbGlkYXRvcnMpO1xuICAgICAgICB0aGlzLmhhc1ZhbGlkYXRvcnMgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBfLmZvckVhY2goX2Nsb25lVmFsaWRhdG9ycywgKG9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2YWxpZGF0aW9uIGlzIGJvdW5kIHRvIGZ1bmN0aW9uLlxuICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgb2JqIChpLmUuIHZhbGlkYXRvciBmdW5jdGlvbilcbiAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9IG9iai5iaW5kKHVuZGVmaW5lZCwgdGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzLnB1c2goX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVja3MgZm9yIGRlZmF1bHQgdmFsaWRhdG9yIGxpa2UgcmVxdWlyZWQsIG1heGNoYXJzIGV0Yy5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IF8uZ2V0KG9iaiwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZhbGlkYXRvcihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQob2JqLCAndmFsaWRhdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcihrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0gPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIF9zeW5jVmFsaWRhdG9ycyBjb250YWlucyBhbGwgdGhlIGN1c3RvbSB2YWxpZGF0aW9ucyBvbiB0aGUgZm9ybSBmaWVsZC4gd2lsbCBub3QgaW5jbHVkZSBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzID0gXy5maWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBfLmZvckVhY2goZmllbGRzLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtZmllbGQgPSBfLmZpbmQodGhpcy53aWRnZXRDb250ZXh0W2NvbnRleHRdLCB7J2tleSc6IGZpZWxkfSk7XG4gICAgICAgICAgICBpZiAoZm9ybWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcy5wdXNoKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLl9hc3luY1ZhbGlkYXRvckZuKSB7XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAgICAgLy8gZW1pdEV2ZW50IGZsYWcgd2lsbCBwcmV2ZW50IGZyb20gZW1pdHRpbmcgdGhlIHZhbHVlQ2hhbmdlcyB3aGVuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBwcmV2RGF0YXZhbHVlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFt0aGlzLl9hc3luY1ZhbGlkYXRvckZuKCldKTtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvdyB0aGUgdmFsaWRhdGlvbiBlcnJvcyBzaG93IHdoZW4gZm9ybSBpcyB0b3VjaGVkIGFuZCBub3Qgb24gbG9hZC4gVGhpcyBqdXN0IGhpZ2hsaWdodHMgdGhlIGZpZWxkIHRoYXQgaXMgc3Vic2NyaWJlZCBmb3IgY2hhbmdlcy5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0udG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdhdGNoZXMgZm9yIGNoYW5nZXMgaW4gdGhlIGJvdW5kIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgd2F0Y2hEZWZhdWx0VmFsaWRhdG9yRXhwcihmbiwga2V5KSB7XG4gICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMuaW5zdGFuY2Uud2lkZ2V0SWR9X2AgKyBrZXkgKyAnX2Zvcm1GaWVsZCc7XG4gICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgIC8vW1RvZG8tQ1NQXTogTmVlZCBjbGFyaXR5IGdlbmVyYXRlIHRoaXMgZXhwciBmbiBpZiBmb3JtIGlzIHByZXNlbnQgaW4gdGhlIHBhZ2VcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goJ2JvdW5kRm4oZm4pJywgXy5leHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIF8uaXNFbXB0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gaW52b2tlcyBib3RoIGN1c3RvbSBzeW5jIHZhbGlkYXRpb25zIGFuZCBkZWZhdWx0IHZhbGlkYXRpb25zLlxuICAgIGFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldERlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgLy8gZW1pdEV2ZW50IGZsYWcgd2lsbCBwcmV2ZW50IGZyb20gZW1pdHRpbmcgdGhlIHZhbHVlQ2hhbmdlcyB3aGVuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBwcmV2RGF0YXZhbHVlLlxuICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRWYWxpZGF0b3JzKF8uY29uY2F0KHRoaXMuX3N5bmNWYWxpZGF0b3JzIHx8IFtdLCB2YWxpZGF0b3JzKSk7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB9XG5cbiAgICBzZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB0aGlzLndpZGdldENvbnRyb2wgJiYgdGhpcy53aWRnZXRDb250cm9sLmVycm9ycztcblxuICAgICAgICBpZiAoIWZpZWxkRXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkRXJyb3JzLmhhc093blByb3BlcnR5KCdlcnJvck1lc3NhZ2UnKSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IF8uZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gXy5rZXlzKGZpZWxkRXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uTXNnS2V5ID0gXy5nZXQoREVGQVVMVF9WQUxJREFUT1IsIGtleSkgfHwgdGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlVHlwZTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uTXNnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXy5nZXQodGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMsIHZhbGlkYXRpb25Nc2dLZXkpIHx8IHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBtc2cgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIGZvcm1maWVsZCBhbmQgZm9ybSBhcyBhcmd1bWVudHMgdG8gdGhlIGVycm9yTWVzc2FnZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZyh0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWRhdGlvbm1lc3NhZ2UgZm9yIGZpZWxkcyBvdGhlciB0aGFuIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFOUcsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixPQUFPLEVBQUUsUUFBUTtJQUNqQixHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxVQUFVO0lBQ2YsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsYUFBYSxFQUFDLGVBQWU7Q0FDaEMsQ0FBQztBQUVGLE1BQU0sT0FBTyxvQkFBb0I7SUFvQjdCLFlBQVksUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFlO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFh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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNyRixJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksUUFBUSxFQUFFLENBQUM7b0JBQ2pDLHdFQUF3RTtvQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSix3RkFBd0Y7Z0JBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVkFMSURBVE9SLCAkd2F0Y2gsICR1bndhdGNoLCBGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Y2xvbmVEZWVwLCBjb25jYXQsIGV4dGVuZCwgZmlsdGVyLCBmaW5kLCBmb3JFYWNoLCBnZXQsIGlzRW1wdHksIGlzRnVuY3Rpb24sIHRvVXBwZXJ9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9WQUxJREFUT1IgPSB7XG4gICAgcGF0dGVybjogJ3JlZ2V4cCcsXG4gICAgbWF4OiAnbWF4dmFsdWUnLFxuICAgIG1pbjogJ21pbnZhbHVlJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgICBtYXhsZW5ndGg6ICdtYXhjaGFycycsXG4gICAgbWluZGF0ZTogJ21pbmRhdGUnLFxuICAgIG1heGRhdGU6ICdtYXhkYXRlJyxcbiAgICBleGNsdWRlZGF0ZXM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIGV4Y2x1ZGVkYXlzOiAnZXhjbHVkZWRheXMnLFxuICAgIGludmFsaWROdW1iZXI6J2ludmFsaWROdW1iZXInXG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUZpZWxkVmFsaWRhdGlvbnMge1xuICAgIHByaXZhdGUgaGFzVmFsaWRhdG9ycztcblxuICAgIC8vIEluc3RhbmNlIG9mIHRoZSBkaXJlY3RpdmUgdGFibGUtY29sdW1uLCBmb3JtLWZpZWxkLi5cbiAgICBwcml2YXRlIGluc3RhbmNlO1xuICAgIC8vIElubGluZSBmb3JtIHdpZGdldFxuICAgIHB1YmxpYyBmb3Jtd2lkZ2V0O1xuICAgIC8vIFdpZGdldCB0eXBlXG4gICAgcHJpdmF0ZSB3aWRnZXR0eXBlO1xuICAgIC8vIEZyb20gY29udHJvbFxuICAgIHByaXZhdGUgd2lkZ2V0Q29udHJvbDtcbiAgICAvLyBQYXJlbnQgd2lkZ2V0IGNvbnRleHQgVGFibGUsIEZvcm0uLlxuICAgIHByaXZhdGUgd2lkZ2V0Q29udGV4dDtcbiAgICAvLyBPcHRpb25hbCB0YWJsZSBjb2x1bW4gdHlwZSBxdWlja2VkaXQgbmV3cm93LyBpbmxpbmUgZWRpdFxuICAgIHByaXZhdGUgdGFibGVGaWVsZFR5cGU7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlczogYW55O1xuICAgIHByaXZhdGUgX3N5bmNWYWxpZGF0b3JzOiBhbnk7XG4gICAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JGbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2UsIGZvcm13aWRnZXQsIHdpZGdldHR5cGUsIHdpZGdldENvbnRyb2wsIHdpZGdldENvbnRleHQsIHRhYmxlRmllbGRUeXBlPyl7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgdGhpcy5mb3Jtd2lkZ2V0ID0gZm9ybXdpZGdldDtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gd2lkZ2V0dHlwZTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sID0gd2lkZ2V0Q29udHJvbDtcbiAgICAgICAgdGhpcy53aWRnZXRDb250ZXh0ID0gd2lkZ2V0Q29udGV4dDtcblxuICAgICAgICB0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcyA9IFtdO1xuICAgICAgICBpZiAodGFibGVGaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGaWVsZFR5cGUgPSB0YWJsZUZpZWxkVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydGVkIGRlZmF1bHQgdmFsaWRhdG9yc1xuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVxdWlyZWQgJiYgdGhpcy5pbnN0YW5jZS5zaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94L3RvZ2dsZSB3aWRnZXQsIHJlcXVpcmVkIHZhbGlkYXRpb24gc2hvdWxkIGNvbnNpZGVyIHRydWUgdmFsdWUgb25seVxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1ggfHwgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBpc0Z1bmN0aW9uKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaCh0aGlzLmZvcm13aWRnZXQudmFsaWRhdGUuYmluZCh0aGlzLmZvcm13aWRnZXQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3ZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICAvLyBPbiBjaGFuZ2Ugb2YgYW55IHZhbGlkYXRpb24gcHJvcGVydHksIHNldCB0aGUgYW5ndWxhciBmb3JtIHZhbGlkYXRvcnNcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5fdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcblxuICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzLnB1c2goY3VzdG9tVmFsaWRhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndpZGdldENvbnRleHQubmdmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbGlkYXRvcnMsIChmbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gZm47XG4gICAgICAgICAgICBpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBmbi5iaW5kKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGZuKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBhc3luY1ZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGQuIEFzc2lnbnMgdmFsaWRhdGlvbm1lc3NhZ2VzIGZyb20gdGhlIHJldHVybmVkIHJlc3BvbnNlXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuZ2V0UHJvbWlzZUxpc3QodmFsaWRhdG9ycykpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGVyciBvYmogaGFzIHZhbGlkYXRpb25NZXNzYWdlIGtleSwgdGhlbiBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UgdXNpbmcgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSBpbiB0aGUgZXJyIG9iamVjdCBhcyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IGtleXMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAoZXJyW2tleXNbMF1dKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gY29udHJvbCBzdGF0dXMgaXMgbm90IGNoYW5nZWQgZnJvbSBwZW5kaW5nLiBUaGlzIGlzIGFuIGFuZ3VsYXIgaXNzdWUgcmVmZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTMyMDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JTdGF0dXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5vblN0YXR1c0NoYW5nZSh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzLCB0aGlzLnRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICBpZih0aGlzLndpZGdldENvbnRleHQubmdmb3JtLnRvdWNoZWQpe1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGVmYXVsdFZhbGlkYXRvcih0eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXQoVkFMSURBVE9SLCB0b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IGNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5oYXNWYWxpZGF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChfY2xvbmVWYWxpZGF0b3JzLCAob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRpb24gaXMgYm91bmQgdG8gZnVuY3Rpb24uXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBvYmogKGkuZS4gdmFsaWRhdG9yIGZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIF9jbG9uZVZhbGlkYXRvcnNbaW5kZXhdID0gb2JqLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMucHVzaChfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgZGVmYXVsdCB2YWxpZGF0b3IgbGlrZSByZXF1aXJlZCwgbWF4Y2hhcnMgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IGdldChvYmosICdlcnJvck1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWYWxpZGF0b3Ioa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosICd2YWxpZGF0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gX3N5bmNWYWxpZGF0b3JzIGNvbnRhaW5zIGFsbCB0aGUgY3VzdG9tIHZhbGlkYXRpb25zIG9uIHRoZSBmb3JtIGZpZWxkLiB3aWxsIG5vdCBpbmNsdWRlIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBmaWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWZpZWxkID0gZmluZCh0aGlzLndpZGdldENvbnRleHRbY29udGV4dF0sIHsna2V5JzogZmllbGR9KTtcbiAgICAgICAgICAgIGlmIChmb3JtZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzLnB1c2godGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG93IHRoZSB2YWxpZGF0aW9uIGVycm9zIHNob3cgd2hlbiBmb3JtIGlzIHRvdWNoZWQgYW5kIG5vdCBvbiBsb2FkLiBUaGlzIGp1c3QgaGlnaGxpZ2h0cyB0aGUgZmllbGQgdGhhdCBpcyBzdWJzY3JpYmVkIGZvciBjaGFuZ2VzLlxuICAgICAgICBpZiAodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2F0Y2hlcyBmb3IgY2hhbmdlcyBpbiB0aGUgYm91bmQgZnVuY3Rpb24gZm9yIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICB3YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKGZuLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS53aWRnZXRJZH1fYCArIGtleSArICdfZm9ybUZpZWxkJztcbiAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgLy9bVG9kby1DU1BdOiBOZWVkIGNsYXJpdHkgZ2VuZXJhdGUgdGhpcyBleHByIGZuIGlmIGZvcm0gaXMgcHJlc2VudCBpbiB0aGUgcGFnZVxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCgnYm91bmRGbihmbiknLCBleHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGludm9rZXMgYm90aCBjdXN0b20gc3luYyB2YWxpZGF0aW9ucyBhbmQgZGVmYXVsdCB2YWxpZGF0aW9ucy5cbiAgICBhcHBseURlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb25jYXQodGhpcy5fc3luY1ZhbGlkYXRvcnMgfHwgW10sIHZhbGlkYXRvcnMpKTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHRoaXMud2lkZ2V0Q29udHJvbCAmJiB0aGlzLndpZGdldENvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmICghZmllbGRFcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBrZXlzID0ga2V5cyhmaWVsZEVycm9ycyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1zZ0tleSA9IGdldChERUZBVUxUX1ZBTElEQVRPUiwga2V5KSB8fCB0aGlzLmZvcm13aWRnZXQudmFsaWRhdGVUeXBlO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25Nc2dLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBnZXQodGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMsIHZhbGlkYXRpb25Nc2dLZXkpIHx8IHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBtc2cgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIGZvcm1maWVsZCBhbmQgZm9ybSBhcyBhcmd1bWVudHMgdG8gdGhlIGVycm9yTWVzc2FnZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZyh0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWRhdGlvbm1lc3NhZ2UgZm9yIGZpZWxkcyBvdGhlciB0aGFuIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=