obsidian-dev-utils 81.0.0 → 82.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/lib/cjs/abort-controller.cjs +12 -9
  3. package/dist/lib/cjs/abort-controller.d.cts +2 -2
  4. package/dist/lib/cjs/async-events.d.cts +1 -1
  5. package/dist/lib/cjs/async.cjs +5 -1
  6. package/dist/lib/cjs/async.d.cts +20 -2
  7. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
  8. package/dist/lib/cjs/css-class.cjs +6 -1
  9. package/dist/lib/cjs/css-class.d.cts +20 -0
  10. package/dist/lib/cjs/debug.d.cts +1 -1
  11. package/dist/lib/cjs/disposable.cjs +234 -0
  12. package/dist/lib/cjs/disposable.d.cts +124 -0
  13. package/dist/lib/cjs/error.cjs +26 -14
  14. package/dist/lib/cjs/error.d.cts +4 -3
  15. package/dist/lib/cjs/function.d.cts +1 -1
  16. package/dist/lib/cjs/html-element.cjs +9 -6
  17. package/dist/lib/cjs/html-element.d.cts +3 -3
  18. package/dist/lib/cjs/index.cjs +4 -1
  19. package/dist/lib/cjs/index.d.cts +1 -0
  20. package/dist/lib/cjs/library.cjs +1 -1
  21. package/dist/lib/cjs/object-utils.cjs +1 -1
  22. package/dist/lib/cjs/object-utils.d.cts +19 -9
  23. package/dist/lib/cjs/obsidian/@types/dataview/api/plugin-api.d.cts +1 -1
  24. package/dist/lib/cjs/obsidian/@types/dataview/data-index/index.d.cts +1 -1
  25. package/dist/lib/cjs/obsidian/@types/dataview/data-model/markdown.d.cts +2 -2
  26. package/dist/lib/cjs/obsidian/@types/dataview/data-model/serialized/markdown.d.cts +2 -2
  27. package/dist/lib/cjs/obsidian/@types/dataview/index.d.cts +1 -1
  28. package/dist/lib/cjs/obsidian/@types/dataview/query/engine.d.cts +1 -1
  29. package/dist/lib/cjs/obsidian/@types/dataview/typings/obsidian-ex.d.cts +1 -1
  30. package/dist/lib/cjs/obsidian/@types/dataview/ui/lp-render.d.cts +1 -1
  31. package/dist/lib/cjs/obsidian/@types/dataview/ui/markdown.d.cts +1 -1
  32. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/calendar-view.d.cts +1 -1
  33. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/inline-view.d.cts +1 -1
  34. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/list-view.d.cts +2 -2
  35. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/table-view.d.cts +2 -2
  36. package/dist/lib/cjs/obsidian/@types/dataview/ui/views/task-view.d.cts +1 -1
  37. package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
  38. package/dist/lib/cjs/obsidian/app.d.cts +1 -1
  39. package/dist/lib/cjs/obsidian/async-with-notice.cjs +3 -3
  40. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +7 -3
  41. package/dist/lib/cjs/obsidian/attachment-path.cjs +1 -1
  42. package/dist/lib/cjs/obsidian/attachment-path.d.cts +9 -1
  43. package/dist/lib/cjs/obsidian/backlink.cjs +1 -1
  44. package/dist/lib/cjs/obsidian/backlink.d.cts +6 -2
  45. package/dist/lib/cjs/obsidian/bases-view-registrar.d.cts +1 -1
  46. package/dist/lib/cjs/obsidian/callout.cjs +1 -1
  47. package/dist/lib/cjs/obsidian/callout.d.cts +8 -0
  48. package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +1 -1
  49. package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +1 -1
  50. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +1 -1
  51. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +4 -2
  52. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +1 -1
  53. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +1 -1
  54. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +4 -2
  55. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +2 -2
  56. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +2 -2
  57. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +2 -2
  58. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +1 -1
  59. package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -1
  60. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +1 -1
  61. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +5 -2
  62. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +1 -1
  63. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +5 -10
  64. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -7
  65. package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +2 -2
  66. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +2 -2
  67. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +1 -1
  68. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +1 -1
  69. package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +1 -1
  70. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +1 -1
  71. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -2
  72. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +1 -1
  73. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +1 -1
  74. package/dist/lib/cjs/obsidian/components/registry-component.d.cts +1 -1
  75. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +73 -29
  76. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +1 -1
  77. package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.d.cts +2 -2
  78. package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -1
  79. package/dist/lib/cjs/obsidian/dataview-link.cjs +1 -1
  80. package/dist/lib/cjs/obsidian/dataview-link.d.cts +3 -1
  81. package/dist/lib/cjs/obsidian/dataview.cjs +1 -1
  82. package/dist/lib/cjs/obsidian/dataview.d.cts +13 -3
  83. package/dist/lib/cjs/obsidian/editor-extension-registrar.d.cts +1 -1
  84. package/dist/lib/cjs/obsidian/editor-lock.cjs +245 -0
  85. package/dist/lib/cjs/obsidian/editor-lock.d.cts +57 -0
  86. package/dist/lib/cjs/obsidian/editor.cjs +7 -1
  87. package/dist/lib/cjs/obsidian/editor.d.cts +3 -2
  88. package/dist/lib/cjs/obsidian/file-change.cjs +1 -1
  89. package/dist/lib/cjs/obsidian/file-change.d.cts +5 -1
  90. package/dist/lib/cjs/obsidian/file-manager.d.cts +2 -2
  91. package/dist/lib/cjs/obsidian/file-system.cjs +1 -1
  92. package/dist/lib/cjs/obsidian/file-system.d.cts +28 -8
  93. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.d.cts +1 -1
  94. package/dist/lib/cjs/obsidian/hover-link-source-registrar.d.cts +1 -1
  95. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +1 -1
  96. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +4 -1
  97. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
  98. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
  99. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  100. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  101. package/dist/lib/cjs/obsidian/link.cjs +63 -10
  102. package/dist/lib/cjs/obsidian/link.d.cts +50 -17
  103. package/dist/lib/cjs/obsidian/logger.d.cts +1 -1
  104. package/dist/lib/cjs/obsidian/loop.cjs +1 -1
  105. package/dist/lib/cjs/obsidian/loop.d.cts +22 -8
  106. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +2 -2
  107. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +1 -1
  108. package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +16 -6
  109. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +1 -1
  110. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +5 -3
  111. package/dist/lib/cjs/obsidian/markdown-view.d.cts +1 -1
  112. package/dist/lib/cjs/obsidian/markdown.cjs +1 -1
  113. package/dist/lib/cjs/obsidian/markdown.d.cts +9 -1
  114. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
  115. package/dist/lib/cjs/obsidian/metadata-cache.cjs +67 -25
  116. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +9 -59
  117. package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -1
  118. package/dist/lib/cjs/obsidian/modals/alert.d.cts +2 -0
  119. package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -1
  120. package/dist/lib/cjs/obsidian/modals/confirm.d.cts +2 -0
  121. package/dist/lib/cjs/obsidian/modals/index.cjs +4 -1
  122. package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
  123. package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +234 -0
  124. package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +74 -0
  125. package/dist/lib/cjs/obsidian/modals/modal.d.cts +1 -1
  126. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -1
  127. package/dist/lib/cjs/obsidian/modals/prompt.d.cts +7 -1
  128. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -1
  129. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +2 -0
  130. package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +2 -2
  131. package/dist/lib/cjs/obsidian/obsidian-settings.d.cts +1 -1
  132. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +1 -1
  133. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +1 -1
  134. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +1 -1
  135. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +12 -6
  136. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +20 -15
  137. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +3 -3
  138. package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.d.cts +2 -2
  139. package/dist/lib/cjs/obsidian/queue.cjs +1 -1
  140. package/dist/lib/cjs/obsidian/queue.d.cts +15 -3
  141. package/dist/lib/cjs/obsidian/react/app-context.d.cts +1 -1
  142. package/dist/lib/cjs/obsidian/reference.d.cts +1 -1
  143. package/dist/lib/cjs/obsidian/resource-url.d.cts +1 -1
  144. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +1 -1
  145. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -1
  146. package/dist/lib/cjs/obsidian/setting-ex.d.cts +1 -1
  147. package/dist/lib/cjs/obsidian/vault-delete.d.cts +1 -1
  148. package/dist/lib/cjs/obsidian/vault.cjs +1 -1
  149. package/dist/lib/cjs/obsidian/vault.d.cts +10 -4
  150. package/dist/lib/cjs/obsidian/view-registrar.d.cts +1 -1
  151. package/dist/lib/cjs/obsidian/workspace.d.cts +1 -1
  152. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
  153. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +1 -1
  154. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
  155. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
  156. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +1 -1
  157. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -1
  158. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  159. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -1
  160. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
  161. package/dist/lib/cjs/script-utils/check-project-types.cjs +5 -1
  162. package/dist/lib/cjs/script-utils/check-project-types.d.cts +10 -2
  163. package/dist/lib/cjs/script-utils/cli-utils.d.cts +1 -1
  164. package/dist/lib/cjs/script-utils/commitlint-config.d.cts +1 -1
  165. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  166. package/dist/lib/cjs/script-utils/exec.d.cts +12 -0
  167. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +1 -1
  168. package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +2 -0
  169. package/dist/lib/cjs/script-utils/fs.d.cts +1 -1
  170. package/dist/lib/cjs/script-utils/json.cjs +1 -1
  171. package/dist/lib/cjs/script-utils/json.d.cts +3 -1
  172. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +1 -1
  173. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
  174. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
  175. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
  176. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +1 -1
  177. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +1 -1
  178. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
  179. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
  180. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +1 -1
  181. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +1 -1
  182. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +1 -1
  183. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.d.cts +2 -2
  184. package/dist/lib/cjs/script-utils/linters/eslint.cjs +1 -1
  185. package/dist/lib/cjs/script-utils/linters/eslint.d.cts +2 -0
  186. package/dist/lib/cjs/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
  187. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +1 -1
  188. package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +2 -0
  189. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +1 -1
  190. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +9 -1
  191. package/dist/lib/cjs/script-utils/npm.cjs +1 -1
  192. package/dist/lib/cjs/script-utils/npm.d.cts +3 -1
  193. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +1 -1
  194. package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +2 -0
  195. package/dist/lib/cjs/script-utils/validate-declarations.cjs +5 -42
  196. package/dist/lib/cjs/script-utils/validate-declarations.d.cts +22 -9
  197. package/dist/lib/cjs/script-utils/version.cjs +1 -1
  198. package/dist/lib/cjs/script-utils/version.d.cts +20 -7
  199. package/dist/lib/cjs/string.cjs +1 -1
  200. package/dist/lib/cjs/string.d.cts +6 -0
  201. package/dist/lib/cjs/value-provider.d.cts +1 -1
  202. package/dist/lib/esm/abort-controller.d.mts +2 -2
  203. package/dist/lib/esm/abort-controller.mjs +12 -9
  204. package/dist/lib/esm/async.d.mts +19 -1
  205. package/dist/lib/esm/async.mjs +5 -1
  206. package/dist/lib/esm/css-class.d.mts +20 -0
  207. package/dist/lib/esm/css-class.mjs +6 -1
  208. package/dist/lib/esm/disposable.d.mts +124 -0
  209. package/dist/lib/esm/disposable.mjs +122 -0
  210. package/dist/lib/esm/error.d.mts +4 -3
  211. package/dist/lib/esm/error.mjs +26 -14
  212. package/dist/lib/esm/html-element.d.mts +2 -2
  213. package/dist/lib/esm/html-element.mjs +9 -6
  214. package/dist/lib/esm/index.d.mts +1 -0
  215. package/dist/lib/esm/index.mjs +3 -1
  216. package/dist/lib/esm/library.mjs +1 -1
  217. package/dist/lib/esm/object-utils.d.mts +18 -8
  218. package/dist/lib/esm/object-utils.mjs +1 -1
  219. package/dist/lib/esm/obsidian/async-with-notice.d.mts +6 -2
  220. package/dist/lib/esm/obsidian/async-with-notice.mjs +3 -3
  221. package/dist/lib/esm/obsidian/attachment-path.d.mts +8 -0
  222. package/dist/lib/esm/obsidian/attachment-path.mjs +1 -1
  223. package/dist/lib/esm/obsidian/backlink.d.mts +6 -2
  224. package/dist/lib/esm/obsidian/backlink.mjs +1 -1
  225. package/dist/lib/esm/obsidian/callout.d.mts +8 -0
  226. package/dist/lib/esm/obsidian/callout.mjs +1 -1
  227. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +2 -0
  228. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +1 -1
  229. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +2 -0
  230. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +1 -1
  231. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +5 -2
  232. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -7
  233. package/dist/lib/esm/obsidian/components/disposable-component.mjs +3 -7
  234. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -2
  235. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +1 -1
  236. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +74 -32
  237. package/dist/lib/esm/obsidian/dataview-link.d.mts +3 -1
  238. package/dist/lib/esm/obsidian/dataview-link.mjs +1 -1
  239. package/dist/lib/esm/obsidian/dataview.d.mts +12 -2
  240. package/dist/lib/esm/obsidian/dataview.mjs +1 -1
  241. package/dist/lib/esm/obsidian/editor-lock.d.mts +57 -0
  242. package/dist/lib/esm/obsidian/editor-lock.mjs +141 -0
  243. package/dist/lib/esm/obsidian/editor.d.mts +2 -1
  244. package/dist/lib/esm/obsidian/editor.mjs +7 -1
  245. package/dist/lib/esm/obsidian/file-change.d.mts +4 -0
  246. package/dist/lib/esm/obsidian/file-change.mjs +1 -1
  247. package/dist/lib/esm/obsidian/file-system.d.mts +27 -7
  248. package/dist/lib/esm/obsidian/file-system.mjs +1 -1
  249. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
  250. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +4 -1
  251. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
  252. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  253. package/dist/lib/esm/obsidian/index.mjs +3 -1
  254. package/dist/lib/esm/obsidian/link.d.mts +48 -15
  255. package/dist/lib/esm/obsidian/link.mjs +64 -11
  256. package/dist/lib/esm/obsidian/loop.d.mts +21 -7
  257. package/dist/lib/esm/obsidian/loop.mjs +1 -1
  258. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +15 -5
  259. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +1 -1
  260. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -1
  261. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +1 -1
  262. package/dist/lib/esm/obsidian/markdown.d.mts +8 -0
  263. package/dist/lib/esm/obsidian/markdown.mjs +1 -1
  264. package/dist/lib/esm/obsidian/metadata-cache.d.mts +7 -57
  265. package/dist/lib/esm/obsidian/metadata-cache.mjs +67 -23
  266. package/dist/lib/esm/obsidian/modals/alert.d.mts +2 -0
  267. package/dist/lib/esm/obsidian/modals/alert.mjs +1 -1
  268. package/dist/lib/esm/obsidian/modals/confirm.d.mts +2 -0
  269. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  270. package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
  271. package/dist/lib/esm/obsidian/modals/index.mjs +3 -1
  272. package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +74 -0
  273. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +126 -0
  274. package/dist/lib/esm/obsidian/modals/prompt.d.mts +6 -0
  275. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -1
  276. package/dist/lib/esm/obsidian/modals/select-item.d.mts +2 -0
  277. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -1
  278. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +9 -3
  279. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +1 -1
  280. package/dist/lib/esm/obsidian/plugin/plugin.mjs +20 -15
  281. package/dist/lib/esm/obsidian/queue.d.mts +14 -2
  282. package/dist/lib/esm/obsidian/queue.mjs +1 -1
  283. package/dist/lib/esm/obsidian/vault.d.mts +9 -3
  284. package/dist/lib/esm/obsidian/vault.mjs +1 -1
  285. package/dist/lib/esm/script-utils/check-project-types.d.mts +9 -1
  286. package/dist/lib/esm/script-utils/check-project-types.mjs +5 -1
  287. package/dist/lib/esm/script-utils/exec.d.mts +12 -0
  288. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  289. package/dist/lib/esm/script-utils/formatters/dprint.d.mts +2 -0
  290. package/dist/lib/esm/script-utils/formatters/dprint.mjs +1 -1
  291. package/dist/lib/esm/script-utils/json.d.mts +2 -0
  292. package/dist/lib/esm/script-utils/json.mjs +1 -1
  293. package/dist/lib/esm/script-utils/linters/eslint.d.mts +2 -0
  294. package/dist/lib/esm/script-utils/linters/eslint.mjs +1 -1
  295. package/dist/lib/esm/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
  296. package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +2 -0
  297. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +1 -1
  298. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +8 -0
  299. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +1 -1
  300. package/dist/lib/esm/script-utils/npm.d.mts +2 -0
  301. package/dist/lib/esm/script-utils/npm.mjs +1 -1
  302. package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +2 -0
  303. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +1 -1
  304. package/dist/lib/esm/script-utils/validate-declarations.d.mts +22 -9
  305. package/dist/lib/esm/script-utils/validate-declarations.mjs +5 -49
  306. package/dist/lib/esm/script-utils/version.d.mts +20 -7
  307. package/dist/lib/esm/script-utils/version.mjs +1 -1
  308. package/dist/lib/esm/string.d.mts +6 -0
  309. package/dist/lib/esm/string.mjs +1 -1
  310. package/obsidian/Modals/minimizable-modal/package.json +6 -0
  311. package/obsidian/editor-lock/package.json +6 -0
  312. package/package.json +1 -1
  313. package/dist/dev/main.js +0 -30208
  314. package/dist/dev/manifest.json +0 -9
@@ -757,4 +757,4 @@ function toDisplayPath(params) {
757
757
  findOverExposure,
758
758
  formatOverExposureFindings
759
759
  });
760
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL292ZXItZXhwb3N1cmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPdmVyLWV4cG9zdXJlIGFuYWx5emVyLlxuICpcbiAqIEZpbmRzIGRlY2xhcmF0aW9ucyBleHBvc2VkIG1vcmUgYnJvYWRseSB0aGFuIHRoZWlyIHJlZmVyZW5jZXMgcmVxdWlyZSwgc28gdGhlIGV4cG9zdXJlIGNhbiBiZVxuICogdGlnaHRlbmVkOlxuICpcbiAqIC0gYGV4cG9ydGBlZCBzeW1ib2xzIHJlZmVyZW5jZWQgb25seSB3aXRoaW4gdGhlaXIgb3duIGZpbGUgXHUyMDE0IHRoZSBgZXhwb3J0YCBjYW4gYmUgZHJvcHBlZC5cbiAqIC0gYHB1YmxpY2AgY2xhc3MgbWVtYmVycyByZWZlcmVuY2VkIG9ubHkgaW5zaWRlIHRoZWlyIG93biBjbGFzcyBcdTIwMTQgdGhleSBjYW4gYmUgYHByaXZhdGVgLlxuICogLSBgcHVibGljYCBjbGFzcyBtZW1iZXJzIHJlZmVyZW5jZWQgb25seSBpbnNpZGUgdGhlaXIgb3duIGNsYXNzIGFuZCBpdHMgc3ViY2xhc3NlcyBcdTIwMTQgdGhleSBjYW4gYmVcbiAqICAgYHByb3RlY3RlZGAuXG4gKiAtIGBwcm90ZWN0ZWRgIGNsYXNzIG1lbWJlcnMgcmVmZXJlbmNlZCBvbmx5IGluc2lkZSB0aGVpciBvd24gY2xhc3MgXHUyMDE0IHRoZXkgY2FuIGJlIGBwcml2YXRlYC5cbiAqXG4gKiBUaGUgYW5hbHlzaXMgaXMgd2hvbGUtcHJvZ3JhbSBhbmQgdHlwZS1hd2FyZTogaXQgdXNlcyB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBzZXJ2aWNlJ3NcbiAqIGZpbmQtYWxsLXJlZmVyZW5jZXMgdG8gbG9jYXRlIGV2ZXJ5IHVzZSBvZiBlYWNoIGRlY2xhcmF0aW9uLCB0aGVuIGNsYXNzaWZpZXMgdGhlIHRpZ2h0ZXN0XG4gKiBleHBvc3VyZSB0aGF0IHN0aWxsIGNvdmVycyBhbGwgcmVmZXJlbmNlcy4gQmVjYXVzZSBgZmluZFJlZmVyZW5jZXNgIGRvZXMgbm90IGxpbmsgYSBzdHJpbmctbGl0ZXJhbFxuICogYXJndW1lbnQgYmFjayB0byBhIG1lbWJlciBkZWNsYXJhdGlvbiB3aGVuIHRoZSBwYXJhbWV0ZXIgaXMgYSBjb25kaXRpb25hbC9tYXBwZWQga2V5IHR5cGUgKGUuZy5cbiAqIGBiaW5kKGNvbXBvbmVudCwgJ3NvbWVTZXR0aW5nJylgIHdoZXJlIHRoZSBrZXkgaXMgdHlwZWQgYENvbmRpdGlvbmFsS2V5czxTZXR0aW5ncywgXHUyMDI2PmApLCBtZW1iZXJcbiAqIGFuYWx5c2lzIGFkZGl0aW9uYWxseSB0cmVhdHMgYSBzdHJpbmcgbGl0ZXJhbCB3aG9zZSB0ZXh0IGVxdWFscyB0aGUgbWVtYmVyIG5hbWUgYXMgYSByZWZlcmVuY2UgXHUyMDE0XG4gKiBidXQgb25seSB3aGVuIGl0cyBjb250ZXh0dWFsIHR5cGUgaXMgYSBzdHJpbmctbGl0ZXJhbCB0eXBlIChvciB1bmlvbiBvZiB0aGVtKSBhbGwgb2Ygd2hvc2UgbWVtYmVyc1xuICogYXJlIGtleXMgb2YgdGhlIGRlY2xhcmluZyBjbGFzcywgc28gaW5jaWRlbnRhbCBzYW1lLW5hbWVkIHN0cmluZ3MgKGBjb25zb2xlLmxvZygnbmFtZScpYCkgYXJlIG5vdFxuICogbWlzY291bnRlZC4gTWVtYmVycyBpbnZva2VkIGJ5IHRoZSBmcmFtZXdvcmsgdmlhIHJlZ2lzdHJhdGlvblxuICogcmF0aGVyIHRoYW4gYnkgdmlzaWJsZSByZWZlcmVuY2VzIChPYnNpZGlhbiBsaWZlY3ljbGUgaG9va3MsIHNldHRpbmdzLXRhYiBgZGlzcGxheWAsIGV0Yy4pIGFyZVxuICogZXhjbHVkZWQgdmlhIHtAbGluayBMSUZFQ1lDTEVfQUxMT1dMSVNUfSwgYXMgYXJlIGBvdmVycmlkZWAgYW5kIGBzdGF0aWNgIG1lbWJlcnMgd2hvc2UgZXhwb3N1cmUgaXNcbiAqIGNvbnN0cmFpbmVkIGJ5IGEgYmFzZSBkZWNsYXJhdGlvbi4gRUNNQVNjcmlwdCBoYXJkLXByaXZhdGUgbWVtYmVycyAoYCNuYW1lYCkgYXJlIGFsc28gZXhjbHVkZWQgXHUyMDE0XG4gKiB0aGV5IGFyZSBhbHJlYWR5IG1heGltYWxseSBwcml2YXRlIGFuZCBjYW5ub3QgY2FycnkgYSB2aXNpYmlsaXR5IG1vZGlmaWVyLiBBIGRlY2xhcmF0aW9uIGNhcnJ5aW5nXG4gKiBhIFRTRG9jIChgLyoqIFx1MjAyNiAqXFwvYCkgZG9jdW1lbnRhdGlvbiBjb21tZW50IGlzIGxpa2V3aXNlIGV4Y2x1ZGVkIFx1MjAxNCB3aGV0aGVyIGEgdG9wLWxldmVsIGBleHBvcnRgIG9yXG4gKiBhIGNsYXNzIG1lbWJlciwgZG9jdW1lbnRpbmcgaXQgaXMgYSBkZWxpYmVyYXRlIHNpZ25hbCB0aGF0IGl0IGlzIHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksXG4gKiByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGN1cnJlbnRseSBoYXBwZW5zIHRvIGJlIHJlZmVyZW5jZWQuXG4gKlxuICogQSBtZW1iZXIgcmVmZXJlbmNlZCBvbmx5IGZyb20gdGVzdCBmaWxlcyBpcyByZXBvcnRlZCB3aXRoIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seX1cbiAqIHNldCwgc3VyZmFjaW5nIG1lbWJlcnMgd2lkZW5lZCBwdXJlbHkgZm9yIHRlc3RhYmlsaXR5IFx1MjAxNCB0aGUgY2Fub25pY2FsIGNhc2UgZm9yIGV4dHJhY3RpbmcgbG9naWNcbiAqIGludG8gYW4gaW5kZXBlbmRlbnRseSB0ZXN0YWJsZSBjb21wb25lbnQgaW5zdGVhZC5cbiAqXG4gKiBCZXlvbmQgcmVwb3J0aW5nLCBwYXNzaW5nIGBzaG91bGRGaXhgIHRvIHtAbGluayBmaW5kT3ZlckV4cG9zdXJlfSAvIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfVxuICogcmV3cml0ZXMgdGhlIHNvdXJjZSBpbiBwbGFjZTogZHJvcHBpbmcgdGhlIGBleHBvcnRgIGtleXdvcmQsIG9yIHJlcGxhY2luZy9pbnNlcnRpbmcgYSBgcHJpdmF0ZWBcbiAqIG9yIGBwcm90ZWN0ZWRgIG1vZGlmaWVyLiBFYWNoIGZpbmRpbmcgdGhlbiBjYXJyaWVzIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLndhc0ZpeGVkfSAvXG4gKiB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufS4gQ2hhbmdlcyB0aGF0IGNhbm5vdCBiZSBzYWZlbHkgYXV0b21hdGVkIFx1MjAxNCB0aG9zZSBmb3JjZWRcbiAqIG9ubHkgYnkgdGVzdCByZWZlcmVuY2VzLCBkZWNvcmF0ZWQgbWVtYmVycywgb3IgYW4gYGV4cG9ydGAgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nIFx1MjAxNFxuICogYXJlIHJlcG9ydGVkIGFzIHNraXBwZWQgYW5kIGxlZnQgdW50b3VjaGVkLlxuICpcbiAqIEFkZGl0aW9uYWxseSBwYXNzaW5nIGBzaG91bGRGb3JjZWAgKG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIGBzaG91bGRGaXhgKSB0aWdodGVucyB0aGVcbiAqIGRlY2xhcmF0aW9ucyBoZWxkIHdpZGUgcHVyZWx5IGJ5IHRlc3QgcmVmZXJlbmNlcyB0b28gXHUyMDE0IHRoZSBwcm9kdWN0aW9uIGhhbGYgb2YgdGhlIGNhbm9uaWNhbFxuICogdGVzdC1vbmx5IG1pZ3JhdGlvbjogdGhlIG1lbWJlciBiZWNvbWVzIGBwcml2YXRlYCAvIHRoZSBgZXhwb3J0YCBpcyBkcm9wcGVkLCBsZWF2aW5nIG9ubHkgdGhlXG4gKiB0ZXN0IHRvIHN3aXRjaCB0byBhIGNhc3QtYmFzZWQgYWNjZXNzLiBEZWNvcmF0ZWQgbWVtYmVycyBhbmQgZXhwb3J0cyBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkXG4gKiBzaWJsaW5nIHN0YXkgc2tpcHBlZCBldmVuIHVuZGVyIGBzaG91bGRGb3JjZWAsIGJlY2F1c2Ugbm8gZWRpdCBjYW4gYmUgYXBwbGllZCBzYWZlbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDbGFzc0RlY2xhcmF0aW9uLFxuICBDbGFzc0xpa2VEZWNsYXJhdGlvbixcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBFbnVtRGVjbGFyYXRpb24sXG4gIEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIEdldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIEludGVyZmFjZURlY2xhcmF0aW9uLFxuICBJU2NyaXB0U25hcHNob3QsXG4gIExhbmd1YWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlSG9zdCxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFJlZmVyZW5jZWRTeW1ib2wsXG4gIFNldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIFNvdXJjZUZpbGUsXG4gIFN0cmluZ0xpdGVyYWxMaWtlLFxuICBUeXBlLFxuICBUeXBlQWxpYXNEZWNsYXJhdGlvbixcbiAgVHlwZUNoZWNrZXIsXG4gIFZhcmlhYmxlU3RhdGVtZW50XG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICBjYW5IYXZlTW9kaWZpZXJzLFxuICBjcmVhdGVEb2N1bWVudFJlZ2lzdHJ5LFxuICBjcmVhdGVMYW5ndWFnZVNlcnZpY2UsXG4gIGdldERlY29yYXRvcnMsXG4gIGdldERlZmF1bHRMaWJGaWxlUGF0aCxcbiAgZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMsXG4gIGdldE1vZGlmaWVycyxcbiAgaXNDbGFzc0RlY2xhcmF0aW9uLFxuICBpc0NsYXNzTGlrZSxcbiAgaXNFbnVtRGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIGlzTWV0aG9kRGVjbGFyYXRpb24sXG4gIGlzUHJpdmF0ZUlkZW50aWZpZXIsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1NvdXJjZUZpbGUsXG4gIGlzU3RyaW5nTGl0ZXJhbExpa2UsXG4gIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24sXG4gIGlzVmFyaWFibGVTdGF0ZW1lbnQsXG4gIFNjcmlwdFNuYXBzaG90LFxuICBTeW50YXhLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VUc0NvbmZpZyxcbiAgdG9DYW5vbmljYWxcbn0gZnJvbSAnLi4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMge1xuICAvKiogVGhlIGxhbmd1YWdlIHNlcnZpY2UgdG8gcXVlcnkgZm9yIHJlZmVyZW5jZXMgYW5kIHR5cGVzLiAqL1xuICByZWFkb25seSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBhbmFseXplZCBzb3VyY2UgZmlsZSwgYmVmb3JlIHRoYXQgZmlsZSBpcyBwcm9jZXNzZWQuIFRoZVxuICAgKiB3aG9sZS1wcm9ncmFtIHJlZmVyZW5jZSBhbmFseXNpcyBpcyBzbG93LCBzbyB0aGlzIGxldHMgY2FsbGVycyByZXBvcnQgbGl2ZSBwcm9ncmVzcyBpbnN0ZWFkIG9mXG4gICAqIGFwcGVhcmluZyB0byBoYW5nLlxuICAgKi9cbiAgb25Qcm9ncmVzcz8odGhpczogdm9pZCwgcHJvZ3Jlc3M6IE92ZXJFeHBvc3VyZVByb2dyZXNzKTogdm9pZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGVhY2ggZml4YWJsZSBmaW5kaW5nIGlzIHRpZ2h0ZW5lZCBpbiBwbGFjZSB2aWEge0BsaW5rIHdyaXRlRmlsZX0gKHdoaWNoIG11c3QgdGhlblxuICAgKiBiZSBwcm92aWRlZCksIGFuZCB0aGUgcmV0dXJuZWQgZmluZGluZ3MgY2Fycnkge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcud2FzRml4ZWR9IC9cbiAgICoge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0uIFdoZW4gYGZhbHNlYCBvciBvbWl0dGVkLCB0aGUgYW5hbHlzaXMgb25seSByZXBvcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAgKG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIHtAbGluayBzaG91bGRGaXh9KSwgZGVjbGFyYXRpb25zIGhlbGQgd2lkZSBwdXJlbHkgYnlcbiAgICogdGVzdCByZWZlcmVuY2VzIGFyZSB0aWdodGVuZWQgdG9vLCBpbnN0ZWFkIG9mIGJlaW5nIHNraXBwZWQgd2l0aCBhIGB0ZXN0LW9ubHlgXG4gICAqIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLnNraXBSZWFzb259LiBEZWNvcmF0ZWQgbWVtYmVycyBhbmQgZXhwb3J0cyBzaGFyZWQgd2l0aCBhXG4gICAqIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcgc3RheSBza2lwcGVkIHJlZ2FyZGxlc3MsIGJlY2F1c2Ugbm8gZWRpdCBjYW4gYmUgYXBwbGllZCBzYWZlbHkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGb3JjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIHByb2plY3QncyBgc3JjYCBmb2xkZXIuIE9ubHkgZGVjbGFyYXRpb25zIGluIG5vbi10ZXN0IGZpbGVzXG4gICAqIHVuZGVyIHRoaXMgZm9sZGVyIGFyZSBhbmFseXplZDsgZGVjbGFyYXRpb25zIGVsc2V3aGVyZSAodGVzdCBmaWxlcywgZGVwZW5kZW5jaWVzKSBhcmUgaWdub3JlZFxuICAgKiBidXQgc3RpbGwgY291bnRlZCBhcyByZWZlcmVuY2Ugc2l0ZXMuXG4gICAqL1xuICByZWFkb25seSBzcmNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogV3JpdGVzIHRoZSB0aWdodGVuZWQgY29udGVudHMgb2YgYSBjaGFuZ2VkIGZpbGUgYmFjayB0byBkaXNrLiBSZXF1aXJlZCB3aGVuIHtAbGluayBzaG91bGRGaXh9XG4gICAqIGlzIGB0cnVlYDsgaWdub3JlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byB3cml0ZSAob3JpZ2luYWwgY2FzaW5nLCBhcyBzdG9yZWQgaW4gdGhlIHByb2dyYW0pLlxuICAgKiBAcGFyYW0gY29udGVudCAtIFRoZSBmdWxsIG5ldyBmaWxlIGNvbnRlbnRzLlxuICAgKi9cbiAgd3JpdGVGaWxlPyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3RQYXJhbXMge1xuICAvKiogVGhlIGNvbXBpbGVyIG9wdGlvbnMuICovXG4gIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xuXG4gIC8qKiBUaGUgZmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgcHJvZ3JhbS4gKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogVGhlIGZpbGUtc3lzdGVtIG9wZXJhdGlvbnMgdXNlZCB0byByZWFkIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IE92ZXJFeHBvc3VyZUZpbGVTeXN0ZW07XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2VQYXJhbXMge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYC4gKi9cbiAgcmVhZG9ubHkgdHNDb25maWdQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGV4cG9zdXJlIGxldmVsIGEgZGVjbGFyYXRpb24gY3VycmVudGx5IGhhcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VycmVudEV4cG9zdXJlID0gJ2V4cG9ydCcgfCAncHJvdGVjdGVkJyB8ICdwdWJsaWMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kT3ZlckV4cG9zdXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgb25jZSBwZXIgYW5hbHl6ZWQgc291cmNlIGZpbGUsIGZvciBsaXZlIHByb2dyZXNzIHJlcG9ydGluZy4gRm9yd2FyZGVkXG4gICAqIHRvIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAgICovXG4gIG9uUHJvZ3Jlc3M/KHRoaXM6IHZvaWQsIHByb2dyZXNzOiBPdmVyRXhwb3N1cmVQcm9ncmVzcyk6IHZvaWQ7XG5cbiAgLyoqIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdCAodGhlIGZvbGRlciBjb250YWluaW5nIGB0c2NvbmZpZy5qc29uYCBhbmQgYHNyY2ApLiAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBmaXhhYmxlIGZpbmRpbmdzIGFyZSB0aWdodGVuZWQgaW4gcGxhY2Ugb24gZGlzayAodGhlIGBleHBvcnRgIGtleXdvcmQgaXMgZHJvcHBlZCxcbiAgICogb3IgYSBgcHJpdmF0ZWAgLyBgcHJvdGVjdGVkYCBtb2RpZmllciBpcyBpbnNlcnRlZC9yZXBsYWNlZCkuIFdoZW4gYGZhbHNlYCBvciBvbWl0dGVkLCB0aGVcbiAgICogcHJvamVjdCBpcyBvbmx5IGFuYWx5emVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAgKG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIHtAbGluayBzaG91bGRGaXh9KSwgZGVjbGFyYXRpb25zIGhlbGQgd2lkZSBwdXJlbHkgYnlcbiAgICogdGVzdCByZWZlcmVuY2VzIGFyZSB0aWdodGVuZWQgdG9vLCBpbnN0ZWFkIG9mIGJlaW5nIHNraXBwZWQuIERlY29yYXRlZCBtZW1iZXJzIGFuZCBleHBvcnRzXG4gICAqIHNoYXJlZCB3aXRoIGEgc3RpbGwtZXhwb3J0ZWQgc2libGluZyBzdGF5IHNraXBwZWQgcmVnYXJkbGVzcy4gRm9yd2FyZGVkIHRvXG4gICAqIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZvcmNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE92ZXJFeHBvc3VyZUZpbmRpbmdzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHNldCwgZmlsZSBwYXRocyBpbiB0aGUgcmVwb3J0IGFyZSByZW5kZXJlZCByZWxhdGl2ZSB0byB0aGlzIGZvbGRlciAodHlwaWNhbGx5IHRoZSBjdXJyZW50XG4gICAqIHdvcmtpbmcgZGlyZWN0b3J5KSBpbnN0ZWFkIG9mIGFzIGFic29sdXRlIHBhdGhzLiBQYXRocyBvdXRzaWRlIHRoZSBmb2xkZXIgc3RheSBhYnNvbHV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VGb2xkZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBmaWxlLXN5c3RlbSBvcGVyYXRpb25zIHRoZSBsYW5ndWFnZS1zZXJ2aWNlIGhvc3QgbmVlZHMuIEluamVjdGluZyB0aGlzIChyYXRoZXIgdGhhblxuICogYWx3YXlzIHVzaW5nIGB0eXBlc2NyaXB0YCdzIGBzeXNgKSBsZXRzIHRlc3RzIGRyaXZlIHRoZSBhbmFseXplciBhZ2FpbnN0IGluLW1lbW9yeSBzb3VyY2VzIHdpdGggbm9cbiAqIHJlYWwgZmlsZS1zeXN0ZW0gYWNjZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZUZpbGVTeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGRpcmVjdG9yeSBleGlzdHMuXG4gICAqL1xuICBkaXJlY3RvcnlFeGlzdHModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBmaWxlIGV4aXN0cy5cbiAgICovXG4gIGZpbGVFeGlzdHModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBnZXRDdXJyZW50RGlyZWN0b3J5KHRoaXM6IHZvaWQpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gRGlyZWN0b3J5IHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBpbW1lZGlhdGUgc3ViZGlyZWN0b3J5IG5hbWVzLlxuICAgKi9cbiAgZ2V0RGlyZWN0b3JpZXModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gUm9vdCBkaXJlY3RvcnkuXG4gICAqIEBwYXJhbSBleHRlbnNpb25zIC0gRXh0ZW5zaW9ucyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0gZXhjbHVkZSAtIFBhdHRlcm5zIHRvIGV4Y2x1ZGUuXG4gICAqIEBwYXJhbSBpbmNsdWRlIC0gUGF0dGVybnMgdG8gaW5jbHVkZS5cbiAgICogQHBhcmFtIGRlcHRoIC0gTWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBmaWxlIHBhdGhzLlxuICAgKi9cbiAgcmVhZERpcmVjdG9yeSh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGV4dGVuc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXSwgZXhjbHVkZT86IHJlYWRvbmx5IHN0cmluZ1tdLCBpbmNsdWRlPzogcmVhZG9ubHkgc3RyaW5nW10sIGRlcHRoPzogbnVtYmVyKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50cywgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICByZWFkRmlsZSh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZUZpbmRpbmcge1xuICAvKiogMS1iYXNlZCBjb2x1bW4gb2YgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZS4gKi9cbiAgcmVhZG9ubHkgY29sdW1uOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjdXJyZW50IGV4cG9zdXJlIGxldmVsLiAqL1xuICByZWFkb25seSBjdXJyZW50RXhwb3N1cmU6IEN1cnJlbnRFeHBvc3VyZTtcblxuICAvKiogQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSBkZWNsYXJpbmcgdGhlIHN5bWJvbC4gKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAvKiogYHRydWVgIHdoZW4gdGhlIGRlY2xhcmF0aW9uIGhhcyBubyByZWZlcmVuY2VzIGF0IGFsbCAoYmVzaWRlcyBpdHNlbGYpLiAqL1xuICByZWFkb25seSBoYXNOb1JlZmVyZW5jZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGB0cnVlYCB3aGVuIHRoZSBkZWNsYXJhdGlvbiB3b3VsZCBxdWFsaWZ5IGZvciBhIHRpZ2h0ZXIgZXhwb3N1cmUgaWYgbm90IGZvciByZWZlcmVuY2VzIGNvbWluZ1xuICAgKiBleGNsdXNpdmVseSBmcm9tIHRlc3QgZmlsZXMgXHUyMDE0IGkuZS4gaXQgaXMgZXhwb3NlZCBwdXJlbHkgZm9yIHRlc3RhYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNGb3JjZWRCeVRlc3RPbmx5OiBib29sZWFuO1xuXG4gIC8qKiBgdHJ1ZWAgZm9yIGEgY2xhc3MgbWVtYmVyLCBgZmFsc2VgIGZvciBhIHRvcC1sZXZlbCBleHBvcnQuICovXG4gIHJlYWRvbmx5IGlzTWVtYmVyOiBib29sZWFuO1xuXG4gIC8qKiAxLWJhc2VkIGxpbmUgb2YgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZS4gKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgZGVjbGFyZWQgbmFtZS4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbiBhIGZpeCBydW4sIHdoeSB0aGlzIGZpbmRpbmcgd2FzIGxlZnQgdW50b3VjaGVkIGluc3RlYWQgb2YgdGlnaHRlbmVkOyBgbnVsbGAgd2hlbiBpdCB3YXNcbiAgICogZml4ZWQgb3Igd2hlbiB0aGUgYW5hbHlzaXMgb25seSByZXBvcnRlZCAoYHNob3VsZEZpeGAgb2ZmKS5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBSZWFzb246IG51bGwgfCBPdmVyRXhwb3N1cmVTa2lwUmVhc29uO1xuXG4gIC8qKiBUaGUgZXhwb3N1cmUgdGhlIGRlY2xhcmF0aW9uIGNvdWxkIGJlIHRpZ2h0ZW5lZCB0by4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGVkRXhwb3N1cmU6IFN1Z2dlc3RlZEV4cG9zdXJlO1xuXG4gIC8qKiBgdHJ1ZWAgd2hlbiBhIGZpeCBydW4gdGlnaHRlbmVkIHRoaXMgZGVjbGFyYXRpb24gaW4gcGxhY2UuIEFsd2F5cyBgZmFsc2VgIGluIGEgcmVwb3J0IHJ1bi4gKi9cbiAgcmVhZG9ubHkgd2FzRml4ZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvZ3Jlc3MgcmVwb3J0ZWQgd2hpbGUgYW5hbHl6aW5nIGEgcHJvamVjdCwgb25lIGV2ZW50IHBlciBhbmFseXplZCBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVyRXhwb3N1cmVQcm9ncmVzcyB7XG4gIC8qKiBOdW1iZXIgb2Ygc291cmNlIGZpbGVzIGZ1bGx5IGFuYWx5emVkIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgKDAtYmFzZWQpLiAqL1xuICByZWFkb25seSBhbmFseXplZEZpbGVDb3VudDogbnVtYmVyO1xuXG4gIC8qKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZSBhYm91dCB0byBiZSBhbmFseXplZC4gKi9cbiAgcmVhZG9ubHkgY3VycmVudEZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRvdGFsIG51bWJlciBvZiBzb3VyY2UgZmlsZXMgdGhhdCB3aWxsIGJlIGFuYWx5emVkLiAqL1xuICByZWFkb25seSB0b3RhbEZpbGVDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdoeSBhIGZpeCBydW4gbGVmdCBhIGZpbmRpbmcgdW50b3VjaGVkOlxuICpcbiAqIC0gYGRlY29yYXRlZGAgXHUyMDE0IHRoZSBtZW1iZXIgY2FycmllcyBhIGRlY29yYXRvciwgc28gdGhlIG1vZGlmaWVyIGluc2VydGlvbiBwb2ludCBpcyBhbWJpZ3VvdXMuXG4gKiAtIGBzaGFyZWQtZXhwb3J0YCBcdTIwMTQgdGhlIGBleHBvcnRgIGtleXdvcmQgaXMgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nIGRlY2xhcmF0b3IuXG4gKiAtIGB0ZXN0LW9ubHlgIFx1MjAxNCB0aGUgZGVjbGFyYXRpb24gaXMgZXhwb3NlZCBwdXJlbHkgZm9yIHRlc3RzLCBzbyB0aWdodGVuaW5nIHdvdWxkIGJyZWFrIHRoZSB0ZXN0LlxuICovXG5leHBvcnQgdHlwZSBPdmVyRXhwb3N1cmVTa2lwUmVhc29uID0gJ2RlY29yYXRlZCcgfCAnc2hhcmVkLWV4cG9ydCcgfCAndGVzdC1vbmx5JztcblxuLyoqXG4gKiBUaGUgKHRpZ2h0ZXIpIGV4cG9zdXJlIGxldmVsIGEgZGVjbGFyYXRpb24gY291bGQgYmUgcmVkdWNlZCB0by5cbiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdGVkRXhwb3N1cmUgPSAnZmlsZS1sb2NhbCcgfCAncHJpdmF0ZScgfCAncHJvdGVjdGVkJztcblxuLyoqXG4gKiBMaWZlY3ljbGUgYW5kIGZyYW1ld29yayBtZW1iZXJzIGludm9rZWQgYnkgT2JzaWRpYW4gb3IgYSBiYXNlIGNsYXNzIHZpYSByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW5cbiAqIGJ5IHJlZmVyZW5jZXMgdGhlIGxhbmd1YWdlIHNlcnZpY2UgY2FuIHNlZS4gVGlnaHRlbmluZyB0aGVzZSB3b3VsZCBicmVhayB0aGUgZnJhbWV3b3JrIGNvbnRyYWN0LFxuICogc28gdGhleSBhcmUgbmV2ZXIgcmVwb3J0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBMSUZFQ1lDTEVfQUxMT1dMSVNUOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgJ2Rpc3BsYXknLFxuICAnaGlkZScsXG4gICdvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UnLFxuICAnb25MYXlvdXRSZWFkeScsXG4gICdvbmxvYWQnLFxuICAnb25sb2FkSW1wbCcsXG4gICdvbkxvYWRTZXR0aW5ncycsXG4gICdvblNhdmVTZXR0aW5ncycsXG4gICdvbnVubG9hZCcsXG4gICdvbnVubG9hZEltcGwnXG5dKTtcblxuaW50ZXJmYWNlIEFuYWx5c2lzQ29udGV4dCB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBlZGl0czogKG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdClbXTtcbiAgcmVhZG9ubHkgZmluZGluZ3M6IE92ZXJFeHBvc3VyZUZpbmRpbmdbXTtcbiAgcmVhZG9ubHkgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2U7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG4gIHJlYWRvbmx5IHNob3VsZEZvcmNlOiBib29sZWFuO1xuICByZWFkb25seSBzdHJpbmdMaXRlcmFsT2NjdXJyZW5jZXNCeVRleHQ6IFJlYWRvbmx5TWFwPHN0cmluZywgcmVhZG9ubHkgU3RyaW5nTGl0ZXJhbE9jY3VycmVuY2VbXT47XG59XG5cbmludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIHJlYWRvbmx5IGVkaXRzOiByZWFkb25seSAobnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0KVtdO1xuICByZWFkb25seSBmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhcHBseU92ZXJFeHBvc3VyZUZpeGVzfS5cbiAqL1xuaW50ZXJmYWNlIEFwcGx5T3ZlckV4cG9zdXJlRml4ZXNQYXJhbXMge1xuICAvKiogVGhlIHByb2dyYW0gd2hvc2Ugc291cmNlIGZpbGVzIHN1cHBseSB0aGUgb3JpZ2luYWwgdGV4dCB0aGUgZWRpdHMgYXJlIGFwcGxpZWQgdG87IGB1bmRlZmluZWRgIHdoZW4gbm8gcHJvZ3JhbSBpcyBhdmFpbGFibGUuICovXG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRoZSBhbmFseXNpcyByZXN1bHQgd2hvc2UgZmluZGluZ3MgYW5kIGVkaXRzIGFyZSB0dXJuZWQgaW50byBpbi1wbGFjZSBmaXhlcy4gKi9cbiAgcmVhZG9ubHkgcmVzdWx0OiBBbmFseXNpc1Jlc3VsdDtcblxuICAvKiogV2hlbiBgdHJ1ZWAsIGRlY2xhcmF0aW9ucyBoZWxkIHdpZGUgcHVyZWx5IGJ5IHRlc3QgcmVmZXJlbmNlcyBhcmUgdGlnaHRlbmVkIHRvbyBpbnN0ZWFkIG9mIGJlaW5nIHNraXBwZWQuICovXG4gIHJlYWRvbmx5IHNob3VsZEZvcmNlOiBib29sZWFuO1xuXG4gIC8qKiBXcml0ZXMgdGhlIHRpZ2h0ZW5lZCBjb250ZW50cyBvZiBhIGNoYW5nZWQgZmlsZSBiYWNrIHRvIGRpc2suICovXG4gIHdyaXRlRmlsZSh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkRmluZGluZ30uXG4gKi9cbmludGVyZmFjZSBCdWlsZEZpbmRpbmdQYXJhbXMge1xuICAvKiogVGhlIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwgb2YgdGhlIGRlY2xhcmF0aW9uLiAqL1xuICByZWFkb25seSBjdXJyZW50RXhwb3N1cmU6IEN1cnJlbnRFeHBvc3VyZTtcblxuICAvKiogRmxhZ3MgZGVzY3JpYmluZyB3aGV0aGVyIHRoZSBkZWNsYXJhdGlvbiBoYXMgbm8gcmVmZXJlbmNlcyBhdCBhbGwgb3IgaXMgZm9yY2VkIHdpZGUgYnkgdGVzdC1vbmx5IHJlZmVyZW5jZXMuICovXG4gIHJlYWRvbmx5IGZsYWdzOiBGaW5kaW5nRmxhZ3M7XG5cbiAgLyoqIFRoZSBkZWNsYXJhdGlvbidzIG5hbWUgbm9kZSwgdXNlZCB0byByZXNvbHZlIGl0cyBwb3NpdGlvbiBhbmQgdGV4dC4gKi9cbiAgcmVhZG9ubHkgbmFtZU5vZGU6IE5vZGU7XG5cbiAgLyoqIFRoZSBkZWNsYXJhdGlvbiBub2RlLCB1c2VkIHRvIHJlc29sdmUgaXRzIHNvdXJjZSBmaWxlLiAqL1xuICByZWFkb25seSBub2RlOiBOb2RlO1xuXG4gIC8qKiBUaGUgdGlnaHRlciBleHBvc3VyZSBsZXZlbCB0aGUgZGVjbGFyYXRpb24gY291bGQgYmUgcmVkdWNlZCB0by4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGVkRXhwb3N1cmU6IFN1Z2dlc3RlZEV4cG9zdXJlO1xufVxuXG50eXBlIENsYXNzTWVtYmVyRGVjbGFyYXRpb24gPSBHZXRBY2Nlc3NvckRlY2xhcmF0aW9uIHwgTWV0aG9kRGVjbGFyYXRpb24gfCBQcm9wZXJ0eURlY2xhcmF0aW9uIHwgU2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29sbGVjdFN0cmluZ0xpdGVyYWxSZWZlcmVuY2VzfS5cbiAqL1xuaW50ZXJmYWNlIENvbGxlY3RTdHJpbmdMaXRlcmFsUmVmZXJlbmNlc1BhcmFtcyB7XG4gIC8qKiBUaGUgYW5hbHlzaXMgY29udGV4dCBwcm92aWRpbmcgdGhlIHN0cmluZy1saXRlcmFsIGluZGV4IGFuZCB0eXBlIGNoZWNrZXIuICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dDtcblxuICAvKiogVGhlIGNsYXNzIGRlY2xhcmluZyB0aGUgbWVtYmVyIHdob3NlIG5hbWUgdGhlIHN0cmluZyBsaXRlcmFscyBtaWdodCByZWZlcmVuY2UuICovXG4gIHJlYWRvbmx5IGRlY2xhcmluZ0NsYXNzOiBDbGFzc0xpa2VEZWNsYXJhdGlvbjtcblxuICAvKiogVGhlIG1lbWJlcidzIG5hbWUgbm9kZSwgd2hvc2UgdGV4dCBpcyBtYXRjaGVkIGFnYWluc3Qgc3RyaW5nLWxpdGVyYWwgb2NjdXJyZW5jZXMuICovXG4gIHJlYWRvbmx5IG5hbWVOb2RlOiBOb2RlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlTmVlZGVkRXhwb3N1cmV9LlxuICovXG5pbnRlcmZhY2UgQ29tcHV0ZU5lZWRlZEV4cG9zdXJlUGFyYW1zIHtcbiAgLyoqIFRoZSBhbmFseXNpcyBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJvZ3JhbSBhbmQgdHlwZSBjaGVja2VyLiAqL1xuICByZWFkb25seSBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQ7XG5cbiAgLyoqIFRoZSBjbGFzcyBkZWNsYXJpbmcgdGhlIG1lbWJlciB3aG9zZSBuZWVkZWQgZXhwb3N1cmUgaXMgY29tcHV0ZWQuICovXG4gIHJlYWRvbmx5IGRlY2xhcmluZ0NsYXNzOiBDbGFzc0xpa2VEZWNsYXJhdGlvbjtcblxuICAvKiogVGhlIHJlZmVyZW5jZSBsb2NhdGlvbnMgdGhhdCBtdXN0IHJlbWFpbiByZWFjaGFibGUgYXQgdGhlIGNvbXB1dGVkIGV4cG9zdXJlLiAqL1xuICByZWFkb25seSByZWZlcmVuY2VzOiByZWFkb25seSBSZWZlcmVuY2VMb2NhdGlvbltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkZXRlcm1pbmVTa2lwUmVhc29ufS5cbiAqL1xuaW50ZXJmYWNlIERldGVybWluZVNraXBSZWFzb25QYXJhbXMge1xuICAvKiogVGhlIHRleHQgZWRpdCB0aGF0IHdvdWxkIHRpZ2h0ZW4gdGhlIGZpbmRpbmcsIG9yIGBudWxsYCB3aGVuIG5vIHNhZmUgZWRpdCBleGlzdHMuICovXG4gIHJlYWRvbmx5IGVkaXQ6IG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdDtcblxuICAvKiogVGhlIGZpbmRpbmcgdW5kZXIgY29uc2lkZXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZztcblxuICAvKiogV2hlbiBgdHJ1ZWAsIHRlc3Qtb25seSBmaW5kaW5ncyBhcmUgdGlnaHRlbmVkIHJhdGhlciB0aGFuIHNraXBwZWQuICovXG4gIHJlYWRvbmx5IHNob3VsZEZvcmNlOiBib29sZWFuO1xufVxuXG50eXBlIEV4cG9ydGFibGVEZWNsYXJhdGlvbiA9IENsYXNzRGVjbGFyYXRpb24gfCBFbnVtRGVjbGFyYXRpb24gfCBGdW5jdGlvbkRlY2xhcmF0aW9uIHwgSW50ZXJmYWNlRGVjbGFyYXRpb24gfCBUeXBlQWxpYXNEZWNsYXJhdGlvbiB8IFZhcmlhYmxlU3RhdGVtZW50O1xuXG5pbnRlcmZhY2UgRXhwb3J0RmluZGluZ0NhbmRpZGF0ZSB7XG4gIHJlYWRvbmx5IGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmc7XG4gIHJlYWRvbmx5IGlzUGxhaW5GaWxlTG9jYWw6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaW5kaW5nRmxhZ3Mge1xuICByZWFkb25seSBoYXNOb1JlZmVyZW5jZXM6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRm9yY2VkQnlUZXN0T25seTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0Q2xhc3NBdFBvc2l0aW9ufS5cbiAqL1xuaW50ZXJmYWNlIEdldENsYXNzQXRQb3NpdGlvblBhcmFtcyB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHBvc2l0aW9uLiAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKiAwLWJhc2VkIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIHJlZmVyZW5jZSB3aXRoaW4gdGhlIGZpbGUuICovXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwcm9ncmFtIHVzZWQgdG8gcmVzb2x2ZSB0aGUgc291cmNlIGZpbGUuICovXG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzRGVyaXZlZEZyb219LlxuICovXG5pbnRlcmZhY2UgSXNEZXJpdmVkRnJvbVBhcmFtcyB7XG4gIC8qKiBUaGUgY2FuZGlkYXRlIGJhc2UgY2xhc3MuICovXG4gIHJlYWRvbmx5IGJhc2U6IENsYXNzTGlrZURlY2xhcmF0aW9uO1xuXG4gIC8qKiBUaGUgdHlwZSBjaGVja2VyIHVzZWQgdG8gcmVzb2x2ZSBoZXJpdGFnZSBzeW1ib2xzLiAqL1xuICByZWFkb25seSBjaGVja2VyOiBUeXBlQ2hlY2tlcjtcblxuICAvKiogVGhlIGNhbmRpZGF0ZSBkZXJpdmVkIGNsYXNzLiAqL1xuICByZWFkb25seSBkZXJpdmVkOiBDbGFzc0xpa2VEZWNsYXJhdGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNLZXlSZWZlcmVuY2VUb0NsYXNzfS5cbiAqL1xuaW50ZXJmYWNlIElzS2V5UmVmZXJlbmNlVG9DbGFzc1BhcmFtcyB7XG4gIC8qKiBUaGUgdHlwZSBjaGVja2VyIHVzZWQgdG8gcmVzb2x2ZSB0aGUgbGl0ZXJhbCdzIGNvbnRleHR1YWwgdHlwZS4gKi9cbiAgcmVhZG9ubHkgY2hlY2tlcjogVHlwZUNoZWNrZXI7XG5cbiAgLyoqIFRoZSBzZXQgb2YgcHJvcGVydHkga2V5cyBkZWNsYXJlZCBieSB0aGUgY2xhc3MuICovXG4gIHJlYWRvbmx5IGtleVNldDogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcblxuICAvKiogVGhlIHN0cmluZy1saXRlcmFsIG5vZGUgYmVpbmcgdGVzdGVkLiAqL1xuICByZWFkb25seSBub2RlOiBTdHJpbmdMaXRlcmFsTGlrZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNPd25Tb3VyY2VGaWxlfS5cbiAqL1xuaW50ZXJmYWNlIElzT3duU291cmNlRmlsZVBhcmFtcyB7XG4gIC8qKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBmaWxlIHVuZGVyIHRlc3QuICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIHByb2plY3QncyBgc3JjYCBmb2xkZXIuICovXG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xufVxuXG50eXBlIE1lbWJlckV4cG9zdXJlID0gJ3ByaXZhdGUnIHwgJ3Byb3RlY3RlZCcgfCAncHVibGljJztcblxuLyoqXG4gKiBBIHNpbmdsZSBpbi1wbGFjZSB0ZXh0IHJlcGxhY2VtZW50IHRoYXQgdGlnaHRlbnMgYSBkZWNsYXJhdGlvbidzIGV4cG9zdXJlLiBBIHplcm8tbGVuZ3RoIGVkaXQgaXNcbiAqIGFuIGluc2VydGlvbiAoZS5nLiBhZGRpbmcgYW4gZXhwbGljaXQgYHByaXZhdGVgIG1vZGlmaWVyIHRvIGFuIGltcGxpY2l0bHktYHB1YmxpY2AgbWVtYmVyKS5cbiAqL1xuaW50ZXJmYWNlIE92ZXJFeHBvc3VyZVRleHRFZGl0IHtcbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5ld1RleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVjb3JkfS5cbiAqL1xuaW50ZXJmYWNlIFJlY29yZFBhcmFtcyB7XG4gIC8qKiBUaGUgYW5hbHlzaXMgY29udGV4dCB3aG9zZSBmaW5kaW5ncyBhbmQgZWRpdHMgYXJlIGFwcGVuZGVkIHRvLiAqL1xuICByZWFkb25seSBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQ7XG5cbiAgLyoqIFRoZSB0ZXh0IGVkaXQgdGhhdCB3b3VsZCB0aWdodGVuIHRoZSBmaW5kaW5nLCBvciBgbnVsbGAgd2hlbiBubyBzYWZlIGVkaXQgZXhpc3RzLiAqL1xuICByZWFkb25seSBlZGl0OiBudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQ7XG5cbiAgLyoqIFRoZSBmaW5kaW5nIHRvIHJlY29yZC4gKi9cbiAgcmVhZG9ubHkgZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZztcbn1cblxuaW50ZXJmYWNlIFJlZmVyZW5jZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNvdXJjZUZpbGVUZXh0IHtcbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3RyaW5nTGl0ZXJhbE9jY3VycmVuY2Uge1xuICByZWFkb25seSBub2RlOiBTdHJpbmdMaXRlcmFsTGlrZTtcbiAgcmVhZG9ubHkgc291cmNlRmlsZTogU291cmNlRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9EaXNwbGF5UGF0aH0uXG4gKi9cbmludGVyZmFjZSBUb0Rpc3BsYXlQYXRoUGFyYW1zIHtcbiAgLyoqIFdoZW4gc2V0LCB0aGUgcGF0aCBpcyByZW5kZXJlZCByZWxhdGl2ZSB0byB0aGlzIGZvbGRlcjsgcGF0aHMgb3V0c2lkZSBpdCBzdGF5IGFic29sdXRlLiAqL1xuICByZWFkb25seSBiYXNlRm9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggdG8gcmVuZGVyLiAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vLyBBIEpTRG9jL1RTRG9jIGNvbW1lbnQgb3BlbnMgd2l0aCBgLyoqYDogdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgMiBpcyB0aGUgc2Vjb25kIGAqYCwgYW5kIHRvIGV4Y2x1ZGUgdGhlIGVtcHR5IGAvKiovYCBjb21tZW50IHRoZSBjaGFyYWN0ZXIgYXQgb2Zmc2V0IDMgbXVzdCBub3QgYmUgdGhlIGNsb3NpbmcgYC9gLlxuY29uc3QgSlNET0NfU0VDT05EX0FTVEVSSVNLX09GRlNFVCA9IDI7XG5jb25zdCBKU0RPQ19GT1VSVEhfQ0hBUkFDVEVSX09GRlNFVCA9IDM7XG5jb25zdCBNRU1CRVJfRVhQT1NVUkVfT1JERVI6IHJlYWRvbmx5IE1lbWJlckV4cG9zdXJlW10gPSBbJ3ByaXZhdGUnLCAncHJvdGVjdGVkJywgJ3B1YmxpYyddO1xuY29uc3QgU0NPUEVfREVTQ1JJUFRJT046IFJlY29yZDxTdWdnZXN0ZWRFeHBvc3VyZSwgc3RyaW5nPiA9IHtcbiAgJ2ZpbGUtbG9jYWwnOiAnd2l0aGluIGl0cyBvd24gZmlsZScsXG4gICdwcml2YXRlJzogJ2luc2lkZSBpdHMgb3duIGNsYXNzJyxcbiAgJ3Byb3RlY3RlZCc6ICdpbnNpZGUgaXRzIGNsYXNzICsgc3ViY2xhc3Nlcydcbn07XG5jb25zdCBTS0lQX1JFQVNPTl9ERVNDUklQVElPTjogUmVjb3JkPE92ZXJFeHBvc3VyZVNraXBSZWFzb24sIHN0cmluZz4gPSB7XG4gICdkZWNvcmF0ZWQnOiAnZGVjb3JhdGVkIG1lbWJlcicsXG4gICdzaGFyZWQtZXhwb3J0JzogJ2V4cG9ydCBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcnLFxuICAndGVzdC1vbmx5JzogJ2V4cG9zZWQgb25seSBmb3IgdGVzdHMnXG59O1xuY29uc3QgVklTSUJJTElUWV9NT0RJRklFUl9LSU5EUzogUmVhZG9ubHlTZXQ8U3ludGF4S2luZD4gPSBuZXcgU2V0PFN5bnRheEtpbmQ+KFtTeW50YXhLaW5kLlByaXZhdGVLZXl3b3JkLCBTeW50YXhLaW5kLlByb3RlY3RlZEtleXdvcmQsIFN5bnRheEtpbmQuUHVibGljS2V5d29yZF0pO1xuY29uc3QgV0hJVEVTUEFDRV9QQVRURVJOID0gL1xccy87XG5cbi8qKlxuICogQW5hbHl6ZXMgYSBwcm9qZWN0IChhbHJlYWR5IGxvYWRlZCBpbnRvIGEgbGFuZ3VhZ2Ugc2VydmljZSkgZm9yIG92ZXItZXhwb3NlZCBkZWNsYXJhdGlvbnMsIGFuZCBcdTIwMTRcbiAqIHdoZW4ge0BsaW5rIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMuc2hvdWxkRml4fSBpcyBzZXQgXHUyMDE0IHRpZ2h0ZW5zIGV2ZXJ5IGZpeGFibGUgZmluZGluZyBpbiBwbGFjZVxuICogdmlhIHtAbGluayBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zLndyaXRlRmlsZX0uIEZpbmRpbmdzIHRoYXQgY2Fubm90IGJlIHNhZmVseSBhdXRvbWF0ZWQgKGV4cG9zZWRcbiAqIG9ubHkgZm9yIHRlc3RzLCBkZWNvcmF0ZWQsIG9yIHNoYXJpbmcgYW4gYGV4cG9ydGAga2V5d29yZCB3aXRoIGEgc3RpbGwtZXhwb3J0ZWQgc2libGluZykgY2FycnkgYVxuICoge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0gYW5kIGFyZSBsZWZ0IHVudG91Y2hlZCBcdTIwMTQgdW5sZXNzXG4gKiB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcy5zaG91bGRGb3JjZX0gaXMgc2V0LCB3aGljaCBhZGRpdGlvbmFsbHkgdGlnaHRlbnMgdGhlIHRlc3Qtb25seVxuICogZmluZGluZ3MgKGRlY29yYXRlZCBhbmQgc2hhcmVkLWV4cG9ydCBvbmVzIHN0aWxsIHN0YXkgc2tpcHBlZCkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucywgaW4gZGlzY292ZXJ5IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZU92ZXJFeHBvc3VyZShwYXJhbXM6IEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCByZXN1bHQgPSBydW5PdmVyRXhwb3N1cmVBbmFseXNpcyhwYXJhbXMpO1xuICBpZiAoIXBhcmFtcy5zaG91bGRGaXgpIHtcbiAgICByZXR1cm4gWy4uLnJlc3VsdC5maW5kaW5nc107XG4gIH1cblxuICBjb25zdCB7IHdyaXRlRmlsZSB9ID0gcGFyYW1zO1xuICBhc3NlcnROb25OdWxsYWJsZSh3cml0ZUZpbGUsICd3cml0ZUZpbGUgaXMgcmVxdWlyZWQgd2hlbiBzaG91bGRGaXggaXMgdHJ1ZS4nKTtcbiAgcmV0dXJuIGFwcGx5T3ZlckV4cG9zdXJlRml4ZXMoe1xuICAgIHByb2dyYW06IHBhcmFtcy5sYW5ndWFnZVNlcnZpY2UuZ2V0UHJvZ3JhbSgpLFxuICAgIHJlc3VsdCxcbiAgICBzaG91bGRGb3JjZTogcGFyYW1zLnNob3VsZEZvcmNlID8/IGZhbHNlLFxuICAgIHdyaXRlRmlsZVxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB7QGxpbmsgTGFuZ3VhZ2VTZXJ2aWNlSG9zdH0gYmFja2VkIGJ5IGFuIGV4cGxpY2l0IGZpbGUgbGlzdCBhbmQgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdFBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgbGFuZ3VhZ2Utc2VydmljZSBob3N0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdChwYXJhbXM6IENyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3RQYXJhbXMpOiBMYW5ndWFnZVNlcnZpY2VIb3N0IHtcbiAgY29uc3QgeyBjb21waWxlck9wdGlvbnMsIGZpbGVOYW1lcywgZmlsZVN5c3RlbSB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0czogKGRpcmVjdG9yeSkgPT4gZmlsZVN5c3RlbS5kaXJlY3RvcnlFeGlzdHMoZGlyZWN0b3J5KSxcbiAgICBmaWxlRXhpc3RzOiAoZmlsZSkgPT4gZmlsZVN5c3RlbS5maWxlRXhpc3RzKGZpbGUpLFxuICAgIGdldENvbXBpbGF0aW9uU2V0dGluZ3M6ICgpID0+IGNvbXBpbGVyT3B0aW9ucyxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBmaWxlU3lzdGVtLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgICBnZXREZWZhdWx0TGliRmlsZU5hbWU6IChsaWJPcHRpb25zKSA9PiBnZXREZWZhdWx0TGliRmlsZVBhdGgobGliT3B0aW9ucyksXG4gICAgZ2V0RGlyZWN0b3JpZXM6IChkaXJlY3RvcnkpID0+IGZpbGVTeXN0ZW0uZ2V0RGlyZWN0b3JpZXMoZGlyZWN0b3J5KSxcbiAgICBnZXRTY3JpcHRGaWxlTmFtZXM6ICgpID0+IFsuLi5maWxlTmFtZXNdLFxuICAgIGdldFNjcmlwdFNuYXBzaG90OiAoZmlsZU5hbWUpOiBJU2NyaXB0U25hcHNob3QgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGZpbGVTeXN0ZW0ucmVhZEZpbGUoZmlsZU5hbWUpO1xuICAgICAgcmV0dXJuIHRleHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFNjcmlwdFNuYXBzaG90LmZyb21TdHJpbmcodGV4dCk7XG4gICAgfSxcbiAgICBnZXRTY3JpcHRWZXJzaW9uOiAoKSA9PiAnMCcsXG4gICAgcmVhZERpcmVjdG9yeTogKHBhdGgsIGV4dGVuc2lvbnMsIGV4Y2x1ZGUsIGluY2x1ZGUsIGRlcHRoKSA9PiBmaWxlU3lzdGVtLnJlYWREaXJlY3RvcnkocGF0aCwgZXh0ZW5zaW9ucywgZXhjbHVkZSwgaW5jbHVkZSwgZGVwdGgpLFxuICAgIHJlYWRGaWxlOiAoZmlsZSkgPT4gZmlsZVN5c3RlbS5yZWFkRmlsZShmaWxlKVxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGxhbmd1YWdlIHNlcnZpY2Ugb3ZlciBldmVyeSBmaWxlIGluIGEgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEgbGFuZ3VhZ2Ugc2VydmljZSByZWFkeSBmb3Ige0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZShwYXJhbXM6IENyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2VQYXJhbXMpOiBMYW5ndWFnZVNlcnZpY2Uge1xuICBjb25zdCB7IGZpbGVOYW1lcywgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhwYXJhbXMudHNDb25maWdQYXRoKTtcbiAgcmV0dXJuIGNyZWF0ZUxhbmd1YWdlU2VydmljZShjcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0KHsgY29tcGlsZXJPcHRpb25zOiBvcHRpb25zLCBmaWxlTmFtZXMsIGZpbGVTeXN0ZW06IHN5cyB9KSwgY3JlYXRlRG9jdW1lbnRSZWdpc3RyeSgpKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zIGluIGEgcHJvamVjdCBvbiBkaXNrLiBXaGVuXG4gKiB7QGxpbmsgRmluZE92ZXJFeHBvc3VyZVBhcmFtcy5zaG91bGRGaXh9IGlzIHNldCwgZWFjaCBmaXhhYmxlIGZpbmRpbmcgaXMgYWxzbyB0aWdodGVuZWQgaW4gcGxhY2VcbiAqIChyZXdyaXRpbmcgdGhlIGFmZmVjdGVkIHNvdXJjZSBmaWxlcyB2aWEgYHR5cGVzY3JpcHRgJ3MgYHN5cy53cml0ZUZpbGVgKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE92ZXJFeHBvc3VyZShwYXJhbXM6IEZpbmRPdmVyRXhwb3N1cmVQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCBwcm9qZWN0Rm9sZGVyID0gdG9DYW5vbmljYWwocGFyYW1zLnByb2plY3RGb2xkZXIpO1xuICBjb25zdCBsYW5ndWFnZVNlcnZpY2UgPSBjcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlKHsgdHNDb25maWdQYXRoOiBgJHtwcm9qZWN0Rm9sZGVyfS90c2NvbmZpZy5qc29uYCB9KTtcbiAgcmV0dXJuIGFuYWx5emVPdmVyRXhwb3N1cmUoe1xuICAgIGxhbmd1YWdlU2VydmljZSxcbiAgICBzaG91bGRGaXg6IHBhcmFtcy5zaG91bGRGaXgsXG4gICAgc2hvdWxkRm9yY2U6IHBhcmFtcy5zaG91bGRGb3JjZSxcbiAgICBzcmNGb2xkZXI6IGAke3Byb2plY3RGb2xkZXJ9L3NyY2AsXG4gICAgd3JpdGVGaWxlOiAocGF0aCwgY29udGVudCkgPT4ge1xuICAgICAgc3lzLndyaXRlRmlsZShwYXRoLCBjb250ZW50KTtcbiAgICB9LFxuICAgIC4uLnBhcmFtcy5vblByb2dyZXNzID8geyBvblByb2dyZXNzOiBwYXJhbXMub25Qcm9ncmVzcyB9IDoge31cbiAgfSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBvdmVyLWV4cG9zdXJlIGZpbmRpbmdzIGFzIGEgaHVtYW4tcmVhZGFibGUgcmVwb3J0LCB1c2luZyB0aGUgZ3JvdXBlZCBsYXlvdXQgb2YgRVNMaW50J3NcbiAqIGBzdHlsaXNoYCBmb3JtYXR0ZXIuIEZpbmRpbmdzIGFyZSBncm91cGVkIGJ5IGZpbGUgYW5kIHNvcnRlZCBieSBsaW5lOiBlYWNoIGZpbGUgaXMgcmVuZGVyZWQgYXMgYVxuICogYHBhdGhgIGhlYWRlciBsaW5lLCBmb2xsb3dlZCBieSBvbmUgaW5kZW50ZWQgYCAgbGluZTpjb2x1bW4gIGNoYW5nZSAtLSByZWFzb25gIHJvdyBwZXIgZmluZGluZyAodGhlXG4gKiBgbGluZTpjb2x1bW5gIGlzIHJpZ2h0LXBhZGRlZCBzbyB0aGUgcm93cyBhbGlnbiB3aXRoaW4gYSBmaWxlKS4gVGVybWluYWxzIHN1Y2ggYXMgVlMgQ29kZSByZW5kZXJcbiAqIGVhY2ggaW5kZW50ZWQgYGxpbmU6Y29sdW1uYCBhcyBhIGNsaWNrYWJsZSBsaW5rIFx1MjAxNCByZXNvbHZlZCBhZ2FpbnN0IHRoZSBmaWxlIGhlYWRlciBhYm92ZSBpdCBcdTIwMTQgdGhhdFxuICoganVtcHMgc3RyYWlnaHQgdG8gdGhlIGRlY2xhcmF0aW9uLiBGaWxlIGdyb3VwcyBhcmUgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZS4gSW4gYSBmaXggcnVuIChmaW5kaW5nc1xuICogY2Fycnlpbmcge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcud2FzRml4ZWR9IC8ge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0pIGVhY2ggY2hhbmdlXG4gKiByb3cgaXMgc3VmZml4ZWQgd2l0aCBgW2ZpeGVkXWAgb3IgYFtza2lwcGVkOiBcdTIwMjZdYCwgYW5kIHRoZSB0cmFpbGluZyBzdW1tYXJ5IGFwcGVuZHMgdGhlIGZpeGVkL3NraXBwZWRcbiAqIGNvdW50cy5cbiAqXG4gKiBAcGFyYW0gZmluZGluZ3MgLSBUaGUgZmluZGluZ3MgdG8gZm9ybWF0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIEZvcm1hdE92ZXJFeHBvc3VyZUZpbmRpbmdzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBUaGUgcmVwb3J0IHRleHQuIEVtcHR5LWZpbmRpbmcgaW5wdXQgeWllbGRzIGEgc2luZ2xlIFwibm8gZmluZGluZ3NcIiBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3MoZmluZGluZ3M6IHJlYWRvbmx5IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSwgb3B0aW9ucz86IEZvcm1hdE92ZXJFeHBvc3VyZUZpbmRpbmdzT3B0aW9ucyk6IHN0cmluZyB7XG4gIGlmIChmaW5kaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ05vIG92ZXItZXhwb3NlZCBkZWNsYXJhdGlvbnMgZm91bmQuXFxuJztcbiAgfVxuXG4gIGNvbnN0IGJhc2VGb2xkZXIgPSBvcHRpb25zPy5iYXNlRm9sZGVyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b0Nhbm9uaWNhbChvcHRpb25zLmJhc2VGb2xkZXIpO1xuICBjb25zdCBsaW5lcyA9IGZvcm1hdEZpbmRpbmdCbG9ja3MoZmluZGluZ3MsIGJhc2VGb2xkZXIpO1xuICBsaW5lcy5wdXNoKGZvcm1hdFN1bW1hcnkoZmluZGluZ3MpKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbmZ1bmN0aW9uIGFuYWx5emVFeHBvcnQobm9kZTogTm9kZSwgY29udGV4dDogQW5hbHlzaXNDb250ZXh0KTogdm9pZCB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgaWYgKG5vZGUucGFyZW50ICE9PSBzb3VyY2VGaWxlIHx8ICFnZXRNb2RpZmllcktpbmRzKG5vZGUpLmhhcyhTeW50YXhLaW5kLkV4cG9ydEtleXdvcmQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb24gPSBhc0V4cG9ydGFibGVEZWNsYXJhdGlvbihub2RlKTtcbiAgaWYgKCFkZWNsYXJhdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoYXNUc0RvY0NvbW1lbnQoZGVjbGFyYXRpb24pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVjbEZpbGVQYXRoID0gdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IG5hbWVOb2RlcyA9IGdldEV4cG9ydGVkTmFtZU5vZGVzKGRlY2xhcmF0aW9uKTtcbiAgY29uc3QgY2FuZGlkYXRlczogRXhwb3J0RmluZGluZ0NhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbmFtZU5vZGUgb2YgbmFtZU5vZGVzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGNvbGxlY3RSZWZlcmVuY2VzKGNvbnRleHQubGFuZ3VhZ2VTZXJ2aWNlLmZpbmRSZWZlcmVuY2VzKHNvdXJjZUZpbGUuZmlsZU5hbWUsIG5hbWVOb2RlLmdldFN0YXJ0KCkpKVxuICAgICAgLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNEZWNsYXJhdGlvbkl0c2VsZihyZWZlcmVuY2UsIG5hbWVOb2RlKSk7XG4gICAgY29uc3Qgb3RoZXJGaWxlUmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+IHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkgIT09IGRlY2xGaWxlUGF0aCk7XG5cbiAgICBpZiAob3RoZXJGaWxlUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGZpbmRpbmc6IGJ1aWxkRmluZGluZyh7XG4gICAgICAgICAgY3VycmVudEV4cG9zdXJlOiAnZXhwb3J0JyxcbiAgICAgICAgICBmbGFnczogeyBoYXNOb1JlZmVyZW5jZXM6IHJlZmVyZW5jZXMubGVuZ3RoID09PSAwLCBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGZhbHNlIH0sXG4gICAgICAgICAgbmFtZU5vZGUsXG4gICAgICAgICAgbm9kZTogZGVjbGFyYXRpb24sXG4gICAgICAgICAgc3VnZ2VzdGVkRXhwb3N1cmU6ICdmaWxlLWxvY2FsJ1xuICAgICAgICB9KSxcbiAgICAgICAgaXNQbGFpbkZpbGVMb2NhbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBub25UZXN0UmVmZXJlbmNlcyA9IG90aGVyRmlsZVJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc1Rlc3RGaWxlKHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkpKTtcbiAgICBpZiAobm9uVGVzdFJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICBmaW5kaW5nOiBidWlsZEZpbmRpbmcoe1xuICAgICAgICAgIGN1cnJlbnRFeHBvc3VyZTogJ2V4cG9ydCcsXG4gICAgICAgICAgZmxhZ3M6IHsgaGFzTm9SZWZlcmVuY2VzOiBmYWxzZSwgaXNGb3JjZWRCeVRlc3RPbmx5OiB0cnVlIH0sXG4gICAgICAgICAgbmFtZU5vZGUsXG4gICAgICAgICAgbm9kZTogZGVjbGFyYXRpb24sXG4gICAgICAgICAgc3VnZ2VzdGVkRXhwb3N1cmU6ICdmaWxlLWxvY2FsJ1xuICAgICAgICB9KSxcbiAgICAgICAgaXNQbGFpbkZpbGVMb2NhbDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhbkRyb3BFeHBvcnQgPSBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gbmFtZU5vZGVzLmxlbmd0aCAmJiBjYW5kaWRhdGVzLmV2ZXJ5KChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pc1BsYWluRmlsZUxvY2FsIHx8IGNvbnRleHQuc2hvdWxkRm9yY2UpO1xuICBjb25zdCBleHBvcnRFZGl0ID0gY2FuRHJvcEV4cG9ydCA/IGNvbXB1dGVFeHBvcnRSZW1vdmFsRWRpdChkZWNsYXJhdGlvbikgOiBudWxsO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgcmVjb3JkKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBlZGl0OiBleHBvcnRFZGl0LFxuICAgICAgZmluZGluZzogY2FuZGlkYXRlLmZpbmRpbmdcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhbmFseXplTWVtYmVyKG5vZGU6IE5vZGUsIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCk6IHZvaWQge1xuICBjb25zdCBtZW1iZXIgPSBhc0NsYXNzTWVtYmVyKG5vZGUpO1xuICBpZiAoIW1lbWJlciB8fCAhaXNDbGFzc0xpa2Uobm9kZS5wYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG5hbWVOb2RlID0gbWVtYmVyLm5hbWU7XG4gIGNvbnN0IGRlY2xhcmluZ0NsYXNzID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKGlzUHJpdmF0ZUlkZW50aWZpZXIobmFtZU5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9kaWZpZXJLaW5kcyA9IGdldE1vZGlmaWVyS2luZHMobWVtYmVyKTtcbiAgaWYgKG1vZGlmaWVyS2luZHMuaGFzKFN5bnRheEtpbmQuU3RhdGljS2V5d29yZCkgfHwgbW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5PdmVycmlkZUtleXdvcmQpIHx8IExJRkVDWUNMRV9BTExPV0xJU1QuaGFzKG5hbWVOb2RlLmdldFRleHQoKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGFzVHNEb2NDb21tZW50KG1lbWJlcikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjdXJyZW50RXhwb3N1cmUgPSBnZXRDdXJyZW50TWVtYmVyRXhwb3N1cmUobW9kaWZpZXJLaW5kcyk7XG4gIGlmIChjdXJyZW50RXhwb3N1cmUgPT09ICdwcml2YXRlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBtZW1iZXIuZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCBkaXJlY3RSZWZlcmVuY2VzID0gY29sbGVjdFJlZmVyZW5jZXMoY29udGV4dC5sYW5ndWFnZVNlcnZpY2UuZmluZFJlZmVyZW5jZXMoc291cmNlRmlsZS5maWxlTmFtZSwgbmFtZU5vZGUuZ2V0U3RhcnQoKSkpXG4gICAgLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNEZWNsYXJhdGlvbkl0c2VsZihyZWZlcmVuY2UsIG5hbWVOb2RlKSk7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uZGlyZWN0UmVmZXJlbmNlcywgLi4uY29sbGVjdFN0cmluZ0xpdGVyYWxSZWZlcmVuY2VzKHsgY29udGV4dCwgZGVjbGFyaW5nQ2xhc3MsIG5hbWVOb2RlIH0pXTtcbiAgY29uc3Qgbm9uVGVzdFJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNUZXN0RmlsZSh0b0Nhbm9uaWNhbChyZWZlcmVuY2UuZmlsZU5hbWUpKSk7XG5cbiAgY29uc3QgbmVlZGVkRm9yU3JjID0gY29tcHV0ZU5lZWRlZEV4cG9zdXJlKHsgY29udGV4dCwgZGVjbGFyaW5nQ2xhc3MsIHJlZmVyZW5jZXM6IG5vblRlc3RSZWZlcmVuY2VzIH0pO1xuICBjb25zdCBuZWVkZWRXaXRoVGVzdHMgPSBjb21wdXRlTmVlZGVkRXhwb3N1cmUoeyBjb250ZXh0LCBkZWNsYXJpbmdDbGFzcywgcmVmZXJlbmNlcyB9KTtcblxuICBpZiAobmVlZGVkRm9yU3JjID09PSAncHVibGljJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyYW5rRXhwb3N1cmUobmVlZGVkRm9yU3JjKSA+PSByYW5rRXhwb3N1cmUoY3VycmVudEV4cG9zdXJlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbmRpbmcgPSBidWlsZEZpbmRpbmcoe1xuICAgIGN1cnJlbnRFeHBvc3VyZSxcbiAgICBmbGFnczoge1xuICAgICAgaGFzTm9SZWZlcmVuY2VzOiByZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGlzRm9yY2VkQnlUZXN0T25seTogcmFua0V4cG9zdXJlKG5lZWRlZFdpdGhUZXN0cykgPiByYW5rRXhwb3N1cmUobmVlZGVkRm9yU3JjKVxuICAgIH0sXG4gICAgbmFtZU5vZGUsXG4gICAgbm9kZTogbWVtYmVyLFxuICAgIHN1Z2dlc3RlZEV4cG9zdXJlOiBuZWVkZWRGb3JTcmNcbiAgfSk7XG4gIHJlY29yZCh7XG4gICAgY29udGV4dCxcbiAgICBlZGl0OiBjb21wdXRlTWVtYmVyRXhwb3N1cmVFZGl0KG1lbWJlciwgbmVlZGVkRm9yU3JjKSxcbiAgICBmaW5kaW5nXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBseUVkaXRzKHRleHQ6IHN0cmluZywgZWRpdHM6IHJlYWRvbmx5IE92ZXJFeHBvc3VyZVRleHRFZGl0W10pOiBzdHJpbmcge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVuaXF1ZUVkaXRzID0gZWRpdHNcbiAgICAuZmlsdGVyKChlZGl0KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHtTdHJpbmcoZWRpdC5zdGFydCl9OiR7U3RyaW5nKGVkaXQubGVuZ3RoKX06JHtlZGl0Lm5ld1RleHR9YDtcbiAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnN0YXJ0IC0gYS5zdGFydCk7XG5cbiAgbGV0IHJlc3VsdCA9IHRleHQ7XG4gIGZvciAoY29uc3QgZWRpdCBvZiB1bmlxdWVFZGl0cykge1xuICAgIHJlc3VsdCA9IGAke3Jlc3VsdC5zbGljZSgwLCBlZGl0LnN0YXJ0KX0ke2VkaXQubmV3VGV4dH0ke3Jlc3VsdC5zbGljZShlZGl0LnN0YXJ0ICsgZWRpdC5sZW5ndGgpfWA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYXBwbHlPdmVyRXhwb3N1cmVGaXhlcyhwYXJhbXM6IEFwcGx5T3ZlckV4cG9zdXJlRml4ZXNQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCB7IHByb2dyYW0sIHJlc3VsdCwgc2hvdWxkRm9yY2UsIHdyaXRlRmlsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBlZGl0c0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBPdmVyRXhwb3N1cmVUZXh0RWRpdFtdPigpO1xuICBjb25zdCBmaW5kaW5ncyA9IHJlc3VsdC5maW5kaW5ncy5tYXAoKGZpbmRpbmcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZWRpdCA9IHJlc3VsdC5lZGl0c1tpbmRleF0gPz8gbnVsbDtcbiAgICBjb25zdCBza2lwUmVhc29uID0gZGV0ZXJtaW5lU2tpcFJlYXNvbih7IGVkaXQsIGZpbmRpbmcsIHNob3VsZEZvcmNlIH0pO1xuICAgIGlmIChza2lwUmVhc29uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5maW5kaW5nLCBza2lwUmVhc29uLCB3YXNGaXhlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoZWRpdCwgJ0EgZml4YWJsZSBmaW5kaW5nIG11c3QgY2FycnkgYSB0ZXh0IGVkaXQuJyk7XG4gICAgY29uc3QgZmlsZUVkaXRzID0gZWRpdHNCeUZpbGUuZ2V0KGVkaXQuZmlsZU5hbWUpID8/IFtdO1xuICAgIGZpbGVFZGl0cy5wdXNoKGVkaXQpO1xuICAgIGVkaXRzQnlGaWxlLnNldChlZGl0LmZpbGVOYW1lLCBmaWxlRWRpdHMpO1xuICAgIHJldHVybiB7IC4uLmZpbmRpbmcsIHNraXBSZWFzb246IG51bGwsIHdhc0ZpeGVkOiB0cnVlIH07XG4gIH0pO1xuXG4gIGlmIChlZGl0c0J5RmlsZS5zaXplID4gMCkge1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHByb2dyYW0sICdBIHByb2dyYW0gaXMgZXhwZWN0ZWQgd2hlbiB0aGVyZSBhcmUgZWRpdHMgdG8gYXBwbHkuJyk7XG4gICAgY29uc3Qgc291cmNlVGV4dEJ5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VGaWxlVGV4dD4oKTtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICBzb3VyY2VUZXh0QnlGaWxlLnNldCh0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKSwgeyBmaWxlTmFtZTogc291cmNlRmlsZS5maWxlTmFtZSwgdGV4dDogc291cmNlRmlsZS50ZXh0IH0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtjYW5vbmljYWxGaWxlTmFtZSwgZmlsZUVkaXRzXSBvZiBlZGl0c0J5RmlsZSkge1xuICAgICAgY29uc3Qgc291cmNlID0gc291cmNlVGV4dEJ5RmlsZS5nZXQoY2Fub25pY2FsRmlsZU5hbWUpO1xuICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUoc291cmNlLCBgU291cmNlIGZpbGUgbm90IGZvdW5kIGluIHByb2dyYW06ICR7Y2Fub25pY2FsRmlsZU5hbWV9YCk7XG4gICAgICB3cml0ZUZpbGUoc291cmNlLmZpbGVOYW1lLCBhcHBseUVkaXRzKHNvdXJjZS50ZXh0LCBmaWxlRWRpdHMpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmluZGluZ3M7XG59XG5cbmZ1bmN0aW9uIGFzQ2xhc3NNZW1iZXIobm9kZTogTm9kZSk6IENsYXNzTWVtYmVyRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoaXNNZXRob2REZWNsYXJhdGlvbihub2RlKSB8fCBpc1Byb3BlcnR5RGVjbGFyYXRpb24obm9kZSkgfHwgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG5vZGUpIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzRXhwb3J0YWJsZURlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBFeHBvcnRhYmxlRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVHlwZUFsaWFzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0VudW1EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVmFyaWFibGVTdGF0ZW1lbnQobm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRGaW5kaW5nKHBhcmFtczogQnVpbGRGaW5kaW5nUGFyYW1zKTogT3ZlckV4cG9zdXJlRmluZGluZyB7XG4gIGNvbnN0IHsgY3VycmVudEV4cG9zdXJlLCBmbGFncywgbmFtZU5vZGUsIG5vZGUsIHN1Z2dlc3RlZEV4cG9zdXJlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgeyBjaGFyYWN0ZXIsIGxpbmUgfSA9IHNvdXJjZUZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24obmFtZU5vZGUuZ2V0U3RhcnQoKSk7XG4gIHJldHVybiB7XG4gICAgY29sdW1uOiBjaGFyYWN0ZXIgKyAxLFxuICAgIGN1cnJlbnRFeHBvc3VyZSxcbiAgICBmaWxlUGF0aDogdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksXG4gICAgaGFzTm9SZWZlcmVuY2VzOiBmbGFncy5oYXNOb1JlZmVyZW5jZXMsXG4gICAgaXNGb3JjZWRCeVRlc3RPbmx5OiBmbGFncy5pc0ZvcmNlZEJ5VGVzdE9ubHksXG4gICAgaXNNZW1iZXI6IGN1cnJlbnRFeHBvc3VyZSAhPT0gJ2V4cG9ydCcsXG4gICAgbGluZTogbGluZSArIDEsXG4gICAgbmFtZTogbmFtZU5vZGUuZ2V0VGV4dCgpLFxuICAgIHNraXBSZWFzb246IG51bGwsXG4gICAgc3VnZ2VzdGVkRXhwb3N1cmUsXG4gICAgd2FzRml4ZWQ6IGZhbHNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3RyaW5nTGl0ZXJhbEluZGV4KHByb2dyYW06IFByb2dyYW0pOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IFN0cmluZ0xpdGVyYWxPY2N1cnJlbmNlW10+IHtcbiAgY29uc3QgaW5kZXggPSBuZXcgTWFwPHN0cmluZywgU3RyaW5nTGl0ZXJhbE9jY3VycmVuY2VbXT4oKTtcbiAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgIGlmIChzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29sbGVjdEluTm9kZShzb3VyY2VGaWxlKTtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG5cbiAgZnVuY3Rpb24gY29sbGVjdEluTm9kZShub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgaWYgKGlzU3RyaW5nTGl0ZXJhbExpa2Uobm9kZSkpIHtcbiAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gaW5kZXguZ2V0KG5vZGUudGV4dCkgPz8gW107XG4gICAgICBvY2N1cnJlbmNlcy5wdXNoKHsgbm9kZSwgc291cmNlRmlsZTogbm9kZS5nZXRTb3VyY2VGaWxlKCkgfSk7XG4gICAgICBpbmRleC5zZXQobm9kZS50ZXh0LCBvY2N1cnJlbmNlcyk7XG4gICAgfVxuICAgIG5vZGUuZm9yRWFjaENoaWxkKGNvbGxlY3RJbk5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWZlcmVuY2VzKHJlZmVyZW5jZWRTeW1ib2xzOiBSZWZlcmVuY2VkU3ltYm9sW10gfCB1bmRlZmluZWQpOiBSZWZlcmVuY2VMb2NhdGlvbltdIHtcbiAgY29uc3QgcmVmZXJlbmNlczogUmVmZXJlbmNlTG9jYXRpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJlZmVyZW5jZWRTeW1ib2wgb2YgcmVmZXJlbmNlZFN5bWJvbHMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiByZWZlcmVuY2VkU3ltYm9sLnJlZmVyZW5jZXMpIHtcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7IGZpbGVOYW1lOiByZWZlcmVuY2UuZmlsZU5hbWUsIHN0YXJ0OiByZWZlcmVuY2UudGV4dFNwYW4uc3RhcnQgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWZlcmVuY2VzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0U3RyaW5nTGl0ZXJhbFJlZmVyZW5jZXMocGFyYW1zOiBDb2xsZWN0U3RyaW5nTGl0ZXJhbFJlZmVyZW5jZXNQYXJhbXMpOiBSZWZlcmVuY2VMb2NhdGlvbltdIHtcbiAgY29uc3QgeyBjb250ZXh0LCBkZWNsYXJpbmdDbGFzcywgbmFtZU5vZGUgfSA9IHBhcmFtcztcbiAgY29uc3Qgb2NjdXJyZW5jZXMgPSBjb250ZXh0LnN0cmluZ0xpdGVyYWxPY2N1cnJlbmNlc0J5VGV4dC5nZXQobmFtZU5vZGUuZ2V0VGV4dCgpKTtcbiAgaWYgKCFvY2N1cnJlbmNlcyB8fCBvY2N1cnJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrZXlTZXQgPSBnZXRDbGFzc0tleVNldChkZWNsYXJpbmdDbGFzcywgY29udGV4dC5jaGVja2VyKTtcbiAgY29uc3QgcmVmZXJlbmNlczogUmVmZXJlbmNlTG9jYXRpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9jY3VycmVuY2Ugb2Ygb2NjdXJyZW5jZXMpIHtcbiAgICBpZiAoaXNLZXlSZWZlcmVuY2VUb0NsYXNzKHsgY2hlY2tlcjogY29udGV4dC5jaGVja2VyLCBrZXlTZXQsIG5vZGU6IG9jY3VycmVuY2Uubm9kZSB9KSkge1xuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgZmlsZU5hbWU6IG9jY3VycmVuY2Uuc291cmNlRmlsZS5maWxlTmFtZSwgc3RhcnQ6IG9jY3VycmVuY2Uubm9kZS5nZXRTdGFydCgpIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cG9ydFJlbW92YWxFZGl0KGRlY2xhcmF0aW9uOiBFeHBvcnRhYmxlRGVjbGFyYXRpb24pOiBPdmVyRXhwb3N1cmVUZXh0RWRpdCB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyhkZWNsYXJhdGlvbik7XG4gIGFzc2VydE5vbk51bGxhYmxlKG1vZGlmaWVycywgJ01vZGlmaWVycyBleHBlY3RlZCBvbiBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbi4nKTtcbiAgY29uc3QgZXhwb3J0TW9kaWZpZXIgPSBtb2RpZmllcnMuZmluZCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLmtpbmQgPT09IFN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCk7XG4gIGFzc2VydE5vbk51bGxhYmxlKGV4cG9ydE1vZGlmaWVyLCAnRXhwb3J0IG1vZGlmaWVyIGV4cGVjdGVkIG9uIGFuIGV4cG9ydGVkIGRlY2xhcmF0aW9uLicpO1xuICBjb25zdCB7IHRleHQgfSA9IHNvdXJjZUZpbGU7XG4gIGxldCBlbmQgPSBleHBvcnRNb2RpZmllci5nZXRFbmQoKTtcbiAgd2hpbGUgKGVuZCA8IHRleHQubGVuZ3RoICYmIFdISVRFU1BBQ0VfUEFUVEVSTi50ZXN0KHRleHQuY2hhckF0KGVuZCkpKSB7XG4gICAgZW5kKys7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBmaWxlTmFtZTogdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksXG4gICAgbGVuZ3RoOiBlbmQgLSBleHBvcnRNb2RpZmllci5nZXRTdGFydCgpLFxuICAgIG5ld1RleHQ6ICcnLFxuICAgIHN0YXJ0OiBleHBvcnRNb2RpZmllci5nZXRTdGFydCgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVNZW1iZXJFeHBvc3VyZUVkaXQobWVtYmVyOiBDbGFzc01lbWJlckRlY2xhcmF0aW9uLCBzdWdnZXN0ZWRFeHBvc3VyZTogJ3ByaXZhdGUnIHwgJ3Byb3RlY3RlZCcpOiBudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQge1xuICBpZiAoKGdldERlY29yYXRvcnMobWVtYmVyKSA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IG1lbWJlci5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyhtZW1iZXIpID8/IFtdO1xuICBjb25zdCB2aXNpYmlsaXR5TW9kaWZpZXIgPSBtb2RpZmllcnMuZmluZCgobW9kaWZpZXIpID0+IFZJU0lCSUxJVFlfTU9ESUZJRVJfS0lORFMuaGFzKG1vZGlmaWVyLmtpbmQpKTtcbiAgaWYgKHZpc2liaWxpdHlNb2RpZmllcikge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGxlbmd0aDogdmlzaWJpbGl0eU1vZGlmaWVyLmdldEVuZCgpIC0gdmlzaWJpbGl0eU1vZGlmaWVyLmdldFN0YXJ0KCksXG4gICAgICBuZXdUZXh0OiBzdWdnZXN0ZWRFeHBvc3VyZSxcbiAgICAgIHN0YXJ0OiB2aXNpYmlsaXR5TW9kaWZpZXIuZ2V0U3RhcnQoKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBmaXJzdE1vZGlmaWVyID0gbW9kaWZpZXJzWzBdO1xuICBjb25zdCBpbnNlcnRTdGFydCA9IGZpcnN0TW9kaWZpZXIgPyBmaXJzdE1vZGlmaWVyLmdldFN0YXJ0KCkgOiBtZW1iZXIuZ2V0U3RhcnQoKTtcbiAgcmV0dXJuIHtcbiAgICBmaWxlTmFtZSxcbiAgICBsZW5ndGg6IDAsXG4gICAgbmV3VGV4dDogYCR7c3VnZ2VzdGVkRXhwb3N1cmV9IGAsXG4gICAgc3RhcnQ6IGluc2VydFN0YXJ0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVOZWVkZWRFeHBvc3VyZShwYXJhbXM6IENvbXB1dGVOZWVkZWRFeHBvc3VyZVBhcmFtcyk6IE1lbWJlckV4cG9zdXJlIHtcbiAgY29uc3QgeyBjb250ZXh0LCBkZWNsYXJpbmdDbGFzcywgcmVmZXJlbmNlcyB9ID0gcGFyYW1zO1xuICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICB9XG5cbiAgbGV0IG5lZWRlZDogTWVtYmVyRXhwb3N1cmUgPSAncHJpdmF0ZSc7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZXMpIHtcbiAgICBjb25zdCByZWZlcmVuY2VDbGFzcyA9IGdldENsYXNzQXRQb3NpdGlvbih7IGZpbGVOYW1lOiByZWZlcmVuY2UuZmlsZU5hbWUsIHBvc2l0aW9uOiByZWZlcmVuY2Uuc3RhcnQsIHByb2dyYW06IGNvbnRleHQucHJvZ3JhbSB9KTtcbiAgICBpZiAocmVmZXJlbmNlQ2xhc3MgPT09IGRlY2xhcmluZ0NsYXNzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlZmVyZW5jZUNsYXNzICYmIGlzRGVyaXZlZEZyb20oeyBiYXNlOiBkZWNsYXJpbmdDbGFzcywgY2hlY2tlcjogY29udGV4dC5jaGVja2VyLCBkZXJpdmVkOiByZWZlcmVuY2VDbGFzcyB9KSkge1xuICAgICAgbmVlZGVkID0gJ3Byb3RlY3RlZCc7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG4gIHJldHVybiBuZWVkZWQ7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRml4U3RhdHVzKGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmcpOiBzdHJpbmcge1xuICBpZiAoZmluZGluZy53YXNGaXhlZCkge1xuICAgIHJldHVybiAnIFtmaXhlZF0nO1xuICB9XG4gIGlmIChmaW5kaW5nLnNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCBbc2tpcHBlZDogJHtTS0lQX1JFQVNPTl9ERVNDUklQVElPTltmaW5kaW5nLnNraXBSZWFzb25dfV1gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVSZWFzb24oZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBgcmVmZXJlbmNlZCBvbmx5ICR7U0NPUEVfREVTQ1JJUFRJT05bZmluZGluZy5zdWdnZXN0ZWRFeHBvc3VyZV19YDtcbiAgaWYgKGZpbmRpbmcuaXNGb3JjZWRCeVRlc3RPbmx5KSB7XG4gICAgcmV0dXJuIGAke2Jhc2V9IChleHBvc2VkIG9ubHkgZm9yIHRlc3RzKWA7XG4gIH1cbiAgaWYgKGZpbmRpbmcuaGFzTm9SZWZlcmVuY2VzKSB7XG4gICAgcmV0dXJuIGAke2Jhc2V9IChubyByZWZlcmVuY2VzIGF0IGFsbClgO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTa2lwUmVhc29uKHBhcmFtczogRGV0ZXJtaW5lU2tpcFJlYXNvblBhcmFtcyk6IG51bGwgfCBPdmVyRXhwb3N1cmVTa2lwUmVhc29uIHtcbiAgY29uc3QgeyBlZGl0LCBmaW5kaW5nLCBzaG91bGRGb3JjZSB9ID0gcGFyYW1zO1xuICBpZiAoZmluZGluZy5pc0ZvcmNlZEJ5VGVzdE9ubHkgJiYgIXNob3VsZEZvcmNlKSB7XG4gICAgcmV0dXJuICd0ZXN0LW9ubHknO1xuICB9XG4gIGlmICghZWRpdCkge1xuICAgIHJldHVybiBmaW5kaW5nLmlzTWVtYmVyID8gJ2RlY29yYXRlZCcgOiAnc2hhcmVkLWV4cG9ydCc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlQXRQb3NpdGlvbihub2RlOiBOb2RlLCBwb3NpdGlvbjogbnVtYmVyKTogTm9kZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChwb3NpdGlvbiA8IG5vZGUuZ2V0U3RhcnQoKSB8fCBwb3NpdGlvbiA+PSBub2RlLmdldEVuZCgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgcmVzdWx0OiBOb2RlID0gbm9kZTtcbiAgbm9kZS5mb3JFYWNoQ2hpbGQoKGNoaWxkKSA9PiB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZUF0UG9zaXRpb24oY2hpbGQsIHBvc2l0aW9uKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJlc3VsdCA9IGZvdW5kO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbmRpbmdCbG9ja3MoZmluZGluZ3M6IHJlYWRvbmx5IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSwgYmFzZUZvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBjb25zdCBieUZpbGUgPSBuZXcgTWFwPHN0cmluZywgT3ZlckV4cG9zdXJlRmluZGluZ1tdPigpO1xuICBmb3IgKGNvbnN0IGZpbmRpbmcgb2YgZmluZGluZ3MpIHtcbiAgICBjb25zdCBsaXN0ID0gYnlGaWxlLmdldChmaW5kaW5nLmZpbGVQYXRoKSA/PyBbXTtcbiAgICBsaXN0LnB1c2goZmluZGluZyk7XG4gICAgYnlGaWxlLnNldChmaW5kaW5nLmZpbGVQYXRoLCBsaXN0KTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgbGlzdF0gb2YgYnlGaWxlKSB7XG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmxpc3RdLnNvcnQoKGEsIGIpID0+IGEubGluZSAtIGIubGluZSk7XG4gICAgY29uc3QgbG9jYXRpb25XaWR0aCA9IE1hdGgubWF4KC4uLnNvcnRlZC5tYXAoKGZpbmRpbmcpID0+IGAke1N0cmluZyhmaW5kaW5nLmxpbmUpfToke1N0cmluZyhmaW5kaW5nLmNvbHVtbil9YC5sZW5ndGgpKTtcbiAgICBsaW5lcy5wdXNoKHRvRGlzcGxheVBhdGgoeyBiYXNlRm9sZGVyLCBmaWxlUGF0aCB9KSk7XG4gICAgZm9yIChjb25zdCBmaW5kaW5nIG9mIHNvcnRlZCkge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBgJHtTdHJpbmcoZmluZGluZy5saW5lKX06JHtTdHJpbmcoZmluZGluZy5jb2x1bW4pfWAucGFkRW5kKGxvY2F0aW9uV2lkdGgpO1xuICAgICAgY29uc3QgY2hhbmdlID0gYCR7ZmluZGluZy5jdXJyZW50RXhwb3N1cmV9ICR7ZmluZGluZy5uYW1lfSAtPiAke2ZpbmRpbmcuc3VnZ2VzdGVkRXhwb3N1cmV9YDtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtsb2NhdGlvbn0gICR7Y2hhbmdlfSAtLSAke2Rlc2NyaWJlUmVhc29uKGZpbmRpbmcpfSR7ZGVzY3JpYmVGaXhTdGF0dXMoZmluZGluZyl9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gZm9ybWF0U3VtbWFyeShmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3VtbWFyeSA9IGAke1N0cmluZyhmaW5kaW5ncy5sZW5ndGgpfSBmaW5kaW5nKHMpLmA7XG4gIGNvbnN0IGZpeGVkQ291bnQgPSBmaW5kaW5ncy5maWx0ZXIoKGZpbmRpbmcpID0+IGZpbmRpbmcud2FzRml4ZWQpLmxlbmd0aDtcbiAgY29uc3Qgc2tpcHBlZENvdW50ID0gZmluZGluZ3MuZmlsdGVyKChmaW5kaW5nKSA9PiBmaW5kaW5nLnNraXBSZWFzb24gIT09IG51bGwpLmxlbmd0aDtcbiAgaWYgKGZpeGVkQ291bnQgPT09IDAgJiYgc2tpcHBlZENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHN1bW1hcnk7XG4gIH1cbiAgcmV0dXJuIGAke3N1bW1hcnl9ICR7U3RyaW5nKGZpeGVkQ291bnQpfSBmaXhlZCwgJHtTdHJpbmcoc2tpcHBlZENvdW50KX0gc2tpcHBlZC5gO1xufVxuXG5mdW5jdGlvbiBnZXRDbGFzc0F0UG9zaXRpb24ocGFyYW1zOiBHZXRDbGFzc0F0UG9zaXRpb25QYXJhbXMpOiBDbGFzc0xpa2VEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgZmlsZU5hbWUsIHBvc2l0aW9uLCBwcm9ncmFtIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGUoZmlsZU5hbWUpO1xuICBhc3NlcnROb25OdWxsYWJsZShzb3VyY2VGaWxlLCBgU291cmNlIGZpbGUgbm90IGZvdW5kIGluIHByb2dyYW06ICR7ZmlsZU5hbWV9YCk7XG4gIGNvbnN0IG5vZGUgPSBmaW5kTm9kZUF0UG9zaXRpb24oc291cmNlRmlsZSwgcG9zaXRpb24pO1xuICBhc3NlcnROb25OdWxsYWJsZShub2RlLCBgTm8gbm9kZSBmb3VuZCBhdCBwb3NpdGlvbiAke1N0cmluZyhwb3NpdGlvbil9IGluICR7ZmlsZU5hbWV9YCk7XG4gIHJldHVybiBnZXRFbmNsb3NpbmdDbGFzcyhub2RlKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xhc3NLZXlTZXQoZGVjbGFyaW5nQ2xhc3M6IENsYXNzTGlrZURlY2xhcmF0aW9uLCBjaGVja2VyOiBUeXBlQ2hlY2tlcik6IFJlYWRvbmx5U2V0PHN0cmluZz4ge1xuICBjb25zdCBjbGFzc1N5bWJvbCA9IGRlY2xhcmluZ0NsYXNzLm5hbWUgPyBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyaW5nQ2xhc3MubmFtZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNsYXNzVHlwZSA9IGNsYXNzU3ltYm9sID8gY2hlY2tlci5nZXREZWNsYXJlZFR5cGVPZlN5bWJvbChjbGFzc1N5bWJvbCkgOiBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKGRlY2xhcmluZ0NsYXNzKTtcbiAgcmV0dXJuIG5ldyBTZXQoY2xhc3NUeXBlLmdldFByb3BlcnRpZXMoKS5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRNZW1iZXJFeHBvc3VyZShtb2RpZmllcktpbmRzOiBSZWFkb25seVNldDxTeW50YXhLaW5kPik6IE1lbWJlckV4cG9zdXJlIHtcbiAgaWYgKG1vZGlmaWVyS2luZHMuaGFzKFN5bnRheEtpbmQuUHJpdmF0ZUtleXdvcmQpKSB7XG4gICAgcmV0dXJuICdwcml2YXRlJztcbiAgfVxuICBpZiAobW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5Qcm90ZWN0ZWRLZXl3b3JkKSkge1xuICAgIHJldHVybiAncHJvdGVjdGVkJztcbiAgfVxuICByZXR1cm4gJ3B1YmxpYyc7XG59XG5cbmZ1bmN0aW9uIGdldEVuY2xvc2luZ0NsYXNzKG5vZGU6IE5vZGUpOiBDbGFzc0xpa2VEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBOb2RlID0gbm9kZTtcbiAgd2hpbGUgKCFpc1NvdXJjZUZpbGUoY3VycmVudCkpIHtcbiAgICBpZiAoaXNDbGFzc0xpa2UoY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXhwb3J0ZWROYW1lTm9kZXMoZGVjbGFyYXRpb246IEV4cG9ydGFibGVEZWNsYXJhdGlvbik6IE5vZGVbXSB7XG4gIGlmIChpc1ZhcmlhYmxlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSkge1xuICAgIHJldHVybiBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbkxpc3QuZGVjbGFyYXRpb25zLm1hcCgodmFyaWFibGVEZWNsYXJhdGlvbikgPT4gdmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKS5maWx0ZXIoaXNJZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gZGVjbGFyYXRpb24ubmFtZSA/IFtkZWNsYXJhdGlvbi5uYW1lXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmllcktpbmRzKG5vZGU6IE5vZGUpOiBSZWFkb25seVNldDxTeW50YXhLaW5kPiB7XG4gIGNvbnN0IGtpbmRzID0gbmV3IFNldDxTeW50YXhLaW5kPigpO1xuICBpZiAoY2FuSGF2ZU1vZGlmaWVycyhub2RlKSkge1xuICAgIGZvciAoY29uc3QgbW9kaWZpZXIgb2YgZ2V0TW9kaWZpZXJzKG5vZGUpID8/IFtdKSB7XG4gICAgICBraW5kcy5hZGQobW9kaWZpZXIua2luZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBraW5kcztcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nTGl0ZXJhbENvbnN0aXR1ZW50cyh0eXBlOiBUeXBlKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGUuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICByZXR1cm4gW3R5cGUudmFsdWVdO1xuICB9XG4gIGlmICh0eXBlLmlzVW5pb24oKSkge1xuICAgIGNvbnN0IGxpdGVyYWxzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29uc3RpdHVlbnQgb2YgdHlwZS50eXBlcykge1xuICAgICAgaWYgKCFjb25zdGl0dWVudC5pc1N0cmluZ0xpdGVyYWwoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxpdGVyYWxzLnB1c2goY29uc3RpdHVlbnQudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbGl0ZXJhbHM7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhc1RzRG9jQ29tbWVudChub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgZnVsbFRleHQgPSBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCk7XG4gIGNvbnN0IGNvbW1lbnRSYW5nZXMgPSBnZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhmdWxsVGV4dCwgbm9kZS5nZXRGdWxsU3RhcnQoKSkgPz8gW107XG4gIHJldHVybiBjb21tZW50UmFuZ2VzLnNvbWUoKHJhbmdlKSA9PlxuICAgIHJhbmdlLmtpbmQgPT09IFN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYVxuICAgICYmIGZ1bGxUZXh0LmNoYXJBdChyYW5nZS5wb3MgKyBKU0RPQ19TRUNPTkRfQVNURVJJU0tfT0ZGU0VUKSA9PT0gJyonXG4gICAgJiYgZnVsbFRleHQuY2hhckF0KHJhbmdlLnBvcyArIEpTRE9DX0ZPVVJUSF9DSEFSQUNURVJfT0ZGU0VUKSAhPT0gJy8nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjbGFyYXRpb25JdHNlbGYocmVmZXJlbmNlOiBSZWZlcmVuY2VMb2NhdGlvbiwgbmFtZU5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkgPT09IHRvQ2Fub25pY2FsKG5hbWVOb2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZSkgJiYgcmVmZXJlbmNlLnN0YXJ0ID09PSBuYW1lTm9kZS5nZXRTdGFydCgpO1xufVxuXG5mdW5jdGlvbiBpc0Rlcml2ZWRGcm9tKHBhcmFtczogSXNEZXJpdmVkRnJvbVBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGJhc2UsIGNoZWNrZXIsIGRlcml2ZWQgfSA9IHBhcmFtcztcbiAgY29uc3QgYmFzZVN5bWJvbCA9IGJhc2UubmFtZSA/IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihiYXNlLm5hbWUpIDogdW5kZWZpbmVkO1xuICBpZiAoIWJhc2VTeW1ib2wpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBkZXJpdmVkLmhlcml0YWdlQ2xhdXNlcyA/PyBbXSkge1xuICAgIGlmIChjbGF1c2UudG9rZW4gIT09IFN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHR5cGVFeHByZXNzaW9uIG9mIGNsYXVzZS50eXBlcykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbih0eXBlRXhwcmVzc2lvbi5leHByZXNzaW9uKS5nZXRTeW1ib2woKTtcbiAgICAgIGlmIChzeW1ib2wgPT09IGJhc2VTeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN5bWJvbD8uZGVjbGFyYXRpb25zID8/IFtdKSB7XG4gICAgICAgIGlmIChpc0NsYXNzTGlrZShkZWNsYXJhdGlvbikgJiYgaXNEZXJpdmVkRnJvbSh7IGJhc2UsIGNoZWNrZXIsIGRlcml2ZWQ6IGRlY2xhcmF0aW9uIH0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0tleVJlZmVyZW5jZVRvQ2xhc3MocGFyYW1zOiBJc0tleVJlZmVyZW5jZVRvQ2xhc3NQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyBjaGVja2VyLCBrZXlTZXQsIG5vZGUgfSA9IHBhcmFtcztcbiAgY29uc3QgY29udGV4dHVhbFR5cGUgPSBjaGVja2VyLmdldENvbnRleHR1YWxUeXBlKG5vZGUpO1xuICBpZiAoIWNvbnRleHR1YWxUeXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGxpdGVyYWxzID0gZ2V0U3RyaW5nTGl0ZXJhbENvbnN0aXR1ZW50cyhjb250ZXh0dWFsVHlwZSk7XG4gIGlmICghbGl0ZXJhbHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGxpdGVyYWxzLmV2ZXJ5KChsaXRlcmFsKSA9PiBrZXlTZXQuaGFzKGxpdGVyYWwpKTtcbn1cblxuZnVuY3Rpb24gaXNPd25Tb3VyY2VGaWxlKHBhcmFtczogSXNPd25Tb3VyY2VGaWxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZmlsZVBhdGgsIHNyY0ZvbGRlciB9ID0gcGFyYW1zO1xuICByZXR1cm4gZmlsZVBhdGguc3RhcnRzV2l0aChgJHtzcmNGb2xkZXJ9L2ApICYmIGZpbGVQYXRoLmVuZHNXaXRoKCcudHMnKSAmJiAhZmlsZVBhdGguZW5kc1dpdGgoJy5kLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzVGVzdEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZVBhdGguaW5jbHVkZXMoJy50ZXN0LicpIHx8IGZpbGVQYXRoLmluY2x1ZGVzKCcuaW50ZWdyYXRpb24uJyk7XG59XG5cbmZ1bmN0aW9uIHJhbmtFeHBvc3VyZShleHBvc3VyZTogTWVtYmVyRXhwb3N1cmUpOiBudW1iZXIge1xuICByZXR1cm4gTUVNQkVSX0VYUE9TVVJFX09SREVSLmluZGV4T2YoZXhwb3N1cmUpO1xufVxuXG5mdW5jdGlvbiByZWNvcmQocGFyYW1zOiBSZWNvcmRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBlZGl0LCBmaW5kaW5nIH0gPSBwYXJhbXM7XG4gIGNvbnRleHQuZmluZGluZ3MucHVzaChmaW5kaW5nKTtcbiAgY29udGV4dC5lZGl0cy5wdXNoKGVkaXQpO1xufVxuXG5mdW5jdGlvbiBydW5PdmVyRXhwb3N1cmVBbmFseXNpcyhwYXJhbXM6IEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMpOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IHsgbGFuZ3VhZ2VTZXJ2aWNlLCBvblByb2dyZXNzLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgcHJvZ3JhbSA9IGxhbmd1YWdlU2VydmljZS5nZXRQcm9ncmFtKCk7XG4gIGlmICghcHJvZ3JhbSkge1xuICAgIHJldHVybiB7IGVkaXRzOiBbXSwgZmluZGluZ3M6IFtdIH07XG4gIH1cblxuICBjb25zdCBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQgPSB7XG4gICAgY2hlY2tlcjogcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpLFxuICAgIGVkaXRzOiBbXSxcbiAgICBmaW5kaW5nczogW10sXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByb2dyYW0sXG4gICAgc2hvdWxkRm9yY2U6IHBhcmFtcy5zaG91bGRGb3JjZSA/PyBmYWxzZSxcbiAgICBzdHJpbmdMaXRlcmFsT2NjdXJyZW5jZXNCeVRleHQ6IGJ1aWxkU3RyaW5nTGl0ZXJhbEluZGV4KHByb2dyYW0pXG4gIH07XG5cbiAgY29uc3Qgc291cmNlRmlsZXNUb0FuYWx5emUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKChzb3VyY2VGaWxlKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICByZXR1cm4gaXNPd25Tb3VyY2VGaWxlKHsgZmlsZVBhdGgsIHNyY0ZvbGRlciB9KSAmJiAhaXNUZXN0RmlsZShmaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgW2FuYWx5emVkRmlsZUNvdW50LCBzb3VyY2VGaWxlXSBvZiBzb3VyY2VGaWxlc1RvQW5hbHl6ZS5lbnRyaWVzKCkpIHtcbiAgICBvblByb2dyZXNzPy4oe1xuICAgICAgYW5hbHl6ZWRGaWxlQ291bnQsXG4gICAgICBjdXJyZW50RmlsZVBhdGg6IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLFxuICAgICAgdG90YWxGaWxlQ291bnQ6IHNvdXJjZUZpbGVzVG9BbmFseXplLmxlbmd0aFxuICAgIH0pO1xuICAgIHZpc2l0KHNvdXJjZUZpbGUpO1xuICB9XG4gIHJldHVybiB7IGVkaXRzOiBjb250ZXh0LmVkaXRzLCBmaW5kaW5nczogY29udGV4dC5maW5kaW5ncyB9O1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBhbmFseXplTWVtYmVyKG5vZGUsIGNvbnRleHQpO1xuICAgIGFuYWx5emVFeHBvcnQobm9kZSwgY29udGV4dCk7XG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQodmlzaXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRGlzcGxheVBhdGgocGFyYW1zOiBUb0Rpc3BsYXlQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBiYXNlRm9sZGVyLCBmaWxlUGF0aCB9ID0gcGFyYW1zO1xuICBpZiAoYmFzZUZvbGRlciAhPT0gdW5kZWZpbmVkICYmIGZpbGVQYXRoLnN0YXJ0c1dpdGgoYCR7YmFzZUZvbGRlcn0vYCkpIHtcbiAgICByZXR1cm4gZmlsZVBhdGguc2xpY2UoYmFzZUZvbGRlci5sZW5ndGggKyAxKTtcbiAgfVxuICByZXR1cm4gZmlsZVBhdGg7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEVBLHdCQTBCTztBQUVQLHlCQUFrQztBQUNsQyxpQ0FHTztBQThPQSxNQUFNLHNCQUEyQyxvQkFBSSxJQUFZO0FBQUEsRUFDdEU7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBeU5ELE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sd0JBQW1ELENBQUMsV0FBVyxhQUFhLFFBQVE7QUFDMUYsTUFBTSxvQkFBdUQ7QUFBQSxFQUMzRCxjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQ2Y7QUFDQSxNQUFNLDBCQUFrRTtBQUFBLEVBQ3RFLGFBQWE7QUFBQSxFQUNiLGlCQUFpQjtBQUFBLEVBQ2pCLGFBQWE7QUFDZjtBQUNBLE1BQU0sNEJBQXFELG9C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
760
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL292ZXItZXhwb3N1cmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPdmVyLWV4cG9zdXJlIGFuYWx5emVyLlxuICpcbiAqIEZpbmRzIGRlY2xhcmF0aW9ucyBleHBvc2VkIG1vcmUgYnJvYWRseSB0aGFuIHRoZWlyIHJlZmVyZW5jZXMgcmVxdWlyZSwgc28gdGhlIGV4cG9zdXJlIGNhbiBiZVxuICogdGlnaHRlbmVkOlxuICpcbiAqIC0gYGV4cG9ydGBlZCBzeW1ib2xzIHJlZmVyZW5jZWQgb25seSB3aXRoaW4gdGhlaXIgb3duIGZpbGUgXHUyMDE0IHRoZSBgZXhwb3J0YCBjYW4gYmUgZHJvcHBlZC5cbiAqIC0gYHB1YmxpY2AgY2xhc3MgbWVtYmVycyByZWZlcmVuY2VkIG9ubHkgaW5zaWRlIHRoZWlyIG93biBjbGFzcyBcdTIwMTQgdGhleSBjYW4gYmUgYHByaXZhdGVgLlxuICogLSBgcHVibGljYCBjbGFzcyBtZW1iZXJzIHJlZmVyZW5jZWQgb25seSBpbnNpZGUgdGhlaXIgb3duIGNsYXNzIGFuZCBpdHMgc3ViY2xhc3NlcyBcdTIwMTQgdGhleSBjYW4gYmVcbiAqICAgYHByb3RlY3RlZGAuXG4gKiAtIGBwcm90ZWN0ZWRgIGNsYXNzIG1lbWJlcnMgcmVmZXJlbmNlZCBvbmx5IGluc2lkZSB0aGVpciBvd24gY2xhc3MgXHUyMDE0IHRoZXkgY2FuIGJlIGBwcml2YXRlYC5cbiAqXG4gKiBUaGUgYW5hbHlzaXMgaXMgd2hvbGUtcHJvZ3JhbSBhbmQgdHlwZS1hd2FyZTogaXQgdXNlcyB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBzZXJ2aWNlJ3NcbiAqIGZpbmQtYWxsLXJlZmVyZW5jZXMgdG8gbG9jYXRlIGV2ZXJ5IHVzZSBvZiBlYWNoIGRlY2xhcmF0aW9uLCB0aGVuIGNsYXNzaWZpZXMgdGhlIHRpZ2h0ZXN0XG4gKiBleHBvc3VyZSB0aGF0IHN0aWxsIGNvdmVycyBhbGwgcmVmZXJlbmNlcy4gQmVjYXVzZSBgZmluZFJlZmVyZW5jZXNgIGRvZXMgbm90IGxpbmsgYSBzdHJpbmctbGl0ZXJhbFxuICogYXJndW1lbnQgYmFjayB0byBhIG1lbWJlciBkZWNsYXJhdGlvbiB3aGVuIHRoZSBwYXJhbWV0ZXIgaXMgYSBjb25kaXRpb25hbC9tYXBwZWQga2V5IHR5cGUgKGUuZy5cbiAqIGBiaW5kKGNvbXBvbmVudCwgJ3NvbWVTZXR0aW5nJylgIHdoZXJlIHRoZSBrZXkgaXMgdHlwZWQgYENvbmRpdGlvbmFsS2V5czxTZXR0aW5ncywgXHUyMDI2PmApLCBtZW1iZXJcbiAqIGFuYWx5c2lzIGFkZGl0aW9uYWxseSB0cmVhdHMgYSBzdHJpbmcgbGl0ZXJhbCB3aG9zZSB0ZXh0IGVxdWFscyB0aGUgbWVtYmVyIG5hbWUgYXMgYSByZWZlcmVuY2UgXHUyMDE0XG4gKiBidXQgb25seSB3aGVuIGl0cyBjb250ZXh0dWFsIHR5cGUgaXMgYSBzdHJpbmctbGl0ZXJhbCB0eXBlIChvciB1bmlvbiBvZiB0aGVtKSBhbGwgb2Ygd2hvc2UgbWVtYmVyc1xuICogYXJlIGtleXMgb2YgdGhlIGRlY2xhcmluZyBjbGFzcywgc28gaW5jaWRlbnRhbCBzYW1lLW5hbWVkIHN0cmluZ3MgKGBjb25zb2xlLmxvZygnbmFtZScpYCkgYXJlIG5vdFxuICogbWlzY291bnRlZC4gTWVtYmVycyBpbnZva2VkIGJ5IHRoZSBmcmFtZXdvcmsgdmlhIHJlZ2lzdHJhdGlvblxuICogcmF0aGVyIHRoYW4gYnkgdmlzaWJsZSByZWZlcmVuY2VzIChPYnNpZGlhbiBsaWZlY3ljbGUgaG9va3MsIHNldHRpbmdzLXRhYiBgZGlzcGxheWAsIGV0Yy4pIGFyZVxuICogZXhjbHVkZWQgdmlhIHtAbGluayBMSUZFQ1lDTEVfQUxMT1dMSVNUfSwgYXMgYXJlIGBvdmVycmlkZWAgYW5kIGBzdGF0aWNgIG1lbWJlcnMgd2hvc2UgZXhwb3N1cmUgaXNcbiAqIGNvbnN0cmFpbmVkIGJ5IGEgYmFzZSBkZWNsYXJhdGlvbi4gRUNNQVNjcmlwdCBoYXJkLXByaXZhdGUgbWVtYmVycyAoYCNuYW1lYCkgYXJlIGFsc28gZXhjbHVkZWQgXHUyMDE0XG4gKiB0aGV5IGFyZSBhbHJlYWR5IG1heGltYWxseSBwcml2YXRlIGFuZCBjYW5ub3QgY2FycnkgYSB2aXNpYmlsaXR5IG1vZGlmaWVyLiBBIGRlY2xhcmF0aW9uIGNhcnJ5aW5nXG4gKiBhIFRTRG9jIChgLyoqIFx1MjAyNiAqXFwvYCkgZG9jdW1lbnRhdGlvbiBjb21tZW50IGlzIGxpa2V3aXNlIGV4Y2x1ZGVkIFx1MjAxNCB3aGV0aGVyIGEgdG9wLWxldmVsIGBleHBvcnRgIG9yXG4gKiBhIGNsYXNzIG1lbWJlciwgZG9jdW1lbnRpbmcgaXQgaXMgYSBkZWxpYmVyYXRlIHNpZ25hbCB0aGF0IGl0IGlzIHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksXG4gKiByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGN1cnJlbnRseSBoYXBwZW5zIHRvIGJlIHJlZmVyZW5jZWQuXG4gKlxuICogQSBtZW1iZXIgcmVmZXJlbmNlZCBvbmx5IGZyb20gdGVzdCBmaWxlcyBpcyByZXBvcnRlZCB3aXRoIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seX1cbiAqIHNldCwgc3VyZmFjaW5nIG1lbWJlcnMgd2lkZW5lZCBwdXJlbHkgZm9yIHRlc3RhYmlsaXR5IFx1MjAxNCB0aGUgY2Fub25pY2FsIGNhc2UgZm9yIGV4dHJhY3RpbmcgbG9naWNcbiAqIGludG8gYW4gaW5kZXBlbmRlbnRseSB0ZXN0YWJsZSBjb21wb25lbnQgaW5zdGVhZC5cbiAqXG4gKiBCZXlvbmQgcmVwb3J0aW5nLCBwYXNzaW5nIGBzaG91bGRGaXhgIHRvIHtAbGluayBmaW5kT3ZlckV4cG9zdXJlfSAvIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfVxuICogcmV3cml0ZXMgdGhlIHNvdXJjZSBpbiBwbGFjZTogZHJvcHBpbmcgdGhlIGBleHBvcnRgIGtleXdvcmQsIG9yIHJlcGxhY2luZy9pbnNlcnRpbmcgYSBgcHJpdmF0ZWBcbiAqIG9yIGBwcm90ZWN0ZWRgIG1vZGlmaWVyLiBFYWNoIGZpbmRpbmcgdGhlbiBjYXJyaWVzIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLndhc0ZpeGVkfSAvXG4gKiB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufS4gQ2hhbmdlcyB0aGF0IGNhbm5vdCBiZSBzYWZlbHkgYXV0b21hdGVkIFx1MjAxNCB0aG9zZSBmb3JjZWRcbiAqIG9ubHkgYnkgdGVzdCByZWZlcmVuY2VzLCBkZWNvcmF0ZWQgbWVtYmVycywgb3IgYW4gYGV4cG9ydGAgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nIFx1MjAxNFxuICogYXJlIHJlcG9ydGVkIGFzIHNraXBwZWQgYW5kIGxlZnQgdW50b3VjaGVkLlxuICpcbiAqIEFkZGl0aW9uYWxseSBwYXNzaW5nIGBzaG91bGRGb3JjZWAgKG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIGBzaG91bGRGaXhgKSB0aWdodGVucyB0aGVcbiAqIGRlY2xhcmF0aW9ucyBoZWxkIHdpZGUgcHVyZWx5IGJ5IHRlc3QgcmVmZXJlbmNlcyB0b28gXHUyMDE0IHRoZSBwcm9kdWN0aW9uIGhhbGYgb2YgdGhlIGNhbm9uaWNhbFxuICogdGVzdC1vbmx5IG1pZ3JhdGlvbjogdGhlIG1lbWJlciBiZWNvbWVzIGBwcml2YXRlYCAvIHRoZSBgZXhwb3J0YCBpcyBkcm9wcGVkLCBsZWF2aW5nIG9ubHkgdGhlXG4gKiB0ZXN0IHRvIHN3aXRjaCB0byBhIGNhc3QtYmFzZWQgYWNjZXNzLiBEZWNvcmF0ZWQgbWVtYmVycyBhbmQgZXhwb3J0cyBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkXG4gKiBzaWJsaW5nIHN0YXkgc2tpcHBlZCBldmVuIHVuZGVyIGBzaG91bGRGb3JjZWAsIGJlY2F1c2Ugbm8gZWRpdCBjYW4gYmUgYXBwbGllZCBzYWZlbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDbGFzc0RlY2xhcmF0aW9uLFxuICBDbGFzc0xpa2VEZWNsYXJhdGlvbixcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBFbnVtRGVjbGFyYXRpb24sXG4gIEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIEdldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIEludGVyZmFjZURlY2xhcmF0aW9uLFxuICBJU2NyaXB0U25hcHNob3QsXG4gIExhbmd1YWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlSG9zdCxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFJlZmVyZW5jZWRTeW1ib2wsXG4gIFNldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIFNvdXJjZUZpbGUsXG4gIFN0cmluZ0xpdGVyYWxMaWtlLFxuICBUeXBlLFxuICBUeXBlQWxpYXNEZWNsYXJhdGlvbixcbiAgVHlwZUNoZWNrZXIsXG4gIFZhcmlhYmxlU3RhdGVtZW50XG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICBjYW5IYXZlTW9kaWZpZXJzLFxuICBjcmVhdGVEb2N1bWVudFJlZ2lzdHJ5LFxuICBjcmVhdGVMYW5ndWFnZVNlcnZpY2UsXG4gIGdldERlY29yYXRvcnMsXG4gIGdldERlZmF1bHRMaWJGaWxlUGF0aCxcbiAgZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMsXG4gIGdldE1vZGlmaWVycyxcbiAgaXNDbGFzc0RlY2xhcmF0aW9uLFxuICBpc0NsYXNzTGlrZSxcbiAgaXNFbnVtRGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIGlzTWV0aG9kRGVjbGFyYXRpb24sXG4gIGlzUHJpdmF0ZUlkZW50aWZpZXIsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1NvdXJjZUZpbGUsXG4gIGlzU3RyaW5nTGl0ZXJhbExpa2UsXG4gIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24sXG4gIGlzVmFyaWFibGVTdGF0ZW1lbnQsXG4gIFNjcmlwdFNuYXBzaG90LFxuICBTeW50YXhLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VUc0NvbmZpZyxcbiAgdG9DYW5vbmljYWxcbn0gZnJvbSAnLi4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMge1xuICAvKiogVGhlIGxhbmd1YWdlIHNlcnZpY2UgdG8gcXVlcnkgZm9yIHJlZmVyZW5jZXMgYW5kIHR5cGVzLiAqL1xuICByZWFkb25seSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBhbmFseXplZCBzb3VyY2UgZmlsZSwgYmVmb3JlIHRoYXQgZmlsZSBpcyBwcm9jZXNzZWQuIFRoZVxuICAgKiB3aG9sZS1wcm9ncmFtIHJlZmVyZW5jZSBhbmFseXNpcyBpcyBzbG93LCBzbyB0aGlzIGxldHMgY2FsbGVycyByZXBvcnQgbGl2ZSBwcm9ncmVzcyBpbnN0ZWFkIG9mXG4gICAqIGFwcGVhcmluZyB0byBoYW5nLlxuICAgKi9cbiAgb25Qcm9ncmVzcz8odGhpczogdm9pZCwgcHJvZ3Jlc3M6IE92ZXJFeHBvc3VyZVByb2dyZXNzKTogdm9pZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGVhY2ggZml4YWJsZSBmaW5kaW5nIGlzIHRpZ2h0ZW5lZCBpbiBwbGFjZSB2aWEge0BsaW5rIHdyaXRlRmlsZX0gKHdoaWNoIG11c3QgdGhlblxuICAgKiBiZSBwcm92aWRlZCksIGFuZCB0aGUgcmV0dXJuZWQgZmluZGluZ3MgY2Fycnkge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcud2FzRml4ZWR9IC9cbiAgICoge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0uIFdoZW4gYGZhbHNlYCBvciBvbWl0dGVkLCB0aGUgYW5hbHlzaXMgb25seSByZXBvcnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCAob25seSBtZWFuaW5nZnVsIHRvZ2V0aGVyIHdpdGgge0BsaW5rIHNob3VsZEZpeH0pLCBkZWNsYXJhdGlvbnMgaGVsZCB3aWRlIHB1cmVseSBieVxuICAgKiB0ZXN0IHJlZmVyZW5jZXMgYXJlIHRpZ2h0ZW5lZCB0b28sIGluc3RlYWQgb2YgYmVpbmcgc2tpcHBlZCB3aXRoIGEgYHRlc3Qtb25seWBcbiAgICoge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0uIERlY29yYXRlZCBtZW1iZXJzIGFuZCBleHBvcnRzIHNoYXJlZCB3aXRoIGFcbiAgICogc3RpbGwtZXhwb3J0ZWQgc2libGluZyBzdGF5IHNraXBwZWQgcmVnYXJkbGVzcywgYmVjYXVzZSBubyBlZGl0IGNhbiBiZSBhcHBsaWVkIHNhZmVseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBwcm9qZWN0J3MgYHNyY2AgZm9sZGVyLiBPbmx5IGRlY2xhcmF0aW9ucyBpbiBub24tdGVzdCBmaWxlc1xuICAgKiB1bmRlciB0aGlzIGZvbGRlciBhcmUgYW5hbHl6ZWQ7IGRlY2xhcmF0aW9ucyBlbHNld2hlcmUgKHRlc3QgZmlsZXMsIGRlcGVuZGVuY2llcykgYXJlIGlnbm9yZWRcbiAgICogYnV0IHN0aWxsIGNvdW50ZWQgYXMgcmVmZXJlbmNlIHNpdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdyaXRlcyB0aGUgdGlnaHRlbmVkIGNvbnRlbnRzIG9mIGEgY2hhbmdlZCBmaWxlIGJhY2sgdG8gZGlzay4gUmVxdWlyZWQgd2hlbiB7QGxpbmsgc2hvdWxkRml4fVxuICAgKiBpcyBgdHJ1ZWA7IGlnbm9yZWQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gd3JpdGUgKG9yaWdpbmFsIGNhc2luZywgYXMgc3RvcmVkIGluIHRoZSBwcm9ncmFtKS5cbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgZnVsbCBuZXcgZmlsZSBjb250ZW50cy5cbiAgICovXG4gIHdyaXRlRmlsZT8odGhpczogdm9pZCwgcGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0UGFyYW1zIHtcbiAgLyoqIFRoZSBjb21waWxlciBvcHRpb25zLiAqL1xuICByZWFkb25seSBjb21waWxlck9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKiogVGhlIGZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHByb2dyYW0uICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBmaWxlLXN5c3RlbSBvcGVyYXRpb25zIHVzZWQgdG8gcmVhZCBzb3VyY2VzLiAqL1xuICByZWFkb25seSBmaWxlU3lzdGVtOiBPdmVyRXhwb3N1cmVGaWxlU3lzdGVtO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlUGFyYW1zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QncyBgdHNjb25maWcuanNvbmAuICovXG4gIHJlYWRvbmx5IHRzQ29uZmlnUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBleHBvc3VyZSBsZXZlbCBhIGRlY2xhcmF0aW9uIGN1cnJlbnRseSBoYXMuXG4gKi9cbmV4cG9ydCB0eXBlIEN1cnJlbnRFeHBvc3VyZSA9ICdleHBvcnQnIHwgJ3Byb3RlY3RlZCcgfCAncHVibGljJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZE92ZXJFeHBvc3VyZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE92ZXJFeHBvc3VyZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjYWxsYmFjayBpbnZva2VkIG9uY2UgcGVyIGFuYWx5emVkIHNvdXJjZSBmaWxlLCBmb3IgbGl2ZSBwcm9ncmVzcyByZXBvcnRpbmcuIEZvcndhcmRlZFxuICAgKiB0byB7QGxpbmsgYW5hbHl6ZU92ZXJFeHBvc3VyZX0uXG4gICAqL1xuICBvblByb2dyZXNzPyh0aGlzOiB2b2lkLCBwcm9ncmVzczogT3ZlckV4cG9zdXJlUHJvZ3Jlc3MpOiB2b2lkO1xuXG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QgKHRoZSBmb2xkZXIgY29udGFpbmluZyBgdHNjb25maWcuanNvbmAgYW5kIGBzcmNgKS4gKi9cbiAgcmVhZG9ubHkgcHJvamVjdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgZml4YWJsZSBmaW5kaW5ncyBhcmUgdGlnaHRlbmVkIGluIHBsYWNlIG9uIGRpc2sgKHRoZSBgZXhwb3J0YCBrZXl3b3JkIGlzIGRyb3BwZWQsXG4gICAqIG9yIGEgYHByaXZhdGVgIC8gYHByb3RlY3RlZGAgbW9kaWZpZXIgaXMgaW5zZXJ0ZWQvcmVwbGFjZWQpLiBXaGVuIGBmYWxzZWAgb3Igb21pdHRlZCwgdGhlXG4gICAqIHByb2plY3QgaXMgb25seSBhbmFseXplZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAgKG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIHtAbGluayBzaG91bGRGaXh9KSwgZGVjbGFyYXRpb25zIGhlbGQgd2lkZSBwdXJlbHkgYnlcbiAgICogdGVzdCByZWZlcmVuY2VzIGFyZSB0aWdodGVuZWQgdG9vLCBpbnN0ZWFkIG9mIGJlaW5nIHNraXBwZWQuIERlY29yYXRlZCBtZW1iZXJzIGFuZCBleHBvcnRzXG4gICAqIHNoYXJlZCB3aXRoIGEgc3RpbGwtZXhwb3J0ZWQgc2libGluZyBzdGF5IHNraXBwZWQgcmVnYXJkbGVzcy4gRm9yd2FyZGVkIHRvXG4gICAqIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBmb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5nc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBmaWxlIHBhdGhzIGluIHRoZSByZXBvcnQgYXJlIHJlbmRlcmVkIHJlbGF0aXZlIHRvIHRoaXMgZm9sZGVyICh0eXBpY2FsbHkgdGhlIGN1cnJlbnRcbiAgICogd29ya2luZyBkaXJlY3RvcnkpIGluc3RlYWQgb2YgYXMgYWJzb2x1dGUgcGF0aHMuIFBhdGhzIG91dHNpZGUgdGhlIGZvbGRlciBzdGF5IGFic29sdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUZvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGZpbGUtc3lzdGVtIG9wZXJhdGlvbnMgdGhlIGxhbmd1YWdlLXNlcnZpY2UgaG9zdCBuZWVkcy4gSW5qZWN0aW5nIHRoaXMgKHJhdGhlciB0aGFuXG4gKiBhbHdheXMgdXNpbmcgYHR5cGVzY3JpcHRgJ3MgYHN5c2ApIGxldHMgdGVzdHMgZHJpdmUgdGhlIGFuYWx5emVyIGFnYWluc3QgaW4tbWVtb3J5IHNvdXJjZXMgd2l0aCBub1xuICogcmVhbCBmaWxlLXN5c3RlbSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlckV4cG9zdXJlRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCAtIERpcmVjdG9yeSBwYXRoLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZGlyZWN0b3J5IGV4aXN0cy5cbiAgICovXG4gIGRpcmVjdG9yeUV4aXN0cyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGZpbGUgZXhpc3RzLlxuICAgKi9cbiAgZmlsZUV4aXN0cyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIGdldEN1cnJlbnREaXJlY3RvcnkodGhpczogdm9pZCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHJldHVybnMgVGhlIGltbWVkaWF0ZSBzdWJkaXJlY3RvcnkgbmFtZXMuXG4gICAqL1xuICBnZXREaXJlY3Rvcmllcyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBSb290IGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIGV4dGVuc2lvbnMgLSBFeHRlbnNpb25zIHRvIGluY2x1ZGUuXG4gICAqIEBwYXJhbSBleGNsdWRlIC0gUGF0dGVybnMgdG8gZXhjbHVkZS5cbiAgICogQHBhcmFtIGluY2x1ZGUgLSBQYXR0ZXJucyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0gZGVwdGggLSBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGZpbGUgcGF0aHMuXG4gICAqL1xuICByZWFkRGlyZWN0b3J5KHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZywgZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdLCBleGNsdWRlPzogcmVhZG9ubHkgc3RyaW5nW10sIGluY2x1ZGU/OiByZWFkb25seSBzdHJpbmdbXSwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBmaWxlIGNvbnRlbnRzLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRGaWxlKHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlckV4cG9zdXJlRmluZGluZyB7XG4gIC8qKiAxLWJhc2VkIGNvbHVtbiBvZiB0aGUgZGVjbGFyYXRpb24ncyBuYW1lLiAqL1xuICByZWFkb25seSBjb2x1bW46IG51bWJlcjtcblxuICAvKiogVGhlIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwuICovXG4gIHJlYWRvbmx5IGN1cnJlbnRFeHBvc3VyZTogQ3VycmVudEV4cG9zdXJlO1xuXG4gIC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIGRlY2xhcmluZyB0aGUgc3ltYm9sLiAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBgdHJ1ZWAgd2hlbiB0aGUgZGVjbGFyYXRpb24gaGFzIG5vIHJlZmVyZW5jZXMgYXQgYWxsIChiZXNpZGVzIGl0c2VsZikuICovXG4gIHJlYWRvbmx5IGhhc05vUmVmZXJlbmNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlIGRlY2xhcmF0aW9uIHdvdWxkIHF1YWxpZnkgZm9yIGEgdGlnaHRlciBleHBvc3VyZSBpZiBub3QgZm9yIHJlZmVyZW5jZXMgY29taW5nXG4gICAqIGV4Y2x1c2l2ZWx5IGZyb20gdGVzdCBmaWxlcyBcdTIwMTQgaS5lLiBpdCBpcyBleHBvc2VkIHB1cmVseSBmb3IgdGVzdGFiaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqIGB0cnVlYCBmb3IgYSBjbGFzcyBtZW1iZXIsIGBmYWxzZWAgZm9yIGEgdG9wLWxldmVsIGV4cG9ydC4gKi9cbiAgcmVhZG9ubHkgaXNNZW1iZXI6IGJvb2xlYW47XG5cbiAgLyoqIDEtYmFzZWQgbGluZSBvZiB0aGUgZGVjbGFyYXRpb24ncyBuYW1lLiAqL1xuICByZWFkb25seSBsaW5lOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBkZWNsYXJlZCBuYW1lLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluIGEgZml4IHJ1biwgd2h5IHRoaXMgZmluZGluZyB3YXMgbGVmdCB1bnRvdWNoZWQgaW5zdGVhZCBvZiB0aWdodGVuZWQ7IGBudWxsYCB3aGVuIGl0IHdhc1xuICAgKiBmaXhlZCBvciB3aGVuIHRoZSBhbmFseXNpcyBvbmx5IHJlcG9ydGVkIChgc2hvdWxkRml4YCBvZmYpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJlYXNvbjogbnVsbCB8IE92ZXJFeHBvc3VyZVNraXBSZWFzb247XG5cbiAgLyoqIFRoZSBleHBvc3VyZSB0aGUgZGVjbGFyYXRpb24gY291bGQgYmUgdGlnaHRlbmVkIHRvLiAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRFeHBvc3VyZTogU3VnZ2VzdGVkRXhwb3N1cmU7XG5cbiAgLyoqIGB0cnVlYCB3aGVuIGEgZml4IHJ1biB0aWdodGVuZWQgdGhpcyBkZWNsYXJhdGlvbiBpbiBwbGFjZS4gQWx3YXlzIGBmYWxzZWAgaW4gYSByZXBvcnQgcnVuLiAqL1xuICByZWFkb25seSB3YXNGaXhlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9ncmVzcyByZXBvcnRlZCB3aGlsZSBhbmFseXppbmcgYSBwcm9qZWN0LCBvbmUgZXZlbnQgcGVyIGFuYWx5emVkIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZVByb2dyZXNzIHtcbiAgLyoqIE51bWJlciBvZiBzb3VyY2UgZmlsZXMgZnVsbHkgYW5hbHl6ZWQgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSAoMC1iYXNlZCkuICovXG4gIHJlYWRvbmx5IGFuYWx5emVkRmlsZUNvdW50OiBudW1iZXI7XG5cbiAgLyoqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlIGFib3V0IHRvIGJlIGFuYWx5emVkLiAqL1xuICByZWFkb25seSBjdXJyZW50RmlsZVBhdGg6IHN0cmluZztcblxuICAvKiogVG90YWwgbnVtYmVyIG9mIHNvdXJjZSBmaWxlcyB0aGF0IHdpbGwgYmUgYW5hbHl6ZWQuICovXG4gIHJlYWRvbmx5IHRvdGFsRmlsZUNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2h5IGEgZml4IHJ1biBsZWZ0IGEgZmluZGluZyB1bnRvdWNoZWQ6XG4gKlxuICogLSBgZGVjb3JhdGVkYCBcdTIwMTQgdGhlIG1lbWJlciBjYXJyaWVzIGEgZGVjb3JhdG9yLCBzbyB0aGUgbW9kaWZpZXIgaW5zZXJ0aW9uIHBvaW50IGlzIGFtYmlndW91cy5cbiAqIC0gYHNoYXJlZC1leHBvcnRgIFx1MjAxNCB0aGUgYGV4cG9ydGAga2V5d29yZCBpcyBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcgZGVjbGFyYXRvci5cbiAqIC0gYHRlc3Qtb25seWAgXHUyMDE0IHRoZSBkZWNsYXJhdGlvbiBpcyBleHBvc2VkIHB1cmVseSBmb3IgdGVzdHMsIHNvIHRpZ2h0ZW5pbmcgd291bGQgYnJlYWsgdGhlIHRlc3QuXG4gKi9cbmV4cG9ydCB0eXBlIE92ZXJFeHBvc3VyZVNraXBSZWFzb24gPSAnZGVjb3JhdGVkJyB8ICdzaGFyZWQtZXhwb3J0JyB8ICd0ZXN0LW9ubHknO1xuXG4vKipcbiAqIFRoZSAodGlnaHRlcikgZXhwb3N1cmUgbGV2ZWwgYSBkZWNsYXJhdGlvbiBjb3VsZCBiZSByZWR1Y2VkIHRvLlxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRFeHBvc3VyZSA9ICdmaWxlLWxvY2FsJyB8ICdwcml2YXRlJyB8ICdwcm90ZWN0ZWQnO1xuXG4vKipcbiAqIExpZmVjeWNsZSBhbmQgZnJhbWV3b3JrIG1lbWJlcnMgaW52b2tlZCBieSBPYnNpZGlhbiBvciBhIGJhc2UgY2xhc3MgdmlhIHJlZ2lzdHJhdGlvbiByYXRoZXIgdGhhblxuICogYnkgcmVmZXJlbmNlcyB0aGUgbGFuZ3VhZ2Ugc2VydmljZSBjYW4gc2VlLiBUaWdodGVuaW5nIHRoZXNlIHdvdWxkIGJyZWFrIHRoZSBmcmFtZXdvcmsgY29udHJhY3QsXG4gKiBzbyB0aGV5IGFyZSBuZXZlciByZXBvcnRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IExJRkVDWUNMRV9BTExPV0xJU1Q6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnZGlzcGxheScsXG4gICdoaWRlJyxcbiAgJ29uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScsXG4gICdvbkxheW91dFJlYWR5JyxcbiAgJ29ubG9hZCcsXG4gICdvbmxvYWRJbXBsJyxcbiAgJ29uTG9hZFNldHRpbmdzJyxcbiAgJ29uU2F2ZVNldHRpbmdzJyxcbiAgJ29udW5sb2FkJyxcbiAgJ29udW5sb2FkSW1wbCdcbl0pO1xuXG5pbnRlcmZhY2UgQW5hbHlzaXNDb250ZXh0IHtcbiAgcmVhZG9ubHkgY2hlY2tlcjogVHlwZUNoZWNrZXI7XG4gIHJlYWRvbmx5IGVkaXRzOiAobnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0KVtdO1xuICByZWFkb25seSBmaW5kaW5nczogT3ZlckV4cG9zdXJlRmluZGluZ1tdO1xuICByZWFkb25seSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZTtcbiAgcmVhZG9ubHkgcHJvZ3JhbTogUHJvZ3JhbTtcbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHN0cmluZ0xpdGVyYWxPY2N1cnJlbmNlc0J5VGV4dDogUmVhZG9ubHlNYXA8c3RyaW5nLCByZWFkb25seSBTdHJpbmdMaXRlcmFsT2NjdXJyZW5jZVtdPjtcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzUmVzdWx0IHtcbiAgcmVhZG9ubHkgZWRpdHM6IHJlYWRvbmx5IChudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQpW107XG4gIHJlYWRvbmx5IGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFwcGx5T3ZlckV4cG9zdXJlRml4ZXN9LlxuICovXG5pbnRlcmZhY2UgQXBwbHlPdmVyRXhwb3N1cmVGaXhlc1BhcmFtcyB7XG4gIC8qKiBUaGUgcHJvZ3JhbSB3aG9zZSBzb3VyY2UgZmlsZXMgc3VwcGx5IHRoZSBvcmlnaW5hbCB0ZXh0IHRoZSBlZGl0cyBhcmUgYXBwbGllZCB0bzsgYHVuZGVmaW5lZGAgd2hlbiBubyBwcm9ncmFtIGlzIGF2YWlsYWJsZS4gKi9cbiAgcmVhZG9ubHkgcHJvZ3JhbTogUHJvZ3JhbSB8IHVuZGVmaW5lZDtcblxuICAvKiogVGhlIGFuYWx5c2lzIHJlc3VsdCB3aG9zZSBmaW5kaW5ncyBhbmQgZWRpdHMgYXJlIHR1cm5lZCBpbnRvIGluLXBsYWNlIGZpeGVzLiAqL1xuICByZWFkb25seSByZXN1bHQ6IEFuYWx5c2lzUmVzdWx0O1xuXG4gIC8qKiBXaGVuIGB0cnVlYCwgZGVjbGFyYXRpb25zIGhlbGQgd2lkZSBwdXJlbHkgYnkgdGVzdCByZWZlcmVuY2VzIGFyZSB0aWdodGVuZWQgdG9vIGluc3RlYWQgb2YgYmVpbmcgc2tpcHBlZC4gKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U6IGJvb2xlYW47XG5cbiAgLyoqIFdyaXRlcyB0aGUgdGlnaHRlbmVkIGNvbnRlbnRzIG9mIGEgY2hhbmdlZCBmaWxlIGJhY2sgdG8gZGlzay4gKi9cbiAgd3JpdGVGaWxlKHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRGaW5kaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEJ1aWxkRmluZGluZ1BhcmFtcyB7XG4gIC8qKiBUaGUgY3VycmVudCBleHBvc3VyZSBsZXZlbCBvZiB0aGUgZGVjbGFyYXRpb24uICovXG4gIHJlYWRvbmx5IGN1cnJlbnRFeHBvc3VyZTogQ3VycmVudEV4cG9zdXJlO1xuXG4gIC8qKiBGbGFncyBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIGRlY2xhcmF0aW9uIGhhcyBubyByZWZlcmVuY2VzIGF0IGFsbCBvciBpcyBmb3JjZWQgd2lkZSBieSB0ZXN0LW9ubHkgcmVmZXJlbmNlcy4gKi9cbiAgcmVhZG9ubHkgZmxhZ3M6IEZpbmRpbmdGbGFncztcblxuICAvKiogVGhlIGRlY2xhcmF0aW9uJ3MgbmFtZSBub2RlLCB1c2VkIHRvIHJlc29sdmUgaXRzIHBvc2l0aW9uIGFuZCB0ZXh0LiAqL1xuICByZWFkb25seSBuYW1lTm9kZTogTm9kZTtcblxuICAvKiogVGhlIGRlY2xhcmF0aW9uIG5vZGUsIHVzZWQgdG8gcmVzb2x2ZSBpdHMgc291cmNlIGZpbGUuICovXG4gIHJlYWRvbmx5IG5vZGU6IE5vZGU7XG5cbiAgLyoqIFRoZSB0aWdodGVyIGV4cG9zdXJlIGxldmVsIHRoZSBkZWNsYXJhdGlvbiBjb3VsZCBiZSByZWR1Y2VkIHRvLiAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRFeHBvc3VyZTogU3VnZ2VzdGVkRXhwb3N1cmU7XG59XG5cbnR5cGUgQ2xhc3NNZW1iZXJEZWNsYXJhdGlvbiA9IEdldEFjY2Vzc29yRGVjbGFyYXRpb24gfCBNZXRob2REZWNsYXJhdGlvbiB8IFByb3BlcnR5RGVjbGFyYXRpb24gfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb2xsZWN0U3RyaW5nTGl0ZXJhbFJlZmVyZW5jZXN9LlxuICovXG5pbnRlcmZhY2UgQ29sbGVjdFN0cmluZ0xpdGVyYWxSZWZlcmVuY2VzUGFyYW1zIHtcbiAgLyoqIFRoZSBhbmFseXNpcyBjb250ZXh0IHByb3ZpZGluZyB0aGUgc3RyaW5nLWxpdGVyYWwgaW5kZXggYW5kIHR5cGUgY2hlY2tlci4gKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQW5hbHlzaXNDb250ZXh0O1xuXG4gIC8qKiBUaGUgY2xhc3MgZGVjbGFyaW5nIHRoZSBtZW1iZXIgd2hvc2UgbmFtZSB0aGUgc3RyaW5nIGxpdGVyYWxzIG1pZ2h0IHJlZmVyZW5jZS4gKi9cbiAgcmVhZG9ubHkgZGVjbGFyaW5nQ2xhc3M6IENsYXNzTGlrZURlY2xhcmF0aW9uO1xuXG4gIC8qKiBUaGUgbWVtYmVyJ3MgbmFtZSBub2RlLCB3aG9zZSB0ZXh0IGlzIG1hdGNoZWQgYWdhaW5zdCBzdHJpbmctbGl0ZXJhbCBvY2N1cnJlbmNlcy4gKi9cbiAgcmVhZG9ubHkgbmFtZU5vZGU6IE5vZGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbXB1dGVOZWVkZWRFeHBvc3VyZX0uXG4gKi9cbmludGVyZmFjZSBDb21wdXRlTmVlZGVkRXhwb3N1cmVQYXJhbXMge1xuICAvKiogVGhlIGFuYWx5c2lzIGNvbnRleHQgcHJvdmlkaW5nIHRoZSBwcm9ncmFtIGFuZCB0eXBlIGNoZWNrZXIuICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dDtcblxuICAvKiogVGhlIGNsYXNzIGRlY2xhcmluZyB0aGUgbWVtYmVyIHdob3NlIG5lZWRlZCBleHBvc3VyZSBpcyBjb21wdXRlZC4gKi9cbiAgcmVhZG9ubHkgZGVjbGFyaW5nQ2xhc3M6IENsYXNzTGlrZURlY2xhcmF0aW9uO1xuXG4gIC8qKiBUaGUgcmVmZXJlbmNlIGxvY2F0aW9ucyB0aGF0IG11c3QgcmVtYWluIHJlYWNoYWJsZSBhdCB0aGUgY29tcHV0ZWQgZXhwb3N1cmUuICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM6IHJlYWRvbmx5IFJlZmVyZW5jZUxvY2F0aW9uW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRldGVybWluZVNraXBSZWFzb259LlxuICovXG5pbnRlcmZhY2UgRGV0ZXJtaW5lU2tpcFJlYXNvblBhcmFtcyB7XG4gIC8qKiBUaGUgdGV4dCBlZGl0IHRoYXQgd291bGQgdGlnaHRlbiB0aGUgZmluZGluZywgb3IgYG51bGxgIHdoZW4gbm8gc2FmZSBlZGl0IGV4aXN0cy4gKi9cbiAgcmVhZG9ubHkgZWRpdDogbnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0O1xuXG4gIC8qKiBUaGUgZmluZGluZyB1bmRlciBjb25zaWRlcmF0aW9uLiAqL1xuICByZWFkb25seSBmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nO1xuXG4gIC8qKiBXaGVuIGB0cnVlYCwgdGVzdC1vbmx5IGZpbmRpbmdzIGFyZSB0aWdodGVuZWQgcmF0aGVyIHRoYW4gc2tpcHBlZC4gKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U6IGJvb2xlYW47XG59XG5cbnR5cGUgRXhwb3J0YWJsZURlY2xhcmF0aW9uID0gQ2xhc3NEZWNsYXJhdGlvbiB8IEVudW1EZWNsYXJhdGlvbiB8IEZ1bmN0aW9uRGVjbGFyYXRpb24gfCBJbnRlcmZhY2VEZWNsYXJhdGlvbiB8IFR5cGVBbGlhc0RlY2xhcmF0aW9uIHwgVmFyaWFibGVTdGF0ZW1lbnQ7XG5cbmludGVyZmFjZSBFeHBvcnRGaW5kaW5nQ2FuZGlkYXRlIHtcbiAgcmVhZG9ubHkgZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZztcbiAgcmVhZG9ubHkgaXNQbGFpbkZpbGVMb2NhbDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbmRpbmdGbGFncyB7XG4gIHJlYWRvbmx5IGhhc05vUmVmZXJlbmNlczogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNGb3JjZWRCeVRlc3RPbmx5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRDbGFzc0F0UG9zaXRpb259LlxuICovXG5pbnRlcmZhY2UgR2V0Q2xhc3NBdFBvc2l0aW9uUGFyYW1zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgcG9zaXRpb24uICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIDAtYmFzZWQgY2hhcmFjdGVyIG9mZnNldCBvZiB0aGUgcmVmZXJlbmNlIHdpdGhpbiB0aGUgZmlsZS4gKi9cbiAgcmVhZG9ubHkgcG9zaXRpb246IG51bWJlcjtcblxuICAvKiogVGhlIHByb2dyYW0gdXNlZCB0byByZXNvbHZlIHRoZSBzb3VyY2UgZmlsZS4gKi9cbiAgcmVhZG9ubHkgcHJvZ3JhbTogUHJvZ3JhbTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNEZXJpdmVkRnJvbX0uXG4gKi9cbmludGVyZmFjZSBJc0Rlcml2ZWRGcm9tUGFyYW1zIHtcbiAgLyoqIFRoZSBjYW5kaWRhdGUgYmFzZSBjbGFzcy4gKi9cbiAgcmVhZG9ubHkgYmFzZTogQ2xhc3NMaWtlRGVjbGFyYXRpb247XG5cbiAgLyoqIFRoZSB0eXBlIGNoZWNrZXIgdXNlZCB0byByZXNvbHZlIGhlcml0YWdlIHN5bWJvbHMuICovXG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuXG4gIC8qKiBUaGUgY2FuZGlkYXRlIGRlcml2ZWQgY2xhc3MuICovXG4gIHJlYWRvbmx5IGRlcml2ZWQ6IENsYXNzTGlrZURlY2xhcmF0aW9uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0tleVJlZmVyZW5jZVRvQ2xhc3N9LlxuICovXG5pbnRlcmZhY2UgSXNLZXlSZWZlcmVuY2VUb0NsYXNzUGFyYW1zIHtcbiAgLyoqIFRoZSB0eXBlIGNoZWNrZXIgdXNlZCB0byByZXNvbHZlIHRoZSBsaXRlcmFsJ3MgY29udGV4dHVhbCB0eXBlLiAqL1xuICByZWFkb25seSBjaGVja2VyOiBUeXBlQ2hlY2tlcjtcblxuICAvKiogVGhlIHNldCBvZiBwcm9wZXJ0eSBrZXlzIGRlY2xhcmVkIGJ5IHRoZSBjbGFzcy4gKi9cbiAgcmVhZG9ubHkga2V5U2V0OiBSZWFkb25seVNldDxzdHJpbmc+O1xuXG4gIC8qKiBUaGUgc3RyaW5nLWxpdGVyYWwgbm9kZSBiZWluZyB0ZXN0ZWQuICovXG4gIHJlYWRvbmx5IG5vZGU6IFN0cmluZ0xpdGVyYWxMaWtlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc093blNvdXJjZUZpbGV9LlxuICovXG5pbnRlcmZhY2UgSXNPd25Tb3VyY2VGaWxlUGFyYW1zIHtcbiAgLyoqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIGZpbGUgdW5kZXIgdGVzdC4gKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAvKiogQWJzb2x1dGUgKGNhbm9uaWNhbCkgcGF0aCBvZiB0aGUgcHJvamVjdCdzIGBzcmNgIGZvbGRlci4gKi9cbiAgcmVhZG9ubHkgc3JjRm9sZGVyOiBzdHJpbmc7XG59XG5cbnR5cGUgTWVtYmVyRXhwb3N1cmUgPSAncHJpdmF0ZScgfCAncHJvdGVjdGVkJyB8ICdwdWJsaWMnO1xuXG4vKipcbiAqIEEgc2luZ2xlIGluLXBsYWNlIHRleHQgcmVwbGFjZW1lbnQgdGhhdCB0aWdodGVucyBhIGRlY2xhcmF0aW9uJ3MgZXhwb3N1cmUuIEEgemVyby1sZW5ndGggZWRpdCBpc1xuICogYW4gaW5zZXJ0aW9uIChlLmcuIGFkZGluZyBhbiBleHBsaWNpdCBgcHJpdmF0ZWAgbW9kaWZpZXIgdG8gYW4gaW1wbGljaXRseS1gcHVibGljYCBtZW1iZXIpLlxuICovXG5pbnRlcmZhY2UgT3ZlckV4cG9zdXJlVGV4dEVkaXQge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgbmV3VGV4dDogc3RyaW5nO1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWNvcmR9LlxuICovXG5pbnRlcmZhY2UgUmVjb3JkUGFyYW1zIHtcbiAgLyoqIFRoZSBhbmFseXNpcyBjb250ZXh0IHdob3NlIGZpbmRpbmdzIGFuZCBlZGl0cyBhcmUgYXBwZW5kZWQgdG8uICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dDtcblxuICAvKiogVGhlIHRleHQgZWRpdCB0aGF0IHdvdWxkIHRpZ2h0ZW4gdGhlIGZpbmRpbmcsIG9yIGBudWxsYCB3aGVuIG5vIHNhZmUgZWRpdCBleGlzdHMuICovXG4gIHJlYWRvbmx5IGVkaXQ6IG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdDtcblxuICAvKiogVGhlIGZpbmRpbmcgdG8gcmVjb3JkLiAqL1xuICByZWFkb25seSBmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVmZXJlbmNlTG9jYXRpb24ge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgU291cmNlRmlsZVRleHQge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdHJpbmdMaXRlcmFsT2NjdXJyZW5jZSB7XG4gIHJlYWRvbmx5IG5vZGU6IFN0cmluZ0xpdGVyYWxMaWtlO1xuICByZWFkb25seSBzb3VyY2VGaWxlOiBTb3VyY2VGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b0Rpc3BsYXlQYXRofS5cbiAqL1xuaW50ZXJmYWNlIFRvRGlzcGxheVBhdGhQYXJhbXMge1xuICAvKiogV2hlbiBzZXQsIHRoZSBwYXRoIGlzIHJlbmRlcmVkIHJlbGF0aXZlIHRvIHRoaXMgZm9sZGVyOyBwYXRocyBvdXRzaWRlIGl0IHN0YXkgYWJzb2x1dGUuICovXG4gIHJlYWRvbmx5IGJhc2VGb2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogQWJzb2x1dGUgKGNhbm9uaWNhbCkgcGF0aCB0byByZW5kZXIuICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8vIEEgSlNEb2MvVFNEb2MgY29tbWVudCBvcGVucyB3aXRoIGAvKipgOiB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCAyIGlzIHRoZSBzZWNvbmQgYCpgLCBhbmQgdG8gZXhjbHVkZSB0aGUgZW1wdHkgYC8qKi9gIGNvbW1lbnQgdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgMyBtdXN0IG5vdCBiZSB0aGUgY2xvc2luZyBgL2AuXG5jb25zdCBKU0RPQ19TRUNPTkRfQVNURVJJU0tfT0ZGU0VUID0gMjtcbmNvbnN0IEpTRE9DX0ZPVVJUSF9DSEFSQUNURVJfT0ZGU0VUID0gMztcbmNvbnN0IE1FTUJFUl9FWFBPU1VSRV9PUkRFUjogcmVhZG9ubHkgTWVtYmVyRXhwb3N1cmVbXSA9IFsncHJpdmF0ZScsICdwcm90ZWN0ZWQnLCAncHVibGljJ107XG5jb25zdCBTQ09QRV9ERVNDUklQVElPTjogUmVjb3JkPFN1Z2dlc3RlZEV4cG9zdXJlLCBzdHJpbmc+ID0ge1xuICAnZmlsZS1sb2NhbCc6ICd3aXRoaW4gaXRzIG93biBmaWxlJyxcbiAgJ3ByaXZhdGUnOiAnaW5zaWRlIGl0cyBvd24gY2xhc3MnLFxuICAncHJvdGVjdGVkJzogJ2luc2lkZSBpdHMgY2xhc3MgKyBzdWJjbGFzc2VzJ1xufTtcbmNvbnN0IFNLSVBfUkVBU09OX0RFU0NSSVBUSU9OOiBSZWNvcmQ8T3ZlckV4cG9zdXJlU2tpcFJlYXNvbiwgc3RyaW5nPiA9IHtcbiAgJ2RlY29yYXRlZCc6ICdkZWNvcmF0ZWQgbWVtYmVyJyxcbiAgJ3NoYXJlZC1leHBvcnQnOiAnZXhwb3J0IHNoYXJlZCB3aXRoIGEgc3RpbGwtZXhwb3J0ZWQgc2libGluZycsXG4gICd0ZXN0LW9ubHknOiAnZXhwb3NlZCBvbmx5IGZvciB0ZXN0cydcbn07XG5jb25zdCBWSVNJQklMSVRZX01PRElGSUVSX0tJTkRTOiBSZWFkb25seVNldDxTeW50YXhLaW5kPiA9IG5ldyBTZXQ8U3ludGF4S2luZD4oW1N5bnRheEtpbmQuUHJpdmF0ZUtleXdvcmQsIFN5bnRheEtpbmQuUHJvdGVjdGVkS2V5d29yZCwgU3ludGF4S2luZC5QdWJsaWNLZXl3b3JkXSk7XG5jb25zdCBXSElURVNQQUNFX1BBVFRFUk4gPSAvXFxzLztcblxuLyoqXG4gKiBBbmFseXplcyBhIHByb2plY3QgKGFscmVhZHkgbG9hZGVkIGludG8gYSBsYW5ndWFnZSBzZXJ2aWNlKSBmb3Igb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucywgYW5kIFx1MjAxNFxuICogd2hlbiB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcy5zaG91bGRGaXh9IGlzIHNldCBcdTIwMTQgdGlnaHRlbnMgZXZlcnkgZml4YWJsZSBmaW5kaW5nIGluIHBsYWNlXG4gKiB2aWEge0BsaW5rIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMud3JpdGVGaWxlfS4gRmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgc2FmZWx5IGF1dG9tYXRlZCAoZXhwb3NlZFxuICogb25seSBmb3IgdGVzdHMsIGRlY29yYXRlZCwgb3Igc2hhcmluZyBhbiBgZXhwb3J0YCBrZXl3b3JkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nKSBjYXJyeSBhXG4gKiB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufSBhbmQgYXJlIGxlZnQgdW50b3VjaGVkIFx1MjAxNCB1bmxlc3NcbiAqIHtAbGluayBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zLnNob3VsZEZvcmNlfSBpcyBzZXQsIHdoaWNoIGFkZGl0aW9uYWxseSB0aWdodGVucyB0aGUgdGVzdC1vbmx5XG4gKiBmaW5kaW5ncyAoZGVjb3JhdGVkIGFuZCBzaGFyZWQtZXhwb3J0IG9uZXMgc3RpbGwgc3RheSBza2lwcGVkKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zLCBpbiBkaXNjb3Zlcnkgb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplT3ZlckV4cG9zdXJlKHBhcmFtczogQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcyk6IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IHJ1bk92ZXJFeHBvc3VyZUFuYWx5c2lzKHBhcmFtcyk7XG4gIGlmICghcGFyYW1zLnNob3VsZEZpeCkge1xuICAgIHJldHVybiBbLi4ucmVzdWx0LmZpbmRpbmdzXTtcbiAgfVxuXG4gIGNvbnN0IHsgd3JpdGVGaWxlIH0gPSBwYXJhbXM7XG4gIGFzc2VydE5vbk51bGxhYmxlKHdyaXRlRmlsZSwgJ3dyaXRlRmlsZSBpcyByZXF1aXJlZCB3aGVuIHNob3VsZEZpeCBpcyB0cnVlLicpO1xuICByZXR1cm4gYXBwbHlPdmVyRXhwb3N1cmVGaXhlcyh7XG4gICAgcHJvZ3JhbTogcGFyYW1zLmxhbmd1YWdlU2VydmljZS5nZXRQcm9ncmFtKCksXG4gICAgcmVzdWx0LFxuICAgIHNob3VsZEZvcmNlOiBwYXJhbXMuc2hvdWxkRm9yY2UgPz8gZmFsc2UsXG4gICAgd3JpdGVGaWxlXG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHtAbGluayBMYW5ndWFnZVNlcnZpY2VIb3N0fSBiYWNrZWQgYnkgYW4gZXhwbGljaXQgZmlsZSBsaXN0IGFuZCBmaWxlIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0UGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBsYW5ndWFnZS1zZXJ2aWNlIGhvc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0KHBhcmFtczogQ3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdFBhcmFtcyk6IExhbmd1YWdlU2VydmljZUhvc3Qge1xuICBjb25zdCB7IGNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzLCBmaWxlU3lzdGVtIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgZGlyZWN0b3J5RXhpc3RzOiAoZGlyZWN0b3J5KSA9PiBmaWxlU3lzdGVtLmRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnkpLFxuICAgIGZpbGVFeGlzdHM6IChmaWxlKSA9PiBmaWxlU3lzdGVtLmZpbGVFeGlzdHMoZmlsZSksXG4gICAgZ2V0Q29tcGlsYXRpb25TZXR0aW5nczogKCkgPT4gY29tcGlsZXJPcHRpb25zLFxuICAgIGdldEN1cnJlbnREaXJlY3Rvcnk6ICgpID0+IGZpbGVTeXN0ZW0uZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIGdldERlZmF1bHRMaWJGaWxlTmFtZTogKGxpYk9wdGlvbnMpID0+IGdldERlZmF1bHRMaWJGaWxlUGF0aChsaWJPcHRpb25zKSxcbiAgICBnZXREaXJlY3RvcmllczogKGRpcmVjdG9yeSkgPT4gZmlsZVN5c3RlbS5nZXREaXJlY3RvcmllcyhkaXJlY3RvcnkpLFxuICAgIGdldFNjcmlwdEZpbGVOYW1lczogKCkgPT4gWy4uLmZpbGVOYW1lc10sXG4gICAgZ2V0U2NyaXB0U25hcHNob3Q6IChmaWxlTmFtZSk6IElTY3JpcHRTbmFwc2hvdCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gZmlsZVN5c3RlbS5yZWFkRmlsZShmaWxlTmFtZSk7XG4gICAgICByZXR1cm4gdGV4dCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU2NyaXB0U25hcHNob3QuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICB9LFxuICAgIGdldFNjcmlwdFZlcnNpb246ICgpID0+ICcwJyxcbiAgICByZWFkRGlyZWN0b3J5OiAocGF0aCwgZXh0ZW5zaW9ucywgZXhjbHVkZSwgaW5jbHVkZSwgZGVwdGgpID0+IGZpbGVTeXN0ZW0ucmVhZERpcmVjdG9yeShwYXRoLCBleHRlbnNpb25zLCBleGNsdWRlLCBpbmNsdWRlLCBkZXB0aCksXG4gICAgcmVhZEZpbGU6IChmaWxlKSA9PiBmaWxlU3lzdGVtLnJlYWRGaWxlKGZpbGUpXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbGFuZ3VhZ2Ugc2VydmljZSBvdmVyIGV2ZXJ5IGZpbGUgaW4gYSBwcm9qZWN0J3MgYHRzY29uZmlnLmpzb25gLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2VQYXJhbXN9LlxuICogQHJldHVybnMgQSBsYW5ndWFnZSBzZXJ2aWNlIHJlYWR5IGZvciB7QGxpbmsgYW5hbHl6ZU92ZXJFeHBvc3VyZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlKHBhcmFtczogQ3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZVBhcmFtcyk6IExhbmd1YWdlU2VydmljZSB7XG4gIGNvbnN0IHsgZmlsZU5hbWVzLCBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKHBhcmFtcy50c0NvbmZpZ1BhdGgpO1xuICByZXR1cm4gY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlKGNyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3QoeyBjb21waWxlck9wdGlvbnM6IG9wdGlvbnMsIGZpbGVOYW1lcywgZmlsZVN5c3RlbTogc3lzIH0pLCBjcmVhdGVEb2N1bWVudFJlZ2lzdHJ5KCkpO1xufVxuXG4vKipcbiAqIEZpbmRzIG92ZXItZXhwb3NlZCBkZWNsYXJhdGlvbnMgaW4gYSBwcm9qZWN0IG9uIGRpc2suIFdoZW5cbiAqIHtAbGluayBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zLnNob3VsZEZpeH0gaXMgc2V0LCBlYWNoIGZpeGFibGUgZmluZGluZyBpcyBhbHNvIHRpZ2h0ZW5lZCBpbiBwbGFjZVxuICogKHJld3JpdGluZyB0aGUgYWZmZWN0ZWQgc291cmNlIGZpbGVzIHZpYSBgdHlwZXNjcmlwdGAncyBgc3lzLndyaXRlRmlsZWApLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEZpbmRPdmVyRXhwb3N1cmVQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIG92ZXItZXhwb3NlZCBkZWNsYXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3ZlckV4cG9zdXJlKHBhcmFtczogRmluZE92ZXJFeHBvc3VyZVBhcmFtcyk6IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSB7XG4gIGNvbnN0IHByb2plY3RGb2xkZXIgPSB0b0Nhbm9uaWNhbChwYXJhbXMucHJvamVjdEZvbGRlcik7XG4gIGNvbnN0IGxhbmd1YWdlU2VydmljZSA9IGNyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2UoeyB0c0NvbmZpZ1BhdGg6IGAke3Byb2plY3RGb2xkZXJ9L3RzY29uZmlnLmpzb25gIH0pO1xuICByZXR1cm4gYW5hbHl6ZU92ZXJFeHBvc3VyZSh7XG4gICAgbGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHNob3VsZEZpeDogcGFyYW1zLnNob3VsZEZpeCxcbiAgICBzaG91bGRGb3JjZTogcGFyYW1zLnNob3VsZEZvcmNlLFxuICAgIHNyY0ZvbGRlcjogYCR7cHJvamVjdEZvbGRlcn0vc3JjYCxcbiAgICB3cml0ZUZpbGU6IChwYXRoLCBjb250ZW50KSA9PiB7XG4gICAgICBzeXMud3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpO1xuICAgIH0sXG4gICAgLi4ucGFyYW1zLm9uUHJvZ3Jlc3MgPyB7IG9uUHJvZ3Jlc3M6IHBhcmFtcy5vblByb2dyZXNzIH0gOiB7fVxuICB9KTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIG92ZXItZXhwb3N1cmUgZmluZGluZ3MgYXMgYSBodW1hbi1yZWFkYWJsZSByZXBvcnQsIHVzaW5nIHRoZSBncm91cGVkIGxheW91dCBvZiBFU0xpbnQnc1xuICogYHN0eWxpc2hgIGZvcm1hdHRlci4gRmluZGluZ3MgYXJlIGdyb3VwZWQgYnkgZmlsZSBhbmQgc29ydGVkIGJ5IGxpbmU6IGVhY2ggZmlsZSBpcyByZW5kZXJlZCBhcyBhXG4gKiBgcGF0aGAgaGVhZGVyIGxpbmUsIGZvbGxvd2VkIGJ5IG9uZSBpbmRlbnRlZCBgICBsaW5lOmNvbHVtbiAgY2hhbmdlIC0tIHJlYXNvbmAgcm93IHBlciBmaW5kaW5nICh0aGVcbiAqIGBsaW5lOmNvbHVtbmAgaXMgcmlnaHQtcGFkZGVkIHNvIHRoZSByb3dzIGFsaWduIHdpdGhpbiBhIGZpbGUpLiBUZXJtaW5hbHMgc3VjaCBhcyBWUyBDb2RlIHJlbmRlclxuICogZWFjaCBpbmRlbnRlZCBgbGluZTpjb2x1bW5gIGFzIGEgY2xpY2thYmxlIGxpbmsgXHUyMDE0IHJlc29sdmVkIGFnYWluc3QgdGhlIGZpbGUgaGVhZGVyIGFib3ZlIGl0IFx1MjAxNCB0aGF0XG4gKiBqdW1wcyBzdHJhaWdodCB0byB0aGUgZGVjbGFyYXRpb24uIEZpbGUgZ3JvdXBzIGFyZSBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLiBJbiBhIGZpeCBydW4gKGZpbmRpbmdzXG4gKiBjYXJyeWluZyB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy53YXNGaXhlZH0gLyB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufSkgZWFjaCBjaGFuZ2VcbiAqIHJvdyBpcyBzdWZmaXhlZCB3aXRoIGBbZml4ZWRdYCBvciBgW3NraXBwZWQ6IFx1MjAyNl1gLCBhbmQgdGhlIHRyYWlsaW5nIHN1bW1hcnkgYXBwZW5kcyB0aGUgZml4ZWQvc2tpcHBlZFxuICogY291bnRzLlxuICpcbiAqIEBwYXJhbSBmaW5kaW5ncyAtIFRoZSBmaW5kaW5ncyB0byBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zfS5cbiAqIEByZXR1cm5zIFRoZSByZXBvcnQgdGV4dC4gRW1wdHktZmluZGluZyBpbnB1dCB5aWVsZHMgYSBzaW5nbGUgXCJubyBmaW5kaW5nc1wiIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdLCBvcHRpb25zPzogRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zKTogc3RyaW5nIHtcbiAgaWYgKGZpbmRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnTm8gb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucyBmb3VuZC5cXG4nO1xuICB9XG5cbiAgY29uc3QgYmFzZUZvbGRlciA9IG9wdGlvbnM/LmJhc2VGb2xkZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvQ2Fub25pY2FsKG9wdGlvbnMuYmFzZUZvbGRlcik7XG4gIGNvbnN0IGxpbmVzID0gZm9ybWF0RmluZGluZ0Jsb2NrcyhmaW5kaW5ncywgYmFzZUZvbGRlcik7XG4gIGxpbmVzLnB1c2goZm9ybWF0U3VtbWFyeShmaW5kaW5ncykpO1xuICByZXR1cm4gYCR7bGluZXMuam9pbignXFxuJyl9XFxuYDtcbn1cblxuZnVuY3Rpb24gYW5hbHl6ZUV4cG9ydChub2RlOiBOb2RlLCBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQpOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICBpZiAobm9kZS5wYXJlbnQgIT09IHNvdXJjZUZpbGUgfHwgIWdldE1vZGlmaWVyS2luZHMobm9kZSkuaGFzKFN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGFzRXhwb3J0YWJsZURlY2xhcmF0aW9uKG5vZGUpO1xuICBpZiAoIWRlY2xhcmF0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGhhc1RzRG9jQ29tbWVudChkZWNsYXJhdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkZWNsRmlsZVBhdGggPSB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgY29uc3QgbmFtZU5vZGVzID0gZ2V0RXhwb3J0ZWROYW1lTm9kZXMoZGVjbGFyYXRpb24pO1xuICBjb25zdCBjYW5kaWRhdGVzOiBFeHBvcnRGaW5kaW5nQ2FuZGlkYXRlW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYW1lTm9kZSBvZiBuYW1lTm9kZXMpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gY29sbGVjdFJlZmVyZW5jZXMoY29udGV4dC5sYW5ndWFnZVNlcnZpY2UuZmluZFJlZmVyZW5jZXMoc291cmNlRmlsZS5maWxlTmFtZSwgbmFtZU5vZGUuZ2V0U3RhcnQoKSkpXG4gICAgICAuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc0RlY2xhcmF0aW9uSXRzZWxmKHJlZmVyZW5jZSwgbmFtZU5vZGUpKTtcbiAgICBjb25zdCBvdGhlckZpbGVSZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gdG9DYW5vbmljYWwocmVmZXJlbmNlLmZpbGVOYW1lKSAhPT0gZGVjbEZpbGVQYXRoKTtcblxuICAgIGlmIChvdGhlckZpbGVSZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgZmluZGluZzogYnVpbGRGaW5kaW5nKHtcbiAgICAgICAgICBjdXJyZW50RXhwb3N1cmU6ICdleHBvcnQnLFxuICAgICAgICAgIGZsYWdzOiB7IGhhc05vUmVmZXJlbmNlczogcmVmZXJlbmNlcy5sZW5ndGggPT09IDAsIGlzRm9yY2VkQnlUZXN0T25seTogZmFsc2UgfSxcbiAgICAgICAgICBuYW1lTm9kZSxcbiAgICAgICAgICBub2RlOiBkZWNsYXJhdGlvbixcbiAgICAgICAgICBzdWdnZXN0ZWRFeHBvc3VyZTogJ2ZpbGUtbG9jYWwnXG4gICAgICAgIH0pLFxuICAgICAgICBpc1BsYWluRmlsZUxvY2FsOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5vblRlc3RSZWZlcmVuY2VzID0gb3RoZXJGaWxlUmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIWlzVGVzdEZpbGUodG9DYW5vbmljYWwocmVmZXJlbmNlLmZpbGVOYW1lKSkpO1xuICAgIGlmIChub25UZXN0UmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGZpbmRpbmc6IGJ1aWxkRmluZGluZyh7XG4gICAgICAgICAgY3VycmVudEV4cG9zdXJlOiAnZXhwb3J0JyxcbiAgICAgICAgICBmbGFnczogeyBoYXNOb1JlZmVyZW5jZXM6IGZhbHNlLCBpc0ZvcmNlZEJ5VGVzdE9ubHk6IHRydWUgfSxcbiAgICAgICAgICBuYW1lTm9kZSxcbiAgICAgICAgICBub2RlOiBkZWNsYXJhdGlvbixcbiAgICAgICAgICBzdWdnZXN0ZWRFeHBvc3VyZTogJ2ZpbGUtbG9jYWwnXG4gICAgICAgIH0pLFxuICAgICAgICBpc1BsYWluRmlsZUxvY2FsOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2FuRHJvcEV4cG9ydCA9IGNhbmRpZGF0ZXMubGVuZ3RoID09PSBuYW1lTm9kZXMubGVuZ3RoICYmIGNhbmRpZGF0ZXMuZXZlcnkoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlzUGxhaW5GaWxlTG9jYWwgfHwgY29udGV4dC5zaG91bGRGb3JjZSk7XG4gIGNvbnN0IGV4cG9ydEVkaXQgPSBjYW5Ecm9wRXhwb3J0ID8gY29tcHV0ZUV4cG9ydFJlbW92YWxFZGl0KGRlY2xhcmF0aW9uKSA6IG51bGw7XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICByZWNvcmQoe1xuICAgICAgY29udGV4dCxcbiAgICAgIGVkaXQ6IGV4cG9ydEVkaXQsXG4gICAgICBmaW5kaW5nOiBjYW5kaWRhdGUuZmluZGluZ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFuYWx5emVNZW1iZXIobm9kZTogTm9kZSwgY29udGV4dDogQW5hbHlzaXNDb250ZXh0KTogdm9pZCB7XG4gIGNvbnN0IG1lbWJlciA9IGFzQ2xhc3NNZW1iZXIobm9kZSk7XG4gIGlmICghbWVtYmVyIHx8ICFpc0NsYXNzTGlrZShub2RlLnBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSBtZW1iZXIubmFtZTtcbiAgY29uc3QgZGVjbGFyaW5nQ2xhc3MgPSBub2RlLnBhcmVudDtcblxuICBpZiAoaXNQcml2YXRlSWRlbnRpZmllcihuYW1lTm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RpZmllcktpbmRzID0gZ2V0TW9kaWZpZXJLaW5kcyhtZW1iZXIpO1xuICBpZiAobW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5TdGF0aWNLZXl3b3JkKSB8fCBtb2RpZmllcktpbmRzLmhhcyhTeW50YXhLaW5kLk92ZXJyaWRlS2V5d29yZCkgfHwgTElGRUNZQ0xFX0FMTE9XTElTVC5oYXMobmFtZU5vZGUuZ2V0VGV4dCgpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoYXNUc0RvY0NvbW1lbnQobWVtYmVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHBvc3VyZSA9IGdldEN1cnJlbnRNZW1iZXJFeHBvc3VyZShtb2RpZmllcktpbmRzKTtcbiAgaWYgKGN1cnJlbnRFeHBvc3VyZSA9PT0gJ3ByaXZhdGUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IG1lbWJlci5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IGRpcmVjdFJlZmVyZW5jZXMgPSBjb2xsZWN0UmVmZXJlbmNlcyhjb250ZXh0Lmxhbmd1YWdlU2VydmljZS5maW5kUmVmZXJlbmNlcyhzb3VyY2VGaWxlLmZpbGVOYW1lLCBuYW1lTm9kZS5nZXRTdGFydCgpKSlcbiAgICAuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc0RlY2xhcmF0aW9uSXRzZWxmKHJlZmVyZW5jZSwgbmFtZU5vZGUpKTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IFsuLi5kaXJlY3RSZWZlcmVuY2VzLCAuLi5jb2xsZWN0U3RyaW5nTGl0ZXJhbFJlZmVyZW5jZXMoeyBjb250ZXh0LCBkZWNsYXJpbmdDbGFzcywgbmFtZU5vZGUgfSldO1xuICBjb25zdCBub25UZXN0UmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc1Rlc3RGaWxlKHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkpKTtcblxuICBjb25zdCBuZWVkZWRGb3JTcmMgPSBjb21wdXRlTmVlZGVkRXhwb3N1cmUoeyBjb250ZXh0LCBkZWNsYXJpbmdDbGFzcywgcmVmZXJlbmNlczogbm9uVGVzdFJlZmVyZW5jZXMgfSk7XG4gIGNvbnN0IG5lZWRlZFdpdGhUZXN0cyA9IGNvbXB1dGVOZWVkZWRFeHBvc3VyZSh7IGNvbnRleHQsIGRlY2xhcmluZ0NsYXNzLCByZWZlcmVuY2VzIH0pO1xuXG4gIGlmIChuZWVkZWRGb3JTcmMgPT09ICdwdWJsaWMnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJhbmtFeHBvc3VyZShuZWVkZWRGb3JTcmMpID49IHJhbmtFeHBvc3VyZShjdXJyZW50RXhwb3N1cmUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmluZGluZyA9IGJ1aWxkRmluZGluZyh7XG4gICAgY3VycmVudEV4cG9zdXJlLFxuICAgIGZsYWdzOiB7XG4gICAgICBoYXNOb1JlZmVyZW5jZXM6IHJlZmVyZW5jZXMubGVuZ3RoID09PSAwLFxuICAgICAgaXNGb3JjZWRCeVRlc3RPbmx5OiByYW5rRXhwb3N1cmUobmVlZGVkV2l0aFRlc3RzKSA+IHJhbmtFeHBvc3VyZShuZWVkZWRGb3JTcmMpXG4gICAgfSxcbiAgICBuYW1lTm9kZSxcbiAgICBub2RlOiBtZW1iZXIsXG4gICAgc3VnZ2VzdGVkRXhwb3N1cmU6IG5lZWRlZEZvclNyY1xuICB9KTtcbiAgcmVjb3JkKHtcbiAgICBjb250ZXh0LFxuICAgIGVkaXQ6IGNvbXB1dGVNZW1iZXJFeHBvc3VyZUVkaXQobWVtYmVyLCBuZWVkZWRGb3JTcmMpLFxuICAgIGZpbmRpbmdcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RWRpdHModGV4dDogc3RyaW5nLCBlZGl0czogcmVhZG9ubHkgT3ZlckV4cG9zdXJlVGV4dEVkaXRbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdW5pcXVlRWRpdHMgPSBlZGl0c1xuICAgIC5maWx0ZXIoKGVkaXQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke1N0cmluZyhlZGl0LnN0YXJ0KX06JHtTdHJpbmcoZWRpdC5sZW5ndGgpfToke2VkaXQubmV3VGV4dH1gO1xuICAgICAgaWYgKHNlZW4uaGFzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc3RhcnQgLSBhLnN0YXJ0KTtcblxuICBsZXQgcmVzdWx0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBlZGl0IG9mIHVuaXF1ZUVkaXRzKSB7XG4gICAgcmVzdWx0ID0gYCR7cmVzdWx0LnNsaWNlKDAsIGVkaXQuc3RhcnQpfSR7ZWRpdC5uZXdUZXh0fSR7cmVzdWx0LnNsaWNlKGVkaXQuc3RhcnQgKyBlZGl0Lmxlbmd0aCl9YDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhcHBseU92ZXJFeHBvc3VyZUZpeGVzKHBhcmFtczogQXBwbHlPdmVyRXhwb3N1cmVGaXhlc1BhcmFtcyk6IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSB7XG4gIGNvbnN0IHsgcHJvZ3JhbSwgcmVzdWx0LCBzaG91bGRGb3JjZSwgd3JpdGVGaWxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVkaXRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIE92ZXJFeHBvc3VyZVRleHRFZGl0W10+KCk7XG4gIGNvbnN0IGZpbmRpbmdzID0gcmVzdWx0LmZpbmRpbmdzLm1hcCgoZmluZGluZywgaW5kZXgpID0+IHtcbiAgICBjb25zdCBlZGl0ID0gcmVzdWx0LmVkaXRzW2luZGV4XSA/PyBudWxsO1xuICAgIGNvbnN0IHNraXBSZWFzb24gPSBkZXRlcm1pbmVTa2lwUmVhc29uKHsgZWRpdCwgZmluZGluZywgc2hvdWxkRm9yY2UgfSk7XG4gICAgaWYgKHNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmZpbmRpbmcsIHNraXBSZWFzb24sIHdhc0ZpeGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBhc3NlcnROb25OdWxsYWJsZShlZGl0LCAnQSBmaXhhYmxlIGZpbmRpbmcgbXVzdCBjYXJyeSBhIHRleHQgZWRpdC4nKTtcbiAgICBjb25zdCBmaWxlRWRpdHMgPSBlZGl0c0J5RmlsZS5nZXQoZWRpdC5maWxlTmFtZSkgPz8gW107XG4gICAgZmlsZUVkaXRzLnB1c2goZWRpdCk7XG4gICAgZWRpdHNCeUZpbGUuc2V0KGVkaXQuZmlsZU5hbWUsIGZpbGVFZGl0cyk7XG4gICAgcmV0dXJuIHsgLi4uZmluZGluZywgc2tpcFJlYXNvbjogbnVsbCwgd2FzRml4ZWQ6IHRydWUgfTtcbiAgfSk7XG5cbiAgaWYgKGVkaXRzQnlGaWxlLnNpemUgPiAwKSB7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0EgcHJvZ3JhbSBpcyBleHBlY3RlZCB3aGVuIHRoZXJlIGFyZSBlZGl0cyB0byBhcHBseS4nKTtcbiAgICBjb25zdCBzb3VyY2VUZXh0QnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVUZXh0PigpO1xuICAgIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgIHNvdXJjZVRleHRCeUZpbGUuc2V0KHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLCB7IGZpbGVOYW1lOiBzb3VyY2VGaWxlLmZpbGVOYW1lLCB0ZXh0OiBzb3VyY2VGaWxlLnRleHQgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2Nhbm9uaWNhbEZpbGVOYW1lLCBmaWxlRWRpdHNdIG9mIGVkaXRzQnlGaWxlKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VUZXh0QnlGaWxlLmdldChjYW5vbmljYWxGaWxlTmFtZSk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShzb3VyY2UsIGBTb3VyY2UgZmlsZSBub3QgZm91bmQgaW4gcHJvZ3JhbTogJHtjYW5vbmljYWxGaWxlTmFtZX1gKTtcbiAgICAgIHdyaXRlRmlsZShzb3VyY2UuZmlsZU5hbWUsIGFwcGx5RWRpdHMoc291cmNlLnRleHQsIGZpbGVFZGl0cykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5kaW5ncztcbn1cblxuZnVuY3Rpb24gYXNDbGFzc01lbWJlcihub2RlOiBOb2RlKTogQ2xhc3NNZW1iZXJEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKSB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSkgfHwgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNFeHBvcnRhYmxlRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IEV4cG9ydGFibGVEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRW51bURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZVN0YXRlbWVudChub2RlKVxuICApIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZEZpbmRpbmcocGFyYW1zOiBCdWlsZEZpbmRpbmdQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nIHtcbiAgY29uc3QgeyBjdXJyZW50RXhwb3N1cmUsIGZsYWdzLCBuYW1lTm9kZSwgbm9kZSwgc3VnZ2VzdGVkRXhwb3N1cmUgfSA9IHBhcmFtcztcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCB7IGNoYXJhY3RlciwgbGluZSB9ID0gc291cmNlRmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihuYW1lTm9kZS5nZXRTdGFydCgpKTtcbiAgcmV0dXJuIHtcbiAgICBjb2x1bW46IGNoYXJhY3RlciArIDEsXG4gICAgY3VycmVudEV4cG9zdXJlLFxuICAgIGZpbGVQYXRoOiB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKSxcbiAgICBoYXNOb1JlZmVyZW5jZXM6IGZsYWdzLmhhc05vUmVmZXJlbmNlcyxcbiAgICBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGZsYWdzLmlzRm9yY2VkQnlUZXN0T25seSxcbiAgICBpc01lbWJlcjogY3VycmVudEV4cG9zdXJlICE9PSAnZXhwb3J0JyxcbiAgICBsaW5lOiBsaW5lICsgMSxcbiAgICBuYW1lOiBuYW1lTm9kZS5nZXRUZXh0KCksXG4gICAgc2tpcFJlYXNvbjogbnVsbCxcbiAgICBzdWdnZXN0ZWRFeHBvc3VyZSxcbiAgICB3YXNGaXhlZDogZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHJpbmdMaXRlcmFsSW5kZXgocHJvZ3JhbTogUHJvZ3JhbSk6IFJlYWRvbmx5TWFwPHN0cmluZywgcmVhZG9ubHkgU3RyaW5nTGl0ZXJhbE9jY3VycmVuY2VbXT4ge1xuICBjb25zdCBpbmRleCA9IG5ldyBNYXA8c3RyaW5nLCBTdHJpbmdMaXRlcmFsT2NjdXJyZW5jZVtdPigpO1xuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgaWYgKHNvdXJjZUZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb2xsZWN0SW5Ob2RlKHNvdXJjZUZpbGUpO1xuICB9XG4gIHJldHVybiBpbmRleDtcblxuICBmdW5jdGlvbiBjb2xsZWN0SW5Ob2RlKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoaXNTdHJpbmdMaXRlcmFsTGlrZShub2RlKSkge1xuICAgICAgY29uc3Qgb2NjdXJyZW5jZXMgPSBpbmRleC5nZXQobm9kZS50ZXh0KSA/PyBbXTtcbiAgICAgIG9jY3VycmVuY2VzLnB1c2goeyBub2RlLCBzb3VyY2VGaWxlOiBub2RlLmdldFNvdXJjZUZpbGUoKSB9KTtcbiAgICAgIGluZGV4LnNldChub2RlLnRleHQsIG9jY3VycmVuY2VzKTtcbiAgICB9XG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQoY29sbGVjdEluTm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMocmVmZXJlbmNlZFN5bWJvbHM6IFJlZmVyZW5jZWRTeW1ib2xbXSB8IHVuZGVmaW5lZCk6IFJlZmVyZW5jZUxvY2F0aW9uW10ge1xuICBjb25zdCByZWZlcmVuY2VzOiBSZWZlcmVuY2VMb2NhdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlZFN5bWJvbCBvZiByZWZlcmVuY2VkU3ltYm9scyA/PyBbXSkge1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWRTeW1ib2wucmVmZXJlbmNlcykge1xuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgZmlsZU5hbWU6IHJlZmVyZW5jZS5maWxlTmFtZSwgc3RhcnQ6IHJlZmVyZW5jZS50ZXh0U3Bhbi5zdGFydCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RTdHJpbmdMaXRlcmFsUmVmZXJlbmNlcyhwYXJhbXM6IENvbGxlY3RTdHJpbmdMaXRlcmFsUmVmZXJlbmNlc1BhcmFtcyk6IFJlZmVyZW5jZUxvY2F0aW9uW10ge1xuICBjb25zdCB7IGNvbnRleHQsIGRlY2xhcmluZ0NsYXNzLCBuYW1lTm9kZSB9ID0gcGFyYW1zO1xuICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRleHQuc3RyaW5nTGl0ZXJhbE9jY3VycmVuY2VzQnlUZXh0LmdldChuYW1lTm9kZS5nZXRUZXh0KCkpO1xuICBpZiAoIW9jY3VycmVuY2VzIHx8IG9jY3VycmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGtleVNldCA9IGdldENsYXNzS2V5U2V0KGRlY2xhcmluZ0NsYXNzLCBjb250ZXh0LmNoZWNrZXIpO1xuICBjb25zdCByZWZlcmVuY2VzOiBSZWZlcmVuY2VMb2NhdGlvbltdID0gW107XG4gIGZvciAoY29uc3Qgb2NjdXJyZW5jZSBvZiBvY2N1cnJlbmNlcykge1xuICAgIGlmIChpc0tleVJlZmVyZW5jZVRvQ2xhc3MoeyBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsIGtleVNldCwgbm9kZTogb2NjdXJyZW5jZS5ub2RlIH0pKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBmaWxlTmFtZTogb2NjdXJyZW5jZS5zb3VyY2VGaWxlLmZpbGVOYW1lLCBzdGFydDogb2NjdXJyZW5jZS5ub2RlLmdldFN0YXJ0KCkgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWZlcmVuY2VzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwb3J0UmVtb3ZhbEVkaXQoZGVjbGFyYXRpb246IEV4cG9ydGFibGVEZWNsYXJhdGlvbik6IE92ZXJFeHBvc3VyZVRleHRFZGl0IHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgbW9kaWZpZXJzID0gZ2V0TW9kaWZpZXJzKGRlY2xhcmF0aW9uKTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUobW9kaWZpZXJzLCAnTW9kaWZpZXJzIGV4cGVjdGVkIG9uIGFuIGV4cG9ydGVkIGRlY2xhcmF0aW9uLicpO1xuICBjb25zdCBleHBvcnRNb2RpZmllciA9IG1vZGlmaWVycy5maW5kKChtb2RpZmllcikgPT4gbW9kaWZpZXIua2luZCA9PT0gU3ludGF4S2luZC5FeHBvcnRLZXl3b3JkKTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoZXhwb3J0TW9kaWZpZXIsICdFeHBvcnQgbW9kaWZpZXIgZXhwZWN0ZWQgb24gYW4gZXhwb3J0ZWQgZGVjbGFyYXRpb24uJyk7XG4gIGNvbnN0IHsgdGV4dCB9ID0gc291cmNlRmlsZTtcbiAgbGV0IGVuZCA9IGV4cG9ydE1vZGlmaWVyLmdldEVuZCgpO1xuICB3aGlsZSAoZW5kIDwgdGV4dC5sZW5ndGggJiYgV0hJVEVTUEFDRV9QQVRURVJOLnRlc3QodGV4dC5jaGFyQXQoZW5kKSkpIHtcbiAgICBlbmQrKztcbiAgfVxuICByZXR1cm4ge1xuICAgIGZpbGVOYW1lOiB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKSxcbiAgICBsZW5ndGg6IGVuZCAtIGV4cG9ydE1vZGlmaWVyLmdldFN0YXJ0KCksXG4gICAgbmV3VGV4dDogJycsXG4gICAgc3RhcnQ6IGV4cG9ydE1vZGlmaWVyLmdldFN0YXJ0KClcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU1lbWJlckV4cG9zdXJlRWRpdChtZW1iZXI6IENsYXNzTWVtYmVyRGVjbGFyYXRpb24sIHN1Z2dlc3RlZEV4cG9zdXJlOiAncHJpdmF0ZScgfCAncHJvdGVjdGVkJyk6IG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdCB7XG4gIGlmICgoZ2V0RGVjb3JhdG9ycyhtZW1iZXIpID8/IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzb3VyY2VGaWxlID0gbWVtYmVyLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgZmlsZU5hbWUgPSB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgY29uc3QgbW9kaWZpZXJzID0gZ2V0TW9kaWZpZXJzKG1lbWJlcikgPz8gW107XG4gIGNvbnN0IHZpc2liaWxpdHlNb2RpZmllciA9IG1vZGlmaWVycy5maW5kKChtb2RpZmllcikgPT4gVklTSUJJTElUWV9NT0RJRklFUl9LSU5EUy5oYXMobW9kaWZpZXIua2luZCkpO1xuICBpZiAodmlzaWJpbGl0eU1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgbGVuZ3RoOiB2aXNpYmlsaXR5TW9kaWZpZXIuZ2V0RW5kKCkgLSB2aXNpYmlsaXR5TW9kaWZpZXIuZ2V0U3RhcnQoKSxcbiAgICAgIG5ld1RleHQ6IHN1Z2dlc3RlZEV4cG9zdXJlLFxuICAgICAgc3RhcnQ6IHZpc2liaWxpdHlNb2RpZmllci5nZXRTdGFydCgpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0TW9kaWZpZXIgPSBtb2RpZmllcnNbMF07XG4gIGNvbnN0IGluc2VydFN0YXJ0ID0gZmlyc3RNb2RpZmllciA/IGZpcnN0TW9kaWZpZXIuZ2V0U3RhcnQoKSA6IG1lbWJlci5nZXRTdGFydCgpO1xuICByZXR1cm4ge1xuICAgIGZpbGVOYW1lLFxuICAgIGxlbmd0aDogMCxcbiAgICBuZXdUZXh0OiBgJHtzdWdnZXN0ZWRFeHBvc3VyZX0gYCxcbiAgICBzdGFydDogaW5zZXJ0U3RhcnRcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU5lZWRlZEV4cG9zdXJlKHBhcmFtczogQ29tcHV0ZU5lZWRlZEV4cG9zdXJlUGFyYW1zKTogTWVtYmVyRXhwb3N1cmUge1xuICBjb25zdCB7IGNvbnRleHQsIGRlY2xhcmluZ0NsYXNzLCByZWZlcmVuY2VzIH0gPSBwYXJhbXM7XG4gIGlmIChyZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAncHJpdmF0ZSc7XG4gIH1cblxuICBsZXQgbmVlZGVkOiBNZW1iZXJFeHBvc3VyZSA9ICdwcml2YXRlJztcbiAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlcykge1xuICAgIGNvbnN0IHJlZmVyZW5jZUNsYXNzID0gZ2V0Q2xhc3NBdFBvc2l0aW9uKHsgZmlsZU5hbWU6IHJlZmVyZW5jZS5maWxlTmFtZSwgcG9zaXRpb246IHJlZmVyZW5jZS5zdGFydCwgcHJvZ3JhbTogY29udGV4dC5wcm9ncmFtIH0pO1xuICAgIGlmIChyZWZlcmVuY2VDbGFzcyA9PT0gZGVjbGFyaW5nQ2xhc3MpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVmZXJlbmNlQ2xhc3MgJiYgaXNEZXJpdmVkRnJvbSh7IGJhc2U6IGRlY2xhcmluZ0NsYXNzLCBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsIGRlcml2ZWQ6IHJlZmVyZW5jZUNsYXNzIH0pKSB7XG4gICAgICBuZWVkZWQgPSAncHJvdGVjdGVkJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbiAgcmV0dXJuIG5lZWRlZDtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGaXhTdGF0dXMoZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZyk6IHN0cmluZyB7XG4gIGlmIChmaW5kaW5nLndhc0ZpeGVkKSB7XG4gICAgcmV0dXJuICcgW2ZpeGVkXSc7XG4gIH1cbiAgaWYgKGZpbmRpbmcuc2tpcFJlYXNvbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgIFtza2lwcGVkOiAke1NLSVBfUkVBU09OX0RFU0NSSVBUSU9OW2ZpbmRpbmcuc2tpcFJlYXNvbl19XWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVJlYXNvbihmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGByZWZlcmVuY2VkIG9ubHkgJHtTQ09QRV9ERVNDUklQVElPTltmaW5kaW5nLnN1Z2dlc3RlZEV4cG9zdXJlXX1gO1xuICBpZiAoZmluZGluZy5pc0ZvcmNlZEJ5VGVzdE9ubHkpIHtcbiAgICByZXR1cm4gYCR7YmFzZX0gKGV4cG9zZWQgb25seSBmb3IgdGVzdHMpYDtcbiAgfVxuICBpZiAoZmluZGluZy5oYXNOb1JlZmVyZW5jZXMpIHtcbiAgICByZXR1cm4gYCR7YmFzZX0gKG5vIHJlZmVyZW5jZXMgYXQgYWxsKWA7XG4gIH1cbiAgcmV0dXJuIGJhc2U7XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZVNraXBSZWFzb24ocGFyYW1zOiBEZXRlcm1pbmVTa2lwUmVhc29uUGFyYW1zKTogbnVsbCB8IE92ZXJFeHBvc3VyZVNraXBSZWFzb24ge1xuICBjb25zdCB7IGVkaXQsIGZpbmRpbmcsIHNob3VsZEZvcmNlIH0gPSBwYXJhbXM7XG4gIGlmIChmaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seSAmJiAhc2hvdWxkRm9yY2UpIHtcbiAgICByZXR1cm4gJ3Rlc3Qtb25seSc7XG4gIH1cbiAgaWYgKCFlZGl0KSB7XG4gICAgcmV0dXJuIGZpbmRpbmcuaXNNZW1iZXIgPyAnZGVjb3JhdGVkJyA6ICdzaGFyZWQtZXhwb3J0JztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGVBdFBvc2l0aW9uKG5vZGU6IE5vZGUsIHBvc2l0aW9uOiBudW1iZXIpOiBOb2RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBvc2l0aW9uIDwgbm9kZS5nZXRTdGFydCgpIHx8IHBvc2l0aW9uID49IG5vZGUuZ2V0RW5kKCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCByZXN1bHQ6IE5vZGUgPSBub2RlO1xuICBub2RlLmZvckVhY2hDaGlsZCgoY2hpbGQpID0+IHtcbiAgICBjb25zdCBmb3VuZCA9IGZpbmROb2RlQXRQb3NpdGlvbihjaGlsZCwgcG9zaXRpb24pO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgcmVzdWx0ID0gZm91bmQ7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmluZGluZ0Jsb2NrcyhmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdLCBiYXNlRm9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGJ5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBPdmVyRXhwb3N1cmVGaW5kaW5nW10+KCk7XG4gIGZvciAoY29uc3QgZmluZGluZyBvZiBmaW5kaW5ncykge1xuICAgIGNvbnN0IGxpc3QgPSBieUZpbGUuZ2V0KGZpbmRpbmcuZmlsZVBhdGgpID8/IFtdO1xuICAgIGxpc3QucHVzaChmaW5kaW5nKTtcbiAgICBieUZpbGUuc2V0KGZpbmRpbmcuZmlsZVBhdGgsIGxpc3QpO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBsaXN0XSBvZiBieUZpbGUpIHtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4ubGlzdF0uc29ydCgoYSwgYikgPT4gYS5saW5lIC0gYi5saW5lKTtcbiAgICBjb25zdCBsb2NhdGlvbldpZHRoID0gTWF0aC5tYXgoLi4uc29ydGVkLm1hcCgoZmluZGluZykgPT4gYCR7U3RyaW5nKGZpbmRpbmcubGluZSl9OiR7U3RyaW5nKGZpbmRpbmcuY29sdW1uKX1gLmxlbmd0aCkpO1xuICAgIGxpbmVzLnB1c2godG9EaXNwbGF5UGF0aCh7IGJhc2VGb2xkZXIsIGZpbGVQYXRoIH0pKTtcbiAgICBmb3IgKGNvbnN0IGZpbmRpbmcgb2Ygc29ydGVkKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGAke1N0cmluZyhmaW5kaW5nLmxpbmUpfToke1N0cmluZyhmaW5kaW5nLmNvbHVtbil9YC5wYWRFbmQobG9jYXRpb25XaWR0aCk7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBgJHtmaW5kaW5nLmN1cnJlbnRFeHBvc3VyZX0gJHtmaW5kaW5nLm5hbWV9IC0+ICR7ZmluZGluZy5zdWdnZXN0ZWRFeHBvc3VyZX1gO1xuICAgICAgbGluZXMucHVzaChgICAke2xvY2F0aW9ufSAgJHtjaGFuZ2V9IC0tICR7ZGVzY3JpYmVSZWFzb24oZmluZGluZyl9JHtkZXNjcmliZUZpeFN0YXR1cyhmaW5kaW5nKX1gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTdW1tYXJ5KGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBzdW1tYXJ5ID0gYCR7U3RyaW5nKGZpbmRpbmdzLmxlbmd0aCl9IGZpbmRpbmcocykuYDtcbiAgY29uc3QgZml4ZWRDb3VudCA9IGZpbmRpbmdzLmZpbHRlcigoZmluZGluZykgPT4gZmluZGluZy53YXNGaXhlZCkubGVuZ3RoO1xuICBjb25zdCBza2lwcGVkQ291bnQgPSBmaW5kaW5ncy5maWx0ZXIoKGZpbmRpbmcpID0+IGZpbmRpbmcuc2tpcFJlYXNvbiAhPT0gbnVsbCkubGVuZ3RoO1xuICBpZiAoZml4ZWRDb3VudCA9PT0gMCAmJiBza2lwcGVkQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxuICByZXR1cm4gYCR7c3VtbWFyeX0gJHtTdHJpbmcoZml4ZWRDb3VudCl9IGZpeGVkLCAke1N0cmluZyhza2lwcGVkQ291bnQpfSBza2lwcGVkLmA7XG59XG5cbmZ1bmN0aW9uIGdldENsYXNzQXRQb3NpdGlvbihwYXJhbXM6IEdldENsYXNzQXRQb3NpdGlvblBhcmFtcyk6IENsYXNzTGlrZURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBmaWxlTmFtZSwgcG9zaXRpb24sIHByb2dyYW0gfSA9IHBhcmFtcztcbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShmaWxlTmFtZSk7XG4gIGFzc2VydE5vbk51bGxhYmxlKHNvdXJjZUZpbGUsIGBTb3VyY2UgZmlsZSBub3QgZm91bmQgaW4gcHJvZ3JhbTogJHtmaWxlTmFtZX1gKTtcbiAgY29uc3Qgbm9kZSA9IGZpbmROb2RlQXRQb3NpdGlvbihzb3VyY2VGaWxlLCBwb3NpdGlvbik7XG4gIGFzc2VydE5vbk51bGxhYmxlKG5vZGUsIGBObyBub2RlIGZvdW5kIGF0IHBvc2l0aW9uICR7U3RyaW5nKHBvc2l0aW9uKX0gaW4gJHtmaWxlTmFtZX1gKTtcbiAgcmV0dXJuIGdldEVuY2xvc2luZ0NsYXNzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRDbGFzc0tleVNldChkZWNsYXJpbmdDbGFzczogQ2xhc3NMaWtlRGVjbGFyYXRpb24sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUmVhZG9ubHlTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGNsYXNzU3ltYm9sID0gZGVjbGFyaW5nQ2xhc3MubmFtZSA/IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihkZWNsYXJpbmdDbGFzcy5uYW1lKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xhc3NUeXBlID0gY2xhc3NTeW1ib2wgPyBjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKGNsYXNzU3ltYm9sKSA6IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oZGVjbGFyaW5nQ2xhc3MpO1xuICByZXR1cm4gbmV3IFNldChjbGFzc1R5cGUuZ2V0UHJvcGVydGllcygpLm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudE1lbWJlckV4cG9zdXJlKG1vZGlmaWVyS2luZHM6IFJlYWRvbmx5U2V0PFN5bnRheEtpbmQ+KTogTWVtYmVyRXhwb3N1cmUge1xuICBpZiAobW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5Qcml2YXRlS2V5d29yZCkpIHtcbiAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICB9XG4gIGlmIChtb2RpZmllcktpbmRzLmhhcyhTeW50YXhLaW5kLlByb3RlY3RlZEtleXdvcmQpKSB7XG4gICAgcmV0dXJuICdwcm90ZWN0ZWQnO1xuICB9XG4gIHJldHVybiAncHVibGljJztcbn1cblxuZnVuY3Rpb24gZ2V0RW5jbG9zaW5nQ2xhc3Mobm9kZTogTm9kZSk6IENsYXNzTGlrZURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnQ6IE5vZGUgPSBub2RlO1xuICB3aGlsZSAoIWlzU291cmNlRmlsZShjdXJyZW50KSkge1xuICAgIGlmIChpc0NsYXNzTGlrZShjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBvcnRlZE5hbWVOb2RlcyhkZWNsYXJhdGlvbjogRXhwb3J0YWJsZURlY2xhcmF0aW9uKTogTm9kZVtdIHtcbiAgaWYgKGlzVmFyaWFibGVTdGF0ZW1lbnQoZGVjbGFyYXRpb24pKSB7XG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmRlY2xhcmF0aW9uTGlzdC5kZWNsYXJhdGlvbnMubWFwKCh2YXJpYWJsZURlY2xhcmF0aW9uKSA9PiB2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUpLmZpbHRlcihpc0lkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBkZWNsYXJhdGlvbi5uYW1lID8gW2RlY2xhcmF0aW9uLm5hbWVdIDogW107XG59XG5cbmZ1bmN0aW9uIGdldE1vZGlmaWVyS2luZHMobm9kZTogTm9kZSk6IFJlYWRvbmx5U2V0PFN5bnRheEtpbmQ+IHtcbiAgY29uc3Qga2luZHMgPSBuZXcgU2V0PFN5bnRheEtpbmQ+KCk7XG4gIGlmIChjYW5IYXZlTW9kaWZpZXJzKG5vZGUpKSB7XG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBnZXRNb2RpZmllcnMobm9kZSkgPz8gW10pIHtcbiAgICAgIGtpbmRzLmFkZChtb2RpZmllci5raW5kKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtpbmRzO1xufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdMaXRlcmFsQ29uc3RpdHVlbnRzKHR5cGU6IFR5cGUpOiBudWxsIHwgc3RyaW5nW10ge1xuICBpZiAodHlwZS5pc1N0cmluZ0xpdGVyYWwoKSkge1xuICAgIHJldHVybiBbdHlwZS52YWx1ZV07XG4gIH1cbiAgaWYgKHR5cGUuaXNVbmlvbigpKSB7XG4gICAgY29uc3QgbGl0ZXJhbHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBjb25zdGl0dWVudCBvZiB0eXBlLnR5cGVzKSB7XG4gICAgICBpZiAoIWNvbnN0aXR1ZW50LmlzU3RyaW5nTGl0ZXJhbCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbGl0ZXJhbHMucHVzaChjb25zdGl0dWVudC52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBsaXRlcmFscztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaGFzVHNEb2NDb21tZW50KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCBmdWxsVGV4dCA9IHNvdXJjZUZpbGUuZ2V0RnVsbFRleHQoKTtcbiAgY29uc3QgY29tbWVudFJhbmdlcyA9IGdldExlYWRpbmdDb21tZW50UmFuZ2VzKGZ1bGxUZXh0LCBub2RlLmdldEZ1bGxTdGFydCgpKSA/PyBbXTtcbiAgcmV0dXJuIGNvbW1lbnRSYW5nZXMuc29tZSgocmFuZ2UpID0+XG4gICAgcmFuZ2Uua2luZCA9PT0gU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhXG4gICAgJiYgZnVsbFRleHQuY2hhckF0KHJhbmdlLnBvcyArIEpTRE9DX1NFQ09ORF9BU1RFUklTS19PRkZTRVQpID09PSAnKidcbiAgICAmJiBmdWxsVGV4dC5jaGFyQXQocmFuZ2UucG9zICsgSlNET0NfRk9VUlRIX0NIQVJBQ1RFUl9PRkZTRVQpICE9PSAnLydcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNEZWNsYXJhdGlvbkl0c2VsZihyZWZlcmVuY2U6IFJlZmVyZW5jZUxvY2F0aW9uLCBuYW1lTm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9DYW5vbmljYWwocmVmZXJlbmNlLmZpbGVOYW1lKSA9PT0gdG9DYW5vbmljYWwobmFtZU5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lKSAmJiByZWZlcmVuY2Uuc3RhcnQgPT09IG5hbWVOb2RlLmdldFN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVyaXZlZEZyb20ocGFyYW1zOiBJc0Rlcml2ZWRGcm9tUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgYmFzZSwgY2hlY2tlciwgZGVyaXZlZCB9ID0gcGFyYW1zO1xuICBjb25zdCBiYXNlU3ltYm9sID0gYmFzZS5uYW1lID8gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKGJhc2UubmFtZSkgOiB1bmRlZmluZWQ7XG4gIGlmICghYmFzZVN5bWJvbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xhdXNlIG9mIGRlcml2ZWQuaGVyaXRhZ2VDbGF1c2VzID8/IFtdKSB7XG4gICAgaWYgKGNsYXVzZS50b2tlbiAhPT0gU3ludGF4S2luZC5FeHRlbmRzS2V5d29yZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdHlwZUV4cHJlc3Npb24gb2YgY2xhdXNlLnR5cGVzKSB7XG4gICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHR5cGVFeHByZXNzaW9uLmV4cHJlc3Npb24pLmdldFN5bWJvbCgpO1xuICAgICAgaWYgKHN5bWJvbCA9PT0gYmFzZVN5bWJvbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sPy5kZWNsYXJhdGlvbnMgPz8gW10pIHtcbiAgICAgICAgaWYgKGlzQ2xhc3NMaWtlKGRlY2xhcmF0aW9uKSAmJiBpc0Rlcml2ZWRGcm9tKHsgYmFzZSwgY2hlY2tlciwgZGVyaXZlZDogZGVjbGFyYXRpb24gfSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzS2V5UmVmZXJlbmNlVG9DbGFzcyhwYXJhbXM6IElzS2V5UmVmZXJlbmNlVG9DbGFzc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGNoZWNrZXIsIGtleVNldCwgbm9kZSB9ID0gcGFyYW1zO1xuICBjb25zdCBjb250ZXh0dWFsVHlwZSA9IGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUobm9kZSk7XG4gIGlmICghY29udGV4dHVhbFR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgbGl0ZXJhbHMgPSBnZXRTdHJpbmdMaXRlcmFsQ29uc3RpdHVlbnRzKGNvbnRleHR1YWxUeXBlKTtcbiAgaWYgKCFsaXRlcmFscykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbGl0ZXJhbHMuZXZlcnkoKGxpdGVyYWwpID0+IGtleVNldC5oYXMobGl0ZXJhbCkpO1xufVxuXG5mdW5jdGlvbiBpc093blNvdXJjZUZpbGUocGFyYW1zOiBJc093blNvdXJjZUZpbGVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmaWxlUGF0aCwgc3JjRm9sZGVyIH0gPSBwYXJhbXM7XG4gIHJldHVybiBmaWxlUGF0aC5zdGFydHNXaXRoKGAke3NyY0ZvbGRlcn0vYCkgJiYgZmlsZVBhdGguZW5kc1dpdGgoJy50cycpICYmICFmaWxlUGF0aC5lbmRzV2l0aCgnLmQudHMnKTtcbn1cblxuZnVuY3Rpb24gaXNUZXN0RmlsZShmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWxlUGF0aC5pbmNsdWRlcygnLnRlc3QuJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5pbnRlZ3JhdGlvbi4nKTtcbn1cblxuZnVuY3Rpb24gcmFua0V4cG9zdXJlKGV4cG9zdXJlOiBNZW1iZXJFeHBvc3VyZSk6IG51bWJlciB7XG4gIHJldHVybiBNRU1CRVJfRVhQT1NVUkVfT1JERVIuaW5kZXhPZihleHBvc3VyZSk7XG59XG5cbmZ1bmN0aW9uIHJlY29yZChwYXJhbXM6IFJlY29yZFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIGVkaXQsIGZpbmRpbmcgfSA9IHBhcmFtcztcbiAgY29udGV4dC5maW5kaW5ncy5wdXNoKGZpbmRpbmcpO1xuICBjb250ZXh0LmVkaXRzLnB1c2goZWRpdCk7XG59XG5cbmZ1bmN0aW9uIHJ1bk92ZXJFeHBvc3VyZUFuYWx5c2lzKHBhcmFtczogQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcyk6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3QgeyBsYW5ndWFnZVNlcnZpY2UsIG9uUHJvZ3Jlc3MsIHNyY0ZvbGRlciB9ID0gcGFyYW1zO1xuICBjb25zdCBwcm9ncmFtID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFByb2dyYW0oKTtcbiAgaWYgKCFwcm9ncmFtKSB7XG4gICAgcmV0dXJuIHsgZWRpdHM6IFtdLCBmaW5kaW5nczogW10gfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCA9IHtcbiAgICBjaGVja2VyOiBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCksXG4gICAgZWRpdHM6IFtdLFxuICAgIGZpbmRpbmdzOiBbXSxcbiAgICBsYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJvZ3JhbSxcbiAgICBzaG91bGRGb3JjZTogcGFyYW1zLnNob3VsZEZvcmNlID8/IGZhbHNlLFxuICAgIHN0cmluZ0xpdGVyYWxPY2N1cnJlbmNlc0J5VGV4dDogYnVpbGRTdHJpbmdMaXRlcmFsSW5kZXgocHJvZ3JhbSlcbiAgfTtcblxuICBjb25zdCBzb3VyY2VGaWxlc1RvQW5hbHl6ZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoKHNvdXJjZUZpbGUpID0+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIHJldHVybiBpc093blNvdXJjZUZpbGUoeyBmaWxlUGF0aCwgc3JjRm9sZGVyIH0pICYmICFpc1Rlc3RGaWxlKGZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbYW5hbHl6ZWRGaWxlQ291bnQsIHNvdXJjZUZpbGVdIG9mIHNvdXJjZUZpbGVzVG9BbmFseXplLmVudHJpZXMoKSkge1xuICAgIG9uUHJvZ3Jlc3M/Lih7XG4gICAgICBhbmFseXplZEZpbGVDb3VudCxcbiAgICAgIGN1cnJlbnRGaWxlUGF0aDogdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksXG4gICAgICB0b3RhbEZpbGVDb3VudDogc291cmNlRmlsZXNUb0FuYWx5emUubGVuZ3RoXG4gICAgfSk7XG4gICAgdmlzaXQoc291cmNlRmlsZSk7XG4gIH1cbiAgcmV0dXJuIHsgZWRpdHM6IGNvbnRleHQuZWRpdHMsIGZpbmRpbmdzOiBjb250ZXh0LmZpbmRpbmdzIH07XG5cbiAgZnVuY3Rpb24gdmlzaXQobm9kZTogTm9kZSk6IHZvaWQge1xuICAgIGFuYWx5emVNZW1iZXIobm9kZSwgY29udGV4dCk7XG4gICAgYW5hbHl6ZUV4cG9ydChub2RlLCBjb250ZXh0KTtcbiAgICBub2RlLmZvckVhY2hDaGlsZCh2aXNpdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9EaXNwbGF5UGF0aChwYXJhbXM6IFRvRGlzcGxheVBhdGhQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGJhc2VGb2xkZXIsIGZpbGVQYXRoIH0gPSBwYXJhbXM7XG4gIGlmIChiYXNlRm9sZGVyICE9PSB1bmRlZmluZWQgJiYgZmlsZVBhdGguc3RhcnRzV2l0aChgJHtiYXNlRm9sZGVyfS9gKSkge1xuICAgIHJldHVybiBmaWxlUGF0aC5zbGljZShiYXNlRm9sZGVyLmxlbmd0aCArIDEpO1xuICB9XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwRUEsd0JBMEJPO0FBRVAseUJBQWtDO0FBQ2xDLGlDQUdPO0FBc1BBLE1BQU0sc0JBQTJDLG9CQUFJLElBQVk7QUFBQSxFQUN0RTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUF5TkQsTUFBTSwrQkFBK0I7QUFDckMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBbUQsQ0FBQyxXQUFXLGFBQWEsUUFBUTtBQUMxRixNQUFNLG9CQUF1RDtBQUFBLEVBQzNELGNBQWM7QUFBQSxFQUNk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
@@ -47,7 +47,7 @@
47
47
  * test to switch to a cast-based access. Decorated members and exports shared with a still-exported
48
48
  * sibling stay skipped even under `shouldForce`, because no edit can be applied safely.
49
49
  */
50
- import type { CompilerOptions, LanguageService, LanguageServiceHost } from 'typescript';
50
+ import type { CompilerOptions, LanguageService, LanguageServiceHost } from 'typescript' with { 'resolution-mode': 'import' };
51
51
  /**
52
52
  * Parameters for {@link analyzeOverExposure}.
53
53
  */
@@ -64,6 +64,8 @@ export interface AnalyzeOverExposureParams {
64
64
  * When `true`, each fixable finding is tightened in place via {@link writeFile} (which must then
65
65
  * be provided), and the returned findings carry {@link OverExposureFinding.wasFixed} /
66
66
  * {@link OverExposureFinding.skipReason}. When `false` or omitted, the analysis only reports.
67
+ *
68
+ * @default `false`
67
69
  */
68
70
  readonly shouldFix?: boolean | undefined;
69
71
  /**
@@ -71,6 +73,8 @@ export interface AnalyzeOverExposureParams {
71
73
  * test references are tightened too, instead of being skipped with a `test-only`
72
74
  * {@link OverExposureFinding.skipReason}. Decorated members and exports shared with a
73
75
  * still-exported sibling stay skipped regardless, because no edit can be applied safely.
76
+ *
77
+ * @default `false`
74
78
  */
75
79
  readonly shouldForce?: boolean | undefined;
76
80
  /**
@@ -125,6 +129,8 @@ export interface FindOverExposureParams {
125
129
  * When `true`, fixable findings are tightened in place on disk (the `export` keyword is dropped,
126
130
  * or a `private` / `protected` modifier is inserted/replaced). When `false` or omitted, the
127
131
  * project is only analyzed.
132
+ *
133
+ * @default `false`
128
134
  */
129
135
  readonly shouldFix?: boolean | undefined;
130
136
  /**
@@ -132,6 +138,8 @@ export interface FindOverExposureParams {
132
138
  * test references are tightened too, instead of being skipped. Decorated members and exports
133
139
  * shared with a still-exported sibling stay skipped regardless. Forwarded to
134
140
  * {@link analyzeOverExposure}.
141
+ *
142
+ * @default `false`
135
143
  */
136
144
  readonly shouldForce?: boolean | undefined;
137
145
  }
@@ -244,4 +244,4 @@ function writePackageLockJsonSync(packageLockJson, cwd) {
244
244
  writePackageLockJson,
245
245
  writePackageLockJsonSync
246
246
  });
247
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHBhY2thZ2UuanNvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhY2thZ2VKc29uLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdEpzb25QYXJhbXMsXG4gIEVkaXRKc29uU3luY1BhcmFtc1xufSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlUGF0aEZyb21Sb290UGFyYW1zIH0gZnJvbSAnLi9yb290LnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgZWRpdEpzb24sXG4gIGVkaXRKc29uU3luYyxcbiAgcmVhZEpzb24sXG4gIHJlYWRKc29uU3luYyxcbiAgd3JpdGVKc29uLFxuICB3cml0ZUpzb25TeW5jXG59IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdE5wbVNocmlua1dyYXBKc29ufS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdE5wbVNocmlua1dyYXBKc29uT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlSnNvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFBhY2thZ2VKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBza2lwcyBlZGl0aW5nIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcElmTWlzc2luZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlSnNvblN5bmN9LlxuICovXG5leHBvcnQgdHlwZSBFZGl0UGFja2FnZUpzb25TeW5jT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlTG9ja0pzb259LlxuICovXG5leHBvcnQgdHlwZSBFZGl0UGFja2FnZUxvY2tKc29uT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlTG9ja0pzb25TeW5jfS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdFBhY2thZ2VMb2NrSnNvblN5bmNPcHRpb25zID0gRWRpdFBhY2thZ2VKc29uT3B0aW9ucztcblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfTtcblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlTG9ja0pzb24gZXh0ZW5kcyBQYXJ0aWFsPFBhY2thZ2VKc29uPiB7XG4gIC8qKlxuICAgKiBQYWNrYWdlcyBpbiB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICAgKi9cbiAgcGFja2FnZXM/OiBSZWNvcmQ8c3RyaW5nLCBQYWNrYWdlSnNvbj47XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXROcG1TaHJpbmtXcmFwSnNvbihcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IFByb21pc2FibGU8dm9pZD4sXG4gIG9wdGlvbnM6IEVkaXROcG1TaHJpbmtXcmFwSnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdEpzb248UGFja2FnZUpzb24+KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvblBhcmFtczxQYWNrYWdlSnNvbj4+KHsgZWRpdEZuLCBwYXRoOiBnZXROcG1TaHJpbmtXcmFwSnNvblBhdGgoY3dkKSwgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0UGFja2FnZUpzb24oXG4gIGVkaXRGbjogKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbikgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uUGFyYW1zPFBhY2thZ2VKc29uPj4oeyBlZGl0Rm4sIHBhdGg6IGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBzaG91bGRTa2lwSWZNaXNzaW5nIH0pKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWRpdFBhY2thZ2VKc29uU3luYyhcbiAgZWRpdEZuOiAocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSA9PiB2b2lkLFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUpzb25TeW5jT3B0aW9ucyA9IHt9XG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBlZGl0SnNvblN5bmM8UGFja2FnZUpzb24+KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvblN5bmNQYXJhbXM8UGFja2FnZUpzb24+Pih7IGVkaXRGbiwgcGF0aDogZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0UGFja2FnZUxvY2tKc29uKFxuICBlZGl0Rm46IChwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbikgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VMb2NrSnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdEpzb248UGFja2FnZUpzb24+KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvblBhcmFtczxQYWNrYWdlSnNvbj4+KHsgZWRpdEZuLCBwYXRoOiBnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGl0UGFja2FnZUxvY2tKc29uU3luYyhcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IHZvaWQsXG4gIG9wdGlvbnM6IEVkaXRQYWNrYWdlTG9ja0pzb25TeW5jT3B0aW9ucyA9IHt9XG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBlZGl0SnNvblN5bmM8UGFja2FnZUxvY2tKc29uPihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RWRpdEpzb25TeW5jUGFyYW1zPFBhY2thZ2VMb2NrSnNvbj4+KHsgZWRpdEZuLCBwYXRoOiBnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRoIHRvIHRoZSBgbnBtLXNocmlua3dyYXAuanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgbnBtLXNocmlua3dyYXAuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgbnBtLXNocmlua3dyYXAuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5wbVNocmlua1dyYXBKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoXG4gICAgcmVzb2x2ZVBhdGhGcm9tUm9vdChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UmVzb2x2ZVBhdGhGcm9tUm9vdFBhcmFtcz4oeyBjd2QsIHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk5wbVNocmlua3dyYXBKc29uIH0pKSxcbiAgICAnQ291bGQgbm90IGRldGVybWluZSB0aGUgbnBtLXNocmlua3dyYXAuanNvbiBwYXRoJ1xuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRoIHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoXG4gICAgcmVzb2x2ZVBhdGhGcm9tUm9vdChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UmVzb2x2ZVBhdGhGcm9tUm9vdFBhcmFtcz4oeyBjd2QsIHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VKc29uIH0pKSxcbiAgICAnQ291bGQgbm90IGRldGVybWluZSB0aGUgcGFja2FnZS5qc29uIHBhdGgnXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoXG4gICAgcmVzb2x2ZVBhdGhGcm9tUm9vdChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UmVzb2x2ZVBhdGhGcm9tUm9vdFBhcmFtcz4oeyBjd2QsIHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VMb2NrSnNvbiB9KSksXG4gICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHBhY2thZ2UtbG9jay5qc29uIHBhdGgnXG4gICk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBmcm9tIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q/OiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VKc29uPiB7XG4gIHJldHVybiBhd2FpdCByZWFkSnNvbjxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCkpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvblN5bmMoY3dkPzogc3RyaW5nKTogUGFja2FnZUpzb24ge1xuICByZXR1cm4gcmVhZEpzb25TeW5jPFBhY2thZ2VKc29uPihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUxvY2tKc29uKGN3ZD86IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUxvY2tKc29uPiB7XG4gIHJldHVybiBhd2FpdCByZWFkSnNvbjxQYWNrYWdlTG9ja0pzb24+KGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkUGFja2FnZUxvY2tKc29uU3luYyhjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTG9ja0pzb24ge1xuICByZXR1cm4gcmVhZEpzb25TeW5jPFBhY2thZ2VMb2NrSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIHByb3ZpZGVkIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290LlxuICpcbiAqIEBwYXJhbSBwYWNrYWdlSnNvbiAtIFRoZSBgUGFja2FnZUpzb25gIG9iamVjdCB0byB3cml0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VKc29uKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiwgY3dkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdyaXRlSnNvbihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSwgcGFja2FnZUpzb24pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBhY2thZ2VKc29uU3luYyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sIGN3ZD86IHN0cmluZyk6IHZvaWQge1xuICB3cml0ZUpzb25TeW5jKGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBwYWNrYWdlSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUpzb25gIG9iamVjdCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290LlxuICpcbiAqIEBwYXJhbSBwYWNrYWdlTG9ja0pzb24gLSBUaGUgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLWxvY2suanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVQYWNrYWdlTG9ja0pzb24ocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24sIGN3ZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCB3cml0ZUpzb24oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpLCBwYWNrYWdlTG9ja0pzb24pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VMb2NrSnNvbiAtIFRoZSBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQYWNrYWdlTG9ja0pzb25TeW5jKHBhY2thZ2VMb2NrSnNvbjogUGFja2FnZUxvY2tKc29uLCBjd2Q/OiBzdHJpbmcpOiB2b2lkIHtcbiAgd3JpdGVKc29uU3luYyhnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHBhY2thZ2VMb2NrSnNvbik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHBhY2thZ2UuanNvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhY2thZ2VKc29uLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdEpzb25QYXJhbXMsXG4gIEVkaXRKc29uU3luY1BhcmFtc1xufSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlUGF0aEZyb21Sb290UGFyYW1zIH0gZnJvbSAnLi9yb290LnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgZWRpdEpzb24sXG4gIGVkaXRKc29uU3luYyxcbiAgcmVhZEpzb24sXG4gIHJlYWRKc29uU3luYyxcbiAgd3JpdGVKc29uLFxuICB3cml0ZUpzb25TeW5jXG59IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdE5wbVNocmlua1dyYXBKc29ufS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdE5wbVNocmlua1dyYXBKc29uT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlSnNvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFBhY2thZ2VKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBza2lwcyBlZGl0aW5nIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwSWZNaXNzaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdFBhY2thZ2VKc29uU3luY30uXG4gKi9cbmV4cG9ydCB0eXBlIEVkaXRQYWNrYWdlSnNvblN5bmNPcHRpb25zID0gRWRpdFBhY2thZ2VKc29uT3B0aW9ucztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdFBhY2thZ2VMb2NrSnNvbn0uXG4gKi9cbmV4cG9ydCB0eXBlIEVkaXRQYWNrYWdlTG9ja0pzb25PcHRpb25zID0gRWRpdFBhY2thZ2VKc29uT3B0aW9ucztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdFBhY2thZ2VMb2NrSnNvblN5bmN9LlxuICovXG5leHBvcnQgdHlwZSBFZGl0UGFja2FnZUxvY2tKc29uU3luY09wdGlvbnMgPSBFZGl0UGFja2FnZUpzb25PcHRpb25zO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9O1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VMb2NrSnNvbiBleHRlbmRzIFBhcnRpYWw8UGFja2FnZUpzb24+IHtcbiAgLyoqXG4gICAqIFBhY2thZ2VzIGluIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUuXG4gICAqL1xuICBwYWNrYWdlcz86IFJlY29yZDxzdHJpbmcsIFBhY2thZ2VKc29uPjtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIHVzaW5nIHRoZSBwcm92aWRlZCBlZGl0IGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBlZGl0Rm4gLSBUaGUgZnVuY3Rpb24gdG8gZWRpdCB0aGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZWRpdGVkIGFuZCB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdE5wbVNocmlua1dyYXBKc29uKFxuICBlZGl0Rm46IChwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbikgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgb3B0aW9uczogRWRpdE5wbVNocmlua1dyYXBKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uUGFyYW1zPFBhY2thZ2VKc29uPj4oeyBlZGl0Rm4sIHBhdGg6IGdldE5wbVNocmlua1dyYXBKc29uUGF0aChjd2QpLCBzaG91bGRTa2lwSWZNaXNzaW5nIH0pKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRQYWNrYWdlSnNvbihcbiAgZWRpdEZuOiAocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUpzb25PcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgY3dkLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IG9wdGlvbnM7XG4gIGF3YWl0IGVkaXRKc29uPFBhY2thZ2VKc29uPihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RWRpdEpzb25QYXJhbXM8UGFja2FnZUpzb24+Pih7IGVkaXRGbiwgcGF0aDogZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIHVzaW5nIHRoZSBwcm92aWRlZCBlZGl0IGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBlZGl0Rm4gLSBUaGUgZnVuY3Rpb24gdG8gZWRpdCB0aGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGl0UGFja2FnZUpzb25TeW5jKFxuICBlZGl0Rm46IChwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pID0+IHZvaWQsXG4gIG9wdGlvbnM6IEVkaXRQYWNrYWdlSnNvblN5bmNPcHRpb25zID0ge31cbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgY3dkLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IG9wdGlvbnM7XG4gIGVkaXRKc29uU3luYzxQYWNrYWdlSnNvbj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uU3luY1BhcmFtczxQYWNrYWdlSnNvbj4+KHsgZWRpdEZuLCBwYXRoOiBnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSwgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRQYWNrYWdlTG9ja0pzb24oXG4gIGVkaXRGbjogKHBhY2thZ2VMb2NrSnNvbjogUGFja2FnZUxvY2tKc29uKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUxvY2tKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uUGFyYW1zPFBhY2thZ2VKc29uPj4oeyBlZGl0Rm4sIHBhdGg6IGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRQYWNrYWdlTG9ja0pzb25TeW5jKFxuICBlZGl0Rm46IChwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbikgPT4gdm9pZCxcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VMb2NrSnNvblN5bmNPcHRpb25zID0ge31cbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgY3dkLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IG9wdGlvbnM7XG4gIGVkaXRKc29uU3luYzxQYWNrYWdlTG9ja0pzb24+KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvblN5bmNQYXJhbXM8UGFja2FnZUxvY2tKc29uPj4oeyBlZGl0Rm4sIHBhdGg6IGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGggdG8gdGhlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnBtU2hyaW5rV3JhcEpzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShcbiAgICByZXNvbHZlUGF0aEZyb21Sb290KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxSZXNvbHZlUGF0aEZyb21Sb290UGFyYW1zPih7IGN3ZCwgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTnBtU2hyaW5rd3JhcEpzb24gfSkpLFxuICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBucG0tc2hyaW5rd3JhcC5qc29uIHBhdGgnXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUpzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShcbiAgICByZXNvbHZlUGF0aEZyb21Sb290KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxSZXNvbHZlUGF0aEZyb21Sb290UGFyYW1zPih7IGN3ZCwgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGFja2FnZUpzb24gfSkpLFxuICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBwYWNrYWdlLmpzb24gcGF0aCdcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGF0aCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLWxvY2suanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShcbiAgICByZXNvbHZlUGF0aEZyb21Sb290KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxSZXNvbHZlUGF0aEZyb21Sb290UGFyYW1zPih7IGN3ZCwgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGFja2FnZUxvY2tKc29uIH0pKSxcbiAgICAnQ291bGQgbm90IGRldGVybWluZSB0aGUgcGFja2FnZS1sb2NrLmpzb24gcGF0aCdcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uKGN3ZD86IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPFBhY2thZ2VKc29uPihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBmcm9tIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uU3luYyhjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlSnNvbiB7XG4gIHJldHVybiByZWFkSnNvblN5bmM8UGFja2FnZUpzb24+KGdldFBhY2thZ2VKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlTG9ja0pzb24oY3dkPzogc3RyaW5nKTogUHJvbWlzZTxQYWNrYWdlTG9ja0pzb24+IHtcbiAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPFBhY2thZ2VMb2NrSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGBQYWNrYWdlTG9ja0pzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQYWNrYWdlTG9ja0pzb25TeW5jKGN3ZD86IHN0cmluZyk6IFBhY2thZ2VMb2NrSnNvbiB7XG4gIHJldHVybiByZWFkSnNvblN5bmM8UGFja2FnZUxvY2tKc29uPihnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCkpO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUGFja2FnZUpzb24ocGFja2FnZUpzb246IFBhY2thZ2VKc29uLCBjd2Q/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgd3JpdGVKc29uKGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBwYWNrYWdlSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUpzb25gIG9iamVjdCB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZUpzb24gLSBUaGUgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUGFja2FnZUpzb25TeW5jKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiwgY3dkPzogc3RyaW5nKTogdm9pZCB7XG4gIHdyaXRlSnNvblN5bmMoZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIHBhY2thZ2VKc29uKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIHByb3ZpZGVkIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VMb2NrSnNvbiAtIFRoZSBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VMb2NrSnNvbihwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbiwgY3dkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdyaXRlSnNvbihnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHBhY2thZ2VMb2NrSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZUxvY2tKc29uIC0gVGhlIGBQYWNrYWdlTG9ja0pzb25gIG9iamVjdCB0byB3cml0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBhY2thZ2VMb2NrSnNvblN5bmMocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24sIGN3ZD86IHN0cmluZyk6IHZvaWQge1xuICB3cml0ZUpzb25TeW5jKGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgcGFja2FnZUxvY2tKc29uKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Contains utility functions for NPM package.json.
6
6
  */
7
- import type { PackageJson, Promisable } from 'type-fest';
7
+ import type { PackageJson, Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
8
8
  /**
9
9
  * Options for {@link editNpmShrinkWrapJson}.
10
10
  */
@@ -19,6 +19,8 @@ export interface EditPackageJsonOptions {
19
19
  readonly cwd?: string;
20
20
  /**
21
21
  * If `true`, skips editing if the file does not exist.
22
+ *
23
+ * @default `false`
22
24
  */
23
25
  readonly shouldSkipIfMissing?: boolean;
24
26
  }
@@ -159,4 +159,4 @@ function buildProjectFlags(projects) {
159
159
  testCoverage,
160
160
  testWatch
161
161
  });
162
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBWaXRlc3QgZnJhbWV3b3JrLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGVjdXRlcyB2aXRlc3QgYXMgYSBDTEkgc3VicHJvY2VzczsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgd2l0aCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q292ZXJhZ2VPcHRpb25zIGV4dGVuZHMgVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogTWluaW11bSBjb3ZlcmFnZSBwZXJjZW50YWdlIHJlcXVpcmVkLiBJZiB0aGUgYWN0dWFsIGNvdmVyYWdlIGZhbGxzIGJlbG93XG4gICAqIHRoaXMgdGhyZXNob2xkLCB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pbkNvdmVyYWdlSW5QZXJjZW50cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0cyB0byBydW4uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgaW4gd2F0Y2ggbW9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgVGVzdFdhdGNoT3B0aW9ucyA9IFRlc3RPcHRpb25zO1xuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdChvcHRpb25zOiBUZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ3ZpdGVzdCcsICdydW4nLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvdmVyYWdlKG9wdGlvbnM6IFRlc3RDb3ZlcmFnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSBTdHJpbmcob3B0aW9ucy5taW5Db3ZlcmFnZUluUGVyY2VudHMgPz8gMCk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgJ3ZpdGVzdCcsXG4gICAgJ3J1bicsXG4gICAgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyksXG4gICAgJy0tY292ZXJhZ2UnLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMubGluZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmZ1bmN0aW9ucz0ke3RocmVzaG9sZH1gLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMuYnJhbmNoZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLnN0YXRlbWVudHM9JHt0aHJlc2hvbGR9YFxuICBdKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIGluIHdhdGNoIG1vZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFdhdGNoKG9wdGlvbnM6IFRlc3RXYXRjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd2aXRlc3QnLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBgLS1wcm9qZWN0YCBmbGFncyBmb3IgdGhlIGdpdmVuIHByb2plY3QgcHJlZml4ZXMuXG4gKiBFYWNoIHByZWZpeCBleHBhbmRzIHRvIGJvdGggYC0tcHJvamVjdD1wcmVmaXhgIChleGFjdCBtYXRjaClcbiAqIGFuZCBgLS1wcm9qZWN0PXByZWZpeDoqYCAoc3ViLXByb2plY3RzKS5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdHMgLSBUaGUgcHJvamVjdCBuYW1lIHByZWZpeGVzLlxuICogQHJldHVybnMgVGhlIGAtLXByb2plY3RgIGZsYWdzIGFycmF5LlxuICovXG5mdW5jdGlvbiBidWlsZFByb2plY3RGbGFncyhwcm9qZWN0cz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKHByb2plY3RzID8/IFtdKS5mbGF0TWFwKChwcm9qZWN0KSA9PiBbYC0tcHJvamVjdD0ke3Byb2plY3R9YCwgYC0tcHJvamVjdD0ke3Byb2plY3R9OipgXSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsa0JBQTZCO0FBa0M3QixlQUFzQixLQUFLLFVBQXVCLENBQUMsR0FBa0I7QUFDbkUsWUFBTSwwQkFBYSxDQUFDLFVBQVUsT0FBTyxHQUFHLGtCQUFrQixRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQzlFO0FBUUEsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sWUFBWSxPQUFPLFFBQVEseUJBQXlCLENBQUM7QUFDM0QsWUFBTSwwQkFBYTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRyxrQkFBa0IsUUFBUSxRQUFRO0FBQUEsSUFDckM7QUFBQSxJQUNBLCtCQUErQixTQUFTO0FBQUEsSUFDeEMsbUNBQW1DLFNBQVM7QUFBQSxJQUM1QyxrQ0FBa0MsU0FBUztBQUFBLElBQzNDLG9DQUFvQyxTQUFTO0FBQUEsRUFDL0MsQ0FBQztBQUNIO0FBUUEsZUFBc0IsVUFBVSxVQUE0QixDQUFDLEdBQWtCO0FBQzdFLFlBQU0sMEJBQWEsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDdkU7QUFVQSxTQUFTLGtCQUFrQixVQUErQjtBQUN4RCxVQUFRLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxPQUFPLElBQUksYUFBYSxPQUFPLElBQUksQ0FBQztBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
162
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBWaXRlc3QgZnJhbWV3b3JrLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGVjdXRlcyB2aXRlc3QgYXMgYSBDTEkgc3VicHJvY2VzczsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgd2l0aCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q292ZXJhZ2VPcHRpb25zIGV4dGVuZHMgVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogTWluaW11bSBjb3ZlcmFnZSBwZXJjZW50YWdlIHJlcXVpcmVkLiBJZiB0aGUgYWN0dWFsIGNvdmVyYWdlIGZhbGxzIGJlbG93XG4gICAqIHRoaXMgdGhyZXNob2xkLCB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDBgXG4gICAqL1xuICByZWFkb25seSBtaW5Db3ZlcmFnZUluUGVyY2VudHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdHMgdG8gcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB0ZXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3Qob3B0aW9uczogVGVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd2aXRlc3QnLCAncnVuJywgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyldKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIHdpdGggY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb3ZlcmFnZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb3ZlcmFnZShvcHRpb25zOiBUZXN0Q292ZXJhZ2VPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGhyZXNob2xkID0gU3RyaW5nKG9wdGlvbnMubWluQ292ZXJhZ2VJblBlcmNlbnRzID8/IDApO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgICd2aXRlc3QnLFxuICAgICdydW4nLFxuICAgIC4uLmJ1aWxkUHJvamVjdEZsYWdzKG9wdGlvbnMucHJvamVjdHMpLFxuICAgICctLWNvdmVyYWdlJyxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmxpbmVzPSR7dGhyZXNob2xkfWAsXG4gICAgYC0tY292ZXJhZ2UudGhyZXNob2xkcy5mdW5jdGlvbnM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmJyYW5jaGVzPSR7dGhyZXNob2xkfWAsXG4gICAgYC0tY292ZXJhZ2UudGhyZXNob2xkcy5zdGF0ZW1lbnRzPSR7dGhyZXNob2xkfWBcbiAgXSk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSBpbiB3YXRjaCBtb2RlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB0ZXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RXYXRjaChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsndml0ZXN0JywgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyldKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYC0tcHJvamVjdGAgZmxhZ3MgZm9yIHRoZSBnaXZlbiBwcm9qZWN0IHByZWZpeGVzLlxuICogRWFjaCBwcmVmaXggZXhwYW5kcyB0byBib3RoIGAtLXByb2plY3Q9cHJlZml4YCAoZXhhY3QgbWF0Y2gpXG4gKiBhbmQgYC0tcHJvamVjdD1wcmVmaXg6KmAgKHN1Yi1wcm9qZWN0cykuXG4gKlxuICogQHBhcmFtIHByb2plY3RzIC0gVGhlIHByb2plY3QgbmFtZSBwcmVmaXhlcy5cbiAqIEByZXR1cm5zIFRoZSBgLS1wcm9qZWN0YCBmbGFncyBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9qZWN0RmxhZ3MocHJvamVjdHM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIChwcm9qZWN0cyA/PyBbXSkuZmxhdE1hcCgocHJvamVjdCkgPT4gW2AtLXByb2plY3Q9JHtwcm9qZWN0fWAsIGAtLXByb2plY3Q9JHtwcm9qZWN0fToqYF0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLGtCQUE2QjtBQW9DN0IsZUFBc0IsS0FBSyxVQUF1QixDQUFDLEdBQWtCO0FBQ25FLFlBQU0sMEJBQWEsQ0FBQyxVQUFVLE9BQU8sR0FBRyxrQkFBa0IsUUFBUSxRQUFRLENBQUMsQ0FBQztBQUM5RTtBQVFBLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLFlBQVksT0FBTyxRQUFRLHlCQUF5QixDQUFDO0FBQzNELFlBQU0sMEJBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsa0JBQWtCLFFBQVEsUUFBUTtBQUFBLElBQ3JDO0FBQUEsSUFDQSwrQkFBK0IsU0FBUztBQUFBLElBQ3hDLG1DQUFtQyxTQUFTO0FBQUEsSUFDNUMsa0NBQWtDLFNBQVM7QUFBQSxJQUMzQyxvQ0FBb0MsU0FBUztBQUFBLEVBQy9DLENBQUM7QUFDSDtBQVFBLGVBQXNCLFVBQVUsVUFBNEIsQ0FBQyxHQUFrQjtBQUM3RSxZQUFNLDBCQUFhLENBQUMsVUFBVSxHQUFHLGtCQUFrQixRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFO0FBVUEsU0FBUyxrQkFBa0IsVUFBK0I7QUFDeEQsVUFBUSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsT0FBTyxJQUFJLGFBQWEsT0FBTyxJQUFJLENBQUM7QUFDakc7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -11,6 +11,8 @@ export interface TestCoverageOptions extends TestOptions {
11
11
  /**
12
12
  * Minimum coverage percentage required. If the actual coverage falls below
13
13
  * this threshold, the process exits with a non-zero code.
14
+ *
15
+ * @default `0`
14
16
  */
15
17
  readonly minCoverageInPercents?: number;
16
18
  }