@angular/compiler-cli 12.1.1 → 12.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  3. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  4. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  7. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  8. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  9. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  11. package/ngcc/src/host/commonjs_host.js +1 -1
  12. package/ngcc/src/host/esm2015_host.js +1 -1
  13. package/ngcc/src/host/esm5_host.js +1 -1
  14. package/ngcc/src/host/umd_host.js +1 -1
  15. package/ngcc/src/packages/build_marker.d.ts +1 -1
  16. package/ngcc/src/packages/build_marker.js +1 -1
  17. package/ngcc/src/packages/entry_point_manifest.js +1 -1
  18. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  19. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  20. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  21. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  22. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  23. package/package.json +2 -2
  24. package/src/ngtsc/annotations/src/component.js +1 -1
  25. package/src/ngtsc/annotations/src/directive.js +1 -1
  26. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  27. package/src/ngtsc/annotations/src/pipe.js +1 -1
  28. package/src/ngtsc/core/src/compiler.js +1 -1
  29. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  30. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  31. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  32. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  33. package/src/ngtsc/incremental/src/incremental.js +30 -4
  34. package/src/ngtsc/indexer/src/template.js +1 -1
  35. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  36. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  37. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  38. package/src/ngtsc/program_driver/src/api.js +3 -2
  39. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  40. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  41. package/src/ngtsc/reflection/src/typescript.js +4 -1
  42. package/src/ngtsc/transform/src/transform.js +1 -1
  43. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  44. package/src/ngtsc/typecheck/src/context.js +11 -3
  45. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  46. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  47. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  48. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  49. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  50. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  51. package/src/ngtsc/util/src/visitor.js +1 -8
  52. package/src/version.js +1 -1
  53. package/compiler-cli.externs.js +0 -0
  54. package/index.mjs +0 -20
  55. package/linker/babel/babel.externs.js +0 -0
  56. package/linker/babel/index.mjs +0 -11
  57. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  58. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  59. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  60. package/linker/babel/src/babel_plugin.mjs +0 -23
  61. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  62. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  63. package/linker/index.mjs +0 -7
  64. package/linker/linker.externs.js +0 -0
  65. package/linker/src/ast/ast_host.mjs +0 -9
  66. package/linker/src/ast/ast_value.mjs +0 -256
  67. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  68. package/linker/src/ast/utils.mjs +0 -17
  69. package/linker/src/fatal_linker_error.mjs +0 -30
  70. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  71. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  72. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  73. package/linker/src/file_linker/file_linker.mjs +0 -70
  74. package/linker/src/file_linker/get_source_file.mjs +0 -28
  75. package/linker/src/file_linker/linker_environment.mjs +0 -23
  76. package/linker/src/file_linker/linker_options.mjs +0 -16
  77. package/linker/src/file_linker/needs_linking.mjs +0 -27
  78. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  79. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  80. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  81. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  82. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  83. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  84. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  85. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  86. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  87. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  88. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  89. package/linker/src/file_linker/translator.mjs +0 -23
  90. package/linker/src/linker_import_generator.mjs +0 -28
  91. package/ngcc/index.mjs +0 -16
  92. package/ngcc/main-ivy-ngcc.mjs +0 -12
  93. package/ngcc/main-ngcc.mjs +0 -32
  94. package/ngcc/ngcc.externs.js +0 -0
  95. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  96. package/ngcc/src/analysis/migration_host.mjs +0 -80
  97. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  98. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  99. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  100. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  101. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  102. package/ngcc/src/analysis/types.mjs +0 -2
  103. package/ngcc/src/analysis/util.mjs +0 -19
  104. package/ngcc/src/command_line_options.mjs +0 -142
  105. package/ngcc/src/constants.mjs +0 -10
  106. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  107. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  108. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  109. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  110. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  111. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  112. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  113. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  114. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  115. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  116. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  117. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  118. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  119. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  120. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  121. package/ngcc/src/execution/api.mjs +0 -2
  122. package/ngcc/src/execution/cluster/api.mjs +0 -9
  123. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  124. package/ngcc/src/execution/cluster/master.mjs +0 -261
  125. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  126. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  127. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  128. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  129. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  130. package/ngcc/src/execution/tasks/api.mjs +0 -22
  131. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  132. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  133. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  134. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  135. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  136. package/ngcc/src/host/commonjs_host.mjs +0 -220
  137. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  138. package/ngcc/src/host/delegating_host.mjs +0 -140
  139. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  140. package/ngcc/src/host/esm5_host.mjs +0 -721
  141. package/ngcc/src/host/ngcc_host.mjs +0 -15
  142. package/ngcc/src/host/umd_host.mjs +0 -486
  143. package/ngcc/src/host/utils.mjs +0 -12
  144. package/ngcc/src/locking/async_locker.mjs +0 -76
  145. package/ngcc/src/locking/lock_file.mjs +0 -4
  146. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  147. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  148. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  149. package/ngcc/src/locking/sync_locker.mjs +0 -52
  150. package/ngcc/src/main.mjs +0 -134
  151. package/ngcc/src/migrations/migration.mjs +0 -2
  152. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  153. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  154. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  155. package/ngcc/src/migrations/utils.mjs +0 -117
  156. package/ngcc/src/ngcc_options.mjs +0 -119
  157. package/ngcc/src/packages/build_marker.mjs +0 -84
  158. package/ngcc/src/packages/bundle_program.mjs +0 -52
  159. package/ngcc/src/packages/configuration.mjs +0 -255
  160. package/ngcc/src/packages/entry_point.mjs +0 -239
  161. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  162. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  163. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  164. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  165. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  166. package/ngcc/src/packages/transformer.mjs +0 -140
  167. package/ngcc/src/path_mappings.mjs +0 -13
  168. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  169. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  170. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  171. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  172. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  173. package/ngcc/src/rendering/renderer.mjs +0 -170
  174. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  175. package/ngcc/src/rendering/source_maps.mjs +0 -54
  176. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  177. package/ngcc/src/rendering/utils.mjs +0 -20
  178. package/ngcc/src/utils.mjs +0 -144
  179. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  180. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  181. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  182. package/ngcc/src/writing/file_writer.mjs +0 -2
  183. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  184. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  185. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  186. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  187. package/src/diagnostics/typescript_version.mjs +0 -79
  188. package/src/extract_i18n.mjs +0 -46
  189. package/src/language_services.mjs +0 -18
  190. package/src/main.mjs +0 -185
  191. package/src/metadata/bundle_index_host.mjs +0 -107
  192. package/src/metadata/bundler.mjs +0 -556
  193. package/src/metadata/collector.mjs +0 -701
  194. package/src/metadata/evaluator.mjs +0 -643
  195. package/src/metadata/index.mjs +0 -11
  196. package/src/metadata/index_writer.mjs +0 -44
  197. package/src/metadata/schema.mjs +0 -102
  198. package/src/metadata/symbols.mjs +0 -117
  199. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  200. package/src/ngtsc/annotations/index.mjs +0 -15
  201. package/src/ngtsc/annotations/src/api.mjs +0 -9
  202. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  203. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  204. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  205. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  206. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  207. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  208. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  209. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  210. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  211. package/src/ngtsc/annotations/src/util.mjs +0 -495
  212. package/src/ngtsc/core/api/index.mjs +0 -12
  213. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  214. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  215. package/src/ngtsc/core/api/src/options.mjs +0 -9
  216. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  217. package/src/ngtsc/core/api.externs.js +0 -0
  218. package/src/ngtsc/core/core.externs.js +0 -0
  219. package/src/ngtsc/core/index.mjs +0 -10
  220. package/src/ngtsc/core/src/compiler.mjs +0 -917
  221. package/src/ngtsc/core/src/config.mjs +0 -15
  222. package/src/ngtsc/core/src/host.mjs +0 -229
  223. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  224. package/src/ngtsc/cycles/index.mjs +0 -10
  225. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  226. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  227. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  228. package/src/ngtsc/diagnostics/index.mjs +0 -11
  229. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  230. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  231. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  232. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  233. package/src/ngtsc/entry_point/index.mjs +0 -12
  234. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  235. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  236. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  237. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  238. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  239. package/src/ngtsc/file_system/index.mjs +0 -13
  240. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  241. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  242. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  243. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  244. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  245. package/src/ngtsc/file_system/src/types.mjs +0 -9
  246. package/src/ngtsc/file_system/src/util.mjs +0 -22
  247. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  248. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  249. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  250. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  251. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  252. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  253. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  254. package/src/ngtsc/imports/imports.externs.js +0 -0
  255. package/src/ngtsc/imports/index.mjs +0 -14
  256. package/src/ngtsc/imports/src/alias.mjs +0 -137
  257. package/src/ngtsc/imports/src/core.mjs +0 -78
  258. package/src/ngtsc/imports/src/default.mjs +0 -135
  259. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  260. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  261. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  262. package/src/ngtsc/imports/src/references.mjs +0 -137
  263. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  264. package/src/ngtsc/incremental/api.externs.js +0 -0
  265. package/src/ngtsc/incremental/api.mjs +0 -9
  266. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  267. package/src/ngtsc/incremental/index.mjs +0 -12
  268. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  269. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  270. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  271. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  272. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  273. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  274. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  275. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  276. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  277. package/src/ngtsc/incremental/src/state.mjs +0 -17
  278. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  279. package/src/ngtsc/indexer/index.mjs +0 -11
  280. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  281. package/src/ngtsc/indexer/src/api.mjs +0 -30
  282. package/src/ngtsc/indexer/src/context.mjs +0 -25
  283. package/src/ngtsc/indexer/src/template.mjs +0 -303
  284. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  285. package/src/ngtsc/logging/index.mjs +0 -10
  286. package/src/ngtsc/logging/logging.externs.js +0 -0
  287. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  288. package/src/ngtsc/logging/src/logger.mjs +0 -15
  289. package/src/ngtsc/logging/testing/index.mjs +0 -9
  290. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  291. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  292. package/src/ngtsc/metadata/index.mjs +0 -15
  293. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  294. package/src/ngtsc/metadata/src/api.mjs +0 -13
  295. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  296. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  297. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  298. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  299. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  300. package/src/ngtsc/metadata/src/util.mjs +0 -200
  301. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  302. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  303. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  304. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -174
  305. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
  306. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  307. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
  308. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  309. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  310. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  311. package/src/ngtsc/perf/index.mjs +0 -11
  312. package/src/ngtsc/perf/perf.externs.js +0 -0
  313. package/src/ngtsc/perf/src/api.mjs +0 -278
  314. package/src/ngtsc/perf/src/clock.mjs +0 -15
  315. package/src/ngtsc/perf/src/noop.mjs +0 -21
  316. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  317. package/src/ngtsc/program.mjs +0 -271
  318. package/src/ngtsc/program_driver/index.mjs +0 -10
  319. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  320. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  321. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  322. package/src/ngtsc/reflection/index.mjs +0 -12
  323. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  324. package/src/ngtsc/reflection/src/host.mjs +0 -73
  325. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  326. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  327. package/src/ngtsc/reflection/src/util.mjs +0 -21
  328. package/src/ngtsc/resource/index.mjs +0 -9
  329. package/src/ngtsc/resource/resource.externs.js +0 -0
  330. package/src/ngtsc/resource/src/loader.mjs +0 -242
  331. package/src/ngtsc/routing/index.mjs +0 -11
  332. package/src/ngtsc/routing/routing.externs.js +0 -0
  333. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  334. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  335. package/src/ngtsc/routing/src/route.mjs +0 -51
  336. package/src/ngtsc/scope/index.mjs +0 -12
  337. package/src/ngtsc/scope/scope.externs.js +0 -0
  338. package/src/ngtsc/scope/src/api.mjs +0 -9
  339. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  340. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  341. package/src/ngtsc/scope/src/local.mjs +0 -531
  342. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  343. package/src/ngtsc/shims/api.externs.js +0 -0
  344. package/src/ngtsc/shims/api.mjs +0 -2
  345. package/src/ngtsc/shims/index.mjs +0 -14
  346. package/src/ngtsc/shims/shims.externs.js +0 -0
  347. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  348. package/src/ngtsc/shims/src/expando.mjs +0 -102
  349. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  350. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  351. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  352. package/src/ngtsc/shims/src/util.mjs +0 -26
  353. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  354. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  355. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  356. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  357. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  358. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  359. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  360. package/src/ngtsc/switch/index.mjs +0 -9
  361. package/src/ngtsc/switch/src/switch.mjs +0 -115
  362. package/src/ngtsc/switch/switch.externs.js +0 -0
  363. package/src/ngtsc/transform/index.mjs +0 -14
  364. package/src/ngtsc/transform/src/alias.mjs +0 -30
  365. package/src/ngtsc/transform/src/api.mjs +0 -63
  366. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  367. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  368. package/src/ngtsc/transform/src/trait.mjs +0 -95
  369. package/src/ngtsc/transform/src/transform.mjs +0 -298
  370. package/src/ngtsc/transform/src/utils.mjs +0 -57
  371. package/src/ngtsc/transform/transform.externs.js +0 -0
  372. package/src/ngtsc/translator/index.mjs +0 -14
  373. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  374. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  375. package/src/ngtsc/translator/src/context.mjs +0 -24
  376. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  377. package/src/ngtsc/translator/src/translator.mjs +0 -317
  378. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  379. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  380. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  381. package/src/ngtsc/translator/translator.externs.js +0 -0
  382. package/src/ngtsc/tsc_plugin.mjs +0 -98
  383. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  384. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  385. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  386. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  387. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  388. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  389. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  390. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  391. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  392. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  393. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  394. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  395. package/src/ngtsc/typecheck/index.mjs +0 -12
  396. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  397. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  398. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  399. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  400. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  401. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  402. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  403. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  404. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  405. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  406. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  407. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  408. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  409. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  410. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  411. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  412. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  413. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  414. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  415. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  416. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  417. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  418. package/src/ngtsc/util/src/path.mjs +0 -18
  419. package/src/ngtsc/util/src/typescript.mjs +0 -143
  420. package/src/ngtsc/util/src/visitor.mjs +0 -107
  421. package/src/ngtsc/util/util.externs.js +0 -0
  422. package/src/ngtsc/xi18n/index.mjs +0 -9
  423. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  424. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  425. package/src/perform_compile.mjs +0 -275
  426. package/src/perform_watch.mjs +0 -247
  427. package/src/tooling.mjs +0 -32
  428. package/src/transformers/api.mjs +0 -27
  429. package/src/transformers/compiler_host.mjs +0 -593
  430. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  431. package/src/transformers/entry_points.mjs +0 -10
  432. package/src/transformers/i18n.mjs +0 -59
  433. package/src/transformers/inline_resources.mjs +0 -269
  434. package/src/transformers/lower_expressions.mjs +0 -336
  435. package/src/transformers/metadata_cache.mjs +0 -53
  436. package/src/transformers/metadata_reader.mjs +0 -104
  437. package/src/transformers/node_emitter.mjs +0 -606
  438. package/src/transformers/node_emitter_transform.mjs +0 -78
  439. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  440. package/src/transformers/program.mjs +0 -887
  441. package/src/transformers/r3_metadata_transform.mjs +0 -46
  442. package/src/transformers/r3_transform.mjs +0 -29
  443. package/src/transformers/util.mjs +0 -89
  444. package/src/typescript_support.mjs +0 -57
  445. package/src/version.mjs +0 -15
@@ -299,4 +299,4 @@
299
299
  }
300
300
  }
301
301
  });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NlbWFudGljX2dyYXBoL3NyYy9ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQTJEO0lBRzNELDBGQUF3RDtJQW1CeEQ7Ozs7O09BS0c7SUFDSDtRQUEyQix3Q0FBYztRQUF6Qzs7UUFRQSxDQUFDO1FBUEMsMENBQW1CLEdBQW5CO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsNkNBQXNCLEdBQXRCO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0gsbUJBQUM7SUFBRCxDQUFDLEFBUkQsQ0FBMkIsb0JBQWMsR0FReEM7SUFFRDs7T0FFRztJQUNIO1FBQUE7WUFDVyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUM7WUFDL0QsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztRQW1FdEUsQ0FBQztRQWpFQzs7Ozs7V0FLRztRQUNILHlDQUFjLEdBQWQsVUFBZSxNQUFzQjtZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLDhGQUE4RjtnQkFDOUYsaURBQWlEO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUEwQixDQUFDLENBQUM7aUJBQ2hFO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUM7UUFFRDs7Ozs7O1dBTUc7UUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsTUFBc0I7WUFDeEMsNEZBQTRGO1lBQzVGLDRGQUE0RjtZQUM1Riw2RUFBNkU7WUFDN0UsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUN6RCxzRkFBc0Y7Z0JBQ3RGLDBGQUEwRjtnQkFDMUYsMkZBQTJGO2dCQUMzRixnREFBZ0Q7Z0JBQ2hELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUVEOztXQUVHO1FBQ0ssMENBQWUsR0FBdkIsVUFBd0IsSUFBb0IsRUFBRSxVQUFrQjtZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQ7O1dBRUc7UUFDSCwwQ0FBZSxHQUFmLFVBQWdCLElBQXNCO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNILHVCQUFDO0lBQUQsQ0FBQyxBQXJFRCxJQXFFQztJQXJFWSw0Q0FBZ0I7SUF1RTdCOzs7T0FHRztJQUNIO1FBU0U7UUFDSTs7O1dBR0c7UUFDSyxVQUFpQztZQUFqQyxlQUFVLEdBQVYsVUFBVSxDQUF1QjtZQWI1QixhQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBRW5EOzs7ZUFHRztZQUNjLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7UUFPM0IsQ0FBQztRQUVqRDs7V0FFRztRQUNILGdEQUFjLEdBQWQsVUFBZSxNQUFzQjtZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILDBDQUFRLEdBQVI7WUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUM1QiwyRkFBMkY7Z0JBQzNGLHFGQUFxRjtnQkFDckYscUJBQXFCO2dCQUNyQixPQUFPO29CQUNMLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBa0I7b0JBQ3BDLGtCQUFrQixFQUFFLElBQUksR0FBRyxFQUFrQjtvQkFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUN4QixDQUFDO2FBQ0g7WUFFRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xFLElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRixPQUFPO2dCQUNMLFNBQVMsV0FBQTtnQkFDVCxrQkFBa0Isb0JBQUE7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVPLDJEQUF5QixHQUFqQyxVQUFrQyxVQUE0Qjs7WUFDNUQsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQzs7Z0JBRXRELDhGQUE4RjtnQkFDOUYsd0ZBQXdGO2dCQUN4RixLQUFxQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJELElBQU0sTUFBTSxXQUFBO29CQUNmLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDekUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjs7Ozs7Ozs7O1lBRUQsZ0dBQWdHO1lBQ2hHLGdHQUFnRztZQUNoRyw2Q0FBNkM7WUFDN0MsSUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7O2dCQUM1QyxLQUFxQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJELElBQU0sTUFBTSxXQUFBO29CQUNmLElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7d0JBQ3ZDLFNBQVM7cUJBQ1Y7b0JBRUQsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsRUFBRTt3QkFDekYsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzVCO2lCQUNGOzs7Ozs7Ozs7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRU8sb0VBQWtDLEdBQTFDLFVBQTJDLFVBQTRCOztZQUNyRSxJQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDOztnQkFFekQsOEZBQThGO2dCQUM5Rix3RkFBd0Y7Z0JBQ3hGLEtBQXFCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBckQsSUFBTSxNQUFNLFdBQUE7b0JBQ2YsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUM1RSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3BDO2lCQUNGOzs7Ozs7Ozs7WUFFRCxnR0FBZ0c7WUFDaEcsZ0dBQWdHO1lBQ2hHLDZDQUE2QztZQUM3QyxJQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDOztnQkFDckQsS0FBcUIsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUFyRCxJQUFNLE1BQU0sV0FBQTtvQkFDZixJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUU7d0JBQ2pELFNBQVM7cUJBQ1Y7b0JBRUQsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJO3dCQUN2QixNQUFNLENBQUMsd0JBQXdCLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLEVBQUU7d0JBQzNFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGOzs7Ozs7Ozs7WUFFRCxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUM7UUFFRDs7O1dBR0c7UUFDSCxzREFBb0IsR0FBcEIsVUFBcUIsSUFBc0IsRUFBRSxJQUFnQjtZQUMzRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDaEMsQ0FBQztRQUNKLENBQUM7UUFFRDs7O1dBR0c7UUFDSCwyQ0FBUyxHQUFULFVBQVUsSUFBc0I7WUFDOUIsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQiwyRkFBMkY7Z0JBQzNGLHVGQUF1RjtnQkFDdkYscURBQXFEO2dCQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQ7O1dBRUc7UUFDSyxpREFBZSxHQUF2QixVQUF3QixJQUFzQjtZQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2FBQ3RDO1lBRUQsSUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDSCw4QkFBQztJQUFELENBQUMsQUFwSkQsSUFvSkM7SUFwSlksMERBQXVCO0lBc0pwQyxTQUFTLGFBQWEsQ0FBQyxJQUFnQjtRQUNyQyxJQUFJLElBQUksWUFBWSx1QkFBWSxFQUFFO1lBQ2hDLE9BQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLFNBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFNLENBQUM7U0FDdkQ7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXhwcmVzc2lvbiwgRXh0ZXJuYWxFeHByfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtTZW1hbnRpY1JlZmVyZW5jZSwgU2VtYW50aWNTeW1ib2x9IGZyb20gJy4vYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0RlcGVuZGVuY3lSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSByZS1lbWl0dGVkLlxuICAgKi9cbiAgbmVlZHNFbWl0OiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgZm9yIHdoaWNoIHRoZSB0eXBlLWNoZWNrIGJsb2NrIHNob3VsZCBiZSByZWdlbmVyYXRlZC5cbiAgICovXG4gIG5lZWRzVHlwZUNoZWNrRW1pdDogU2V0PEFic29sdXRlRnNQYXRoPjtcblxuICAvKipcbiAgICogVGhlIG5ld2x5IGJ1aWx0IGdyYXBoIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgICovXG4gIG5ld0dyYXBoOiBTZW1hbnRpY0RlcEdyYXBoO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkZWNsYXJhdGlvbiBmb3Igd2hpY2ggbm8gc2VtYW50aWMgc3ltYm9sIGhhcyBiZWVuIHJlZ2lzdGVyZWQuIEZvciBleGFtcGxlLFxuICogZGVjbGFyYXRpb25zIGZyb20gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSByZWdpc3RlcmVkIGFuZCBhcmUgcmVwcmVzZW50ZWRcbiAqIGJ5IHRoaXMgc3ltYm9sLiBUaGlzIGFsbG93cyB0aGUgdW5yZXNvbHZlZCBzeW1ib2wgdG8gc3RpbGwgYmUgY29tcGFyZWQgdG8gYSBzeW1ib2wgZnJvbSBhIHByaW9yXG4gKiBjb21waWxhdGlvbi5cbiAqL1xuY2xhc3MgT3BhcXVlU3ltYm9sIGV4dGVuZHMgU2VtYW50aWNTeW1ib2wge1xuICBpc1B1YmxpY0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2VtYW50aWMgZGVwZW5kZW5jeSBncmFwaCBvZiBhIHNpbmdsZSBjb21waWxhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbWFudGljRGVwR3JhcGgge1xuICByZWFkb25seSBmaWxlcyA9IG5ldyBNYXA8QWJzb2x1dGVGc1BhdGgsIE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPj4oKTtcbiAgcmVhZG9ubHkgc3ltYm9sQnlEZWNsID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc3ltYm9sIGluIHRoZSBncmFwaC4gVGhlIHN5bWJvbCBpcyBnaXZlbiBhIHVuaXF1ZSBpZGVudGlmaWVyIGlmIHBvc3NpYmxlLCBzdWNoIHRoYXRcbiAgICogaXRzIGVxdWl2YWxlbnQgc3ltYm9sIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgcHJpb3IgZ3JhcGggZXZlbiBpZiBpdHMgZGVjbGFyYXRpb24gbm9kZSBoYXNcbiAgICogY2hhbmdlZCBhY3Jvc3MgcmVidWlsZHMuIFN5bWJvbHMgd2l0aG91dCBhbiBpZGVudGlmaWVyIGFyZSBvbmx5IGFibGUgdG8gZmluZCB0aGVtc2VsdmVzIGluIGFcbiAgICogcHJpb3IgZ3JhcGggaWYgdGhlaXIgZGVjbGFyYXRpb24gbm9kZSBpcyBpZGVudGljYWwuXG4gICAqL1xuICByZWdpc3RlclN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogdm9pZCB7XG4gICAgdGhpcy5zeW1ib2xCeURlY2wuc2V0KHN5bWJvbC5kZWNsLCBzeW1ib2wpO1xuXG4gICAgaWYgKHN5bWJvbC5pZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGUgc3ltYm9sIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyLCByZWNvcmQgaXQgaW4gdGhlIGZpbGUgdGhhdCBkZWNsYXJlcyBpdC4gVGhpcyBlbmFibGVzXG4gICAgICAvLyB0aGUgc3ltYm9sIHRvIGJlIHJlcXVlc3RlZCBieSBpdHMgdW5pcXVlIG5hbWUuXG4gICAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHN5bWJvbC5wYXRoKSkge1xuICAgICAgICB0aGlzLmZpbGVzLnNldChzeW1ib2wucGF0aCwgbmV3IE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPigpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZXMuZ2V0KHN5bWJvbC5wYXRoKSEuc2V0KHN5bWJvbC5pZGVudGlmaWVyLCBzeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIGEgc3ltYm9sIGluIHRoaXMgZ3JhcGggdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBzeW1ib2wgZnJvbSBhbm90aGVyIGdyYXBoLlxuICAgKiBJZiBubyBtYXRjaGluZyBzeW1ib2wgY291bGQgYmUgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzeW1ib2wgVGhlIHN5bWJvbCBmcm9tIGFub3RoZXIgZ3JhcGggZm9yIHdoaWNoIGl0cyBlcXVpdmFsZW50IGluIHRoaXMgZ3JhcGggc2hvdWxkIGJlXG4gICAqIGZvdW5kLlxuICAgKi9cbiAgZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogU2VtYW50aWNTeW1ib2x8bnVsbCB7XG4gICAgLy8gRmlyc3QgbG9va3VwIHRoZSBzeW1ib2wgYnkgaXRzIGRlY2xhcmF0aW9uLiBJdCBpcyB0eXBpY2FsIGZvciB0aGUgZGVjbGFyYXRpb24gdG8gbm90IGhhdmVcbiAgICAvLyBjaGFuZ2VkIGFjcm9zcyByZWJ1aWxkcywgc28gdGhpcyBpcyBsaWtlbHkgdG8gZmluZCB0aGUgc3ltYm9sLiBVc2luZyB0aGUgZGVjbGFyYXRpb24gYWxzb1xuICAgIC8vIGFsbG93cyB0byBkaWZmIHN5bWJvbHMgZm9yIHdoaWNoIG5vIHVuaXF1ZSBpZGVudGlmaWVyIGNvdWxkIGJlIGRldGVybWluZWQuXG4gICAgbGV0IHByZXZpb3VzU3ltYm9sID0gdGhpcy5nZXRTeW1ib2xCeURlY2woc3ltYm9sLmRlY2wpO1xuICAgIGlmIChwcmV2aW91c1N5bWJvbCA9PT0gbnVsbCAmJiBzeW1ib2wuaWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIHN5bWJvbCBpbiBhIHByaW9yIGNvbXBpbGF0aW9uLCB3aGljaCBtYXlcbiAgICAgIC8vIGhhcHBlbiBiZWNhdXNlIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlY2xhcmF0aW9uIGhhcyBjaGFuZ2VkLiBJbiB0aGF0IGNhc2Ugd2Ugd2FudCB0b1xuICAgICAgLy8gbG9va3VwIHRoZSBzeW1ib2wgYmFzZWQgb24gaXRzIHVuaXF1ZSBpZGVudGlmaWVyLCBhcyB0aGF0IGFsbG93cyB1cyB0byBzdGlsbCBjb21wYXJlIHRoZVxuICAgICAgLy8gY2hhbmdlZCBkZWNsYXJhdGlvbiB0byB0aGUgcHJpb3IgY29tcGlsYXRpb24uXG4gICAgICBwcmV2aW91c1N5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sQnlOYW1lKHN5bWJvbC5wYXRoLCBzeW1ib2wuaWRlbnRpZmllcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZpb3VzU3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGZpbmQgdGhlIHN5bWJvbCBieSBpdHMgaWRlbnRpZmllci5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3ltYm9sQnlOYW1lKHBhdGg6IEFic29sdXRlRnNQYXRoLCBpZGVudGlmaWVyOiBzdHJpbmcpOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXMuZ2V0KHBhdGgpITtcbiAgICBpZiAoIWZpbGUuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGUuZ2V0KGlkZW50aWZpZXIpITtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiB0byBpdHMgc2VtYW50aWMgc3ltYm9sLlxuICAgKi9cbiAgZ2V0U3ltYm9sQnlEZWNsKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuc3ltYm9sQnlEZWNsLmhhcyhkZWNsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bWJvbEJ5RGVjbC5nZXQoZGVjbCkhO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyB0aGUgbG9naWMgdG8gZ28gZnJvbSBhIHByZXZpb3VzIGRlcGVuZGVuY3kgZ3JhcGggdG8gYSBuZXcgb25lLCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uXG4gKiBvbiB3aGljaCBmaWxlcyBoYXZlIGJlZW4gYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3R3JhcGggPSBuZXcgU2VtYW50aWNEZXBHcmFwaCgpO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBvcGFxdWUgc3ltYm9scyB0aGF0IHdlcmUgY3JlYXRlZCBmb3IgZGVjbGFyYXRpb25zIGZvciB3aGljaCB0aGVyZSB3YXMgbm8gc3ltYm9sXG4gICAqIHJlZ2lzdGVyZWQsIHdoaWNoIGhhcHBlbnMgZm9yIGUuZy4gZXh0ZXJuYWwgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcGFxdWVTeW1ib2xzID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBPcGFxdWVTeW1ib2w+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBzZW1hbnRpYyBkZXBlbmRlbmN5IGdyYXBoIG9mIHRoZSBtb3N0IHJlY2VudGx5IHN1Y2NlZWRlZCBjb21waWxhdGlvbiwgb3IgbnVsbCBpZiB0aGlzXG4gICAgICAgKiBpcyB0aGUgaW5pdGlhbCBidWlsZC5cbiAgICAgICAqL1xuICAgICAgcHJpdmF0ZSBwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBofG51bGwpIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3ltYm9sIGluIHRoZSBuZXcgZ3JhcGggdGhhdCBpcyBiZWluZyBjcmVhdGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJTeW1ib2woc3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IHZvaWQge1xuICAgIHRoaXMubmV3R3JhcGgucmVnaXN0ZXJTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbGwgZmFjdHMgdGhhdCBoYXZlIGJlZW4gZ2F0aGVyZWQgdG8gY3JlYXRlIGEgbmV3IHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGguIEluIHRoaXNcbiAgICogcHJvY2VzcywgdGhlIHNlbWFudGljIGltcGFjdCBvZiB0aGUgY2hhbmdlcyBpcyBkZXRlcm1pbmVkIHdoaWNoIHJlc3VsdHMgaW4gYSBzZXQgb2YgZmlsZXMgdGhhdFxuICAgKiBuZWVkIHRvIGJlIGVtaXR0ZWQgYW5kL29yIHR5cGUtY2hlY2tlZC5cbiAgICovXG4gIGZpbmFsaXplKCk6IFNlbWFudGljRGVwZW5kZW5jeVJlc3VsdCB7XG4gICAgaWYgKHRoaXMucHJpb3JHcmFwaCA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgbm8gcHJpb3IgZGVwZW5kZW5jeSBncmFwaCBpcyBhdmFpbGFibGUgdGhlbiB0aGlzIHdhcyB0aGUgaW5pdGlhbCBidWlsZCwgaW4gd2hpY2ggY2FzZVxuICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNlbWFudGljIGltcGFjdCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkgY29uc2lkZXJlZFxuICAgICAgLy8gbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZWVkc0VtaXQ6IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCksXG4gICAgICAgIG5lZWRzVHlwZUNoZWNrRW1pdDogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgICAgbmV3R3JhcGg6IHRoaXMubmV3R3JhcGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRzRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIHJldHVybiB7XG4gICAgICBuZWVkc0VtaXQsXG4gICAgICBuZWVkc1R5cGVDaGVja0VtaXQsXG4gICAgICBuZXdHcmFwaDogdGhpcy5uZXdHcmFwaCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVJbnZhbGlkYXRlZEZpbGVzKHByaW9yR3JhcGg6IFNlbWFudGljRGVwR3JhcGgpOiBTZXQ8QWJzb2x1dGVGc1BhdGg+IHtcbiAgICBjb25zdCBpc1B1YmxpY0FwaUFmZmVjdGVkID0gbmV3IFNldDxTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBpcyB0byBjb2xsZWN0IGFsbCBzeW1ib2xzIHdoaWNoIGhhdmUgdGhlaXIgcHVibGljIEFQSSBhZmZlY3RlZC4gQW55IHN5bWJvbHNcbiAgICAvLyB0aGF0IGNhbm5vdCBiZSBtYXRjaGVkIHVwIHdpdGggYSBzeW1ib2wgZnJvbSB0aGUgcHJpb3IgZ3JhcGggYXJlIGNvbnNpZGVyZWQgYWZmZWN0ZWQuXG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHwgc3ltYm9sLmlzUHVibGljQXBpQWZmZWN0ZWQocHJldmlvdXNTeW1ib2wpKSB7XG4gICAgICAgIGlzUHVibGljQXBpQWZmZWN0ZWQuYWRkKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIHNlY29uZCBwaGFzZSBpcyB0byBmaW5kIGFsbCBzeW1ib2xzIGZvciB3aGljaCB0aGUgZW1pdCByZXN1bHQgaXMgYWZmZWN0ZWQsIGVpdGhlciBiZWNhdXNlXG4gICAgLy8gdGhlaXIgdXNlZCBkZWNsYXJhdGlvbnMgaGF2ZSBjaGFuZ2VkIG9yIGFueSBvZiB0aG9zZSB1c2VkIGRlY2xhcmF0aW9ucyBoYXMgaGFkIGl0cyBwdWJsaWMgQVBJXG4gICAgLy8gYWZmZWN0ZWQgYXMgZGV0ZXJtaW5lZCBpbiB0aGUgZmlyc3QgcGhhc2UuXG4gICAgY29uc3QgbmVlZHNFbWl0ID0gbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKTtcbiAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiB0aGlzLm5ld0dyYXBoLnN5bWJvbEJ5RGVjbC52YWx1ZXMoKSkge1xuICAgICAgaWYgKHN5bWJvbC5pc0VtaXRBZmZlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc0VtaXRBZmZlY3RlZChwcmV2aW91c1N5bWJvbCwgaXNQdWJsaWNBcGlBZmZlY3RlZCkpIHtcbiAgICAgICAgbmVlZHNFbWl0LmFkZChzeW1ib2wucGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lZWRzRW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyhwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBoKTogU2V0PEFic29sdXRlRnNQYXRoPiB7XG4gICAgY29uc3QgaXNUeXBlQ2hlY2tBcGlBZmZlY3RlZCA9IG5ldyBTZXQ8U2VtYW50aWNTeW1ib2w+KCk7XG5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgaXMgdG8gY29sbGVjdCBhbGwgc3ltYm9scyB3aGljaCBoYXZlIHRoZWlyIHB1YmxpYyBBUEkgYWZmZWN0ZWQuIEFueSBzeW1ib2xzXG4gICAgLy8gdGhhdCBjYW5ub3QgYmUgbWF0Y2hlZCB1cCB3aXRoIGEgc3ltYm9sIGZyb20gdGhlIHByaW9yIGdyYXBoIGFyZSBjb25zaWRlcmVkIGFmZmVjdGVkLlxuICAgIGZvciAoY29uc3Qgc3ltYm9sIG9mIHRoaXMubmV3R3JhcGguc3ltYm9sQnlEZWNsLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc1R5cGVDaGVja0FwaUFmZmVjdGVkKHByZXZpb3VzU3ltYm9sKSkge1xuICAgICAgICBpc1R5cGVDaGVja0FwaUFmZmVjdGVkLmFkZChzeW1ib2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBzZWNvbmQgcGhhc2UgaXMgdG8gZmluZCBhbGwgc3ltYm9scyBmb3Igd2hpY2ggdGhlIGVtaXQgcmVzdWx0IGlzIGFmZmVjdGVkLCBlaXRoZXIgYmVjYXVzZVxuICAgIC8vIHRoZWlyIHVzZWQgZGVjbGFyYXRpb25zIGhhdmUgY2hhbmdlZCBvciBhbnkgb2YgdGhvc2UgdXNlZCBkZWNsYXJhdGlvbnMgaGFzIGhhZCBpdHMgcHVibGljIEFQSVxuICAgIC8vIGFmZmVjdGVkIGFzIGRldGVybWluZWQgaW4gdGhlIGZpcnN0IHBoYXNlLlxuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCk7XG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGlmIChzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHxcbiAgICAgICAgICBzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkKHByZXZpb3VzU3ltYm9sLCBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKSkge1xuICAgICAgICBuZWVkc1R5cGVDaGVja0VtaXQuYWRkKHN5bWJvbC5wYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVlZHNUeXBlQ2hlY2tFbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciB0aGUgcmVmZXJlbmNlIHRvIGBkZWNsYCB1c2luZyB0aGUgZXhwcmVzc2lvbiBgZXhwcmAuIFNlZVxuICAgKiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgZ2V0U2VtYW50aWNSZWZlcmVuY2UoZGVjbDogQ2xhc3NEZWNsYXJhdGlvbiwgZXhwcjogRXhwcmVzc2lvbik6IFNlbWFudGljUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sOiB0aGlzLmdldFN5bWJvbChkZWNsKSxcbiAgICAgIGltcG9ydFBhdGg6IGdldEltcG9ydFBhdGgoZXhwciksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBgU2VtYW50aWNTeW1ib2xgIHRoYXQgd2FzIHJlZ2lzdGVyZWQgZm9yIGBkZWNsYCBkdXJpbmcgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24sIG9yXG4gICAqIHJldHVybnMgYW4gb3BhcXVlIHN5bWJvbCB0aGF0IHJlcHJlc2VudHMgYGRlY2xgLlxuICAgKi9cbiAgZ2V0U3ltYm9sKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbCB7XG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy5uZXdHcmFwaC5nZXRTeW1ib2xCeURlY2woZGVjbCk7XG4gICAgaWYgKHN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgLy8gTm8gc3ltYm9sIGhhcyBiZWVuIHJlY29yZGVkIGZvciB0aGUgcHJvdmlkZWQgZGVjbGFyYXRpb24sIHdoaWNoIHdvdWxkIGJlIHRoZSBjYXNlIGlmIHRoZVxuICAgICAgLy8gZGVjbGFyYXRpb24gaXMgZXh0ZXJuYWwuIFJldHVybiBhbiBvcGFxdWUgc3ltYm9sIGluIHRoYXQgY2FzZSwgdG8gYWxsb3cgdGhlIGV4dGVybmFsXG4gICAgICAvLyBkZWNsYXJhdGlvbiB0byBiZSBjb21wYXJlZCB0byBhIHByaW9yIGNvbXBpbGF0aW9uLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIH1cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3IgY3JlYXRlcyBhbiBgT3BhcXVlU3ltYm9sYCBmb3IgdGhlIHByb3ZpZGVkIGNsYXNzIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPcGFxdWVTeW1ib2woZGVjbDogQ2xhc3NEZWNsYXJhdGlvbik6IE9wYXF1ZVN5bWJvbCB7XG4gICAgaWYgKHRoaXMub3BhcXVlU3ltYm9scy5oYXMoZGVjbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wYXF1ZVN5bWJvbHMuZ2V0KGRlY2wpITtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2wgPSBuZXcgT3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIHRoaXMub3BhcXVlU3ltYm9scy5zZXQoZGVjbCwgc3ltYm9sKTtcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFBhdGgoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZ3xudWxsIHtcbiAgaWYgKGV4cHIgaW5zdGFuY2VvZiBFeHRlcm5hbEV4cHIpIHtcbiAgICByZXR1cm4gYCR7ZXhwci52YWx1ZS5tb2R1bGVOYW1lfVxcJCR7ZXhwci52YWx1ZS5uYW1lfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NlbWFudGljX2dyYXBoL3NyYy9ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQTJEO0lBRzNELDBGQUF3RDtJQW1CeEQ7Ozs7O09BS0c7SUFDSDtRQUEyQix3Q0FBYztRQUF6Qzs7UUFRQSxDQUFDO1FBUFUsMENBQW1CLEdBQTVCO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRVEsNkNBQXNCLEdBQS9CO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0gsbUJBQUM7SUFBRCxDQUFDLEFBUkQsQ0FBMkIsb0JBQWMsR0FReEM7SUFFRDs7T0FFRztJQUNIO1FBQUE7WUFDVyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUM7WUFDL0QsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztRQW1FdEUsQ0FBQztRQWpFQzs7Ozs7V0FLRztRQUNILHlDQUFjLEdBQWQsVUFBZSxNQUFzQjtZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLDhGQUE4RjtnQkFDOUYsaURBQWlEO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUEwQixDQUFDLENBQUM7aUJBQ2hFO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUM7UUFFRDs7Ozs7O1dBTUc7UUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsTUFBc0I7WUFDeEMsNEZBQTRGO1lBQzVGLDRGQUE0RjtZQUM1Riw2RUFBNkU7WUFDN0UsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUN6RCxzRkFBc0Y7Z0JBQ3RGLDBGQUEwRjtnQkFDMUYsMkZBQTJGO2dCQUMzRixnREFBZ0Q7Z0JBQ2hELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUVEOztXQUVHO1FBQ0ssMENBQWUsR0FBdkIsVUFBd0IsSUFBb0IsRUFBRSxVQUFrQjtZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQ7O1dBRUc7UUFDSCwwQ0FBZSxHQUFmLFVBQWdCLElBQXNCO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNILHVCQUFDO0lBQUQsQ0FBQyxBQXJFRCxJQXFFQztJQXJFWSw0Q0FBZ0I7SUF1RTdCOzs7T0FHRztJQUNIO1FBU0U7UUFDSTs7O1dBR0c7UUFDSyxVQUFpQztZQUFqQyxlQUFVLEdBQVYsVUFBVSxDQUF1QjtZQWI1QixhQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBRW5EOzs7ZUFHRztZQUNjLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7UUFPM0IsQ0FBQztRQUVqRDs7V0FFRztRQUNILGdEQUFjLEdBQWQsVUFBZSxNQUFzQjtZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILDBDQUFRLEdBQVI7WUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUM1QiwyRkFBMkY7Z0JBQzNGLHFGQUFxRjtnQkFDckYscUJBQXFCO2dCQUNyQixPQUFPO29CQUNMLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBa0I7b0JBQ3BDLGtCQUFrQixFQUFFLElBQUksR0FBRyxFQUFrQjtvQkFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUN4QixDQUFDO2FBQ0g7WUFFRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xFLElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRixPQUFPO2dCQUNMLFNBQVMsV0FBQTtnQkFDVCxrQkFBa0Isb0JBQUE7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVPLDJEQUF5QixHQUFqQyxVQUFrQyxVQUE0Qjs7WUFDNUQsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQzs7Z0JBRXRELDhGQUE4RjtnQkFDOUYsd0ZBQXdGO2dCQUN4RixLQUFxQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJELElBQU0sTUFBTSxXQUFBO29CQUNmLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDekUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjs7Ozs7Ozs7O1lBRUQsZ0dBQWdHO1lBQ2hHLGdHQUFnRztZQUNoRyw2Q0FBNkM7WUFDN0MsSUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7O2dCQUM1QyxLQUFxQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJELElBQU0sTUFBTSxXQUFBO29CQUNmLElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7d0JBQ3ZDLFNBQVM7cUJBQ1Y7b0JBRUQsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsRUFBRTt3QkFDekYsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzVCO2lCQUNGOzs7Ozs7Ozs7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRU8sb0VBQWtDLEdBQTFDLFVBQTJDLFVBQTRCOztZQUNyRSxJQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDOztnQkFFekQsOEZBQThGO2dCQUM5Rix3RkFBd0Y7Z0JBQ3hGLEtBQXFCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBckQsSUFBTSxNQUFNLFdBQUE7b0JBQ2YsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUM1RSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3BDO2lCQUNGOzs7Ozs7Ozs7WUFFRCxnR0FBZ0c7WUFDaEcsZ0dBQWdHO1lBQ2hHLDZDQUE2QztZQUM3QyxJQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDOztnQkFDckQsS0FBcUIsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUFyRCxJQUFNLE1BQU0sV0FBQTtvQkFDZixJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUU7d0JBQ2pELFNBQVM7cUJBQ1Y7b0JBRUQsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLGNBQWMsS0FBSyxJQUFJO3dCQUN2QixNQUFNLENBQUMsd0JBQXdCLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLEVBQUU7d0JBQzNFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGOzs7Ozs7Ozs7WUFFRCxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUM7UUFFRDs7O1dBR0c7UUFDSCxzREFBb0IsR0FBcEIsVUFBcUIsSUFBc0IsRUFBRSxJQUFnQjtZQUMzRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDaEMsQ0FBQztRQUNKLENBQUM7UUFFRDs7O1dBR0c7UUFDSCwyQ0FBUyxHQUFULFVBQVUsSUFBc0I7WUFDOUIsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQiwyRkFBMkY7Z0JBQzNGLHVGQUF1RjtnQkFDdkYscURBQXFEO2dCQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQ7O1dBRUc7UUFDSyxpREFBZSxHQUF2QixVQUF3QixJQUFzQjtZQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2FBQ3RDO1lBRUQsSUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDSCw4QkFBQztJQUFELENBQUMsQUFwSkQsSUFvSkM7SUFwSlksMERBQXVCO0lBc0pwQyxTQUFTLGFBQWEsQ0FBQyxJQUFnQjtRQUNyQyxJQUFJLElBQUksWUFBWSx1QkFBWSxFQUFFO1lBQ2hDLE9BQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLFNBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFNLENBQUM7U0FDdkQ7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXhwcmVzc2lvbiwgRXh0ZXJuYWxFeHByfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtTZW1hbnRpY1JlZmVyZW5jZSwgU2VtYW50aWNTeW1ib2x9IGZyb20gJy4vYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0RlcGVuZGVuY3lSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSByZS1lbWl0dGVkLlxuICAgKi9cbiAgbmVlZHNFbWl0OiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgZm9yIHdoaWNoIHRoZSB0eXBlLWNoZWNrIGJsb2NrIHNob3VsZCBiZSByZWdlbmVyYXRlZC5cbiAgICovXG4gIG5lZWRzVHlwZUNoZWNrRW1pdDogU2V0PEFic29sdXRlRnNQYXRoPjtcblxuICAvKipcbiAgICogVGhlIG5ld2x5IGJ1aWx0IGdyYXBoIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgICovXG4gIG5ld0dyYXBoOiBTZW1hbnRpY0RlcEdyYXBoO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkZWNsYXJhdGlvbiBmb3Igd2hpY2ggbm8gc2VtYW50aWMgc3ltYm9sIGhhcyBiZWVuIHJlZ2lzdGVyZWQuIEZvciBleGFtcGxlLFxuICogZGVjbGFyYXRpb25zIGZyb20gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSByZWdpc3RlcmVkIGFuZCBhcmUgcmVwcmVzZW50ZWRcbiAqIGJ5IHRoaXMgc3ltYm9sLiBUaGlzIGFsbG93cyB0aGUgdW5yZXNvbHZlZCBzeW1ib2wgdG8gc3RpbGwgYmUgY29tcGFyZWQgdG8gYSBzeW1ib2wgZnJvbSBhIHByaW9yXG4gKiBjb21waWxhdGlvbi5cbiAqL1xuY2xhc3MgT3BhcXVlU3ltYm9sIGV4dGVuZHMgU2VtYW50aWNTeW1ib2wge1xuICBvdmVycmlkZSBpc1B1YmxpY0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvdmVycmlkZSBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2VtYW50aWMgZGVwZW5kZW5jeSBncmFwaCBvZiBhIHNpbmdsZSBjb21waWxhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbWFudGljRGVwR3JhcGgge1xuICByZWFkb25seSBmaWxlcyA9IG5ldyBNYXA8QWJzb2x1dGVGc1BhdGgsIE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPj4oKTtcbiAgcmVhZG9ubHkgc3ltYm9sQnlEZWNsID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc3ltYm9sIGluIHRoZSBncmFwaC4gVGhlIHN5bWJvbCBpcyBnaXZlbiBhIHVuaXF1ZSBpZGVudGlmaWVyIGlmIHBvc3NpYmxlLCBzdWNoIHRoYXRcbiAgICogaXRzIGVxdWl2YWxlbnQgc3ltYm9sIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgcHJpb3IgZ3JhcGggZXZlbiBpZiBpdHMgZGVjbGFyYXRpb24gbm9kZSBoYXNcbiAgICogY2hhbmdlZCBhY3Jvc3MgcmVidWlsZHMuIFN5bWJvbHMgd2l0aG91dCBhbiBpZGVudGlmaWVyIGFyZSBvbmx5IGFibGUgdG8gZmluZCB0aGVtc2VsdmVzIGluIGFcbiAgICogcHJpb3IgZ3JhcGggaWYgdGhlaXIgZGVjbGFyYXRpb24gbm9kZSBpcyBpZGVudGljYWwuXG4gICAqL1xuICByZWdpc3RlclN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogdm9pZCB7XG4gICAgdGhpcy5zeW1ib2xCeURlY2wuc2V0KHN5bWJvbC5kZWNsLCBzeW1ib2wpO1xuXG4gICAgaWYgKHN5bWJvbC5pZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGUgc3ltYm9sIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyLCByZWNvcmQgaXQgaW4gdGhlIGZpbGUgdGhhdCBkZWNsYXJlcyBpdC4gVGhpcyBlbmFibGVzXG4gICAgICAvLyB0aGUgc3ltYm9sIHRvIGJlIHJlcXVlc3RlZCBieSBpdHMgdW5pcXVlIG5hbWUuXG4gICAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHN5bWJvbC5wYXRoKSkge1xuICAgICAgICB0aGlzLmZpbGVzLnNldChzeW1ib2wucGF0aCwgbmV3IE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPigpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZXMuZ2V0KHN5bWJvbC5wYXRoKSEuc2V0KHN5bWJvbC5pZGVudGlmaWVyLCBzeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIGEgc3ltYm9sIGluIHRoaXMgZ3JhcGggdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBzeW1ib2wgZnJvbSBhbm90aGVyIGdyYXBoLlxuICAgKiBJZiBubyBtYXRjaGluZyBzeW1ib2wgY291bGQgYmUgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzeW1ib2wgVGhlIHN5bWJvbCBmcm9tIGFub3RoZXIgZ3JhcGggZm9yIHdoaWNoIGl0cyBlcXVpdmFsZW50IGluIHRoaXMgZ3JhcGggc2hvdWxkIGJlXG4gICAqIGZvdW5kLlxuICAgKi9cbiAgZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogU2VtYW50aWNTeW1ib2x8bnVsbCB7XG4gICAgLy8gRmlyc3QgbG9va3VwIHRoZSBzeW1ib2wgYnkgaXRzIGRlY2xhcmF0aW9uLiBJdCBpcyB0eXBpY2FsIGZvciB0aGUgZGVjbGFyYXRpb24gdG8gbm90IGhhdmVcbiAgICAvLyBjaGFuZ2VkIGFjcm9zcyByZWJ1aWxkcywgc28gdGhpcyBpcyBsaWtlbHkgdG8gZmluZCB0aGUgc3ltYm9sLiBVc2luZyB0aGUgZGVjbGFyYXRpb24gYWxzb1xuICAgIC8vIGFsbG93cyB0byBkaWZmIHN5bWJvbHMgZm9yIHdoaWNoIG5vIHVuaXF1ZSBpZGVudGlmaWVyIGNvdWxkIGJlIGRldGVybWluZWQuXG4gICAgbGV0IHByZXZpb3VzU3ltYm9sID0gdGhpcy5nZXRTeW1ib2xCeURlY2woc3ltYm9sLmRlY2wpO1xuICAgIGlmIChwcmV2aW91c1N5bWJvbCA9PT0gbnVsbCAmJiBzeW1ib2wuaWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIHN5bWJvbCBpbiBhIHByaW9yIGNvbXBpbGF0aW9uLCB3aGljaCBtYXlcbiAgICAgIC8vIGhhcHBlbiBiZWNhdXNlIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlY2xhcmF0aW9uIGhhcyBjaGFuZ2VkLiBJbiB0aGF0IGNhc2Ugd2Ugd2FudCB0b1xuICAgICAgLy8gbG9va3VwIHRoZSBzeW1ib2wgYmFzZWQgb24gaXRzIHVuaXF1ZSBpZGVudGlmaWVyLCBhcyB0aGF0IGFsbG93cyB1cyB0byBzdGlsbCBjb21wYXJlIHRoZVxuICAgICAgLy8gY2hhbmdlZCBkZWNsYXJhdGlvbiB0byB0aGUgcHJpb3IgY29tcGlsYXRpb24uXG4gICAgICBwcmV2aW91c1N5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sQnlOYW1lKHN5bWJvbC5wYXRoLCBzeW1ib2wuaWRlbnRpZmllcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZpb3VzU3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGZpbmQgdGhlIHN5bWJvbCBieSBpdHMgaWRlbnRpZmllci5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3ltYm9sQnlOYW1lKHBhdGg6IEFic29sdXRlRnNQYXRoLCBpZGVudGlmaWVyOiBzdHJpbmcpOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXMuZ2V0KHBhdGgpITtcbiAgICBpZiAoIWZpbGUuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGUuZ2V0KGlkZW50aWZpZXIpITtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiB0byBpdHMgc2VtYW50aWMgc3ltYm9sLlxuICAgKi9cbiAgZ2V0U3ltYm9sQnlEZWNsKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuc3ltYm9sQnlEZWNsLmhhcyhkZWNsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bWJvbEJ5RGVjbC5nZXQoZGVjbCkhO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyB0aGUgbG9naWMgdG8gZ28gZnJvbSBhIHByZXZpb3VzIGRlcGVuZGVuY3kgZ3JhcGggdG8gYSBuZXcgb25lLCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uXG4gKiBvbiB3aGljaCBmaWxlcyBoYXZlIGJlZW4gYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3R3JhcGggPSBuZXcgU2VtYW50aWNEZXBHcmFwaCgpO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBvcGFxdWUgc3ltYm9scyB0aGF0IHdlcmUgY3JlYXRlZCBmb3IgZGVjbGFyYXRpb25zIGZvciB3aGljaCB0aGVyZSB3YXMgbm8gc3ltYm9sXG4gICAqIHJlZ2lzdGVyZWQsIHdoaWNoIGhhcHBlbnMgZm9yIGUuZy4gZXh0ZXJuYWwgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcGFxdWVTeW1ib2xzID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBPcGFxdWVTeW1ib2w+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBzZW1hbnRpYyBkZXBlbmRlbmN5IGdyYXBoIG9mIHRoZSBtb3N0IHJlY2VudGx5IHN1Y2NlZWRlZCBjb21waWxhdGlvbiwgb3IgbnVsbCBpZiB0aGlzXG4gICAgICAgKiBpcyB0aGUgaW5pdGlhbCBidWlsZC5cbiAgICAgICAqL1xuICAgICAgcHJpdmF0ZSBwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBofG51bGwpIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3ltYm9sIGluIHRoZSBuZXcgZ3JhcGggdGhhdCBpcyBiZWluZyBjcmVhdGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJTeW1ib2woc3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IHZvaWQge1xuICAgIHRoaXMubmV3R3JhcGgucmVnaXN0ZXJTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbGwgZmFjdHMgdGhhdCBoYXZlIGJlZW4gZ2F0aGVyZWQgdG8gY3JlYXRlIGEgbmV3IHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGguIEluIHRoaXNcbiAgICogcHJvY2VzcywgdGhlIHNlbWFudGljIGltcGFjdCBvZiB0aGUgY2hhbmdlcyBpcyBkZXRlcm1pbmVkIHdoaWNoIHJlc3VsdHMgaW4gYSBzZXQgb2YgZmlsZXMgdGhhdFxuICAgKiBuZWVkIHRvIGJlIGVtaXR0ZWQgYW5kL29yIHR5cGUtY2hlY2tlZC5cbiAgICovXG4gIGZpbmFsaXplKCk6IFNlbWFudGljRGVwZW5kZW5jeVJlc3VsdCB7XG4gICAgaWYgKHRoaXMucHJpb3JHcmFwaCA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgbm8gcHJpb3IgZGVwZW5kZW5jeSBncmFwaCBpcyBhdmFpbGFibGUgdGhlbiB0aGlzIHdhcyB0aGUgaW5pdGlhbCBidWlsZCwgaW4gd2hpY2ggY2FzZVxuICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNlbWFudGljIGltcGFjdCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkgY29uc2lkZXJlZFxuICAgICAgLy8gbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZWVkc0VtaXQ6IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCksXG4gICAgICAgIG5lZWRzVHlwZUNoZWNrRW1pdDogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgICAgbmV3R3JhcGg6IHRoaXMubmV3R3JhcGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRzRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIHJldHVybiB7XG4gICAgICBuZWVkc0VtaXQsXG4gICAgICBuZWVkc1R5cGVDaGVja0VtaXQsXG4gICAgICBuZXdHcmFwaDogdGhpcy5uZXdHcmFwaCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVJbnZhbGlkYXRlZEZpbGVzKHByaW9yR3JhcGg6IFNlbWFudGljRGVwR3JhcGgpOiBTZXQ8QWJzb2x1dGVGc1BhdGg+IHtcbiAgICBjb25zdCBpc1B1YmxpY0FwaUFmZmVjdGVkID0gbmV3IFNldDxTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBpcyB0byBjb2xsZWN0IGFsbCBzeW1ib2xzIHdoaWNoIGhhdmUgdGhlaXIgcHVibGljIEFQSSBhZmZlY3RlZC4gQW55IHN5bWJvbHNcbiAgICAvLyB0aGF0IGNhbm5vdCBiZSBtYXRjaGVkIHVwIHdpdGggYSBzeW1ib2wgZnJvbSB0aGUgcHJpb3IgZ3JhcGggYXJlIGNvbnNpZGVyZWQgYWZmZWN0ZWQuXG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHwgc3ltYm9sLmlzUHVibGljQXBpQWZmZWN0ZWQocHJldmlvdXNTeW1ib2wpKSB7XG4gICAgICAgIGlzUHVibGljQXBpQWZmZWN0ZWQuYWRkKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIHNlY29uZCBwaGFzZSBpcyB0byBmaW5kIGFsbCBzeW1ib2xzIGZvciB3aGljaCB0aGUgZW1pdCByZXN1bHQgaXMgYWZmZWN0ZWQsIGVpdGhlciBiZWNhdXNlXG4gICAgLy8gdGhlaXIgdXNlZCBkZWNsYXJhdGlvbnMgaGF2ZSBjaGFuZ2VkIG9yIGFueSBvZiB0aG9zZSB1c2VkIGRlY2xhcmF0aW9ucyBoYXMgaGFkIGl0cyBwdWJsaWMgQVBJXG4gICAgLy8gYWZmZWN0ZWQgYXMgZGV0ZXJtaW5lZCBpbiB0aGUgZmlyc3QgcGhhc2UuXG4gICAgY29uc3QgbmVlZHNFbWl0ID0gbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKTtcbiAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiB0aGlzLm5ld0dyYXBoLnN5bWJvbEJ5RGVjbC52YWx1ZXMoKSkge1xuICAgICAgaWYgKHN5bWJvbC5pc0VtaXRBZmZlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc0VtaXRBZmZlY3RlZChwcmV2aW91c1N5bWJvbCwgaXNQdWJsaWNBcGlBZmZlY3RlZCkpIHtcbiAgICAgICAgbmVlZHNFbWl0LmFkZChzeW1ib2wucGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lZWRzRW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyhwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBoKTogU2V0PEFic29sdXRlRnNQYXRoPiB7XG4gICAgY29uc3QgaXNUeXBlQ2hlY2tBcGlBZmZlY3RlZCA9IG5ldyBTZXQ8U2VtYW50aWNTeW1ib2w+KCk7XG5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgaXMgdG8gY29sbGVjdCBhbGwgc3ltYm9scyB3aGljaCBoYXZlIHRoZWlyIHB1YmxpYyBBUEkgYWZmZWN0ZWQuIEFueSBzeW1ib2xzXG4gICAgLy8gdGhhdCBjYW5ub3QgYmUgbWF0Y2hlZCB1cCB3aXRoIGEgc3ltYm9sIGZyb20gdGhlIHByaW9yIGdyYXBoIGFyZSBjb25zaWRlcmVkIGFmZmVjdGVkLlxuICAgIGZvciAoY29uc3Qgc3ltYm9sIG9mIHRoaXMubmV3R3JhcGguc3ltYm9sQnlEZWNsLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc1R5cGVDaGVja0FwaUFmZmVjdGVkKHByZXZpb3VzU3ltYm9sKSkge1xuICAgICAgICBpc1R5cGVDaGVja0FwaUFmZmVjdGVkLmFkZChzeW1ib2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBzZWNvbmQgcGhhc2UgaXMgdG8gZmluZCBhbGwgc3ltYm9scyBmb3Igd2hpY2ggdGhlIGVtaXQgcmVzdWx0IGlzIGFmZmVjdGVkLCBlaXRoZXIgYmVjYXVzZVxuICAgIC8vIHRoZWlyIHVzZWQgZGVjbGFyYXRpb25zIGhhdmUgY2hhbmdlZCBvciBhbnkgb2YgdGhvc2UgdXNlZCBkZWNsYXJhdGlvbnMgaGFzIGhhZCBpdHMgcHVibGljIEFQSVxuICAgIC8vIGFmZmVjdGVkIGFzIGRldGVybWluZWQgaW4gdGhlIGZpcnN0IHBoYXNlLlxuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCk7XG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGlmIChzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHxcbiAgICAgICAgICBzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkKHByZXZpb3VzU3ltYm9sLCBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKSkge1xuICAgICAgICBuZWVkc1R5cGVDaGVja0VtaXQuYWRkKHN5bWJvbC5wYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVlZHNUeXBlQ2hlY2tFbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciB0aGUgcmVmZXJlbmNlIHRvIGBkZWNsYCB1c2luZyB0aGUgZXhwcmVzc2lvbiBgZXhwcmAuIFNlZVxuICAgKiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgZ2V0U2VtYW50aWNSZWZlcmVuY2UoZGVjbDogQ2xhc3NEZWNsYXJhdGlvbiwgZXhwcjogRXhwcmVzc2lvbik6IFNlbWFudGljUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sOiB0aGlzLmdldFN5bWJvbChkZWNsKSxcbiAgICAgIGltcG9ydFBhdGg6IGdldEltcG9ydFBhdGgoZXhwciksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBgU2VtYW50aWNTeW1ib2xgIHRoYXQgd2FzIHJlZ2lzdGVyZWQgZm9yIGBkZWNsYCBkdXJpbmcgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24sIG9yXG4gICAqIHJldHVybnMgYW4gb3BhcXVlIHN5bWJvbCB0aGF0IHJlcHJlc2VudHMgYGRlY2xgLlxuICAgKi9cbiAgZ2V0U3ltYm9sKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbCB7XG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy5uZXdHcmFwaC5nZXRTeW1ib2xCeURlY2woZGVjbCk7XG4gICAgaWYgKHN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgLy8gTm8gc3ltYm9sIGhhcyBiZWVuIHJlY29yZGVkIGZvciB0aGUgcHJvdmlkZWQgZGVjbGFyYXRpb24sIHdoaWNoIHdvdWxkIGJlIHRoZSBjYXNlIGlmIHRoZVxuICAgICAgLy8gZGVjbGFyYXRpb24gaXMgZXh0ZXJuYWwuIFJldHVybiBhbiBvcGFxdWUgc3ltYm9sIGluIHRoYXQgY2FzZSwgdG8gYWxsb3cgdGhlIGV4dGVybmFsXG4gICAgICAvLyBkZWNsYXJhdGlvbiB0byBiZSBjb21wYXJlZCB0byBhIHByaW9yIGNvbXBpbGF0aW9uLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIH1cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3IgY3JlYXRlcyBhbiBgT3BhcXVlU3ltYm9sYCBmb3IgdGhlIHByb3ZpZGVkIGNsYXNzIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPcGFxdWVTeW1ib2woZGVjbDogQ2xhc3NEZWNsYXJhdGlvbik6IE9wYXF1ZVN5bWJvbCB7XG4gICAgaWYgKHRoaXMub3BhcXVlU3ltYm9scy5oYXMoZGVjbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wYXF1ZVN5bWJvbHMuZ2V0KGRlY2wpITtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2wgPSBuZXcgT3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIHRoaXMub3BhcXVlU3ltYm9scy5zZXQoZGVjbCwgc3ltYm9sKTtcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFBhdGgoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZ3xudWxsIHtcbiAgaWYgKGV4cHIgaW5zdGFuY2VvZiBFeHRlcm5hbEV4cHIpIHtcbiAgICByZXR1cm4gYCR7ZXhwci52YWx1ZS5tb2R1bGVOYW1lfVxcJCR7ZXhwci52YWx1ZS5uYW1lfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -11,7 +11,7 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/incremental/src/incremental", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", "@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking", "@angular/compiler-cli/src/ngtsc/incremental/src/state"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/incremental/src/incremental", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/program_driver", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", "@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking", "@angular/compiler-cli/src/ngtsc/incremental/src/state"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
@@ -20,6 +20,7 @@
20
20
  var tslib_1 = require("tslib");
21
21
  var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
22
22
  var perf_1 = require("@angular/compiler-cli/src/ngtsc/perf");
23
+ var program_driver_1 = require("@angular/compiler-cli/src/ngtsc/program_driver");
23
24
  var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
24
25
  var semantic_graph_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph");
25
26
  var dependency_tracking_1 = require("@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking");
@@ -108,13 +109,13 @@
108
109
  break;
109
110
  }
110
111
  var oldVersions = priorAnalysis.versions;
111
- var oldFilesArray = oldProgram.getSourceFiles().map(function (sf) { return typescript_1.toUnredirectedSourceFile(sf); });
112
+ var oldFilesArray = oldProgram.getSourceFiles().map(toOriginalSourceFile);
112
113
  var oldFiles = new Set(oldFilesArray);
113
114
  var deletedTsFiles = new Set(oldFilesArray.map(function (sf) { return file_system_1.absoluteFromSourceFile(sf); }));
114
115
  try {
115
116
  for (var _k = tslib_1.__values(program.getSourceFiles()), _l = _k.next(); !_l.done; _l = _k.next()) {
116
117
  var possiblyRedirectedNewFile = _l.value;
117
- var sf = typescript_1.toUnredirectedSourceFile(possiblyRedirectedNewFile);
118
+ var sf = toOriginalSourceFile(possiblyRedirectedNewFile);
118
119
  var sfPath = file_system_1.absoluteFromSourceFile(sf);
119
120
  // Since we're seeing a file in the incoming program with this name, it can't have been
120
121
  // deleted.
@@ -363,5 +364,30 @@
363
364
  return IncrementalCompilation;
364
365
  }());
365
366
  exports.IncrementalCompilation = IncrementalCompilation;
367
+ /**
368
+ * To accurately detect whether a source file was affected during an incremental rebuild, the
369
+ * "original" source file needs to be consistently used.
370
+ *
371
+ * First, TypeScript may have created source file redirects when declaration files of the same
372
+ * version of a library are included multiple times. The non-redirected source file should be used
373
+ * to detect changes, as otherwise the redirected source files cause a mismatch when compared to
374
+ * a prior program.
375
+ *
376
+ * Second, the program that is used for template type checking may contain mutated source files, if
377
+ * inline type constructors or inline template type-check blocks had to be used. Such source files
378
+ * store their original, non-mutated source file from the original program in a symbol. For
379
+ * computing the affected files in an incremental build this original source file should be used, as
380
+ * the mutated source file would always be considered affected.
381
+ */
382
+ function toOriginalSourceFile(sf) {
383
+ var unredirectedSf = typescript_1.toUnredirectedSourceFile(sf);
384
+ var originalFile = unredirectedSf[program_driver_1.NgOriginalFile];
385
+ if (originalFile !== undefined) {
386
+ return originalFile;
387
+ }
388
+ else {
389
+ return unredirectedSf;
390
+ }
391
+ }
366
392
  });
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jcmVtZW50YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NyYy9pbmNyZW1lbnRhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBSUgsMkVBQWtGO0lBQ2xGLDZEQUFtRDtJQUduRCxrRkFBbUU7SUFFbkUsNkZBQTBEO0lBQzFELDJHQUEwRDtJQUMxRCwrRUFBZ0g7SUFXaEg7O09BRUc7SUFDSCxJQUFLLFNBR0o7SUFIRCxXQUFLLFNBQVM7UUFDWixpREFBUSxDQUFBO1FBQ1IsaUVBQWdCLENBQUE7SUFDbEIsQ0FBQyxFQUhJLFNBQVMsS0FBVCxTQUFTLFFBR2I7SUF5QkQ7Ozs7T0FJRztJQUNIO1FBV0UsZ0NBQ0ksS0FBdUIsRUFBVyxRQUE2QixFQUN2RCxRQUEwQyxFQUFVLElBQTBCO1lBRHBELGFBQVEsR0FBUixRQUFRLENBQXFCO1lBQ3ZELGFBQVEsR0FBUixRQUFRLENBQWtDO1lBQVUsU0FBSSxHQUFKLElBQUksQ0FBc0I7WUFDeEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFFcEIsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRO2dCQUN4Qix1QkFBdUIsRUFDbkIsSUFBSSx3Q0FBdUIsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDekYsQ0FBQztRQUNKLENBQUM7UUFFRDs7V0FFRztRQUNJLDRCQUFLLEdBQVosVUFBYSxPQUFtQixFQUFFLFFBQTBDO1lBRTFFLElBQU0sS0FBSyxHQUFxQjtnQkFDOUIsSUFBSSxFQUFFLDRCQUFvQixDQUFDLEtBQUs7YUFD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QyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztZQUN4RSxzRUFBc0U7WUFDdEUsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELCtDQUFjLEdBQWQsVUFBZSxFQUFpQjtZQUM5QixtRUFBbUU7WUFDbkUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDdEIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQU0sTUFBTSxHQUFHLG9DQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTFDLGdFQUFnRTtZQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ1gsOEVBQThFLENBQUMsQ0FBQzthQUNyRjtZQUVELDJGQUEyRjtZQUMzRixXQUFXO1lBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCw4RkFBOEY7WUFDOUYsOEZBQThGO1lBQzlGLHlFQUF5RTtZQUN6RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNILDZCQUFDO0lBQUQsQ0FBQyxBQXJURCxJQXFUQztJQXJUWSx3REFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7YWJzb2x1dGVGcm9tU291cmNlRmlsZSwgQWJzb2x1dGVGc1BhdGgsIHJlc29sdmV9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7UGVyZlBoYXNlLCBQZXJmUmVjb3JkZXJ9IGZyb20gJy4uLy4uL3BlcmYnO1xuaW1wb3J0IHtDbGFzc1JlY29yZCwgVHJhaXRDb21waWxlcn0gZnJvbSAnLi4vLi4vdHJhbnNmb3JtJztcbmltcG9ydCB7RmlsZVR5cGVDaGVja2luZ0RhdGF9IGZyb20gJy4uLy4uL3R5cGVjaGVjayc7XG5pbXBvcnQge3RvVW5yZWRpcmVjdGVkU291cmNlRmlsZX0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5pbXBvcnQge0luY3JlbWVudGFsQnVpbGR9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQge1NlbWFudGljRGVwR3JhcGhVcGRhdGVyfSBmcm9tICcuLi9zZW1hbnRpY19ncmFwaCc7XG5pbXBvcnQge0ZpbGVEZXBlbmRlbmN5R3JhcGh9IGZyb20gJy4vZGVwZW5kZW5jeV90cmFja2luZyc7XG5pbXBvcnQge0FuYWx5emVkSW5jcmVtZW50YWxTdGF0ZSwgRGVsdGFJbmNyZW1lbnRhbFN0YXRlLCBJbmNyZW1lbnRhbFN0YXRlLCBJbmNyZW1lbnRhbFN0YXRlS2luZH0gZnJvbSAnLi9zdGF0ZSc7XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIGNvbXBpbGF0aW9uIGJlaW5nIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGN1cnJlbnQgb25lLFxuICogaW5jbHVkaW5nIHRoZSBkZWx0YSBvZiBmaWxlcyB3aGljaCBoYXZlIGxvZ2ljYWxseSBjaGFuZ2VkIGFuZCBuZWVkIHRvIGJlIHJlYW5hbHl6ZWQuXG4gKi9cbmludGVyZmFjZSBJbmNyZW1lbnRhbFN0ZXAge1xuICBwcmlvclN0YXRlOiBBbmFseXplZEluY3JlbWVudGFsU3RhdGU7XG4gIGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzOiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xufVxuXG4vKipcbiAqIERpc2NyaW1pbmFudCBvZiB0aGUgYFBoYXNlYCB0eXBlIHVuaW9uLlxuICovXG5lbnVtIFBoYXNlS2luZCB7XG4gIEFuYWx5c2lzLFxuICBUeXBlQ2hlY2tBbmRFbWl0LFxufVxuXG4vKipcbiAqIEFuIGluY3JlbWVudGFsIGNvbXBpbGF0aW9uIHVuZGVyZ29pbmcgYW5hbHlzaXMsIGFuZCBidWlsZGluZyBhIHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGguXG4gKi9cbmludGVyZmFjZSBBbmFseXNpc1BoYXNlIHtcbiAga2luZDogUGhhc2VLaW5kLkFuYWx5c2lzO1xuICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG59XG5cbi8qKlxuICogQW4gaW5jcmVtZW50YWwgY29tcGlsYXRpb24gdGhhdCBjb21wbGV0ZWQgYW5hbHlzaXMgYW5kIGlzIHVuZGVyZ29pbmcgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBhbmRcbiAqIGVtaXQuXG4gKi9cbmludGVyZmFjZSBUeXBlQ2hlY2tBbmRFbWl0UGhhc2Uge1xuICBraW5kOiBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdDtcbiAgbmVlZHNFbWl0OiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuICBuZWVkc1R5cGVDaGVja0VtaXQ6IFNldDxBYnNvbHV0ZUZzUGF0aD47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBhIGNvbXBpbGF0aW9uLlxuICovXG50eXBlIFBoYXNlID0gQW5hbHlzaXNQaGFzZXxUeXBlQ2hlY2tBbmRFbWl0UGhhc2U7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgaW5jcmVtZW50YWwgcG9ydGlvbiBvZiBhbiBBbmd1bGFyIGNvbXBpbGF0aW9uLCBhbGxvd2luZyBmb3IgcmV1c2Ugb2YgYSBwcmlvclxuICogY29tcGlsYXRpb24gaWYgYXZhaWxhYmxlLCBhbmQgcHJvZHVjaW5nIGFuIG91dHB1dCBzdGF0ZSBmb3IgcmV1c2Ugb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gaW4gYVxuICogZnV0dXJlIG9uZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsQ29tcGlsYXRpb24gaW1wbGVtZW50cyBJbmNyZW1lbnRhbEJ1aWxkPENsYXNzUmVjb3JkLCBGaWxlVHlwZUNoZWNraW5nRGF0YT4ge1xuICBwcml2YXRlIHBoYXNlOiBQaGFzZTtcblxuICAvKipcbiAgICogYEluY3JlbWVudGFsU3RhdGVgIG9mIHRoaXMgY29tcGlsYXRpb24gaWYgaXQgd2VyZSB0byBiZSByZXVzZWQgaW4gYSBzdWJzZXF1ZW50IGluY3JlbWVudGFsXG4gICAqIGNvbXBpbGF0aW9uIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICpcbiAgICogRXhwb3NlZCB2aWEgdGhlIGBzdGF0ZWAgcmVhZC1vbmx5IGdldHRlci5cbiAgICovXG4gIHByaXZhdGUgX3N0YXRlOiBJbmNyZW1lbnRhbFN0YXRlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICBzdGF0ZTogSW5jcmVtZW50YWxTdGF0ZSwgcmVhZG9ubHkgZGVwR3JhcGg6IEZpbGVEZXBlbmRlbmN5R3JhcGgsXG4gICAgICBwcml2YXRlIHZlcnNpb25zOiBNYXA8QWJzb2x1dGVGc1BhdGgsIHN0cmluZz58bnVsbCwgcHJpdmF0ZSBzdGVwOiBJbmNyZW1lbnRhbFN0ZXB8bnVsbCkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG5cbiAgICAvLyBUaGUgY29tcGlsYXRpb24gYmVnaW5zIGluIGFuYWx5c2lzIHBoYXNlLlxuICAgIHRoaXMucGhhc2UgPSB7XG4gICAgICBraW5kOiBQaGFzZUtpbmQuQW5hbHlzaXMsXG4gICAgICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjpcbiAgICAgICAgICBuZXcgU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIoc3RlcCAhPT0gbnVsbCA/IHN0ZXAucHJpb3JTdGF0ZS5zZW1hbnRpY0RlcEdyYXBoIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbiBhIGZyZXNoIGBJbmNyZW1lbnRhbENvbXBpbGF0aW9uYC5cbiAgICovXG4gIHN0YXRpYyBmcmVzaChwcm9ncmFtOiB0cy5Qcm9ncmFtLCB2ZXJzaW9uczogTWFwPEFic29sdXRlRnNQYXRoLCBzdHJpbmc+fG51bGwpOlxuICAgICAgSW5jcmVtZW50YWxDb21waWxhdGlvbiB7XG4gICAgY29uc3Qgc3RhdGU6IEluY3JlbWVudGFsU3RhdGUgPSB7XG4gICAgICBraW5kOiBJbmNyZW1lbnRhbFN0YXRlS2luZC5GcmVzaCxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxDb21waWxhdGlvbihzdGF0ZSwgbmV3IEZpbGVEZXBlbmRlbmN5R3JhcGgoKSwgdmVyc2lvbnMsIC8qIHJldXNlICovIG51bGwpO1xuICB9XG5cbiAgc3RhdGljIGluY3JlbWVudGFsKFxuICAgICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgbmV3VmVyc2lvbnM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgc3RyaW5nPnxudWxsLCBvbGRQcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICAgICAgb2xkU3RhdGU6IEluY3JlbWVudGFsU3RhdGUsIG1vZGlmaWVkUmVzb3VyY2VGaWxlczogU2V0PEFic29sdXRlRnNQYXRoPnxudWxsLFxuICAgICAgcGVyZjogUGVyZlJlY29yZGVyKTogSW5jcmVtZW50YWxDb21waWxhdGlvbiB7XG4gICAgcmV0dXJuIHBlcmYuaW5QaGFzZShQZXJmUGhhc2UuUmVjb25jaWxpYXRpb24sICgpID0+IHtcbiAgICAgIGNvbnN0IHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcyA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCk7XG4gICAgICBjb25zdCBjaGFuZ2VkUmVzb3VyY2VGaWxlcyA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KG1vZGlmaWVkUmVzb3VyY2VGaWxlcyA/PyBbXSk7XG5cblxuICAgICAgbGV0IHByaW9yQW5hbHlzaXM6IEFuYWx5emVkSW5jcmVtZW50YWxTdGF0ZTtcbiAgICAgIHN3aXRjaCAob2xkU3RhdGUua2luZCkge1xuICAgICAgICBjYXNlIEluY3JlbWVudGFsU3RhdGVLaW5kLkZyZXNoOlxuICAgICAgICAgIC8vIFNpbmNlIHRoaXMgbGluZSBvZiBwcm9ncmFtIGhhcyBuZXZlciBiZWVuIHN1Y2Nlc3NmdWxseSBhbmFseXplZCB0byBiZWdpbiB3aXRoLCB0cmVhdFxuICAgICAgICAgIC8vIHRoaXMgYXMgYSBmcmVzaCBjb21waWxhdGlvbi5cbiAgICAgICAgICByZXR1cm4gSW5jcmVtZW50YWxDb21waWxhdGlvbi5mcmVzaChwcm9ncmFtLCBuZXdWZXJzaW9ucyk7XG4gICAgICAgIGNhc2UgSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQ6XG4gICAgICAgICAgLy8gVGhlIG1vc3QgcmVjZW50IHByb2dyYW0gd2FzIGFuYWx5emVkIHN1Y2Nlc3NmdWxseSwgc28gd2UgY2FuIHVzZSB0aGF0IGFzIG91ciBwcmlvclxuICAgICAgICAgIC8vIHN0YXRlIGFuZCBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueSBvdGhlciBkZWx0YXMgZXhjZXB0IGNoYW5nZXMgaW4gdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgLy8gcHJvZ3JhbS5cbiAgICAgICAgICBwcmlvckFuYWx5c2lzID0gb2xkU3RhdGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5jcmVtZW50YWxTdGF0ZUtpbmQuRGVsdGE6XG4gICAgICAgICAgLy8gVGhlcmUgaXMgYW4gYW5jZXN0b3IgcHJvZ3JhbSB3aGljaCB3YXMgYW5hbHl6ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBjYW4gYmUgdXNlZCBhcyBhXG4gICAgICAgICAgLy8gc3RhcnRpbmcgcG9pbnQsIGJ1dCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0J3MgY2hhbmdlZCBzaW5jZSB0aGF0IHByb2dyYW0uXG4gICAgICAgICAgcHJpb3JBbmFseXNpcyA9IG9sZFN0YXRlLmxhc3RBbmFseXplZFN0YXRlO1xuICAgICAgICAgIGZvciAoY29uc3Qgc2ZQYXRoIG9mIG9sZFN0YXRlLnBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcykge1xuICAgICAgICAgICAgcGh5c2ljYWxseUNoYW5nZWRUc0ZpbGVzLmFkZChzZlBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiBvbGRTdGF0ZS5jaGFuZ2VkUmVzb3VyY2VGaWxlcykge1xuICAgICAgICAgICAgY2hhbmdlZFJlc291cmNlRmlsZXMuYWRkKHJlc291cmNlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGRWZXJzaW9ucyA9IHByaW9yQW5hbHlzaXMudmVyc2lvbnM7XG5cbiAgICAgIGNvbnN0IG9sZEZpbGVzQXJyYXkgPSBvbGRQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkubWFwKHNmID0+IHRvVW5yZWRpcmVjdGVkU291cmNlRmlsZShzZikpO1xuICAgICAgY29uc3Qgb2xkRmlsZXMgPSBuZXcgU2V0KG9sZEZpbGVzQXJyYXkpO1xuICAgICAgY29uc3QgZGVsZXRlZFRzRmlsZXMgPSBuZXcgU2V0KG9sZEZpbGVzQXJyYXkubWFwKHNmID0+IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpKSk7XG5cbiAgICAgIGZvciAoY29uc3QgcG9zc2libHlSZWRpcmVjdGVkTmV3RmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2YgPSB0b1VucmVkaXJlY3RlZFNvdXJjZUZpbGUocG9zc2libHlSZWRpcmVjdGVkTmV3RmlsZSk7XG4gICAgICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuICAgICAgICAvLyBTaW5jZSB3ZSdyZSBzZWVpbmcgYSBmaWxlIGluIHRoZSBpbmNvbWluZyBwcm9ncmFtIHdpdGggdGhpcyBuYW1lLCBpdCBjYW4ndCBoYXZlIGJlZW5cbiAgICAgICAgLy8gZGVsZXRlZC5cbiAgICAgICAgZGVsZXRlZFRzRmlsZXMuZGVsZXRlKHNmUGF0aCk7XG5cbiAgICAgICAgaWYgKG9sZEZpbGVzLmhhcyhzZikpIHtcbiAgICAgICAgICAvLyBUaGlzIHNvdXJjZSBmaWxlIGhhcyB0aGUgc2FtZSBvYmplY3QgaWRlbnRpdHkgYXMgaW4gdGhlIHByZXZpb3VzIHByb2dyYW0uIFdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgaXQncyByZWFsbHkgdGhlIHNhbWUgZmlsZSwgb3IgaWYgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHZlcnNpb25zIHNpbmNlIHRoZVxuICAgICAgICAgIC8vIGxhc3QgcHJvZ3JhbSB3aXRob3V0IGNoYW5naW5nIGl0cyBpZGVudGl0eS5cblxuICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoZW4gdGhpcyBpcyB0aGUgc2FtZSBmaWxlLCBhbmQgd2UgY2FuXG4gICAgICAgICAgLy8gc2tpcCBpdC5cbiAgICAgICAgICBpZiAob2xkVmVyc2lvbnMgPT09IG51bGwgfHwgbmV3VmVyc2lvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIGEgdmVyc2lvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBmaWxlIGZyb20gYm90aCB0aGUgcHJpb3IgYW5kIHRoZSBjdXJyZW50IHByb2dyYW0sIGFuZFxuICAgICAgICAgIC8vIHRoYXQgdmVyc2lvbiBpcyB0aGUgc2FtZSwgdGhlbiB0aGlzIGlzIHRoZSBzYW1lIGZpbGUsIGFuZCB3ZSBjYW4gc2tpcCBpdC5cbiAgICAgICAgICBpZiAob2xkVmVyc2lvbnMuaGFzKHNmUGF0aCkgJiYgbmV3VmVyc2lvbnMuaGFzKHNmUGF0aCkgJiZcbiAgICAgICAgICAgICAgb2xkVmVyc2lvbnMuZ2V0KHNmUGF0aCkhID09PSBuZXdWZXJzaW9ucy5nZXQoc2ZQYXRoKSEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgdGhlIGZpbGUgaGFzIGNoYW5nZWQuIEVpdGhlciBpdHMgdmVyc2lvbnMgZGlkbid0IG1hdGNoLCBvciB3ZVxuICAgICAgICAgIC8vIHdlcmUgbWlzc2luZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IGl0IG9uIG9uZSBzaWRlIGZvciBzb21lIHJlYXNvbi5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhaWwgb3V0IGlmIGEgLmQudHMgZmlsZSBjaGFuZ2VzIC0gdGhlIHNlbWFudGljIGRlcCBncmFwaCBpcyBub3QgYWJsZSB0byBwcm9jZXNzIHN1Y2hcbiAgICAgICAgLy8gY2hhbmdlcyBjb3JyZWN0bHkgeWV0LlxuICAgICAgICBpZiAoc2YuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gSW5jcmVtZW50YWxDb21waWxhdGlvbi5mcmVzaChwcm9ncmFtLCBuZXdWZXJzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlsZSBoYXMgY2hhbmdlZCBwaHlzaWNhbGx5LCBzbyByZWNvcmQgaXQuXG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcy5hZGQoc2ZQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGFueSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkIGZyb20gdGhlIGxpc3Qgb2YgcGh5c2ljYWwgY2hhbmdlcy5cbiAgICAgIGZvciAoY29uc3QgZGVsZXRlZEZpbGVOYW1lIG9mIGRlbGV0ZWRUc0ZpbGVzKSB7XG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcy5kZWxldGUocmVzb2x2ZShkZWxldGVkRmlsZU5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoZSBwcmlvciBkZXBlbmRlbmN5IGdyYXBoIHRvIHByb2plY3QgcGh5c2ljYWwgY2hhbmdlcyBpbnRvIGEgc2V0IG9mIGxvZ2ljYWxseSBjaGFuZ2VkXG4gICAgICAvLyBmaWxlcy5cbiAgICAgIGNvbnN0IGRlcEdyYXBoID0gbmV3IEZpbGVEZXBlbmRlbmN5R3JhcGgoKTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzID0gZGVwR3JhcGgudXBkYXRlV2l0aFBoeXNpY2FsQ2hhbmdlcyhcbiAgICAgICAgICBwcmlvckFuYWx5c2lzLmRlcEdyYXBoLCBwaHlzaWNhbGx5Q2hhbmdlZFRzRmlsZXMsIGRlbGV0ZWRUc0ZpbGVzLCBjaGFuZ2VkUmVzb3VyY2VGaWxlcyk7XG5cbiAgICAgIC8vIFBoeXNpY2FsbHkgY2hhbmdlZCBmaWxlcyBhcmVuJ3QgbmVjZXNzYXJpbHkgY291bnRlZCBhcyBsb2dpY2FsbHkgY2hhbmdlZCBieSB0aGUgZGVwZW5kZW5jeVxuICAgICAgLy8gZ3JhcGggKGZpbGVzIGRvIG5vdCBoYXZlIGVkZ2VzIHRvIHRoZW1zZWx2ZXMpLCBzbyBhZGQgdGhlbSB0byB0aGUgbG9naWNhbCBjaGFuZ2VzXG4gICAgICAvLyBleHBsaWNpdGx5LlxuICAgICAgZm9yIChjb25zdCBzZlBhdGggb2YgcGh5c2ljYWxseUNoYW5nZWRUc0ZpbGVzKSB7XG4gICAgICAgIGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzLmFkZChzZlBhdGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCBvZmYgaW4gYSBgRGVsdGFJbmNyZW1lbnRhbFN0YXRlYCBhcyBhIGRlbHRhIGFnYWluc3QgdGhlIHByZXZpb3VzIHN1Y2Nlc3NmdWwgYW5hbHlzaXMsXG4gICAgICAvLyB1bnRpbCB0aGlzIGNvbXBpbGF0aW9uIGNvbXBsZXRlcyBpdHMgb3duIGFuYWx5c2lzLlxuICAgICAgY29uc3Qgc3RhdGU6IERlbHRhSW5jcmVtZW50YWxTdGF0ZSA9IHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxTdGF0ZUtpbmQuRGVsdGEsXG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcyxcbiAgICAgICAgY2hhbmdlZFJlc291cmNlRmlsZXMsXG4gICAgICAgIGxhc3RBbmFseXplZFN0YXRlOiBwcmlvckFuYWx5c2lzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGF0aW9uKHN0YXRlLCBkZXBHcmFwaCwgbmV3VmVyc2lvbnMsIHtcbiAgICAgICAgcHJpb3JTdGF0ZTogcHJpb3JBbmFseXNpcyxcbiAgICAgICAgbG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBJbmNyZW1lbnRhbFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cblxuICBnZXQgc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIoKTogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIge1xuICAgIGlmICh0aGlzLnBoYXNlLmtpbmQgIT09IFBoYXNlS2luZC5BbmFseXNpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogQ2Fubm90IHVwZGF0ZSB0aGUgU2VtYW50aWNEZXBHcmFwaCBhZnRlciBhbmFseXNpcyBjb21wbGV0ZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGhhc2Uuc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG4gIH1cblxuICByZWNvcmRTdWNjZXNzZnVsQW5hbHlzaXModHJhaXRDb21waWxlcjogVHJhaXRDb21waWxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBoYXNlLmtpbmQgIT09IFBoYXNlS2luZC5BbmFseXNpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogSW5jcmVtZW50YWwgY29tcGlsYXRpb24gaW4gcGhhc2UgJHtcbiAgICAgICAgICBQaGFzZUtpbmRbdGhpcy5waGFzZS5raW5kXX0sIGV4cGVjdGVkIEFuYWx5c2lzYCk7XG4gICAgfVxuXG4gICAgY29uc3Qge25lZWRzRW1pdCwgbmVlZHNUeXBlQ2hlY2tFbWl0LCBuZXdHcmFwaH0gPSB0aGlzLnBoYXNlLnNlbWFudGljRGVwR3JhcGhVcGRhdGVyLmZpbmFsaXplKCk7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHNldCBvZiBmaWxlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBlbWl0dGVkLlxuICAgIGxldCBlbWl0dGVkOiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IG51bGwpIHtcbiAgICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5vIHByaW9yIGNvbXBpbGF0aW9uLCBubyBmaWxlcyBoYXZlIHlldCBiZWVuIGVtaXR0ZWQuXG4gICAgICBlbWl0dGVkID0gbmV3IFNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZWdpbiB3aXRoIHRoZSBmaWxlcyBlbWl0dGVkIGJ5IHRoZSBwcmlvciBzdWNjZXNzZnVsIGNvbXBpbGF0aW9uLCBidXQgcmVtb3ZlIHRob3NlIHdoaWNoIHdlXG4gICAgICAvLyBrbm93IG5lZWQgdG8gYmVlIHJlLWVtaXR0ZWQuXG4gICAgICBlbWl0dGVkID0gbmV3IFNldCh0aGlzLnN0ZXAucHJpb3JTdGF0ZS5lbWl0dGVkKTtcblxuICAgICAgLy8gRmlsZXMgbmVlZCByZS1lbWl0dGVkIGlmIHRoZXkndmUgbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICBmb3IgKGNvbnN0IHNmUGF0aCBvZiB0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMpIHtcbiAgICAgICAgZW1pdHRlZC5kZWxldGUoc2ZQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsZXMgbmVlZCByZS1lbWl0dGVkIGlmIHRoZXkndmUgc2VtYW50aWNhbGx5IGNoYW5nZWQuXG4gICAgICBmb3IgKGNvbnN0IHNmUGF0aCBvZiBuZWVkc0VtaXQpIHtcbiAgICAgICAgZW1pdHRlZC5kZWxldGUoc2ZQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFuc2l0aW9uIHRvIGEgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGNvbXBpbGF0aW9uLiBBdCB0aGlzIHBvaW50LCBhIHN1YnNlcXVlbnQgY29tcGlsYXRpb25cbiAgICAvLyBjb3VsZCB1c2UgdGhpcyBzdGF0ZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAga2luZDogSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQsXG4gICAgICB2ZXJzaW9uczogdGhpcy52ZXJzaW9ucyxcbiAgICAgIGRlcEdyYXBoOiB0aGlzLmRlcEdyYXBoLFxuICAgICAgc2VtYW50aWNEZXBHcmFwaDogbmV3R3JhcGgsXG4gICAgICBwcmlvckFuYWx5c2lzOiB0cmFpdENvbXBpbGVyLmdldEFuYWx5emVkUmVjb3JkcygpLFxuICAgICAgdHlwZUNoZWNrUmVzdWx0czogbnVsbCxcbiAgICAgIGVtaXR0ZWQsXG4gICAgfTtcblxuICAgIC8vIFdlIG5vdyBlbnRlciB0aGUgdHlwZS1jaGVjayBhbmQgZW1pdCBwaGFzZSBvZiBjb21waWxhdGlvbi5cbiAgICB0aGlzLnBoYXNlID0ge1xuICAgICAga2luZDogUGhhc2VLaW5kLlR5cGVDaGVja0FuZEVtaXQsXG4gICAgICBuZWVkc0VtaXQsXG4gICAgICBuZWVkc1R5cGVDaGVja0VtaXQsXG4gICAgfTtcbiAgfVxuXG4gIHJlY29yZFN1Y2Nlc3NmdWxUeXBlQ2hlY2socmVzdWx0czogTWFwPEFic29sdXRlRnNQYXRoLCBGaWxlVHlwZUNoZWNraW5nRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUua2luZCAhPT0gSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIHN1Y2Nlc3NmdWxseSBhbmFseXplZCBjb21waWxhdGlvbi5gKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGhhc2Uua2luZCAhPT0gUGhhc2VLaW5kLlR5cGVDaGVja0FuZEVtaXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEluY3JlbWVudGFsIGNvbXBpbGF0aW9uIGluIHBoYXNlICR7XG4gICAgICAgICAgUGhhc2VLaW5kW3RoaXMucGhhc2Uua2luZF19LCBleHBlY3RlZCBUeXBlQ2hlY2tgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZS50eXBlQ2hlY2tSZXN1bHRzID0gcmVzdWx0cztcbiAgfVxuXG5cbiAgcmVjb3JkU3VjY2Vzc2Z1bEVtaXQoc2Y6IHRzLlNvdXJjZUZpbGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUua2luZCAhPT0gSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIHN1Y2Nlc3NmdWxseSBhbmFseXplZCBjb21waWxhdGlvbi5gKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGUuZW1pdHRlZC5hZGQoYWJzb2x1dGVGcm9tU291cmNlRmlsZShzZikpO1xuICB9XG5cbiAgcHJpb3JBbmFseXNpc0ZvcihzZjogdHMuU291cmNlRmlsZSk6IENsYXNzUmVjb3JkW118bnVsbCB7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2ZQYXRoID0gYWJzb2x1dGVGcm9tU291cmNlRmlsZShzZik7XG5cbiAgICAvLyBJZiB0aGUgZmlsZSBoYXMgbG9naWNhbGx5IGNoYW5nZWQsIGl0cyBwcmV2aW91cyBhbmFseXNpcyBjYW5ub3QgYmUgcmV1c2VkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByaW9yQW5hbHlzaXMgPSB0aGlzLnN0ZXAucHJpb3JTdGF0ZS5wcmlvckFuYWx5c2lzO1xuICAgIGlmICghcHJpb3JBbmFseXNpcy5oYXMoc2YpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHByaW9yQW5hbHlzaXMuZ2V0KHNmKSE7XG4gIH1cblxuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHNGb3Ioc2Y6IHRzLlNvdXJjZUZpbGUpOiBGaWxlVHlwZUNoZWNraW5nRGF0YXxudWxsIHtcbiAgICBpZiAodGhpcy5waGFzZS5raW5kICE9PSBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogRXhwZWN0ZWQgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGNvbXBpbGF0aW9uLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXAgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuXG4gICAgLy8gSWYgdGhlIGZpbGUgaGFzIGxvZ2ljYWxseSBjaGFuZ2VkLCBvciBpdHMgdGVtcGxhdGUgdHlwZS1jaGVja2luZyByZXN1bHRzIGhhdmUgc2VtYW50aWNhbGx5XG4gICAgLy8gY2hhbmdlZCwgdGhlbiBwYXN0IHR5cGUtY2hlY2tpbmcgcmVzdWx0cyBjYW5ub3QgYmUgcmV1c2VkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkgfHxcbiAgICAgICAgdGhpcy5waGFzZS5uZWVkc1R5cGVDaGVja0VtaXQuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFBhc3QgcmVzdWx0cyBhbHNvIGNhbm5vdCBiZSByZXVzZWQgaWYgdGhleSdyZSBub3QgYXZhaWxhYmxlLlxuICAgIGlmICh0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzID09PSBudWxsIHx8XG4gICAgICAgICF0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzLmhhcyhzZlBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmlvclJlc3VsdHMgPSB0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzLmdldChzZlBhdGgpITtcbiAgICAvLyBJZiB0aGUgcGFzdCByZXN1bHRzIHJlbGllZCBvbiBpbmxpbmluZywgdGhleSdyZSBub3Qgc2FmZSBmb3IgcmV1c2UuXG4gICAgaWYgKHByaW9yUmVzdWx0cy5oYXNJbmxpbmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpb3JSZXN1bHRzO1xuICB9XG5cbiAgc2FmZVRvU2tpcEVtaXQoc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggY29tcGlsYXRpb24sIGl0J3MgbmV2ZXIgc2FmZSB0byBza2lwIGFuIGVtaXQuXG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuXG4gICAgLy8gSWYgdGhlIGZpbGUgaGFzIGl0c2VsZiBsb2dpY2FsbHkgY2hhbmdlZCwgaXQgbXVzdCBiZSBlbWl0dGVkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waGFzZS5raW5kICE9PSBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogRXhwZWN0ZWQgc3VjY2Vzc2Z1bCBhbmFseXNpcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbWl0IGZpbGVzYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgZHVyaW5nIGFuYWx5c2lzIGl0IHdhcyBkZXRlcm1pbmVkIHRoYXQgdGhpcyBmaWxlIGhhcyBzZW1hbnRpY2FsbHkgY2hhbmdlZCwgaXQgbXVzdCBiZVxuICAgIC8vIGVtaXR0ZWQuXG4gICAgaWYgKHRoaXMucGhhc2UubmVlZHNFbWl0LmhhcyhzZlBhdGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhbGx5IGl0IHNob3VsZCBiZSBzYWZlIHRvIGFzc3VtZSBoZXJlIHRoYXQgdGhlIGZpbGUgd2FzIHByZXZpb3VzbHkgZW1pdHRlZCBieSB0aGUgbGFzdFxuICAgIC8vIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24uIEhvd2V2ZXIsIGFzIGEgZGVmZW5zZS1pbi1kZXB0aCBhZ2FpbnN0IGluY29ycmVjdG5lc3MsIHdlIGV4cGxpY2l0bHlcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBsYXN0IGVtaXQgaW5jbHVkZWQgdGhpcyBmaWxlLCBhbmQgcmUtZW1pdCBpdCBvdGhlcndpc2UuXG4gICAgcmV0dXJuIHRoaXMuc3RlcC5wcmlvclN0YXRlLmVtaXR0ZWQuaGFzKHNmUGF0aCk7XG4gIH1cbn1cbiJdfQ==
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jcmVtZW50YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NyYy9pbmNyZW1lbnRhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBSUgsMkVBQWtGO0lBQ2xGLDZEQUFtRDtJQUNuRCxpRkFBcUY7SUFHckYsa0ZBQW1FO0lBRW5FLDZGQUEwRDtJQUUxRCwyR0FBMEQ7SUFDMUQsK0VBQWdIO0lBV2hIOztPQUVHO0lBQ0gsSUFBSyxTQUdKO0lBSEQsV0FBSyxTQUFTO1FBQ1osaURBQVEsQ0FBQTtRQUNSLGlFQUFnQixDQUFBO0lBQ2xCLENBQUMsRUFISSxTQUFTLEtBQVQsU0FBUyxRQUdiO0lBeUJEOzs7O09BSUc7SUFDSDtRQVdFLGdDQUNJLEtBQXVCLEVBQVcsUUFBNkIsRUFDdkQsUUFBMEMsRUFBVSxJQUEwQjtZQURwRCxhQUFRLEdBQVIsUUFBUSxDQUFxQjtZQUN2RCxhQUFRLEdBQVIsUUFBUSxDQUFrQztZQUFVLFNBQUksR0FBSixJQUFJLENBQXNCO1lBQ3hGLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBRXBCLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHO2dCQUNYLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUTtnQkFDeEIsdUJBQXVCLEVBQ25CLElBQUksd0NBQXVCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3pGLENBQUM7UUFDSixDQUFDO1FBRUQ7O1dBRUc7UUFDSSw0QkFBSyxHQUFaLFVBQWEsT0FBbUIsRUFBRSxRQUEwQztZQUUxRSxJQUFNLEtBQUssR0FBcUI7Z0JBQzlCLElBQUksRUFBRSw0QkFBb0IsQ0FBQyxLQUFLO2FBQ2pDLENBQUM7WUFDRixPQUFPLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUkseUNBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFFTSxrQ0FBVyxHQUFsQixVQUNJLE9BQW1CLEVBQUUsV0FBNkMsRUFBRSxVQUFzQixFQUMxRixRQUEwQixFQUFFLHFCQUErQyxFQUMzRSxJQUFrQjtZQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQVMsQ0FBQyxjQUFjLEVBQUU7O2dCQUM1QyxJQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO2dCQUMzRCxJQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFpQixxQkFBcUIsYUFBckIscUJBQXFCLGNBQXJCLHFCQUFxQixHQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUdsRixJQUFJLGFBQXVDLENBQUM7Z0JBQzVDLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckIsS0FBSyw0QkFBb0IsQ0FBQyxLQUFLO3dCQUM3Qix1RkFBdUY7d0JBQ3ZGLCtCQUErQjt3QkFDL0IsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUM1RCxLQUFLLDRCQUFvQixDQUFDLFFBQVE7d0JBQ2hDLHFGQUFxRjt3QkFDckYsc0ZBQXNGO3dCQUN0RixXQUFXO3dCQUNYLGFBQWEsR0FBRyxRQUFRLENBQUM7d0JBQ3pCLE1BQU07b0JBQ1IsS0FBSyw0QkFBb0IsQ0FBQyxLQUFLO3dCQUM3QixvRkFBb0Y7d0JBQ3BGLDhFQUE4RTt3QkFDOUUsYUFBYSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQzs7NEJBQzNDLEtBQXFCLElBQUEsS0FBQSxpQkFBQSxRQUFRLENBQUMsd0JBQXdCLENBQUEsZ0JBQUEsNEJBQUU7Z0NBQW5ELElBQU0sTUFBTSxXQUFBO2dDQUNmLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDdEM7Ozs7Ozs7Ozs7NEJBQ0QsS0FBMkIsSUFBQSxLQUFBLGlCQUFBLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQSxnQkFBQSw0QkFBRTtnQ0FBckQsSUFBTSxZQUFZLFdBQUE7Z0NBQ3JCLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs2QkFDeEM7Ozs7Ozs7Ozt3QkFDRCxNQUFNO2lCQUNUO2dCQUVELElBQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBRTNDLElBQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDNUUsSUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDLElBQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxvQ0FBc0IsQ0FBQyxFQUFFLENBQUMsRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7O29CQUVwRixLQUF3QyxJQUFBLEtBQUEsaUJBQUEsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFBLGdCQUFBLDRCQUFFO3dCQUE3RCxJQUFNLHlCQUF5QixXQUFBO3dCQUNsQyxJQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUMzRCxJQUFNLE1BQU0sR0FBRyxvQ0FBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDMUMsdUZBQXVGO3dCQUN2RixXQUFXO3dCQUNYLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBRTlCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTs0QkFDcEIsdUZBQXVGOzRCQUN2Rix5RkFBeUY7NEJBQ3pGLDhDQUE4Qzs0QkFFOUMsc0ZBQXNGOzRCQUN0RixXQUFXOzRCQUNYLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO2dDQUNoRCxTQUFTOzZCQUNWOzRCQUVELDBGQUEwRjs0QkFDMUYsNEVBQTRFOzRCQUM1RSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0NBQ2xELFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFFLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsRUFBRTtnQ0FDekQsU0FBUzs2QkFDVjs0QkFFRCx1RkFBdUY7NEJBQ3ZGLHlFQUF5RTt5QkFDMUU7d0JBRUQsd0ZBQXdGO3dCQUN4Rix5QkFBeUI7d0JBQ3pCLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFOzRCQUN4QixPQUFPLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7eUJBQzNEO3dCQUVELGlEQUFpRDt3QkFDakQsd0JBQXdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN0Qzs7Ozs7Ozs7OztvQkFFRCw2RUFBNkU7b0JBQzdFLEtBQThCLElBQUEsbUJBQUEsaUJBQUEsY0FBYyxDQUFBLDhDQUFBLDBFQUFFO3dCQUF6QyxJQUFNLGVBQWUsMkJBQUE7d0JBQ3hCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxxQkFBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7cUJBQzNEOzs7Ozs7Ozs7Z0JBRUQsNkZBQTZGO2dCQUM3RixTQUFTO2dCQUNULElBQU0sUUFBUSxHQUFHLElBQUkseUNBQW1CLEVBQUUsQ0FBQztnQkFDM0MsSUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQzlELGFBQWEsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixDQUFDLENBQUM7O29CQUU1Riw2RkFBNkY7b0JBQzdGLG9GQUFvRjtvQkFDcEYsY0FBYztvQkFDZCxLQUFxQixJQUFBLDZCQUFBLGlCQUFBLHdCQUF3QixDQUFBLGtFQUFBLHdHQUFFO3dCQUExQyxJQUFNLE1BQU0scUNBQUE7d0JBQ2YsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyQzs7Ozs7Ozs7O2dCQUVELDhGQUE4RjtnQkFDOUYscURBQXFEO2dCQUNyRCxJQUFNLEtBQUssR0FBMEI7b0JBQ25DLElBQUksRUFBRSw0QkFBb0IsQ0FBQyxLQUFLO29CQUNoQyx3QkFBd0IsMEJBQUE7b0JBQ3hCLG9CQUFvQixzQkFBQTtvQkFDcEIsaUJBQWlCLEVBQUUsYUFBYTtpQkFDakMsQ0FBQztnQkFFRixPQUFPLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7b0JBQzlELFVBQVUsRUFBRSxhQUFhO29CQUN6Qix1QkFBdUIseUJBQUE7aUJBQ3hCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNCQUFJLHlDQUFLO2lCQUFUO2dCQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyQixDQUFDOzs7V0FBQTtRQUVELHNCQUFJLDJEQUF1QjtpQkFBM0I7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUMxQyxNQUFNLElBQUksS0FBSyxDQUNYLDZFQUE2RSxDQUFDLENBQUM7aUJBQ3BGO2dCQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztZQUM1QyxDQUFDOzs7V0FBQTtRQUVELHlEQUF3QixHQUF4QixVQUF5QixhQUE0Qjs7WUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBcUIsQ0FBQyxDQUFDO2FBQ3REO1lBRUssSUFBQSxLQUE0QyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxFQUF4RixTQUFTLGVBQUEsRUFBRSxrQkFBa0Isd0JBQUEsRUFBRSxRQUFRLGNBQWlELENBQUM7WUFFaEcsOERBQThEO1lBQzlELElBQUksT0FBNEIsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUN0Qix1RUFBdUU7Z0JBQ3ZFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNMLDhGQUE4RjtnQkFDOUYsK0JBQStCO2dCQUMvQixPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7O29CQUVoRCxzREFBc0Q7b0JBQ3RELEtBQXFCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFBLGdCQUFBLDRCQUFFO3dCQUFuRCxJQUFNLE1BQU0sV0FBQTt3QkFDZixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN4Qjs7Ozs7Ozs7OztvQkFFRCx5REFBeUQ7b0JBQ3pELEtBQXFCLElBQUEsY0FBQSxpQkFBQSxTQUFTLENBQUEsb0NBQUEsMkRBQUU7d0JBQTNCLElBQU0sTUFBTSxzQkFBQTt3QkFDZixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN4Qjs7Ozs7Ozs7O2FBQ0Y7WUFFRCw2RkFBNkY7WUFDN0YsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLDRCQUFvQixDQUFDLFFBQVE7Z0JBQ25DLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixnQkFBZ0IsRUFBRSxRQUFRO2dCQUMxQixhQUFhLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFO2dCQUNqRCxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixPQUFPLFNBQUE7YUFDUixDQUFDO1lBRUYsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7Z0JBQ2hDLFNBQVMsV0FBQTtnQkFDVCxrQkFBa0Isb0JBQUE7YUFDbkIsQ0FBQztRQUNKLENBQUM7UUFFRCwwREFBeUIsR0FBekIsVUFBMEIsT0FBa0Q7WUFDMUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyw0QkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQzthQUNoRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXNCLENBQUMsQ0FBQzthQUN2RDtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLENBQUM7UUFHRCxxREFBb0IsR0FBcEIsVUFBcUIsRUFBaUI7WUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyw0QkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQzthQUNoRjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxpREFBZ0IsR0FBaEIsVUFBaUIsRUFBaUI7WUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQU0sTUFBTSxHQUFHLG9DQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTFDLDZFQUE2RTtZQUM3RSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCw0REFBMkIsR0FBM0IsVUFBNEIsRUFBaUI7WUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQzthQUNoRjtZQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxJQUFNLE1BQU0sR0FBRyxvQ0FBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUxQyw2RkFBNkY7WUFDN0YsNkRBQTZEO1lBQzdELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDN0MsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELCtEQUErRDtZQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixLQUFLLElBQUk7Z0JBQzlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN0RCxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQ3hFLHNFQUFzRTtZQUN0RSxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsK0NBQWMsR0FBZCxVQUFlLEVBQWlCO1lBQzlCLG1FQUFtRTtZQUNuRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUN0QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBTSxNQUFNLEdBQUcsb0NBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFMUMsZ0VBQWdFO1lBQ2hFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDWCw4RUFBOEUsQ0FBQyxDQUFDO2FBQ3JGO1lBRUQsMkZBQTJGO1lBQzNGLFdBQVc7WUFDWCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELDhGQUE4RjtZQUM5Riw4RkFBOEY7WUFDOUYseUVBQXlFO1lBQ3pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0gsNkJBQUM7SUFBRCxDQUFDLEFBclRELElBcVRDO0lBclRZLHdEQUFzQjtJQXVUbkM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxTQUFTLG9CQUFvQixDQUFDLEVBQWlCO1FBQzdDLElBQU0sY0FBYyxHQUFHLHFDQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQU0sWUFBWSxHQUFJLGNBQWtELENBQUMsK0JBQWMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixPQUFPLFlBQVksQ0FBQztTQUNyQjthQUFNO1lBQ0wsT0FBTyxjQUFjLENBQUM7U0FDdkI7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2Fic29sdXRlRnJvbVNvdXJjZUZpbGUsIEFic29sdXRlRnNQYXRoLCByZXNvbHZlfSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge1BlcmZQaGFzZSwgUGVyZlJlY29yZGVyfSBmcm9tICcuLi8uLi9wZXJmJztcbmltcG9ydCB7TWF5YmVTb3VyY2VGaWxlV2l0aE9yaWdpbmFsRmlsZSwgTmdPcmlnaW5hbEZpbGV9IGZyb20gJy4uLy4uL3Byb2dyYW1fZHJpdmVyJztcbmltcG9ydCB7Q2xhc3NSZWNvcmQsIFRyYWl0Q29tcGlsZXJ9IGZyb20gJy4uLy4uL3RyYW5zZm9ybSc7XG5pbXBvcnQge0ZpbGVUeXBlQ2hlY2tpbmdEYXRhfSBmcm9tICcuLi8uLi90eXBlY2hlY2snO1xuaW1wb3J0IHt0b1VucmVkaXJlY3RlZFNvdXJjZUZpbGV9IGZyb20gJy4uLy4uL3V0aWwvc3JjL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtJbmNyZW1lbnRhbEJ1aWxkfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtTZW1hbnRpY0RlcEdyYXBoVXBkYXRlcn0gZnJvbSAnLi4vc2VtYW50aWNfZ3JhcGgnO1xuXG5pbXBvcnQge0ZpbGVEZXBlbmRlbmN5R3JhcGh9IGZyb20gJy4vZGVwZW5kZW5jeV90cmFja2luZyc7XG5pbXBvcnQge0FuYWx5emVkSW5jcmVtZW50YWxTdGF0ZSwgRGVsdGFJbmNyZW1lbnRhbFN0YXRlLCBJbmNyZW1lbnRhbFN0YXRlLCBJbmNyZW1lbnRhbFN0YXRlS2luZH0gZnJvbSAnLi9zdGF0ZSc7XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIGNvbXBpbGF0aW9uIGJlaW5nIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGN1cnJlbnQgb25lLFxuICogaW5jbHVkaW5nIHRoZSBkZWx0YSBvZiBmaWxlcyB3aGljaCBoYXZlIGxvZ2ljYWxseSBjaGFuZ2VkIGFuZCBuZWVkIHRvIGJlIHJlYW5hbHl6ZWQuXG4gKi9cbmludGVyZmFjZSBJbmNyZW1lbnRhbFN0ZXAge1xuICBwcmlvclN0YXRlOiBBbmFseXplZEluY3JlbWVudGFsU3RhdGU7XG4gIGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzOiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xufVxuXG4vKipcbiAqIERpc2NyaW1pbmFudCBvZiB0aGUgYFBoYXNlYCB0eXBlIHVuaW9uLlxuICovXG5lbnVtIFBoYXNlS2luZCB7XG4gIEFuYWx5c2lzLFxuICBUeXBlQ2hlY2tBbmRFbWl0LFxufVxuXG4vKipcbiAqIEFuIGluY3JlbWVudGFsIGNvbXBpbGF0aW9uIHVuZGVyZ29pbmcgYW5hbHlzaXMsIGFuZCBidWlsZGluZyBhIHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGguXG4gKi9cbmludGVyZmFjZSBBbmFseXNpc1BoYXNlIHtcbiAga2luZDogUGhhc2VLaW5kLkFuYWx5c2lzO1xuICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG59XG5cbi8qKlxuICogQW4gaW5jcmVtZW50YWwgY29tcGlsYXRpb24gdGhhdCBjb21wbGV0ZWQgYW5hbHlzaXMgYW5kIGlzIHVuZGVyZ29pbmcgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBhbmRcbiAqIGVtaXQuXG4gKi9cbmludGVyZmFjZSBUeXBlQ2hlY2tBbmRFbWl0UGhhc2Uge1xuICBraW5kOiBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdDtcbiAgbmVlZHNFbWl0OiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuICBuZWVkc1R5cGVDaGVja0VtaXQ6IFNldDxBYnNvbHV0ZUZzUGF0aD47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBhIGNvbXBpbGF0aW9uLlxuICovXG50eXBlIFBoYXNlID0gQW5hbHlzaXNQaGFzZXxUeXBlQ2hlY2tBbmRFbWl0UGhhc2U7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgaW5jcmVtZW50YWwgcG9ydGlvbiBvZiBhbiBBbmd1bGFyIGNvbXBpbGF0aW9uLCBhbGxvd2luZyBmb3IgcmV1c2Ugb2YgYSBwcmlvclxuICogY29tcGlsYXRpb24gaWYgYXZhaWxhYmxlLCBhbmQgcHJvZHVjaW5nIGFuIG91dHB1dCBzdGF0ZSBmb3IgcmV1c2Ugb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gaW4gYVxuICogZnV0dXJlIG9uZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsQ29tcGlsYXRpb24gaW1wbGVtZW50cyBJbmNyZW1lbnRhbEJ1aWxkPENsYXNzUmVjb3JkLCBGaWxlVHlwZUNoZWNraW5nRGF0YT4ge1xuICBwcml2YXRlIHBoYXNlOiBQaGFzZTtcblxuICAvKipcbiAgICogYEluY3JlbWVudGFsU3RhdGVgIG9mIHRoaXMgY29tcGlsYXRpb24gaWYgaXQgd2VyZSB0byBiZSByZXVzZWQgaW4gYSBzdWJzZXF1ZW50IGluY3JlbWVudGFsXG4gICAqIGNvbXBpbGF0aW9uIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICpcbiAgICogRXhwb3NlZCB2aWEgdGhlIGBzdGF0ZWAgcmVhZC1vbmx5IGdldHRlci5cbiAgICovXG4gIHByaXZhdGUgX3N0YXRlOiBJbmNyZW1lbnRhbFN0YXRlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICBzdGF0ZTogSW5jcmVtZW50YWxTdGF0ZSwgcmVhZG9ubHkgZGVwR3JhcGg6IEZpbGVEZXBlbmRlbmN5R3JhcGgsXG4gICAgICBwcml2YXRlIHZlcnNpb25zOiBNYXA8QWJzb2x1dGVGc1BhdGgsIHN0cmluZz58bnVsbCwgcHJpdmF0ZSBzdGVwOiBJbmNyZW1lbnRhbFN0ZXB8bnVsbCkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG5cbiAgICAvLyBUaGUgY29tcGlsYXRpb24gYmVnaW5zIGluIGFuYWx5c2lzIHBoYXNlLlxuICAgIHRoaXMucGhhc2UgPSB7XG4gICAgICBraW5kOiBQaGFzZUtpbmQuQW5hbHlzaXMsXG4gICAgICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjpcbiAgICAgICAgICBuZXcgU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIoc3RlcCAhPT0gbnVsbCA/IHN0ZXAucHJpb3JTdGF0ZS5zZW1hbnRpY0RlcEdyYXBoIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbiBhIGZyZXNoIGBJbmNyZW1lbnRhbENvbXBpbGF0aW9uYC5cbiAgICovXG4gIHN0YXRpYyBmcmVzaChwcm9ncmFtOiB0cy5Qcm9ncmFtLCB2ZXJzaW9uczogTWFwPEFic29sdXRlRnNQYXRoLCBzdHJpbmc+fG51bGwpOlxuICAgICAgSW5jcmVtZW50YWxDb21waWxhdGlvbiB7XG4gICAgY29uc3Qgc3RhdGU6IEluY3JlbWVudGFsU3RhdGUgPSB7XG4gICAgICBraW5kOiBJbmNyZW1lbnRhbFN0YXRlS2luZC5GcmVzaCxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxDb21waWxhdGlvbihzdGF0ZSwgbmV3IEZpbGVEZXBlbmRlbmN5R3JhcGgoKSwgdmVyc2lvbnMsIC8qIHJldXNlICovIG51bGwpO1xuICB9XG5cbiAgc3RhdGljIGluY3JlbWVudGFsKFxuICAgICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgbmV3VmVyc2lvbnM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgc3RyaW5nPnxudWxsLCBvbGRQcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICAgICAgb2xkU3RhdGU6IEluY3JlbWVudGFsU3RhdGUsIG1vZGlmaWVkUmVzb3VyY2VGaWxlczogU2V0PEFic29sdXRlRnNQYXRoPnxudWxsLFxuICAgICAgcGVyZjogUGVyZlJlY29yZGVyKTogSW5jcmVtZW50YWxDb21waWxhdGlvbiB7XG4gICAgcmV0dXJuIHBlcmYuaW5QaGFzZShQZXJmUGhhc2UuUmVjb25jaWxpYXRpb24sICgpID0+IHtcbiAgICAgIGNvbnN0IHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcyA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCk7XG4gICAgICBjb25zdCBjaGFuZ2VkUmVzb3VyY2VGaWxlcyA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KG1vZGlmaWVkUmVzb3VyY2VGaWxlcyA/PyBbXSk7XG5cblxuICAgICAgbGV0IHByaW9yQW5hbHlzaXM6IEFuYWx5emVkSW5jcmVtZW50YWxTdGF0ZTtcbiAgICAgIHN3aXRjaCAob2xkU3RhdGUua2luZCkge1xuICAgICAgICBjYXNlIEluY3JlbWVudGFsU3RhdGVLaW5kLkZyZXNoOlxuICAgICAgICAgIC8vIFNpbmNlIHRoaXMgbGluZSBvZiBwcm9ncmFtIGhhcyBuZXZlciBiZWVuIHN1Y2Nlc3NmdWxseSBhbmFseXplZCB0byBiZWdpbiB3aXRoLCB0cmVhdFxuICAgICAgICAgIC8vIHRoaXMgYXMgYSBmcmVzaCBjb21waWxhdGlvbi5cbiAgICAgICAgICByZXR1cm4gSW5jcmVtZW50YWxDb21waWxhdGlvbi5mcmVzaChwcm9ncmFtLCBuZXdWZXJzaW9ucyk7XG4gICAgICAgIGNhc2UgSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQ6XG4gICAgICAgICAgLy8gVGhlIG1vc3QgcmVjZW50IHByb2dyYW0gd2FzIGFuYWx5emVkIHN1Y2Nlc3NmdWxseSwgc28gd2UgY2FuIHVzZSB0aGF0IGFzIG91ciBwcmlvclxuICAgICAgICAgIC8vIHN0YXRlIGFuZCBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueSBvdGhlciBkZWx0YXMgZXhjZXB0IGNoYW5nZXMgaW4gdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgLy8gcHJvZ3JhbS5cbiAgICAgICAgICBwcmlvckFuYWx5c2lzID0gb2xkU3RhdGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5jcmVtZW50YWxTdGF0ZUtpbmQuRGVsdGE6XG4gICAgICAgICAgLy8gVGhlcmUgaXMgYW4gYW5jZXN0b3IgcHJvZ3JhbSB3aGljaCB3YXMgYW5hbHl6ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBjYW4gYmUgdXNlZCBhcyBhXG4gICAgICAgICAgLy8gc3RhcnRpbmcgcG9pbnQsIGJ1dCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0J3MgY2hhbmdlZCBzaW5jZSB0aGF0IHByb2dyYW0uXG4gICAgICAgICAgcHJpb3JBbmFseXNpcyA9IG9sZFN0YXRlLmxhc3RBbmFseXplZFN0YXRlO1xuICAgICAgICAgIGZvciAoY29uc3Qgc2ZQYXRoIG9mIG9sZFN0YXRlLnBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcykge1xuICAgICAgICAgICAgcGh5c2ljYWxseUNoYW5nZWRUc0ZpbGVzLmFkZChzZlBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiBvbGRTdGF0ZS5jaGFuZ2VkUmVzb3VyY2VGaWxlcykge1xuICAgICAgICAgICAgY2hhbmdlZFJlc291cmNlRmlsZXMuYWRkKHJlc291cmNlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGRWZXJzaW9ucyA9IHByaW9yQW5hbHlzaXMudmVyc2lvbnM7XG5cbiAgICAgIGNvbnN0IG9sZEZpbGVzQXJyYXkgPSBvbGRQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkubWFwKHRvT3JpZ2luYWxTb3VyY2VGaWxlKTtcbiAgICAgIGNvbnN0IG9sZEZpbGVzID0gbmV3IFNldChvbGRGaWxlc0FycmF5KTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRUc0ZpbGVzID0gbmV3IFNldChvbGRGaWxlc0FycmF5Lm1hcChzZiA9PiBhYnNvbHV0ZUZyb21Tb3VyY2VGaWxlKHNmKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3NpYmx5UmVkaXJlY3RlZE5ld0ZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICAgIGNvbnN0IHNmID0gdG9PcmlnaW5hbFNvdXJjZUZpbGUocG9zc2libHlSZWRpcmVjdGVkTmV3RmlsZSk7XG4gICAgICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuICAgICAgICAvLyBTaW5jZSB3ZSdyZSBzZWVpbmcgYSBmaWxlIGluIHRoZSBpbmNvbWluZyBwcm9ncmFtIHdpdGggdGhpcyBuYW1lLCBpdCBjYW4ndCBoYXZlIGJlZW5cbiAgICAgICAgLy8gZGVsZXRlZC5cbiAgICAgICAgZGVsZXRlZFRzRmlsZXMuZGVsZXRlKHNmUGF0aCk7XG5cbiAgICAgICAgaWYgKG9sZEZpbGVzLmhhcyhzZikpIHtcbiAgICAgICAgICAvLyBUaGlzIHNvdXJjZSBmaWxlIGhhcyB0aGUgc2FtZSBvYmplY3QgaWRlbnRpdHkgYXMgaW4gdGhlIHByZXZpb3VzIHByb2dyYW0uIFdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgaXQncyByZWFsbHkgdGhlIHNhbWUgZmlsZSwgb3IgaWYgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHZlcnNpb25zIHNpbmNlIHRoZVxuICAgICAgICAgIC8vIGxhc3QgcHJvZ3JhbSB3aXRob3V0IGNoYW5naW5nIGl0cyBpZGVudGl0eS5cblxuICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoZW4gdGhpcyBpcyB0aGUgc2FtZSBmaWxlLCBhbmQgd2UgY2FuXG4gICAgICAgICAgLy8gc2tpcCBpdC5cbiAgICAgICAgICBpZiAob2xkVmVyc2lvbnMgPT09IG51bGwgfHwgbmV3VmVyc2lvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIGEgdmVyc2lvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBmaWxlIGZyb20gYm90aCB0aGUgcHJpb3IgYW5kIHRoZSBjdXJyZW50IHByb2dyYW0sIGFuZFxuICAgICAgICAgIC8vIHRoYXQgdmVyc2lvbiBpcyB0aGUgc2FtZSwgdGhlbiB0aGlzIGlzIHRoZSBzYW1lIGZpbGUsIGFuZCB3ZSBjYW4gc2tpcCBpdC5cbiAgICAgICAgICBpZiAob2xkVmVyc2lvbnMuaGFzKHNmUGF0aCkgJiYgbmV3VmVyc2lvbnMuaGFzKHNmUGF0aCkgJiZcbiAgICAgICAgICAgICAgb2xkVmVyc2lvbnMuZ2V0KHNmUGF0aCkhID09PSBuZXdWZXJzaW9ucy5nZXQoc2ZQYXRoKSEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgdGhlIGZpbGUgaGFzIGNoYW5nZWQuIEVpdGhlciBpdHMgdmVyc2lvbnMgZGlkbid0IG1hdGNoLCBvciB3ZVxuICAgICAgICAgIC8vIHdlcmUgbWlzc2luZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IGl0IG9uIG9uZSBzaWRlIGZvciBzb21lIHJlYXNvbi5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhaWwgb3V0IGlmIGEgLmQudHMgZmlsZSBjaGFuZ2VzIC0gdGhlIHNlbWFudGljIGRlcCBncmFwaCBpcyBub3QgYWJsZSB0byBwcm9jZXNzIHN1Y2hcbiAgICAgICAgLy8gY2hhbmdlcyBjb3JyZWN0bHkgeWV0LlxuICAgICAgICBpZiAoc2YuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gSW5jcmVtZW50YWxDb21waWxhdGlvbi5mcmVzaChwcm9ncmFtLCBuZXdWZXJzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlsZSBoYXMgY2hhbmdlZCBwaHlzaWNhbGx5LCBzbyByZWNvcmQgaXQuXG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcy5hZGQoc2ZQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGFueSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkIGZyb20gdGhlIGxpc3Qgb2YgcGh5c2ljYWwgY2hhbmdlcy5cbiAgICAgIGZvciAoY29uc3QgZGVsZXRlZEZpbGVOYW1lIG9mIGRlbGV0ZWRUc0ZpbGVzKSB7XG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcy5kZWxldGUocmVzb2x2ZShkZWxldGVkRmlsZU5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoZSBwcmlvciBkZXBlbmRlbmN5IGdyYXBoIHRvIHByb2plY3QgcGh5c2ljYWwgY2hhbmdlcyBpbnRvIGEgc2V0IG9mIGxvZ2ljYWxseSBjaGFuZ2VkXG4gICAgICAvLyBmaWxlcy5cbiAgICAgIGNvbnN0IGRlcEdyYXBoID0gbmV3IEZpbGVEZXBlbmRlbmN5R3JhcGgoKTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzID0gZGVwR3JhcGgudXBkYXRlV2l0aFBoeXNpY2FsQ2hhbmdlcyhcbiAgICAgICAgICBwcmlvckFuYWx5c2lzLmRlcEdyYXBoLCBwaHlzaWNhbGx5Q2hhbmdlZFRzRmlsZXMsIGRlbGV0ZWRUc0ZpbGVzLCBjaGFuZ2VkUmVzb3VyY2VGaWxlcyk7XG5cbiAgICAgIC8vIFBoeXNpY2FsbHkgY2hhbmdlZCBmaWxlcyBhcmVuJ3QgbmVjZXNzYXJpbHkgY291bnRlZCBhcyBsb2dpY2FsbHkgY2hhbmdlZCBieSB0aGUgZGVwZW5kZW5jeVxuICAgICAgLy8gZ3JhcGggKGZpbGVzIGRvIG5vdCBoYXZlIGVkZ2VzIHRvIHRoZW1zZWx2ZXMpLCBzbyBhZGQgdGhlbSB0byB0aGUgbG9naWNhbCBjaGFuZ2VzXG4gICAgICAvLyBleHBsaWNpdGx5LlxuICAgICAgZm9yIChjb25zdCBzZlBhdGggb2YgcGh5c2ljYWxseUNoYW5nZWRUc0ZpbGVzKSB7XG4gICAgICAgIGxvZ2ljYWxseUNoYW5nZWRUc0ZpbGVzLmFkZChzZlBhdGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCBvZmYgaW4gYSBgRGVsdGFJbmNyZW1lbnRhbFN0YXRlYCBhcyBhIGRlbHRhIGFnYWluc3QgdGhlIHByZXZpb3VzIHN1Y2Nlc3NmdWwgYW5hbHlzaXMsXG4gICAgICAvLyB1bnRpbCB0aGlzIGNvbXBpbGF0aW9uIGNvbXBsZXRlcyBpdHMgb3duIGFuYWx5c2lzLlxuICAgICAgY29uc3Qgc3RhdGU6IERlbHRhSW5jcmVtZW50YWxTdGF0ZSA9IHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxTdGF0ZUtpbmQuRGVsdGEsXG4gICAgICAgIHBoeXNpY2FsbHlDaGFuZ2VkVHNGaWxlcyxcbiAgICAgICAgY2hhbmdlZFJlc291cmNlRmlsZXMsXG4gICAgICAgIGxhc3RBbmFseXplZFN0YXRlOiBwcmlvckFuYWx5c2lzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGF0aW9uKHN0YXRlLCBkZXBHcmFwaCwgbmV3VmVyc2lvbnMsIHtcbiAgICAgICAgcHJpb3JTdGF0ZTogcHJpb3JBbmFseXNpcyxcbiAgICAgICAgbG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBJbmNyZW1lbnRhbFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cblxuICBnZXQgc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIoKTogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIge1xuICAgIGlmICh0aGlzLnBoYXNlLmtpbmQgIT09IFBoYXNlS2luZC5BbmFseXNpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogQ2Fubm90IHVwZGF0ZSB0aGUgU2VtYW50aWNEZXBHcmFwaCBhZnRlciBhbmFseXNpcyBjb21wbGV0ZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGhhc2Uuc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG4gIH1cblxuICByZWNvcmRTdWNjZXNzZnVsQW5hbHlzaXModHJhaXRDb21waWxlcjogVHJhaXRDb21waWxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBoYXNlLmtpbmQgIT09IFBoYXNlS2luZC5BbmFseXNpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogSW5jcmVtZW50YWwgY29tcGlsYXRpb24gaW4gcGhhc2UgJHtcbiAgICAgICAgICBQaGFzZUtpbmRbdGhpcy5waGFzZS5raW5kXX0sIGV4cGVjdGVkIEFuYWx5c2lzYCk7XG4gICAgfVxuXG4gICAgY29uc3Qge25lZWRzRW1pdCwgbmVlZHNUeXBlQ2hlY2tFbWl0LCBuZXdHcmFwaH0gPSB0aGlzLnBoYXNlLnNlbWFudGljRGVwR3JhcGhVcGRhdGVyLmZpbmFsaXplKCk7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHNldCBvZiBmaWxlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBlbWl0dGVkLlxuICAgIGxldCBlbWl0dGVkOiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IG51bGwpIHtcbiAgICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5vIHByaW9yIGNvbXBpbGF0aW9uLCBubyBmaWxlcyBoYXZlIHlldCBiZWVuIGVtaXR0ZWQuXG4gICAgICBlbWl0dGVkID0gbmV3IFNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZWdpbiB3aXRoIHRoZSBmaWxlcyBlbWl0dGVkIGJ5IHRoZSBwcmlvciBzdWNjZXNzZnVsIGNvbXBpbGF0aW9uLCBidXQgcmVtb3ZlIHRob3NlIHdoaWNoIHdlXG4gICAgICAvLyBrbm93IG5lZWQgdG8gYmVlIHJlLWVtaXR0ZWQuXG4gICAgICBlbWl0dGVkID0gbmV3IFNldCh0aGlzLnN0ZXAucHJpb3JTdGF0ZS5lbWl0dGVkKTtcblxuICAgICAgLy8gRmlsZXMgbmVlZCByZS1lbWl0dGVkIGlmIHRoZXkndmUgbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICBmb3IgKGNvbnN0IHNmUGF0aCBvZiB0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMpIHtcbiAgICAgICAgZW1pdHRlZC5kZWxldGUoc2ZQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsZXMgbmVlZCByZS1lbWl0dGVkIGlmIHRoZXkndmUgc2VtYW50aWNhbGx5IGNoYW5nZWQuXG4gICAgICBmb3IgKGNvbnN0IHNmUGF0aCBvZiBuZWVkc0VtaXQpIHtcbiAgICAgICAgZW1pdHRlZC5kZWxldGUoc2ZQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFuc2l0aW9uIHRvIGEgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGNvbXBpbGF0aW9uLiBBdCB0aGlzIHBvaW50LCBhIHN1YnNlcXVlbnQgY29tcGlsYXRpb25cbiAgICAvLyBjb3VsZCB1c2UgdGhpcyBzdGF0ZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAga2luZDogSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQsXG4gICAgICB2ZXJzaW9uczogdGhpcy52ZXJzaW9ucyxcbiAgICAgIGRlcEdyYXBoOiB0aGlzLmRlcEdyYXBoLFxuICAgICAgc2VtYW50aWNEZXBHcmFwaDogbmV3R3JhcGgsXG4gICAgICBwcmlvckFuYWx5c2lzOiB0cmFpdENvbXBpbGVyLmdldEFuYWx5emVkUmVjb3JkcygpLFxuICAgICAgdHlwZUNoZWNrUmVzdWx0czogbnVsbCxcbiAgICAgIGVtaXR0ZWQsXG4gICAgfTtcblxuICAgIC8vIFdlIG5vdyBlbnRlciB0aGUgdHlwZS1jaGVjayBhbmQgZW1pdCBwaGFzZSBvZiBjb21waWxhdGlvbi5cbiAgICB0aGlzLnBoYXNlID0ge1xuICAgICAga2luZDogUGhhc2VLaW5kLlR5cGVDaGVja0FuZEVtaXQsXG4gICAgICBuZWVkc0VtaXQsXG4gICAgICBuZWVkc1R5cGVDaGVja0VtaXQsXG4gICAgfTtcbiAgfVxuXG4gIHJlY29yZFN1Y2Nlc3NmdWxUeXBlQ2hlY2socmVzdWx0czogTWFwPEFic29sdXRlRnNQYXRoLCBGaWxlVHlwZUNoZWNraW5nRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUua2luZCAhPT0gSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIHN1Y2Nlc3NmdWxseSBhbmFseXplZCBjb21waWxhdGlvbi5gKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGhhc2Uua2luZCAhPT0gUGhhc2VLaW5kLlR5cGVDaGVja0FuZEVtaXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEluY3JlbWVudGFsIGNvbXBpbGF0aW9uIGluIHBoYXNlICR7XG4gICAgICAgICAgUGhhc2VLaW5kW3RoaXMucGhhc2Uua2luZF19LCBleHBlY3RlZCBUeXBlQ2hlY2tgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZS50eXBlQ2hlY2tSZXN1bHRzID0gcmVzdWx0cztcbiAgfVxuXG5cbiAgcmVjb3JkU3VjY2Vzc2Z1bEVtaXQoc2Y6IHRzLlNvdXJjZUZpbGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUua2luZCAhPT0gSW5jcmVtZW50YWxTdGF0ZUtpbmQuQW5hbHl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIHN1Y2Nlc3NmdWxseSBhbmFseXplZCBjb21waWxhdGlvbi5gKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGUuZW1pdHRlZC5hZGQoYWJzb2x1dGVGcm9tU291cmNlRmlsZShzZikpO1xuICB9XG5cbiAgcHJpb3JBbmFseXNpc0ZvcihzZjogdHMuU291cmNlRmlsZSk6IENsYXNzUmVjb3JkW118bnVsbCB7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2ZQYXRoID0gYWJzb2x1dGVGcm9tU291cmNlRmlsZShzZik7XG5cbiAgICAvLyBJZiB0aGUgZmlsZSBoYXMgbG9naWNhbGx5IGNoYW5nZWQsIGl0cyBwcmV2aW91cyBhbmFseXNpcyBjYW5ub3QgYmUgcmV1c2VkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByaW9yQW5hbHlzaXMgPSB0aGlzLnN0ZXAucHJpb3JTdGF0ZS5wcmlvckFuYWx5c2lzO1xuICAgIGlmICghcHJpb3JBbmFseXNpcy5oYXMoc2YpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHByaW9yQW5hbHlzaXMuZ2V0KHNmKSE7XG4gIH1cblxuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHNGb3Ioc2Y6IHRzLlNvdXJjZUZpbGUpOiBGaWxlVHlwZUNoZWNraW5nRGF0YXxudWxsIHtcbiAgICBpZiAodGhpcy5waGFzZS5raW5kICE9PSBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogRXhwZWN0ZWQgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGNvbXBpbGF0aW9uLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXAgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuXG4gICAgLy8gSWYgdGhlIGZpbGUgaGFzIGxvZ2ljYWxseSBjaGFuZ2VkLCBvciBpdHMgdGVtcGxhdGUgdHlwZS1jaGVja2luZyByZXN1bHRzIGhhdmUgc2VtYW50aWNhbGx5XG4gICAgLy8gY2hhbmdlZCwgdGhlbiBwYXN0IHR5cGUtY2hlY2tpbmcgcmVzdWx0cyBjYW5ub3QgYmUgcmV1c2VkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkgfHxcbiAgICAgICAgdGhpcy5waGFzZS5uZWVkc1R5cGVDaGVja0VtaXQuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFBhc3QgcmVzdWx0cyBhbHNvIGNhbm5vdCBiZSByZXVzZWQgaWYgdGhleSdyZSBub3QgYXZhaWxhYmxlLlxuICAgIGlmICh0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzID09PSBudWxsIHx8XG4gICAgICAgICF0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzLmhhcyhzZlBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmlvclJlc3VsdHMgPSB0aGlzLnN0ZXAucHJpb3JTdGF0ZS50eXBlQ2hlY2tSZXN1bHRzLmdldChzZlBhdGgpITtcbiAgICAvLyBJZiB0aGUgcGFzdCByZXN1bHRzIHJlbGllZCBvbiBpbmxpbmluZywgdGhleSdyZSBub3Qgc2FmZSBmb3IgcmV1c2UuXG4gICAgaWYgKHByaW9yUmVzdWx0cy5oYXNJbmxpbmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpb3JSZXN1bHRzO1xuICB9XG5cbiAgc2FmZVRvU2tpcEVtaXQoc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggY29tcGlsYXRpb24sIGl0J3MgbmV2ZXIgc2FmZSB0byBza2lwIGFuIGVtaXQuXG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNmUGF0aCA9IGFic29sdXRlRnJvbVNvdXJjZUZpbGUoc2YpO1xuXG4gICAgLy8gSWYgdGhlIGZpbGUgaGFzIGl0c2VsZiBsb2dpY2FsbHkgY2hhbmdlZCwgaXQgbXVzdCBiZSBlbWl0dGVkLlxuICAgIGlmICh0aGlzLnN0ZXAubG9naWNhbGx5Q2hhbmdlZFRzRmlsZXMuaGFzKHNmUGF0aCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waGFzZS5raW5kICE9PSBQaGFzZUtpbmQuVHlwZUNoZWNrQW5kRW1pdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogRXhwZWN0ZWQgc3VjY2Vzc2Z1bCBhbmFseXNpcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbWl0IGZpbGVzYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgZHVyaW5nIGFuYWx5c2lzIGl0IHdhcyBkZXRlcm1pbmVkIHRoYXQgdGhpcyBmaWxlIGhhcyBzZW1hbnRpY2FsbHkgY2hhbmdlZCwgaXQgbXVzdCBiZVxuICAgIC8vIGVtaXR0ZWQuXG4gICAgaWYgKHRoaXMucGhhc2UubmVlZHNFbWl0LmhhcyhzZlBhdGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhbGx5IGl0IHNob3VsZCBiZSBzYWZlIHRvIGFzc3VtZSBoZXJlIHRoYXQgdGhlIGZpbGUgd2FzIHByZXZpb3VzbHkgZW1pdHRlZCBieSB0aGUgbGFzdFxuICAgIC8vIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24uIEhvd2V2ZXIsIGFzIGEgZGVmZW5zZS1pbi1kZXB0aCBhZ2FpbnN0IGluY29ycmVjdG5lc3MsIHdlIGV4cGxpY2l0bHlcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBsYXN0IGVtaXQgaW5jbHVkZWQgdGhpcyBmaWxlLCBhbmQgcmUtZW1pdCBpdCBvdGhlcndpc2UuXG4gICAgcmV0dXJuIHRoaXMuc3RlcC5wcmlvclN0YXRlLmVtaXR0ZWQuaGFzKHNmUGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUbyBhY2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIGEgc291cmNlIGZpbGUgd2FzIGFmZmVjdGVkIGR1cmluZyBhbiBpbmNyZW1lbnRhbCByZWJ1aWxkLCB0aGVcbiAqIFwib3JpZ2luYWxcIiBzb3VyY2UgZmlsZSBuZWVkcyB0byBiZSBjb25zaXN0ZW50bHkgdXNlZC5cbiAqXG4gKiBGaXJzdCwgVHlwZVNjcmlwdCBtYXkgaGF2ZSBjcmVhdGVkIHNvdXJjZSBmaWxlIHJlZGlyZWN0cyB3aGVuIGRlY2xhcmF0aW9uIGZpbGVzIG9mIHRoZSBzYW1lXG4gKiB2ZXJzaW9uIG9mIGEgbGlicmFyeSBhcmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuIFRoZSBub24tcmVkaXJlY3RlZCBzb3VyY2UgZmlsZSBzaG91bGQgYmUgdXNlZFxuICogdG8gZGV0ZWN0IGNoYW5nZXMsIGFzIG90aGVyd2lzZSB0aGUgcmVkaXJlY3RlZCBzb3VyY2UgZmlsZXMgY2F1c2UgYSBtaXNtYXRjaCB3aGVuIGNvbXBhcmVkIHRvXG4gKiBhIHByaW9yIHByb2dyYW0uXG4gKlxuICogU2Vjb25kLCB0aGUgcHJvZ3JhbSB0aGF0IGlzIHVzZWQgZm9yIHRlbXBsYXRlIHR5cGUgY2hlY2tpbmcgbWF5IGNvbnRhaW4gbXV0YXRlZCBzb3VyY2UgZmlsZXMsIGlmXG4gKiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvcnMgb3IgaW5saW5lIHRlbXBsYXRlIHR5cGUtY2hlY2sgYmxvY2tzIGhhZCB0byBiZSB1c2VkLiBTdWNoIHNvdXJjZSBmaWxlc1xuICogc3RvcmUgdGhlaXIgb3JpZ2luYWwsIG5vbi1tdXRhdGVkIHNvdXJjZSBmaWxlIGZyb20gdGhlIG9yaWdpbmFsIHByb2dyYW0gaW4gYSBzeW1ib2wuIEZvclxuICogY29tcHV0aW5nIHRoZSBhZmZlY3RlZCBmaWxlcyBpbiBhbiBpbmNyZW1lbnRhbCBidWlsZCB0aGlzIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHNob3VsZCBiZSB1c2VkLCBhc1xuICogdGhlIG11dGF0ZWQgc291cmNlIGZpbGUgd291bGQgYWx3YXlzIGJlIGNvbnNpZGVyZWQgYWZmZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRvT3JpZ2luYWxTb3VyY2VGaWxlKHNmOiB0cy5Tb3VyY2VGaWxlKTogdHMuU291cmNlRmlsZSB7XG4gIGNvbnN0IHVucmVkaXJlY3RlZFNmID0gdG9VbnJlZGlyZWN0ZWRTb3VyY2VGaWxlKHNmKTtcbiAgY29uc3Qgb3JpZ2luYWxGaWxlID0gKHVucmVkaXJlY3RlZFNmIGFzIE1heWJlU291cmNlRmlsZVdpdGhPcmlnaW5hbEZpbGUpW05nT3JpZ2luYWxGaWxlXTtcbiAgaWYgKG9yaWdpbmFsRmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsRmlsZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5yZWRpcmVjdGVkU2Y7XG4gIH1cbn1cbiJdfQ==
@@ -325,4 +325,4 @@
325
325
  }
326
326
  exports.getTemplateIdentifiers = getTemplateIdentifiers;
327
327
  });
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCw4Q0FBeVU7SUFDelUsdUVBQTROO0lBaUI1Tjs7Ozs7Ozs7T0FRRztJQUNIO1FBQWdDLDZDQUFtQjtRQUdqRCwyQkFDcUIsYUFBcUIsRUFBbUIsY0FBc0IsRUFDOUQsYUFBeUMsRUFDekMsa0JBQTREO1lBSGpGLFlBSUUsaUJBQU8sU0FDUjtZQUpvQixtQkFBYSxHQUFiLGFBQWEsQ0FBUTtZQUFtQixvQkFBYyxHQUFkLGNBQWMsQ0FBUTtZQUM5RCxtQkFBYSxHQUFiLGFBQWEsQ0FBNEI7WUFDekMsd0JBQWtCLEdBQWxCLGtCQUFrQixDQUEwQztZQUx4RSxpQkFBVyxHQUEyQixFQUFFLENBQUM7O1FBT2xELENBQUM7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ksZ0NBQWMsR0FBckIsVUFDSSxHQUFRLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQUUsYUFBeUMsRUFDM0Ysa0JBQTREO1lBQzlELElBQU0sT0FBTyxHQUNULElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBRUQsaUNBQUssR0FBTCxVQUFNLEdBQVE7WUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCwyQ0FBZSxHQUFmLFVBQWdCLEdBQWUsRUFBRSxPQUFXO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFF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Q0gsc0JBQUM7SUFBRCxDQUFDLEFBMU5ELENBQThCLGtDQUF1QixHQTBOcEQ7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWdCLHNCQUFzQixDQUFDLGFBQXlDO1FBRTlFLElBQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM3QixDQUFDO0lBUEQsd0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QVNULCBBU1RXaXRoU291cmNlLCBCb3VuZFRhcmdldCwgSW1wbGljaXRSZWNlaXZlciwgTWV0aG9kQ2FsbCwgUGFyc2VTb3VyY2VTcGFuLCBQcm9wZXJ0eVJlYWQsIFByb3BlcnR5V3JpdGUsIFJlY3Vyc2l2ZUFzdFZpc2l0b3IsIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSwgVG1wbEFzdEJvdW5kRXZlbnQsIFRtcGxBc3RCb3VuZFRleHQsIFRtcGxBc3RFbGVtZW50LCBUbXBsQXN0Tm9kZSwgVG1wbEFzdFJlY3Vyc2l2ZVZpc2l0b3IsIFRtcGxBc3RSZWZlcmVuY2UsIFRtcGxBc3RUZW1wbGF0ZSwgVG1wbEFzdFZhcmlhYmxlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0Fic29sdXRlU291cmNlU3BhbiwgQXR0cmlidXRlSWRlbnRpZmllciwgRWxlbWVudElkZW50aWZpZXIsIElkZW50aWZpZXJLaW5kLCBNZXRob2RJZGVudGlmaWVyLCBQcm9wZXJ0eUlkZW50aWZpZXIsIFJlZmVyZW5jZUlkZW50aWZpZXIsIFRlbXBsYXRlTm9kZUlkZW50aWZpZXIsIFRvcExldmVsSWRlbnRpZmllciwgVmFyaWFibGVJZGVudGlmaWVyfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge0NvbXBvbmVudE1ldGF9IGZyb20gJy4vY29udGV4dCc7XG5cbi8qKlxuICogQSBwYXJzZWQgbm9kZSBpbiBhIHRlbXBsYXRlLCB3aGljaCBtYXkgaGF2ZSBhIG5hbWUgKGlmIGl0IGlzIGEgc2VsZWN0b3IpIG9yXG4gKiBiZSBhbm9ueW1vdXMgKGxpa2UgYSB0ZXh0IHNwYW4pLlxuICovXG5pbnRlcmZhY2UgSFRNTE5vZGUgZXh0ZW5kcyBUbXBsQXN0Tm9kZSB7XG4gIHRhZ05hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbnR5cGUgRXhwcmVzc2lvbklkZW50aWZpZXIgPSBQcm9wZXJ0eUlkZW50aWZpZXJ8TWV0aG9kSWRlbnRpZmllcjtcbnR5cGUgVG1wbFRhcmdldCA9IFRtcGxBc3RSZWZlcmVuY2V8VG1wbEFzdFZhcmlhYmxlO1xudHlwZSBUYXJnZXRJZGVudGlmaWVyID0gUmVmZXJlbmNlSWRlbnRpZmllcnxWYXJpYWJsZUlkZW50aWZpZXI7XG50eXBlIFRhcmdldElkZW50aWZpZXJNYXAgPSBNYXA8VG1wbFRhcmdldCwgVGFyZ2V0SWRlbnRpZmllcj47XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYW4gQW5ndWxhciB0ZW1wbGF0ZSBzeW50YXggZXhwcmVzc2lvbiwgZmluZGluZyBpbnRlcmVzdGluZ1xuICogZW50aXRpZXMgKHZhcmlhYmxlIHJlZmVyZW5jZXMsIGV0Yy4pLiBDcmVhdGVzIGFuIGFycmF5IG9mIEVudGl0aWVzIGZvdW5kIGluXG4gKiB0aGUgZXhwcmVzc2lvbiwgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIEVudGl0aWVzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZVxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBWaXNpdGluZyBgdGV4dCB7e3Byb3B9fWAgd2lsbCByZXR1cm5cbiAqIGBbVG9wTGV2ZWxJZGVudGlmaWVyIHtuYW1lOiAncHJvcCcsIHNwYW46IHtzdGFydDogNywgZW5kOiAxMX19XWAuXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25WaXNpdG9yIGV4dGVuZHMgUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gIHJlYWRvbmx5IGlkZW50aWZpZXJzOiBFeHByZXNzaW9uSWRlbnRpZmllcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwcmVzc2lvblN0cjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlT2Zmc2V0OiBudW1iZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+LFxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRUb0lkZW50aWZpZXI6ICh0YXJnZXQ6IFRtcGxUYXJnZXQpID0+IFRhcmdldElkZW50aWZpZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWRlbnRpZmllcnMgZGlzY292ZXJlZCBpbiBhbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYXN0IGV4cHJlc3Npb24gQVNUIHRvIHZpc2l0XG4gICAqIEBwYXJhbSBzb3VyY2UgZXhwcmVzc2lvbiBBU1Qgc291cmNlIGNvZGVcbiAgICogQHBhcmFtIGFic29sdXRlT2Zmc2V0IGFic29sdXRlIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhlIGZpbGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBBU1RcbiAgICogc291cmNlIGNvZGUuXG4gICAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRhcmdldCBvZiB0aGUgZW50aXJlIHRlbXBsYXRlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBxdWVyeSBmb3IgdGhlXG4gICAqIGVudGl0aWVzIGV4cHJlc3Npb25zIHRhcmdldC5cbiAgICogQHBhcmFtIHRhcmdldFRvSWRlbnRpZmllciBjbG9zdXJlIGNvbnZlcnRpbmcgYSB0ZW1wbGF0ZSB0YXJnZXQgbm9kZSB0byBpdHMgaWRlbnRpZmllci5cbiAgICovXG4gIHN0YXRpYyBnZXRJZGVudGlmaWVycyhcbiAgICAgIGFzdDogQVNULCBzb3VyY2U6IHN0cmluZywgYWJzb2x1dGVPZmZzZXQ6IG51bWJlciwgYm91bmRUZW1wbGF0ZTogQm91bmRUYXJnZXQ8Q29tcG9uZW50TWV0YT4sXG4gICAgICB0YXJnZXRUb0lkZW50aWZpZXI6ICh0YXJnZXQ6IFRtcGxUYXJnZXQpID0+IFRhcmdldElkZW50aWZpZXIpOiBUb3BMZXZlbElkZW50aWZpZXJbXSB7XG4gICAgY29uc3QgdmlzaXRvciA9XG4gICAgICAgIG5ldyBFeHByZXNzaW9uVmlzaXRvcihzb3VyY2UsIGFic29sdXRlT2Zmc2V0LCBib3VuZFRlbXBsYXRlLCB0YXJnZXRUb0lkZW50aWZpZXIpO1xuICAgIHZpc2l0b3IudmlzaXQoYXN0KTtcbiAgICByZXR1cm4gdmlzaXRvci5pZGVudGlmaWVycztcbiAgfVxuXG4gIHZpc2l0KGFzdDogQVNUKSB7XG4gICAgYXN0LnZpc2l0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRNZXRob2RDYWxsKGFzdDogTWV0aG9kQ2FsbCwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLk1ldGhvZCk7XG4gICAgc3VwZXIudmlzaXRNZXRob2RDYWxsKGFzdCwgY29udGV4dCk7XG4gIH1cblxuICB2aXNpdFByb3BlcnR5UmVhZChhc3Q6IFByb3BlcnR5UmVhZCwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLlByb3BlcnR5KTtcbiAgICBzdXBlci52aXNpdFByb3BlcnR5UmVhZChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRQcm9wZXJ0eVdyaXRlKGFzdDogUHJvcGVydHlXcml0ZSwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLlByb3BlcnR5KTtcbiAgICBzdXBlci52aXNpdFByb3BlcnR5V3JpdGUoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgYW4gaWRlbnRpZmllciwgYWRkaW5nIGl0IHRvIHRoZSBpZGVudGlmaWVyIHN0b3JlIGlmIGl0IGlzIHVzZWZ1bCBmb3IgaW5kZXhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhc3QgZXhwcmVzc2lvbiBBU1QgdGhlIGlkZW50aWZpZXIgaXMgaW5cbiAgICogQHBhcmFtIGtpbmQgaWRlbnRpZmllciBraW5kXG4gICAqL1xuICBwcml2YXRlIHZpc2l0SWRlbnRpZmllcihcbiAgICAgIGFzdDogQVNUJntuYW1lOiBzdHJpbmcsIHJlY2VpdmVyOiBBU1R9LCBraW5kOiBFeHByZXNzaW9uSWRlbnRpZmllclsna2luZCddKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBub24tdG9wLWxldmVsIHByb3BlcnR5IHN1Y2ggYXMgYGJhcmAgaW4gYHt7Zm9vLmJhcn19YCBpcyBjdXJyZW50bHlcbiAgICAvLyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBieSBhbiBpbmRleGVyIGFuZCB1bnN1cHBvcnRlZCBieSB0aGUgaW5kZXhpbmcgbW9kdWxlLlxuICAgIC8vIFRoZSBpbmRleGluZyBtb2R1bGUgYWxzbyBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZWZlcmVuY2VzIHRvIGlkZW50aWZpZXJzIGRlY2xhcmVkIGluIHRoZVxuICAgIC8vIHRlbXBsYXRlIGl0c2VsZiwgd2hpY2ggaGF2ZSBhIG5vbi1udWxsIGV4cHJlc3Npb24gdGFyZ2V0LlxuICAgIGlmICghKGFzdC5yZWNlaXZlciBpbnN0YW5jZW9mIEltcGxpY2l0UmVjZWl2ZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvdXJjZSBzcGFuIG9mIHRoZSByZXF1ZXN0ZWQgQVNUIHN0YXJ0cyBhdCBhIGxvY2F0aW9uIHRoYXQgaXMgb2Zmc2V0IGZyb20gdGhlIGV4cHJlc3Npb24uXG4gICAgY29uc3QgaWRlbnRpZmllclN0YXJ0ID0gYXN0LnNvdXJjZVNwYW4uc3RhcnQgLSB0aGlzLmFic29sdXRlT2Zmc2V0O1xuICAgIGlmICghdGhpcy5leHByZXNzaW9uU3RyLnN1YnN0cmluZyhpZGVudGlmaWVyU3RhcnQpLnN0YXJ0c1dpdGgoYXN0Lm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcG9zc2libGUgc3RhdGU6IFwiJHthc3QubmFtZX1cIiBub3QgZm91bmQgaW4gXCIke1xuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblN0cn1cIiBhdCBsb2NhdGlvbiAke2lkZW50aWZpZXJTdGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBKb2luIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB3aXRoaW4gYSBub2RlIHdpdGggdGhlIGFic29sdXRlIHBvc2l0aW9uXG4gICAgLy8gb2YgdGhlIG5vZGUgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAgY29uc3QgYWJzb2x1dGVTdGFydCA9IHRoaXMuYWJzb2x1dGVPZmZzZXQgKyBpZGVudGlmaWVyU3RhcnQ7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oYWJzb2x1dGVTdGFydCwgYWJzb2x1dGVTdGFydCArIGFzdC5uYW1lLmxlbmd0aCk7XG5cbiAgICBjb25zdCB0YXJnZXRBc3QgPSB0aGlzLmJvdW5kVGVtcGxhdGUuZ2V0RXhwcmVzc2lvblRhcmdldChhc3QpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldEFzdCA/IHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyKHRhcmdldEFzdCkgOiBudWxsO1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB7XG4gICAgICBuYW1lOiBhc3QubmFtZSxcbiAgICAgIHNwYW4sXG4gICAgICBraW5kLFxuICAgICAgdGFyZ2V0LFxuICAgIH0gYXMgRXhwcmVzc2lvbklkZW50aWZpZXI7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBWaXNpdHMgdGhlIEFTVCBvZiBhIHBhcnNlZCBBbmd1bGFyIHRlbXBsYXRlLiBEaXNjb3ZlcnMgYW5kIHN0b3Jlc1xuICogaWRlbnRpZmllcnMgb2YgaW50ZXJlc3QsIGRlZmVycmluZyB0byBhbiBgRXhwcmVzc2lvblZpc2l0b3JgIGFzIG5lZWRlZC5cbiAqL1xuY2xhc3MgVGVtcGxhdGVWaXNpdG9yIGV4dGVuZHMgVG1wbEFzdFJlY3Vyc2l2ZVZpc2l0b3Ige1xuICAvLyBJZGVudGlmaWVycyBvZiBpbnRlcmVzdCBmb3VuZCBpbiB0aGUgdGVtcGxhdGUuXG4gIHJlYWRvbmx5IGlkZW50aWZpZXJzID0gbmV3IFNldDxUb3BMZXZlbElkZW50aWZpZXI+KCk7XG5cbiAgLy8gTWFwIG9mIHRhcmdldHMgaW4gYSB0ZW1wbGF0ZSB0byB0aGVpciBpZGVudGlmaWVycy5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRJZGVudGlmaWVyQ2FjaGU6IFRhcmdldElkZW50aWZpZXJNYXAgPSBuZXcgTWFwKCk7XG5cbiAgLy8gTWFwIG9mIGVsZW1lbnRzIGFuZCB0ZW1wbGF0ZXMgdG8gdGhlaXIgaWRlbnRpZmllcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlID1cbiAgICAgIG5ldyBNYXA8VG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlLCBFbGVtZW50SWRlbnRpZmllcnxUZW1wbGF0ZU5vZGVJZGVudGlmaWVyPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVtcGxhdGUgdmlzaXRvciBmb3IgYSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQuIFRoZSBib3VuZCB0YXJnZXQgY2FuIGJlIHVzZWQgd2hlblxuICAgKiBkZWZlcnJlZCB0byB0aGUgZXhwcmVzc2lvbiB2aXNpdG9yIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRlbXBsYXRlIHRhcmdldFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxDb21wb25lbnRNZXRhPikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgbm9kZSBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gdmlzaXRcbiAgICovXG4gIHZpc2l0KG5vZGU6IEhUTUxOb2RlKSB7XG4gICAgbm9kZS52aXNpdCh0aGlzKTtcbiAgfVxuXG4gIHZpc2l0QWxsKG5vZGVzOiBUbXBsQXN0Tm9kZVtdKSB7XG4gICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHRoaXMudmlzaXQobm9kZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpZGVudGlmaWVyIGZvciBhbiBIVE1MIGVsZW1lbnQgYW5kIHZpc2l0IGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRcbiAgICovXG4gIHZpc2l0RWxlbWVudChlbGVtZW50OiBUbXBsQXN0RWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRJZGVudGlmaWVyID0gdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihlbGVtZW50KTtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMuYWRkKGVsZW1lbnRJZGVudGlmaWVyKTtcblxuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5yZWZlcmVuY2VzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuaW5wdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmNoaWxkcmVuKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQub3V0cHV0cyk7XG4gIH1cbiAgdmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZTogVG1wbEFzdFRlbXBsYXRlKSB7XG4gICAgY29uc3QgdGVtcGxhdGVJZGVudGlmaWVyID0gdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcih0ZW1wbGF0ZSk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZCh0ZW1wbGF0ZUlkZW50aWZpZXIpO1xuXG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS52YXJpYWJsZXMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS50ZW1wbGF0ZUF0dHJzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmNoaWxkcmVuKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnJlZmVyZW5jZXMpO1xuICB9XG4gIHZpc2l0Qm91bmRBdHRyaWJ1dGUoYXR0cmlidXRlOiBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUpIHtcbiAgICAvLyBJZiB0aGUgYm91bmQgYXR0cmlidXRlIGhhcyBubyB2YWx1ZSwgaXQgY2Fubm90IGhhdmUgYW55IGlkZW50aWZpZXJzIGluIHRoZSB2YWx1ZSBleHByZXNzaW9uLlxuICAgIGlmIChhdHRyaWJ1dGUudmFsdWVTcGFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZGVudGlmaWVycyA9IEV4cHJlc3Npb25WaXNpdG9yLmdldElkZW50aWZpZXJzKFxuICAgICAgICBhdHRyaWJ1dGUudmFsdWUsIGF0dHJpYnV0ZS52YWx1ZVNwYW4udG9TdHJpbmcoKSwgYXR0cmlidXRlLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuYm91bmRUZW1wbGF0ZSwgdGhpcy50YXJnZXRUb0lkZW50aWZpZXIuYmluZCh0aGlzKSk7XG4gICAgaWRlbnRpZmllcnMuZm9yRWFjaChpZCA9PiB0aGlzLmlkZW50aWZpZXJzLmFkZChpZCkpO1xuICB9XG4gIHZpc2l0Qm91bmRFdmVudChhdHRyaWJ1dGU6IFRtcGxBc3RCb3VuZEV2ZW50KSB7XG4gICAgdGhpcy52aXNpdEV4cHJlc3Npb24oYXR0cmlidXRlLmhhbmRsZXIpO1xuICB9XG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IFRtcGxBc3RCb3VuZFRleHQpIHtcbiAgICB0aGlzLnZpc2l0RXhwcmVzc2lvbih0ZXh0LnZhbHVlKTtcbiAgfVxuICB2aXNpdFJlZmVyZW5jZShyZWZlcmVuY2U6IFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICBjb25zdCByZWZlcmVuY2VJZGVudGlmZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcihyZWZlcmVuY2UpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQocmVmZXJlbmNlSWRlbnRpZmVyKTtcbiAgfVxuICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlOiBUbXBsQXN0VmFyaWFibGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcih2YXJpYWJsZSk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZCh2YXJpYWJsZUlkZW50aWZpZXIpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYW4gaWRlbnRpZmllciBmb3IgYSB0ZW1wbGF0ZSBlbGVtZW50IG9yIHRlbXBsYXRlIG5vZGUuICovXG4gIHByaXZhdGUgZWxlbWVudE9yVGVtcGxhdGVUb0lkZW50aWZpZXIobm9kZTogVG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlKTogRWxlbWVudElkZW50aWZpZXJcbiAgICAgIHxUZW1wbGF0ZU5vZGVJZGVudGlmaWVyIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBzZWVuLCByZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgaWYgKHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmdldChub2RlKSE7XG4gICAgfVxuXG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBsZXQga2luZDogSWRlbnRpZmllcktpbmQuRWxlbWVudHxJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RUZW1wbGF0ZSkge1xuICAgICAgbmFtZSA9IG5vZGUudGFnTmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5FbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VTcGFuID0gbm9kZS5zdGFydFNvdXJjZVNwYW47XG4gICAgLy8gQW4gZWxlbWVudCdzIG9yIHRlbXBsYXRlJ3Mgc291cmNlIHNwYW4gY2FuIGJlIG9mIHRoZSBmb3JtIGA8ZWxlbWVudD5gLCBgPGVsZW1lbnQgLz5gLCBvclxuICAgIC8vIGA8ZWxlbWVudD48L2VsZW1lbnQ+YC4gT25seSB0aGUgc2VsZWN0b3IgaXMgaW50ZXJlc3RpbmcgdG8gdGhlIGluZGV4ZXIsIHNvIHRoZSBzb3VyY2UgaXNcbiAgICAvLyBzZWFyY2hlZCBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGVsZW1lbnQgKHNlbGVjdG9yKSBuYW1lLlxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5nZXRTdGFydExvY2F0aW9uKG5hbWUsIHNvdXJjZVNwYW4pO1xuICAgIGNvbnN0IGFic29sdXRlU3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oc3RhcnQsIHN0YXJ0ICsgbmFtZS5sZW5ndGgpO1xuXG4gICAgLy8gUmVjb3JkIHRoZSBub2RlcydzIGF0dHJpYnV0ZXMsIHdoaWNoIGFuIGluZGV4ZXIgY2FuIGxhdGVyIHRyYXZlcnNlIHRvIHNlZSBpZiBhbnkgb2YgdGhlbVxuICAgIC8vIHNwZWNpZnkgYSB1c2VkIGRpcmVjdGl2ZSBvbiB0aGUgbm9kZS5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzLm1hcCgoe25hbWUsIHNvdXJjZVNwYW59KTogQXR0cmlidXRlSWRlbnRpZmllciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzcGFuOiBuZXcgQWJzb2x1dGVTb3VyY2VTcGFuKHNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0LCBzb3VyY2VTcGFuLmVuZC5vZmZzZXQpLFxuICAgICAgICBraW5kOiBJZGVudGlmaWVyS2luZC5BdHRyaWJ1dGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHVzZWREaXJlY3RpdmVzID0gdGhpcy5ib3VuZFRlbXBsYXRlLmdldERpcmVjdGl2ZXNPZk5vZGUobm9kZSkgfHwgW107XG5cbiAgICBjb25zdCBpZGVudGlmaWVyID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHNwYW46IGFic29sdXRlU3BhbixcbiAgICAgIGtpbmQsXG4gICAgICBhdHRyaWJ1dGVzOiBuZXcgU2V0KGF0dHJpYnV0ZXMpLFxuICAgICAgdXNlZERpcmVjdGl2ZXM6IG5ldyBTZXQodXNlZERpcmVjdGl2ZXMubWFwKGRpciA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogZGlyLnJlZi5ub2RlLFxuICAgICAgICAgIHNlbGVjdG9yOiBkaXIuc2VsZWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9KSksXG4gICAgICAvLyBjYXN0IGIvYyBwcmUtVHlwZVNjcmlwdCAzLjUgdW5pb25zIGFyZW4ndCB3ZWxsIGRpc2NyaW1pbmF0ZWRcbiAgICB9IGFzIEVsZW1lbnRJZGVudGlmaWVyIHxcbiAgICAgICAgVGVtcGxhdGVOb2RlSWRlbnRpZmllcjtcblxuICAgIHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLnNldChub2RlLCBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGFuIGlkZW50aWZpZXIgZm9yIGEgdGVtcGxhdGUgcmVmZXJlbmNlIG9yIHRlbXBsYXRlIHZhcmlhYmxlIHRhcmdldC4gKi9cbiAgcHJpdmF0ZSB0YXJnZXRUb0lkZW50aWZpZXIobm9kZTogVG1wbEFzdFJlZmVyZW5jZXxUbXBsQXN0VmFyaWFibGUpOiBUYXJnZXRJZGVudGlmaWVyIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBzZWVuLCByZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgaWYgKHRoaXMudGFyZ2V0SWRlbnRpZmllckNhY2hlLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0SWRlbnRpZmllckNhY2hlLmdldChub2RlKSE7XG4gICAgfVxuXG4gICAgY29uc3Qge25hbWUsIHNvdXJjZVNwYW59ID0gbm9kZTtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZ2V0U3RhcnRMb2NhdGlvbihuYW1lLCBzb3VyY2VTcGFuKTtcbiAgICBjb25zdCBzcGFuID0gbmV3IEFic29sdXRlU291cmNlU3BhbihzdGFydCwgc3RhcnQgKyBuYW1lLmxlbmd0aCk7XG4gICAgbGV0IGlkZW50aWZpZXI6IFJlZmVyZW5jZUlkZW50aWZpZXJ8VmFyaWFibGVJZGVudGlmaWVyO1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgVG1wbEFzdFJlZmVyZW5jZSkge1xuICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgYSByZWZlcmVuY2UsIHdlIGNhcmUgYWJvdXQgaXRzIHRhcmdldC4gVGhlIHRhcmdldCBjYW4gYmUgYW4gZWxlbWVudCwgYVxuICAgICAgLy8gdGVtcGxhdGUsIGEgZGlyZWN0aXZlIGFwcGxpZWQgb24gYSB0ZW1wbGF0ZSBvciBlbGVtZW50IChpbiB3aGljaCBjYXNlIHRoZSBkaXJlY3RpdmUgZmllbGRcbiAgICAgIC8vIGlzIG5vbi1udWxsKSwgb3Igbm90aGluZyBhdCBhbGwuXG4gICAgICBjb25zdCByZWZUYXJnZXQgPSB0aGlzLmJvdW5kVGVtcGxhdGUuZ2V0UmVmZXJlbmNlVGFyZ2V0KG5vZGUpO1xuICAgICAgbGV0IHRhcmdldCA9IG51bGw7XG4gICAgICBpZiAocmVmVGFyZ2V0KSB7XG4gICAgICAgIGlmIChyZWZUYXJnZXQgaW5zdGFuY2VvZiBUbXBsQXN0RWxlbWVudCB8fCByZWZUYXJnZXQgaW5zdGFuY2VvZiBUbXBsQXN0VGVtcGxhdGUpIHtcbiAgICAgICAgICB0YXJnZXQgPSB7XG4gICAgICAgICAgICBub2RlOiB0aGlzLmVsZW1lbnRPclRlbXBsYXRlVG9JZGVudGlmaWVyKHJlZlRhcmdldCksXG4gICAgICAgICAgICBkaXJlY3RpdmU6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQgPSB7XG4gICAgICAgICAgICBub2RlOiB0aGlzLmVsZW1lbnRPclRlbXBsYXRlVG9JZGVudGlmaWVyKHJlZlRhcmdldC5ub2RlKSxcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogcmVmVGFyZ2V0LmRpcmVjdGl2ZS5yZWYubm9kZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlkZW50aWZpZXIgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNwYW4sXG4gICAgICAgIGtpbmQ6IElkZW50aWZpZXJLaW5kLlJlZmVyZW5jZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRlbnRpZmllciA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3BhbixcbiAgICAgICAga2luZDogSWRlbnRpZmllcktpbmQuVmFyaWFibGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0SWRlbnRpZmllckNhY2hlLnNldChub2RlLCBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBzdGFydCBsb2NhdGlvbiBvZiBhIHN0cmluZyBpbiBhIFNvdXJjZVNwYW4gKi9cbiAgcHJpdmF0ZSBnZXRTdGFydExvY2F0aW9uKG5hbWU6IHN0cmluZywgY29udGV4dDogUGFyc2VTb3VyY2VTcGFuKTogbnVtYmVyIHtcbiAgICBjb25zdCBsb2NhbFN0ciA9IGNvbnRleHQudG9TdHJpbmcoKTtcbiAgICBpZiAoIWxvY2FsU3RyLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcG9zc2libGUgc3RhdGU6IFwiJHtuYW1lfVwiIG5vdCBmb3VuZCBpbiBcIiR7bG9jYWxTdHJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQuc3RhcnQub2Zmc2V0ICsgbG9jYWxTdHIuaW5kZXhPZihuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgYSBub2RlJ3MgZXhwcmVzc2lvbiBhbmQgYWRkcyBpdHMgaWRlbnRpZmllcnMsIGlmIGFueSwgdG8gdGhlIHZpc2l0b3IncyBzdGF0ZS5cbiAgICogT25seSBBU1RzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4cHJlc3Npb24gc291cmNlIGFuZCBpdHMgbG9jYXRpb24gYXJlIHZpc2l0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgd2hvc2UgZXhwcmVzc2lvbiB0byB2aXNpdFxuICAgKi9cbiAgcHJpdmF0ZSB2aXNpdEV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAvLyBPbmx5IGluY2x1ZGUgQVNUcyB0aGF0IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgc291cmNlIGFuZCBhYnNvbHV0ZSBzb3VyY2Ugc3BhbnMuXG4gICAgaWYgKGFzdCBpbnN0YW5jZW9mIEFTVFdpdGhTb3VyY2UgJiYgYXN0LnNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWFrZSB0YXJnZXQgdG8gaWRlbnRpZmllciBtYXBwaW5nIGNsb3N1cmUgc3RhdGVmdWwgdG8gdGhpcyB2aXNpdG9yIGluc3RhbmNlLlxuICAgICAgY29uc3QgdGFyZ2V0VG9JZGVudGlmaWVyID0gdGhpcy50YXJnZXRUb0lkZW50aWZpZXIuYmluZCh0aGlzKTtcbiAgICAgIGNvbnN0IGFic29sdXRlT2Zmc2V0ID0gYXN0LnNvdXJjZVNwYW4uc3RhcnQ7XG4gICAgICBjb25zdCBpZGVudGlmaWVycyA9IEV4cHJlc3Npb25WaXNpdG9yLmdldElkZW50aWZpZXJzKFxuICAgICAgICAgIGFzdCwgYXN0LnNvdXJjZSwgYWJzb2x1dGVPZmZzZXQsIHRoaXMuYm91bmRUZW1wbGF0ZSwgdGFyZ2V0VG9JZGVudGlmaWVyKTtcbiAgICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gdGhpcy5pZGVudGlmaWVycy5hZGQoaWQpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgYSB0ZW1wbGF0ZSBBU1QgYW5kIGJ1aWxkcyBpZGVudGlmaWVycyBkaXNjb3ZlcmVkIGluIGl0LlxuICpcbiAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRlbXBsYXRlIHRhcmdldCwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHF1ZXJ5aW5nIGV4cHJlc3Npb24gdGFyZ2V0cy5cbiAqIEByZXR1cm4gaWRlbnRpZmllcnMgaW4gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlSWRlbnRpZmllcnMoYm91bmRUZW1wbGF0ZTogQm91bmRUYXJnZXQ8Q29tcG9uZW50TWV0YT4pOlxuICAgIFNldDxUb3BMZXZlbElkZW50aWZpZXI+IHtcbiAgY29uc3QgdmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoYm91bmRUZW1wbGF0ZSk7XG4gIGlmIChib3VuZFRlbXBsYXRlLnRhcmdldC50ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRvci52aXNpdEFsbChib3VuZFRlbXBsYXRlLnRhcmdldC50ZW1wbGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHZpc2l0b3IuaWRlbnRpZmllcnM7XG59XG4iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCw4Q0FBeVU7SUFDelUsdUVBQTROO0lBaUI1Tjs7Ozs7Ozs7T0FRRztJQUNIO1FBQWdDLDZDQUFtQjtRQUdqRCwyQkFDcUIsYUFBcUIsRUFBbUIsY0FBc0IsRUFDOUQsYUFBeUMsRUFDekMsa0JBQTREO1lBSGpGLFlBSUUsaUJBQU8sU0FDUjtZQUpvQixtQkFBYSxHQUFiLGFBQWEsQ0FBUTtZQUFtQixvQkFBYyxHQUFkLGNBQWMsQ0FBUTtZQUM5RCxtQkFBYSxHQUFiLGFBQWEsQ0FBNEI7WUFDekMsd0JBQWtCLEdBQWxCLGtCQUFrQixDQUEwQztZQUx4RSxpQkFBVyxHQUEyQixFQUFFLENBQUM7O1FBT2xELENBQUM7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ksZ0NBQWMsR0FBckIsVUFDSSxHQUFRLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQUUsYUFBeUMsRUFDM0Ysa0JBQTREO1lBQzlELElBQU0sT0FBTyxHQUNULElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBRVEsaUNBQUssR0FBZCxVQUFlLEdBQVE7WUFDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRVEsMkNBQWUsR0FBeEIsVUFBeUIsR0FBZSxFQUFFLE9BQVc7WUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVB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O1FBQ0gsQ0FBQztRQUNILHNCQUFDO0lBQUQsQ0FBQyxBQTFORCxDQUE4QixrQ0FBdUIsR0EwTnBEO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxhQUF5QztRQUU5RSxJQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDN0IsQ0FBQztJQVBELHdEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0FTVCwgQVNUV2l0aFNvdXJjZSwgQm91bmRUYXJnZXQsIEltcGxpY2l0UmVjZWl2ZXIsIE1ldGhvZENhbGwsIFBhcnNlU291cmNlU3BhbiwgUHJvcGVydHlSZWFkLCBQcm9wZXJ0eVdyaXRlLCBSZWN1cnNpdmVBc3RWaXNpdG9yLCBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUsIFRtcGxBc3RCb3VuZEV2ZW50LCBUbXBsQXN0Qm91bmRUZXh0LCBUbXBsQXN0RWxlbWVudCwgVG1wbEFzdE5vZGUsIFRtcGxBc3RSZWN1cnNpdmVWaXNpdG9yLCBUbXBsQXN0UmVmZXJlbmNlLCBUbXBsQXN0VGVtcGxhdGUsIFRtcGxBc3RWYXJpYWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtBYnNvbHV0ZVNvdXJjZVNwYW4sIEF0dHJpYnV0ZUlkZW50aWZpZXIsIEVsZW1lbnRJZGVudGlmaWVyLCBJZGVudGlmaWVyS2luZCwgTWV0aG9kSWRlbnRpZmllciwgUHJvcGVydHlJZGVudGlmaWVyLCBSZWZlcmVuY2VJZGVudGlmaWVyLCBUZW1wbGF0ZU5vZGVJZGVudGlmaWVyLCBUb3BMZXZlbElkZW50aWZpZXIsIFZhcmlhYmxlSWRlbnRpZmllcn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtDb21wb25lbnRNZXRhfSBmcm9tICcuL2NvbnRleHQnO1xuXG4vKipcbiAqIEEgcGFyc2VkIG5vZGUgaW4gYSB0ZW1wbGF0ZSwgd2hpY2ggbWF5IGhhdmUgYSBuYW1lIChpZiBpdCBpcyBhIHNlbGVjdG9yKSBvclxuICogYmUgYW5vbnltb3VzIChsaWtlIGEgdGV4dCBzcGFuKS5cbiAqL1xuaW50ZXJmYWNlIEhUTUxOb2RlIGV4dGVuZHMgVG1wbEFzdE5vZGUge1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG50eXBlIEV4cHJlc3Npb25JZGVudGlmaWVyID0gUHJvcGVydHlJZGVudGlmaWVyfE1ldGhvZElkZW50aWZpZXI7XG50eXBlIFRtcGxUYXJnZXQgPSBUbXBsQXN0UmVmZXJlbmNlfFRtcGxBc3RWYXJpYWJsZTtcbnR5cGUgVGFyZ2V0SWRlbnRpZmllciA9IFJlZmVyZW5jZUlkZW50aWZpZXJ8VmFyaWFibGVJZGVudGlmaWVyO1xudHlwZSBUYXJnZXRJZGVudGlmaWVyTWFwID0gTWFwPFRtcGxUYXJnZXQsIFRhcmdldElkZW50aWZpZXI+O1xuXG4vKipcbiAqIFZpc2l0cyB0aGUgQVNUIG9mIGFuIEFuZ3VsYXIgdGVtcGxhdGUgc3ludGF4IGV4cHJlc3Npb24sIGZpbmRpbmcgaW50ZXJlc3RpbmdcbiAqIGVudGl0aWVzICh2YXJpYWJsZSByZWZlcmVuY2VzLCBldGMuKS4gQ3JlYXRlcyBhbiBhcnJheSBvZiBFbnRpdGllcyBmb3VuZCBpblxuICogdGhlIGV4cHJlc3Npb24sIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBFbnRpdGllcyBiZWluZyByZWxhdGl2ZSB0byB0aGVcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogVmlzaXRpbmcgYHRleHQge3twcm9wfX1gIHdpbGwgcmV0dXJuXG4gKiBgW1RvcExldmVsSWRlbnRpZmllciB7bmFtZTogJ3Byb3AnLCBzcGFuOiB7c3RhcnQ6IDcsIGVuZDogMTF9fV1gLlxuICovXG5jbGFzcyBFeHByZXNzaW9uVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZUFzdFZpc2l0b3Ige1xuICByZWFkb25seSBpZGVudGlmaWVyczogRXhwcmVzc2lvbklkZW50aWZpZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25TdHI6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZU9mZnNldDogbnVtYmVyLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxDb21wb25lbnRNZXRhPixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0VG9JZGVudGlmaWVyOiAodGFyZ2V0OiBUbXBsVGFyZ2V0KSA9PiBUYXJnZXRJZGVudGlmaWVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGlkZW50aWZpZXJzIGRpc2NvdmVyZWQgaW4gYW4gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGFzdCBleHByZXNzaW9uIEFTVCB0byB2aXNpdFxuICAgKiBAcGFyYW0gc291cmNlIGV4cHJlc3Npb24gQVNUIHNvdXJjZSBjb2RlXG4gICAqIEBwYXJhbSBhYnNvbHV0ZU9mZnNldCBhYnNvbHV0ZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoZSBmaWxlIHRvIHRoZSBzdGFydCBvZiB0aGUgQVNUXG4gICAqIHNvdXJjZSBjb2RlLlxuICAgKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0YXJnZXQgb2YgdGhlIGVudGlyZSB0ZW1wbGF0ZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZVxuICAgKiBlbnRpdGllcyBleHByZXNzaW9ucyB0YXJnZXQuXG4gICAqIEBwYXJhbSB0YXJnZXRUb0lkZW50aWZpZXIgY2xvc3VyZSBjb252ZXJ0aW5nIGEgdGVtcGxhdGUgdGFyZ2V0IG5vZGUgdG8gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZ2V0SWRlbnRpZmllcnMoXG4gICAgICBhc3Q6IEFTVCwgc291cmNlOiBzdHJpbmcsIGFic29sdXRlT2Zmc2V0OiBudW1iZXIsIGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+LFxuICAgICAgdGFyZ2V0VG9JZGVudGlmaWVyOiAodGFyZ2V0OiBUbXBsVGFyZ2V0KSA9PiBUYXJnZXRJZGVudGlmaWVyKTogVG9wTGV2ZWxJZGVudGlmaWVyW10ge1xuICAgIGNvbnN0IHZpc2l0b3IgPVxuICAgICAgICBuZXcgRXhwcmVzc2lvblZpc2l0b3Ioc291cmNlLCBhYnNvbHV0ZU9mZnNldCwgYm91bmRUZW1wbGF0ZSwgdGFyZ2V0VG9JZGVudGlmaWVyKTtcbiAgICB2aXNpdG9yLnZpc2l0KGFzdCk7XG4gICAgcmV0dXJuIHZpc2l0b3IuaWRlbnRpZmllcnM7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdChhc3Q6IEFTVCkge1xuICAgIGFzdC52aXNpdCh0aGlzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5NZXRob2QpO1xuICAgIHN1cGVyLnZpc2l0TWV0aG9kQ2FsbChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRQcm9wZXJ0eVJlYWQoYXN0OiBQcm9wZXJ0eVJlYWQsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5Qcm9wZXJ0eSk7XG4gICAgc3VwZXIudmlzaXRQcm9wZXJ0eVJlYWQoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0UHJvcGVydHlXcml0ZShhc3Q6IFByb3BlcnR5V3JpdGUsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5Qcm9wZXJ0eSk7XG4gICAgc3VwZXIudmlzaXRQcm9wZXJ0eVdyaXRlKGFzdCwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGFuIGlkZW50aWZpZXIsIGFkZGluZyBpdCB0byB0aGUgaWRlbnRpZmllciBzdG9yZSBpZiBpdCBpcyB1c2VmdWwgZm9yIGluZGV4aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXN0IGV4cHJlc3Npb24gQVNUIHRoZSBpZGVudGlmaWVyIGlzIGluXG4gICAqIEBwYXJhbSBraW5kIGlkZW50aWZpZXIga2luZFxuICAgKi9cbiAgcHJpdmF0ZSB2aXNpdElkZW50aWZpZXIoXG4gICAgICBhc3Q6IEFTVCZ7bmFtZTogc3RyaW5nLCByZWNlaXZlcjogQVNUfSwga2luZDogRXhwcmVzc2lvbklkZW50aWZpZXJbJ2tpbmQnXSkge1xuICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mIGEgbm9uLXRvcC1sZXZlbCBwcm9wZXJ0eSBzdWNoIGFzIGBiYXJgIGluIGB7e2Zvby5iYXJ9fWAgaXMgY3VycmVudGx5XG4gICAgLy8gaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgYnkgYW4gaW5kZXhlciBhbmQgdW5zdXBwb3J0ZWQgYnkgdGhlIGluZGV4aW5nIG1vZHVsZS5cbiAgICAvLyBUaGUgaW5kZXhpbmcgbW9kdWxlIGFsc28gZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcmVmZXJlbmNlcyB0byBpZGVudGlmaWVycyBkZWNsYXJlZCBpbiB0aGVcbiAgICAvLyB0ZW1wbGF0ZSBpdHNlbGYsIHdoaWNoIGhhdmUgYSBub24tbnVsbCBleHByZXNzaW9uIHRhcmdldC5cbiAgICBpZiAoIShhc3QucmVjZWl2ZXIgaW5zdGFuY2VvZiBJbXBsaWNpdFJlY2VpdmVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBzb3VyY2Ugc3BhbiBvZiB0aGUgcmVxdWVzdGVkIEFTVCBzdGFydHMgYXQgYSBsb2NhdGlvbiB0aGF0IGlzIG9mZnNldCBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgIGNvbnN0IGlkZW50aWZpZXJTdGFydCA9IGFzdC5zb3VyY2VTcGFuLnN0YXJ0IC0gdGhpcy5hYnNvbHV0ZU9mZnNldDtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvblN0ci5zdWJzdHJpbmcoaWRlbnRpZmllclN0YXJ0KS5zdGFydHNXaXRoKGFzdC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvc3NpYmxlIHN0YXRlOiBcIiR7YXN0Lm5hbWV9XCIgbm90IGZvdW5kIGluIFwiJHtcbiAgICAgICAgICB0aGlzLmV4cHJlc3Npb25TdHJ9XCIgYXQgbG9jYXRpb24gJHtpZGVudGlmaWVyU3RhcnR9YCk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGV4cHJlc3Npb24gd2l0aGluIGEgbm9kZSB3aXRoIHRoZSBhYnNvbHV0ZSBwb3NpdGlvblxuICAgIC8vIG9mIHRoZSBub2RlIHRvIGdldCB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIGV4cHJlc3Npb24gaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IGFic29sdXRlU3RhcnQgPSB0aGlzLmFic29sdXRlT2Zmc2V0ICsgaWRlbnRpZmllclN0YXJ0O1xuICAgIGNvbnN0IHNwYW4gPSBuZXcgQWJzb2x1dGVTb3VyY2VTcGFuKGFic29sdXRlU3RhcnQsIGFic29sdXRlU3RhcnQgKyBhc3QubmFtZS5sZW5ndGgpO1xuXG4gICAgY29uc3QgdGFyZ2V0QXN0ID0gdGhpcy5ib3VuZFRlbXBsYXRlLmdldEV4cHJlc3Npb25UYXJnZXQoYXN0KTtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRBc3QgPyB0aGlzLnRhcmdldFRvSWRlbnRpZmllcih0YXJnZXRBc3QpIDogbnVsbDtcbiAgICBjb25zdCBpZGVudGlmaWVyID0ge1xuICAgICAgbmFtZTogYXN0Lm5hbWUsXG4gICAgICBzcGFuLFxuICAgICAga2luZCxcbiAgICAgIHRhcmdldCxcbiAgICB9IGFzIEV4cHJlc3Npb25JZGVudGlmaWVyO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYSBwYXJzZWQgQW5ndWxhciB0ZW1wbGF0ZS4gRGlzY292ZXJzIGFuZCBzdG9yZXNcbiAqIGlkZW50aWZpZXJzIG9mIGludGVyZXN0LCBkZWZlcnJpbmcgdG8gYW4gYEV4cHJlc3Npb25WaXNpdG9yYCBhcyBuZWVkZWQuXG4gKi9cbmNsYXNzIFRlbXBsYXRlVmlzaXRvciBleHRlbmRzIFRtcGxBc3RSZWN1cnNpdmVWaXNpdG9yIHtcbiAgLy8gSWRlbnRpZmllcnMgb2YgaW50ZXJlc3QgZm91bmQgaW4gdGhlIHRlbXBsYXRlLlxuICByZWFkb25seSBpZGVudGlmaWVycyA9IG5ldyBTZXQ8VG9wTGV2ZWxJZGVudGlmaWVyPigpO1xuXG4gIC8vIE1hcCBvZiB0YXJnZXRzIGluIGEgdGVtcGxhdGUgdG8gdGhlaXIgaWRlbnRpZmllcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0SWRlbnRpZmllckNhY2hlOiBUYXJnZXRJZGVudGlmaWVyTWFwID0gbmV3IE1hcCgpO1xuXG4gIC8vIE1hcCBvZiBlbGVtZW50cyBhbmQgdGVtcGxhdGVzIHRvIHRoZWlyIGlkZW50aWZpZXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZSA9XG4gICAgICBuZXcgTWFwPFRtcGxBc3RFbGVtZW50fFRtcGxBc3RUZW1wbGF0ZSwgRWxlbWVudElkZW50aWZpZXJ8VGVtcGxhdGVOb2RlSWRlbnRpZmllcj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbXBsYXRlIHZpc2l0b3IgZm9yIGEgYm91bmQgdGVtcGxhdGUgdGFyZ2V0LiBUaGUgYm91bmQgdGFyZ2V0IGNhbiBiZSB1c2VkIHdoZW5cbiAgICogZGVmZXJyZWQgdG8gdGhlIGV4cHJlc3Npb24gdmlzaXRvciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBvZiBhbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYm91bmRUZW1wbGF0ZTogQm91bmRUYXJnZXQ8Q29tcG9uZW50TWV0YT4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0cyBhIG5vZGUgaW4gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBub2RlIHRvIHZpc2l0XG4gICAqL1xuICB2aXNpdChub2RlOiBIVE1MTm9kZSkge1xuICAgIG5vZGUudmlzaXQodGhpcyk7XG4gIH1cblxuICB2aXNpdEFsbChub2RlczogVG1wbEFzdE5vZGVbXSkge1xuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLnZpc2l0KG5vZGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaWRlbnRpZmllciBmb3IgYW4gSFRNTCBlbGVtZW50IGFuZCB2aXNpdCBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqL1xuICBvdmVycmlkZSB2aXNpdEVsZW1lbnQoZWxlbWVudDogVG1wbEFzdEVsZW1lbnQpIHtcbiAgICBjb25zdCBlbGVtZW50SWRlbnRpZmllciA9IHRoaXMuZWxlbWVudE9yVGVtcGxhdGVUb0lkZW50aWZpZXIoZWxlbWVudCk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZChlbGVtZW50SWRlbnRpZmllcik7XG5cbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQucmVmZXJlbmNlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmlucHV0cyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5jaGlsZHJlbik7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50Lm91dHB1dHMpO1xuICB9XG4gIG92ZXJyaWRlIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IFRtcGxBc3RUZW1wbGF0ZSkge1xuICAgIGNvbnN0IHRlbXBsYXRlSWRlbnRpZmllciA9IHRoaXMuZWxlbWVudE9yVGVtcGxhdGVUb0lkZW50aWZpZXIodGVtcGxhdGUpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQodGVtcGxhdGVJZGVudGlmaWVyKTtcblxuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUudmFyaWFibGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUudGVtcGxhdGVBdHRycyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5jaGlsZHJlbik7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5yZWZlcmVuY2VzKTtcbiAgfVxuICBvdmVycmlkZSB2aXNpdEJvdW5kQXR0cmlidXRlKGF0dHJpYnV0ZTogVG1wbEFzdEJvdW5kQXR0cmlidXRlKSB7XG4gICAgLy8gSWYgdGhlIGJvdW5kIGF0dHJpYnV0ZSBoYXMgbm8gdmFsdWUsIGl0IGNhbm5vdCBoYXZlIGFueSBpZGVudGlmaWVycyBpbiB0aGUgdmFsdWUgZXhwcmVzc2lvbi5cbiAgICBpZiAoYXR0cmlidXRlLnZhbHVlU3BhbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWRlbnRpZmllcnMgPSBFeHByZXNzaW9uVmlzaXRvci5nZXRJZGVudGlmaWVycyhcbiAgICAgICAgYXR0cmlidXRlLnZhbHVlLCBhdHRyaWJ1dGUudmFsdWVTcGFuLnRvU3RyaW5nKCksIGF0dHJpYnV0ZS52YWx1ZVNwYW4uc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmJvdW5kVGVtcGxhdGUsIHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyLmJpbmQodGhpcykpO1xuICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gdGhpcy5pZGVudGlmaWVycy5hZGQoaWQpKTtcbiAgfVxuICBvdmVycmlkZSB2aXNpdEJvdW5kRXZlbnQoYXR0cmlidXRlOiBUbXBsQXN0Qm91bmRFdmVudCkge1xuICAgIHRoaXMudmlzaXRFeHByZXNzaW9uKGF0dHJpYnV0ZS5oYW5kbGVyKTtcbiAgfVxuICBvdmVycmlkZSB2aXNpdEJvdW5kVGV4dCh0ZXh0OiBUbXBsQXN0Qm91bmRUZXh0KSB7XG4gICAgdGhpcy52aXNpdEV4cHJlc3Npb24odGV4dC52YWx1ZSk7XG4gIH1cbiAgb3ZlcnJpZGUgdmlzaXRSZWZlcmVuY2UocmVmZXJlbmNlOiBUbXBsQXN0UmVmZXJlbmNlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlSWRlbnRpZmVyID0gdGhpcy50YXJnZXRUb0lkZW50aWZpZXIocmVmZXJlbmNlKTtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMuYWRkKHJlZmVyZW5jZUlkZW50aWZlcik7XG4gIH1cbiAgb3ZlcnJpZGUgdmlzaXRWYXJpYWJsZSh2YXJpYWJsZTogVG1wbEFzdFZhcmlhYmxlKSB7XG4gICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdGhpcy50YXJnZXRUb0lkZW50aWZpZXIodmFyaWFibGUpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQodmFyaWFibGVJZGVudGlmaWVyKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGFuIGlkZW50aWZpZXIgZm9yIGEgdGVtcGxhdGUgZWxlbWVudCBvciB0ZW1wbGF0ZSBub2RlLiAqL1xuICBwcml2YXRlIGVsZW1lbnRPclRlbXBsYXRlVG9JZGVudGlmaWVyKG5vZGU6IFRtcGxBc3RFbGVtZW50fFRtcGxBc3RUZW1wbGF0ZSk6IEVsZW1lbnRJZGVudGlmaWVyXG4gICAgICB8VGVtcGxhdGVOb2RlSWRlbnRpZmllciB7XG4gICAgLy8gSWYgdGhpcyBub2RlIGhhcyBhbHJlYWR5IGJlZW4gc2VlbiwgcmV0dXJuIHRoZSBjYWNoZWQgcmVzdWx0LlxuICAgIGlmICh0aGlzLmVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZS5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZS5nZXQobm9kZSkhO1xuICAgIH1cblxuICAgIGxldCBuYW1lOiBzdHJpbmc7XG4gICAgbGV0IGtpbmQ6IElkZW50aWZpZXJLaW5kLkVsZW1lbnR8SWRlbnRpZmllcktpbmQuVGVtcGxhdGU7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUbXBsQXN0VGVtcGxhdGUpIHtcbiAgICAgIG5hbWUgPSBub2RlLnRhZ05hbWU7XG4gICAgICBraW5kID0gSWRlbnRpZmllcktpbmQuVGVtcGxhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgICBraW5kID0gSWRlbnRpZmllcktpbmQuRWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlU3BhbiA9IG5vZGUuc3RhcnRTb3VyY2VTcGFuO1xuICAgIC8vIEFuIGVsZW1lbnQncyBvciB0ZW1wbGF0ZSdzIHNvdXJjZSBzcGFuIGNhbiBiZSBvZiB0aGUgZm9ybSBgPGVsZW1lbnQ+YCwgYDxlbGVtZW50IC8+YCwgb3JcbiAgICAvLyBgPGVsZW1lbnQ+PC9lbGVtZW50PmAuIE9ubHkgdGhlIHNlbGVjdG9yIGlzIGludGVyZXN0aW5nIHRvIHRoZSBpbmRleGVyLCBzbyB0aGUgc291cmNlIGlzXG4gICAgLy8gc2VhcmNoZWQgZm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBlbGVtZW50IChzZWxlY3RvcikgbmFtZS5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZ2V0U3RhcnRMb2NhdGlvbihuYW1lLCBzb3VyY2VTcGFuKTtcbiAgICBjb25zdCBhYnNvbHV0ZVNwYW4gPSBuZXcgQWJzb2x1dGVTb3VyY2VTcGFuKHN0YXJ0LCBzdGFydCArIG5hbWUubGVuZ3RoKTtcblxuICAgIC8vIFJlY29yZCB0aGUgbm9kZXMncyBhdHRyaWJ1dGVzLCB3aGljaCBhbiBpbmRleGVyIGNhbiBsYXRlciB0cmF2ZXJzZSB0byBzZWUgaWYgYW55IG9mIHRoZW1cbiAgICAvLyBzcGVjaWZ5IGEgdXNlZCBkaXJlY3RpdmUgb24gdGhlIG5vZGUuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcy5tYXAoKHtuYW1lLCBzb3VyY2VTcGFufSk6IEF0dHJpYnV0ZUlkZW50aWZpZXIgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3BhbjogbmV3IEFic29sdXRlU291cmNlU3Bhbihzb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCwgc291cmNlU3Bhbi5lbmQub2Zmc2V0KSxcbiAgICAgICAga2luZDogSWRlbnRpZmllcktpbmQuQXR0cmlidXRlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB1c2VkRGlyZWN0aXZlcyA9IHRoaXMuYm91bmRUZW1wbGF0ZS5nZXREaXJlY3RpdmVzT2ZOb2RlKG5vZGUpIHx8IFtdO1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzcGFuOiBhYnNvbHV0ZVNwYW4sXG4gICAgICBraW5kLFxuICAgICAgYXR0cmlidXRlczogbmV3IFNldChhdHRyaWJ1dGVzKSxcbiAgICAgIHVzZWREaXJlY3RpdmVzOiBuZXcgU2V0KHVzZWREaXJlY3RpdmVzLm1hcChkaXIgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IGRpci5yZWYubm9kZSxcbiAgICAgICAgICBzZWxlY3RvcjogZGlyLnNlbGVjdG9yLFxuICAgICAgICB9O1xuICAgICAgfSkpLFxuICAgICAgLy8gY2FzdCBiL2MgcHJlLVR5cGVTY3JpcHQgMy41IHVuaW9ucyBhcmVuJ3Qgd2VsbCBkaXNjcmltaW5hdGVkXG4gICAgfSBhcyBFbGVtZW50SWRlbnRpZmllciB8XG4gICAgICAgIFRlbXBsYXRlTm9kZUlkZW50aWZpZXI7XG5cbiAgICB0aGlzLmVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhbiBpZGVudGlmaWVyIGZvciBhIHRlbXBsYXRlIHJlZmVyZW5jZSBvciB0ZW1wbGF0ZSB2YXJpYWJsZSB0YXJnZXQuICovXG4gIHByaXZhdGUgdGFyZ2V0VG9JZGVudGlmaWVyKG5vZGU6IFRtcGxBc3RSZWZlcmVuY2V8VG1wbEFzdFZhcmlhYmxlKTogVGFyZ2V0SWRlbnRpZmllciB7XG4gICAgLy8gSWYgdGhpcyBub2RlIGhhcyBhbHJlYWR5IGJlZW4gc2VlbiwgcmV0dXJuIHRoZSBjYWNoZWQgcmVzdWx0LlxuICAgIGlmICh0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5nZXQobm9kZSkhO1xuICAgIH1cblxuICAgIGNvbnN0IHtuYW1lLCBzb3VyY2VTcGFufSA9IG5vZGU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldFN0YXJ0TG9jYXRpb24obmFtZSwgc291cmNlU3Bhbik7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oc3RhcnQsIHN0YXJ0ICsgbmFtZS5sZW5ndGgpO1xuICAgIGxldCBpZGVudGlmaWVyOiBSZWZlcmVuY2VJZGVudGlmaWVyfFZhcmlhYmxlSWRlbnRpZmllcjtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICAgIC8vIElmIHRoZSBub2RlIGlzIGEgcmVmZXJlbmNlLCB3ZSBjYXJlIGFib3V0IGl0cyB0YXJnZXQuIFRoZSB0YXJnZXQgY2FuIGJlIGFuIGVsZW1lbnQsIGFcbiAgICAgIC8vIHRlbXBsYXRlLCBhIGRpcmVjdGl2ZSBhcHBsaWVkIG9uIGEgdGVtcGxhdGUgb3IgZWxlbWVudCAoaW4gd2hpY2ggY2FzZSB0aGUgZGlyZWN0aXZlIGZpZWxkXG4gICAgICAvLyBpcyBub24tbnVsbCksIG9yIG5vdGhpbmcgYXQgYWxsLlxuICAgICAgY29uc3QgcmVmVGFyZ2V0ID0gdGhpcy5ib3VuZFRlbXBsYXRlLmdldFJlZmVyZW5jZVRhcmdldChub2RlKTtcbiAgICAgIGxldCB0YXJnZXQgPSBudWxsO1xuICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICBpZiAocmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdEVsZW1lbnQgfHwgcmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlKSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQpLFxuICAgICAgICAgICAgZGlyZWN0aXZlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQubm9kZSksXG4gICAgICAgICAgICBkaXJlY3RpdmU6IHJlZlRhcmdldC5kaXJlY3RpdmUucmVmLm5vZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZGVudGlmaWVyID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzcGFuLFxuICAgICAgICBraW5kOiBJZGVudGlmaWVyS2luZC5SZWZlcmVuY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkZW50aWZpZXIgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNwYW4sXG4gICAgICAgIGtpbmQ6IElkZW50aWZpZXJLaW5kLlZhcmlhYmxlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgc3RhcnQgbG9jYXRpb24gb2YgYSBzdHJpbmcgaW4gYSBTb3VyY2VTcGFuICovXG4gIHByaXZhdGUgZ2V0U3RhcnRMb2NhdGlvbihuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IFBhcnNlU291cmNlU3Bhbik6IG51bWJlciB7XG4gICAgY29uc3QgbG9jYWxTdHIgPSBjb250ZXh0LnRvU3RyaW5nKCk7XG4gICAgaWYgKCFsb2NhbFN0ci5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvc3NpYmxlIHN0YXRlOiBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gXCIke2xvY2FsU3RyfVwiYCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnN0YXJ0Lm9mZnNldCArIGxvY2FsU3RyLmluZGV4T2YobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgbm9kZSdzIGV4cHJlc3Npb24gYW5kIGFkZHMgaXRzIGlkZW50aWZpZXJzLCBpZiBhbnksIHRvIHRoZSB2aXNpdG9yJ3Mgc3RhdGUuXG4gICAqIE9ubHkgQVNUcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHByZXNzaW9uIHNvdXJjZSBhbmQgaXRzIGxvY2F0aW9uIGFyZSB2aXNpdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBub2RlIHdob3NlIGV4cHJlc3Npb24gdG8gdmlzaXRcbiAgICovXG4gIHByaXZhdGUgdmlzaXRFeHByZXNzaW9uKGFzdDogQVNUKSB7XG4gICAgLy8gT25seSBpbmNsdWRlIEFTVHMgdGhhdCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHNvdXJjZSBhbmQgYWJzb2x1dGUgc291cmNlIHNwYW5zLlxuICAgIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlICYmIGFzdC5zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIC8vIE1ha2UgdGFyZ2V0IHRvIGlkZW50aWZpZXIgbWFwcGluZyBjbG9zdXJlIHN0YXRlZnVsIHRvIHRoaXMgdmlzaXRvciBpbnN0YW5jZS5cbiAgICAgIGNvbnN0IHRhcmdldFRvSWRlbnRpZmllciA9IHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyLmJpbmQodGhpcyk7XG4gICAgICBjb25zdCBhYnNvbHV0ZU9mZnNldCA9IGFzdC5zb3VyY2VTcGFuLnN0YXJ0O1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBFeHByZXNzaW9uVmlzaXRvci5nZXRJZGVudGlmaWVycyhcbiAgICAgICAgICBhc3QsIGFzdC5zb3VyY2UsIGFic29sdXRlT2Zmc2V0LCB0aGlzLmJvdW5kVGVtcGxhdGUsIHRhcmdldFRvSWRlbnRpZmllcik7XG4gICAgICBpZGVudGlmaWVycy5mb3JFYWNoKGlkID0+IHRoaXMuaWRlbnRpZmllcnMuYWRkKGlkKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGEgdGVtcGxhdGUgQVNUIGFuZCBidWlsZHMgaWRlbnRpZmllcnMgZGlzY292ZXJlZCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBxdWVyeWluZyBleHByZXNzaW9uIHRhcmdldHMuXG4gKiBAcmV0dXJuIGlkZW50aWZpZXJzIGluIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZUlkZW50aWZpZXJzKGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+KTpcbiAgICBTZXQ8VG9wTGV2ZWxJZGVudGlmaWVyPiB7XG4gIGNvbnN0IHZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKGJvdW5kVGVtcGxhdGUpO1xuICBpZiAoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0b3IudmlzaXRBbGwoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUpO1xuICB9XG4gIHJldHVybiB2aXNpdG9yLmlkZW50aWZpZXJzO1xufVxuIl19
@@ -122,4 +122,4 @@
122
122
  }(result_1.KnownFn));
123
123
  exports.ObjectAssignBuiltinFn = ObjectAssignBuiltinFn;
124
124
  });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3Ivc3JjL2J1aWx0aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILHlGQUF1QztJQUN2Qyx1RkFBb0U7SUFFcEU7UUFBeUMsK0NBQU87UUFDOUMsNkJBQW9CLEdBQXVCO1lBQTNDLFlBQ0UsaUJBQU8sU0FDUjtZQUZtQixTQUFHLEdBQUgsR0FBRyxDQUFvQjs7UUFFM0MsQ0FBQztRQUVELHNDQUFRLEdBQVIsVUFBUyxJQUF1QixFQUFFLElBQXdCO1lBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxPQUFPLHNCQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQztRQUNILDBCQUFDO0lBQUQsQ0FBQyxBQVpELENBQXlDLGdCQUFPLEdBWS9DO0lBWlksa0RBQW1CO0lBY2hDO1FBQTBDLGdEQUFPO1FBQy9DLDhCQUFvQixHQUF1QjtZQUEzQyxZQUNFLGlCQUFPLFNBQ1I7WUFGbUIsU0FBRyxHQUFILEdBQUcsQ0FBb0I7O1FBRTNDLENBQUM7UUFFRCx1Q0FBUSxHQUFSLFVBQVMsSUFBdUIsRUFBRSxJQUF3Qjs7WUFDeEQsSUFBTSxNQUFNLDRDQUEyQixJQUFJLENBQUMsR0FBRyxFQUFDLENBQUM7O2dCQUNqRCxLQUFrQixJQUFBLFNBQUEsaUJBQUEsSUFBSSxDQUFBLDBCQUFBLDRDQUFFO29CQUFuQixJQUFNLEdBQUcsaUJBQUE7b0JBQ1osSUFBSSxHQUFHLFlBQVksc0JBQVksRUFBRTt3QkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN2RDt5QkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzdCLE1BQU0sQ0FBQyxJQUFJLE9BQVgsTUFBTSwyQ0FBUyxHQUFHLElBQUU7cUJBQ3JCO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2xCO2lCQUNGOzs7Ozs7Ozs7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0gsMkJBQUM7SUFBRCxDQUFDLEFBbEJELENBQTBDLGdCQUFPLEdBa0JoRDtJQWxCWSxvREFBb0I7SUFvQmpDO1FBQTJDLGlEQUFPO1FBQWxEOztRQWtCQSxDQUFDO1FBakJDLHdDQUFRLEdBQVIsVUFBUyxJQUF1QixFQUFFLElBQXdCOztZQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixPQUFPLHNCQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQ7O2dCQUNELEtBQWtCLElBQUEsU0FBQSxpQkFBQSxJQUFJLENBQUEsMEJBQUEsNENBQUU7b0JBQW5CLElBQU0sR0FBRyxpQkFBQTtvQkFDWixJQUFJLEdBQUcsWUFBWSxzQkFBWSxFQUFFO3dCQUMvQixPQUFPLHNCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUNqRDt5QkFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLEVBQUU7d0JBQ2hDLE9BQU8sc0JBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDakQ7aUJBQ0Y7Ozs7Ozs7OztZQUNLLElBQUEsS0FBQSxlQUF1QixJQUFvQyxDQUFBLEVBQTFELE1BQU0sUUFBQSxFQUFLLE9BQU8sY0FBd0MsQ0FBQzs7Z0JBQ2xFLEtBQXFCLElBQUEsWUFBQSxpQkFBQSxPQUFPLENBQUEsZ0NBQUEscURBQUU7b0JBQXpCLElBQU0sTUFBTSxvQkFBQTtvQkFDZixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSyxPQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUF0QixDQUFzQixDQUFDLENBQUM7aUJBQ3hEOzs7Ozs7Ozs7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0gsNEJBQUM7SUFBRCxDQUFDLEFBbEJELENBQTJDLGdCQUFPLEdBa0JqRDtJQWxCWSxzREFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RHluYW1pY1ZhbHVlfSBmcm9tICcuL2R5bmFtaWMnO1xuaW1wb3J0IHtLbm93bkZuLCBSZXNvbHZlZFZhbHVlLCBSZXNvbHZlZFZhbHVlQXJyYXl9IGZyb20gJy4vcmVzdWx0JztcblxuZXhwb3J0IGNsYXNzIEFycmF5U2xpY2VCdWlsdGluRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsaHM6IFJlc29sdmVkVmFsdWVBcnJheSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZShub2RlOiB0cy5DYWxsRXhwcmVzc2lvbiwgYXJnczogUmVzb2x2ZWRWYWx1ZUFycmF5KTogUmVzb2x2ZWRWYWx1ZSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5saHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbVVua25vd24obm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheUNvbmNhdEJ1aWx0aW5GbiBleHRlbmRzIEtub3duRm4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxoczogUmVzb2x2ZWRWYWx1ZUFycmF5KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLCBhcmdzOiBSZXNvbHZlZFZhbHVlQXJyYXkpOiBSZXNvbHZlZFZhbHVlIHtcbiAgICBjb25zdCByZXN1bHQ6IFJlc29sdmVkVmFsdWVBcnJheSA9IFsuLi50aGlzLmxoc107XG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIER5bmFtaWNWYWx1ZSkge1xuICAgICAgICByZXN1bHQucHVzaChEeW5hbWljVmFsdWUuZnJvbUR5bmFtaWNJbnB1dChub2RlLCBhcmcpKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RBc3NpZ25CdWlsdGluRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgZXZhbHVhdGUobm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWUge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tVW5zdXBwb3J0ZWRTeW50YXgobm9kZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tRHluYW1pY0lucHV0KG5vZGUsIGFyZyk7XG4gICAgICB9IGVsc2UgaWYgKCEoYXJnIGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21VbnN1cHBvcnRlZFN5bnRheChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgW3RhcmdldCwgLi4uc291cmNlc10gPSBhcmdzIGFzIE1hcDxzdHJpbmcsIFJlc29sdmVkVmFsdWU+W107XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgc291cmNlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHRhcmdldC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3Ivc3JjL2J1aWx0aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILHlGQUF1QztJQUN2Qyx1RkFBb0U7SUFFcEU7UUFBeUMsK0NBQU87UUFDOUMsNkJBQW9CLEdBQXVCO1lBQTNDLFlBQ0UsaUJBQU8sU0FDUjtZQUZtQixTQUFHLEdBQUgsR0FBRyxDQUFvQjs7UUFFM0MsQ0FBQztRQUVRLHNDQUFRLEdBQWpCLFVBQWtCLElBQXVCLEVBQUUsSUFBd0I7WUFDakUsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNMLE9BQU8sc0JBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBWkQsQ0FBeUMsZ0JBQU8sR0FZL0M7SUFaWSxrREFBbUI7SUFjaEM7UUFBMEMsZ0RBQU87UUFDL0MsOEJBQW9CLEdBQXVCO1lBQTNDLFlBQ0UsaUJBQU8sU0FDUjtZQUZtQixTQUFHLEdBQUgsR0FBRyxDQUFvQjs7UUFFM0MsQ0FBQztRQUVRLHVDQUFRLEdBQWpCLFVBQWtCLElBQXVCLEVBQUUsSUFBd0I7O1lBQ2pFLElBQU0sTUFBTSw0Q0FBMkIsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDOztnQkFDakQsS0FBa0IsSUFBQSxTQUFBLGlCQUFBLElBQUksQ0FBQSwwQkFBQSw0Q0FBRTtvQkFBbkIsSUFBTSxHQUFHLGlCQUFBO29CQUNaLElBQUksR0FBRyxZQUFZLHNCQUFZLEVBQUU7d0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDdkQ7eUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QixNQUFNLENBQUMsSUFBSSxPQUFYLE1BQU0sMkNBQVMsR0FBRyxJQUFFO3FCQUNyQjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNsQjtpQkFDRjs7Ozs7Ozs7O1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNILDJCQUFDO0lBQUQsQ0FBQyxBQWxCRCxDQUEwQyxnQkFBTyxHQWtCaEQ7SUFsQlksb0RBQW9CO0lBb0JqQztRQUEyQyxpREFBTztRQUFsRDs7UUFrQkEsQ0FBQztRQWpCVSx3Q0FBUSxHQUFqQixVQUFrQixJQUF1QixFQUFFLElBQXdCOztZQUNqRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixPQUFPLHNCQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQ7O2dCQUNELEtBQWtCLElBQUEsU0FBQSxpQkFBQSxJQUFJLENBQUEsMEJBQUEsNENBQUU7b0JBQW5CLElBQU0sR0FBRyxpQkFBQTtvQkFDWixJQUFJLEdBQUcsWUFBWSxzQkFBWSxFQUFFO3dCQUMvQixPQUFPLHNCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUNqRDt5QkFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLEVBQUU7d0JBQ2hDLE9BQU8sc0JBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDakQ7aUJBQ0Y7Ozs7Ozs7OztZQUNLLElBQUEsS0FBQSxlQUF1QixJQUFvQyxDQUFBLEVBQTFELE1BQU0sUUFBQSxFQUFLLE9BQU8sY0FBd0MsQ0FBQzs7Z0JBQ2xFLEtBQXFCLElBQUEsWUFBQSxpQkFBQSxPQUFPLENBQUEsZ0NBQUEscURBQUU7b0JBQXpCLElBQU0sTUFBTSxvQkFBQTtvQkFDZixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSyxPQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUF0QixDQUFzQixDQUFDLENBQUM7aUJBQ3hEOzs7Ozs7Ozs7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0gsNEJBQUM7SUFBRCxDQUFDLEFBbEJELENBQTJDLGdCQUFPLEdBa0JqRDtJQWxCWSxzREFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RHluYW1pY1ZhbHVlfSBmcm9tICcuL2R5bmFtaWMnO1xuaW1wb3J0IHtLbm93bkZuLCBSZXNvbHZlZFZhbHVlLCBSZXNvbHZlZFZhbHVlQXJyYXl9IGZyb20gJy4vcmVzdWx0JztcblxuZXhwb3J0IGNsYXNzIEFycmF5U2xpY2VCdWlsdGluRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsaHM6IFJlc29sdmVkVmFsdWVBcnJheSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBldmFsdWF0ZShub2RlOiB0cy5DYWxsRXhwcmVzc2lvbiwgYXJnczogUmVzb2x2ZWRWYWx1ZUFycmF5KTogUmVzb2x2ZWRWYWx1ZSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5saHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbVVua25vd24obm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheUNvbmNhdEJ1aWx0aW5GbiBleHRlbmRzIEtub3duRm4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxoczogUmVzb2x2ZWRWYWx1ZUFycmF5KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV2YWx1YXRlKG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLCBhcmdzOiBSZXNvbHZlZFZhbHVlQXJyYXkpOiBSZXNvbHZlZFZhbHVlIHtcbiAgICBjb25zdCByZXN1bHQ6IFJlc29sdmVkVmFsdWVBcnJheSA9IFsuLi50aGlzLmxoc107XG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIER5bmFtaWNWYWx1ZSkge1xuICAgICAgICByZXN1bHQucHVzaChEeW5hbWljVmFsdWUuZnJvbUR5bmFtaWNJbnB1dChub2RlLCBhcmcpKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RBc3NpZ25CdWlsdGluRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgb3ZlcnJpZGUgZXZhbHVhdGUobm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWUge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tVW5zdXBwb3J0ZWRTeW50YXgobm9kZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tRHluYW1pY0lucHV0KG5vZGUsIGFyZyk7XG4gICAgICB9IGVsc2UgaWYgKCEoYXJnIGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21VbnN1cHBvcnRlZFN5bnRheChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgW3RhcmdldCwgLi4uc291cmNlc10gPSBhcmdzIGFzIE1hcDxzdHJpbmcsIFJlc29sdmVkVmFsdWU+W107XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgc291cmNlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHRhcmdldC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG4iXX0=
@@ -118,4 +118,4 @@
118
118
  }(result_1.KnownFn));
119
119
  exports.ReadHelperFn = ReadHelperFn;
120
120
  });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNfaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3Ivc3JjL3RzX2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILHlGQUFnRDtJQUNoRCx5RkFBdUM7SUFDdkMsdUZBQW9FO0lBR3BFLGlHQUFpRztJQUNqRyx5REFBeUQ7SUFDekQ7UUFBb0MsMENBQXFCO1FBQXpEOztRQUEyRCxDQUFDO1FBQUQscUJBQUM7SUFBRCxDQUFDLEFBQTVELENBQW9DLCtCQUFxQixHQUFHO0lBQS9DLHdDQUFjO0lBRTNCLGlGQUFpRjtJQUNqRjtRQUFvQywwQ0FBTztRQUEzQzs7UUFnQkEsQ0FBQztRQWZDLGlDQUFRLEdBQVIsVUFBUyxJQUFhLEVBQUUsSUFBd0I7O1lBQzlDLElBQU0sTUFBTSxHQUF1QixFQUFFLENBQUM7O2dCQUV0QyxLQUFrQixJQUFBLFNBQUEsaUJBQUEsSUFBSSxDQUFBLDBCQUFBLDRDQUFFO29CQUFuQixJQUFNLEdBQUcsaUJBQUE7b0JBQ1osSUFBSSxHQUFHLFlBQVksc0JBQVksRUFBRTt3QkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN2RDt5QkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzdCLE1BQU0sQ0FBQyxJQUFJLE9BQVgsTUFBTSwyQ0FBUyxHQUFHLElBQUU7cUJBQ3JCO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2xCO2lCQUNGOzs7Ozs7Ozs7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0gscUJBQUM7SUFBRCxDQUFDLEFBaEJELENBQW9DLGdCQUFPLEdBZ0IxQztJQWhCWSx3Q0FBYztJQWtCM0IsdURBQXVEO0lBQ3ZEO1FBQXlDLCtDQUFPO1FBQWhEOztRQXFCQSxDQUFDO1FBcEJDLHNDQUFRLEdBQVIsVUFBUyxJQUFhLEVBQUUsSUFBd0I7WUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckIsT0FBTyxzQkFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUVLLElBQUEsS0FBQSxlQUFhLElBQUksSUFBQSxFQUFoQixFQUFFLFFBQUEsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUN4QixJQUFJLEVBQUUsWUFBWSxzQkFBWSxFQUFFO2dCQUM5QixPQUFPLHNCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNLElBQUksSUFBSSxZQUFZLHNCQUFZLEVBQUU7Z0JBQ3ZDLE9BQU8sc0JBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEQ7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxzQkFBWSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUN6RDtpQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxzQkFBWSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMzRDtZQUVELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBckJELENBQXlDLGdCQUFPLEdBcUIvQztJQXJCWSxrREFBbUI7SUF1QmhDLGdEQUFnRDtJQUNoRDtRQUFrQyx3Q0FBTztRQUF6Qzs7UUFrQkEsQ0FBQztRQWpCQywrQkFBUSxHQUFSLFVBQVMsSUFBYSxFQUFFLElBQXdCO1lBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLG9GQUFvRjtnQkFDcEYsT0FBTyxzQkFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUVLLElBQUEsS0FBQSxlQUFVLElBQUksSUFBQSxFQUFiLEtBQUssUUFBUSxDQUFDO1lBQ3JCLElBQUksS0FBSyxZQUFZLHNCQUFZLEVBQUU7Z0JBQ2pDLE9BQU8sc0JBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbkQ7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsT0FBTyxzQkFBWSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM1RDtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNILG1CQUFDO0lBQUQsQ0FBQyxBQWxCRCxDQUFrQyxnQkFBTyxHQWtCeEM7SUFsQlksb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7T2JqZWN0QXNzaWduQnVpbHRpbkZufSBmcm9tICcuL2J1aWx0aW4nO1xuaW1wb3J0IHtEeW5hbWljVmFsdWV9IGZyb20gJy4vZHluYW1pYyc7XG5pbXBvcnQge0tub3duRm4sIFJlc29sdmVkVmFsdWUsIFJlc29sdmVkVmFsdWVBcnJheX0gZnJvbSAnLi9yZXN1bHQnO1xuXG5cbi8vIFVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiB3ZSB1c2UgZm9yIGBPYmplY3QuYXNzaWduKClgLiBTZW1hbnRpY2FsbHkgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVcbi8vIHNhbWUsIHNvIHRoZXkgY2FuIGFsc28gc2hhcmUgdGhlIHNhbWUgZXZhbHVhdGlvbiBjb2RlLlxuZXhwb3J0IGNsYXNzIEFzc2lnbkhlbHBlckZuIGV4dGVuZHMgT2JqZWN0QXNzaWduQnVpbHRpbkZuIHt9XG5cbi8vIFVzZWQgZm9yIGJvdGggYF9fc3ByZWFkKClgIGFuZCBgX19zcHJlYWRBcnJheXMoKWAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb25zLlxuZXhwb3J0IGNsYXNzIFNwcmVhZEhlbHBlckZuIGV4dGVuZHMgS25vd25GbiB7XG4gIGV2YWx1YXRlKG5vZGU6IHRzLk5vZGUsIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWVBcnJheSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZXNvbHZlZFZhbHVlQXJyYXkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgYXJnKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8vIFVzZWQgZm9yIGBfX3NwcmVhZEFycmF5YCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbmV4cG9ydCBjbGFzcyBTcHJlYWRBcnJheUhlbHBlckZuIGV4dGVuZHMgS25vd25GbiB7XG4gIGV2YWx1YXRlKG5vZGU6IHRzLk5vZGUsIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWUge1xuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tVW5rbm93bihub2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdG8sIGZyb21dID0gYXJncztcbiAgICBpZiAodG8gaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbUR5bmFtaWNJbnB1dChub2RlLCB0byk7XG4gICAgfSBlbHNlIGlmIChmcm9tIGluc3RhbmNlb2YgRHluYW1pY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgZnJvbSk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRvKSkge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tSW52YWxpZEV4cHJlc3Npb25UeXBlKG5vZGUsIHRvKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGZyb20pKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21JbnZhbGlkRXhwcmVzc2lvblR5cGUobm9kZSwgZnJvbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvLmNvbmNhdChmcm9tKTtcbiAgfVxufVxuXG4vLyBVc2VkIGZvciBgX19yZWFkYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbmV4cG9ydCBjbGFzcyBSZWFkSGVscGVyRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgZXZhbHVhdGUobm9kZTogdHMuTm9kZSwgYXJnczogUmVzb2x2ZWRWYWx1ZUFycmF5KTogUmVzb2x2ZWRWYWx1ZSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyBUaGUgYF9fcmVhZGAgaGVscGVyIGFjY2VwdHMgYSBzZWNvbmQgYXJndW1lbnQgYG5gIGJ1dCB0aGF0IGNhc2UgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbVVua25vd24obm9kZSk7XG4gICAgfVxuXG4gICAgY29uc3QgW3ZhbHVlXSA9IGFyZ3M7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRHluYW1pY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbUludmFsaWRFeHByZXNzaW9uVHlwZShub2RlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNfaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3Ivc3JjL3RzX2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILHlGQUFnRDtJQUNoRCx5RkFBdUM7SUFDdkMsdUZBQW9FO0lBR3BFLGlHQUFpRztJQUNqRyx5REFBeUQ7SUFDekQ7UUFBb0MsMENBQXFCO1FBQXpEOztRQUEyRCxDQUFDO1FBQUQscUJBQUM7SUFBRCxDQUFDLEFBQTVELENBQW9DLCtCQUFxQixHQUFHO0lBQS9DLHdDQUFjO0lBRTNCLGlGQUFpRjtJQUNqRjtRQUFvQywwQ0FBTztRQUEzQzs7UUFnQkEsQ0FBQztRQWZVLGlDQUFRLEdBQWpCLFVBQWtCLElBQWEsRUFBRSxJQUF3Qjs7WUFDdkQsSUFBTSxNQUFNLEdBQXVCLEVBQUUsQ0FBQzs7Z0JBRXRDLEtBQWtCLElBQUEsU0FBQSxpQkFBQSxJQUFJLENBQUEsMEJBQUEsNENBQUU7b0JBQW5CLElBQU0sR0FBRyxpQkFBQTtvQkFDWixJQUFJLEdBQUcsWUFBWSxzQkFBWSxFQUFFO3dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZEO3lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDN0IsTUFBTSxDQUFDLElBQUksT0FBWCxNQUFNLDJDQUFTLEdBQUcsSUFBRTtxQkFDckI7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDbEI7aUJBQ0Y7Ozs7Ozs7OztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDSCxxQkFBQztJQUFELENBQUMsQUFoQkQsQ0FBb0MsZ0JBQU8sR0FnQjFDO0lBaEJZLHdDQUFjO0lBa0IzQix1REFBdUQ7SUFDdkQ7UUFBeUMsK0NBQU87UUFBaEQ7O1FBcUJBLENBQUM7UUFwQlUsc0NBQVEsR0FBakIsVUFBa0IsSUFBYSxFQUFFLElBQXdCO1lBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sc0JBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7WUFFSyxJQUFBLEtBQUEsZUFBYSxJQUFJLElBQUEsRUFBaEIsRUFBRSxRQUFBLEVBQUUsSUFBSSxRQUFRLENBQUM7WUFDeEIsSUFBSSxFQUFFLFlBQVksc0JBQVksRUFBRTtnQkFDOUIsT0FBTyxzQkFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNoRDtpQkFBTSxJQUFJLElBQUksWUFBWSxzQkFBWSxFQUFFO2dCQUN2QyxPQUFPLHNCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sc0JBQVksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDekQ7aUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sc0JBQVksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDM0Q7WUFFRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNILDBCQUFDO0lBQUQsQ0FBQyxBQXJCRCxDQUF5QyxnQkFBTyxHQXFCL0M7SUFyQlksa0RBQW1CO0lBdUJoQyxnREFBZ0Q7SUFDaEQ7UUFBa0Msd0NBQU87UUFBekM7O1FBa0JBLENBQUM7UUFqQlUsK0JBQVEsR0FBakIsVUFBa0IsSUFBYSxFQUFFLElBQXdCO1lBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLG9GQUFvRjtnQkFDcEYsT0FBTyxzQkFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUVLLElBQUEsS0FBQSxlQUFVLElBQUksSUFBQSxFQUFiLEtBQUssUUFBUSxDQUFDO1lBQ3JCLElBQUksS0FBSyxZQUFZLHNCQUFZLEVBQUU7Z0JBQ2pDLE9BQU8sc0JBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbkQ7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsT0FBTyxzQkFBWSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM1RDtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNILG1CQUFDO0lBQUQsQ0FBQyxBQWxCRCxDQUFrQyxnQkFBTyxHQWtCeEM7SUFsQlksb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7T2JqZWN0QXNzaWduQnVpbHRpbkZufSBmcm9tICcuL2J1aWx0aW4nO1xuaW1wb3J0IHtEeW5hbWljVmFsdWV9IGZyb20gJy4vZHluYW1pYyc7XG5pbXBvcnQge0tub3duRm4sIFJlc29sdmVkVmFsdWUsIFJlc29sdmVkVmFsdWVBcnJheX0gZnJvbSAnLi9yZXN1bHQnO1xuXG5cbi8vIFVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiB3ZSB1c2UgZm9yIGBPYmplY3QuYXNzaWduKClgLiBTZW1hbnRpY2FsbHkgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVcbi8vIHNhbWUsIHNvIHRoZXkgY2FuIGFsc28gc2hhcmUgdGhlIHNhbWUgZXZhbHVhdGlvbiBjb2RlLlxuZXhwb3J0IGNsYXNzIEFzc2lnbkhlbHBlckZuIGV4dGVuZHMgT2JqZWN0QXNzaWduQnVpbHRpbkZuIHt9XG5cbi8vIFVzZWQgZm9yIGJvdGggYF9fc3ByZWFkKClgIGFuZCBgX19zcHJlYWRBcnJheXMoKWAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb25zLlxuZXhwb3J0IGNsYXNzIFNwcmVhZEhlbHBlckZuIGV4dGVuZHMgS25vd25GbiB7XG4gIG92ZXJyaWRlIGV2YWx1YXRlKG5vZGU6IHRzLk5vZGUsIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWVBcnJheSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZXNvbHZlZFZhbHVlQXJyYXkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgYXJnKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8vIFVzZWQgZm9yIGBfX3NwcmVhZEFycmF5YCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbmV4cG9ydCBjbGFzcyBTcHJlYWRBcnJheUhlbHBlckZuIGV4dGVuZHMgS25vd25GbiB7XG4gIG92ZXJyaWRlIGV2YWx1YXRlKG5vZGU6IHRzLk5vZGUsIGFyZ3M6IFJlc29sdmVkVmFsdWVBcnJheSk6IFJlc29sdmVkVmFsdWUge1xuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tVW5rbm93bihub2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdG8sIGZyb21dID0gYXJncztcbiAgICBpZiAodG8gaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbUR5bmFtaWNJbnB1dChub2RlLCB0byk7XG4gICAgfSBlbHNlIGlmIChmcm9tIGluc3RhbmNlb2YgRHluYW1pY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgZnJvbSk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRvKSkge1xuICAgICAgcmV0dXJuIER5bmFtaWNWYWx1ZS5mcm9tSW52YWxpZEV4cHJlc3Npb25UeXBlKG5vZGUsIHRvKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGZyb20pKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21JbnZhbGlkRXhwcmVzc2lvblR5cGUobm9kZSwgZnJvbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvLmNvbmNhdChmcm9tKTtcbiAgfVxufVxuXG4vLyBVc2VkIGZvciBgX19yZWFkYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbmV4cG9ydCBjbGFzcyBSZWFkSGVscGVyRm4gZXh0ZW5kcyBLbm93bkZuIHtcbiAgb3ZlcnJpZGUgZXZhbHVhdGUobm9kZTogdHMuTm9kZSwgYXJnczogUmVzb2x2ZWRWYWx1ZUFycmF5KTogUmVzb2x2ZWRWYWx1ZSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyBUaGUgYF9fcmVhZGAgaGVscGVyIGFjY2VwdHMgYSBzZWNvbmQgYXJndW1lbnQgYG5gIGJ1dCB0aGF0IGNhc2UgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbVVua25vd24obm9kZSk7XG4gICAgfVxuXG4gICAgY29uc3QgW3ZhbHVlXSA9IGFyZ3M7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRHluYW1pY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gRHluYW1pY1ZhbHVlLmZyb21EeW5hbWljSW5wdXQobm9kZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBEeW5hbWljVmFsdWUuZnJvbUludmFsaWRFeHByZXNzaW9uVHlwZShub2RlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
@@ -8,6 +8,25 @@
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/program_driver/src/api" />
9
9
  import * as ts from 'typescript';
10
10
  import { AbsoluteFsPath } from '../../file_system';
11
+ export interface FileUpdate {
12
+ /**
13
+ * The source file text.
14
+ */
15
+ newText: string;
16
+ /**
17
+ * Represents the source file from the original program that is being updated. If the file update
18
+ * targets a shim file then this is null, as shim files do not have an associated original file.
19
+ */
20
+ originalFile: ts.SourceFile | null;
21
+ }
22
+ export declare const NgOriginalFile: unique symbol;
23
+ /**
24
+ * If an updated file has an associated original source file, then the original source file
25
+ * is attached to the updated file using the `NgOriginalFile` symbol.
26
+ */
27
+ export interface MaybeSourceFileWithOriginalFile extends ts.SourceFile {
28
+ [NgOriginalFile]?: ts.SourceFile;
29
+ }
11
30
  export interface ProgramDriver {
12
31
  /**
13
32
  * Whether this strategy supports modifying user files (inline modifications) in addition to
@@ -22,7 +41,7 @@ export interface ProgramDriver {
22
41
  * Incorporate a set of changes to either augment or completely replace the type-checking code
23
42
  * included in the type-checking program.
24
43
  */
25
- updateFiles(contents: Map<AbsoluteFsPath, string>, updateMode: UpdateMode): void;
44
+ updateFiles(contents: Map<AbsoluteFsPath, FileUpdate>, updateMode: UpdateMode): void;
26
45
  /**
27
46
  * Retrieve a string version for a given `ts.SourceFile`, which much change when the contents of
28
47
  * the file have changed.
@@ -16,7 +16,8 @@
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.UpdateMode = void 0;
19
+ exports.UpdateMode = exports.NgOriginalFile = void 0;
20
+ exports.NgOriginalFile = Symbol('NgOriginalFile');
20
21
  var UpdateMode;
21
22
  (function (UpdateMode) {
22
23
  /**
@@ -32,4 +33,4 @@
32
33
  UpdateMode[UpdateMode["Incremental"] = 1] = "Incremental";
33
34
  })(UpdateMode = exports.UpdateMode || (exports.UpdateMode = {}));
34
35
  });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9wcm9ncmFtX2RyaXZlci9zcmMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQW1DSCxJQUFZLFVBYVg7SUFiRCxXQUFZLFVBQVU7UUFDcEI7Ozs7V0FJRztRQUNILG1EQUFRLENBQUE7UUFFUjs7O1dBR0c7UUFDSCx5REFBVyxDQUFBO0lBQ2IsQ0FBQyxFQWJXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBYXJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1Ecml2ZXIge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN0cmF0ZWd5IHN1cHBvcnRzIG1vZGlmeWluZyB1c2VyIGZpbGVzIChpbmxpbmUgbW9kaWZpY2F0aW9ucykgaW4gYWRkaXRpb24gdG9cbiAgICogbW9kaWZ5aW5nIHR5cGUtY2hlY2tpbmcgc2hpbXMuXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0c0lubGluZU9wZXJhdGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSwgY29udGFpbmluZyBhbGwgdGhlIHVwZGF0ZXMgbWFkZSB0aHVzIGZhci5cbiAgICovXG4gIGdldFByb2dyYW0oKTogdHMuUHJvZ3JhbTtcblxuICAvKipcbiAgICogSW5jb3Jwb3JhdGUgYSBzZXQgb2YgY2hhbmdlcyB0byBlaXRoZXIgYXVnbWVudCBvciBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIHR5cGUtY2hlY2tpbmcgY29kZVxuICAgKiBpbmNsdWRlZCBpbiB0aGUgdHlwZS1jaGVja2luZyBwcm9ncmFtLlxuICAgKi9cbiAgdXBkYXRlRmlsZXMoY29udGVudHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgc3RyaW5nPiwgdXBkYXRlTW9kZTogVXBkYXRlTW9kZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc3RyaW5nIHZlcnNpb24gZm9yIGEgZ2l2ZW4gYHRzLlNvdXJjZUZpbGVgLCB3aGljaCBtdWNoIGNoYW5nZSB3aGVuIHRoZSBjb250ZW50cyBvZlxuICAgKiB0aGUgZmlsZSBoYXZlIGNoYW5nZWQuXG4gICAqXG4gICAqIElmIHRoaXMgbWV0aG9kIGlzIHByZXNlbnQsIHRoZSBjb21waWxlciB3aWxsIHVzZSB0aGVzZSB2ZXJzaW9ucyBpbiBhZGRpdGlvbiB0byBvYmplY3QgaWRlbnRpdHlcbiAgICogZm9yIGB0cy5Tb3VyY2VGaWxlYHMgdG8gZGV0ZXJtaW5lIHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gdHdvIGluY3JlbWVudGFsIHByb2dyYW1zLiBUaGlzIGlzXG4gICAqIHZhbHVhYmxlIGZvciBzb21lIGNsaWVudHMgKHN1Y2ggYXMgdGhlIExhbmd1YWdlIFNlcnZpY2UpIHRoYXQgdHJlYXQgYHRzLlNvdXJjZUZpbGVgcyBhcyBtdXRhYmxlXG4gICAqIG9iamVjdHMuXG4gICAqL1xuICBnZXRTb3VyY2VGaWxlVmVyc2lvbj8oc2Y6IHRzLlNvdXJjZUZpbGUpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFVwZGF0ZU1vZGUge1xuICAvKipcbiAgICogQSBjb21wbGV0ZSB1cGRhdGUgY3JlYXRlcyBhIGNvbXBsZXRlbHkgbmV3IG92ZXJsYXkgb2YgdHlwZS1jaGVja2luZyBjb2RlIG9uIHRvcCBvZiB0aGUgdXNlcidzXG4gICAqIG9yaWdpbmFsIHByb2dyYW0sIHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSB0eXBlLWNoZWNraW5nIGNvZGUgZnJvbSBwcmV2aW91cyBjYWxscyB0b1xuICAgKiBgdXBkYXRlRmlsZXNgLlxuICAgKi9cbiAgQ29tcGxldGUsXG5cbiAgLyoqXG4gICAqIEFuIGluY3JlbWVudGFsIHVwZGF0ZSBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBzb21lIGZpbGVzIGluIHRoZSB0eXBlLWNoZWNraW5nIHByb2dyYW0gd2l0aG91dFxuICAgKiByZXZlcnRpbmcgYW55IHByaW9yIGNoYW5nZXMuXG4gICAqL1xuICBJbmNyZW1lbnRhbCxcbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9wcm9ncmFtX2RyaXZlci9zcmMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQWtCVSxRQUFBLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQXdDdkQsSUFBWSxVQWFYO0lBYkQsV0FBWSxVQUFVO1FBQ3BCOzs7O1dBSUc7UUFDSCxtREFBUSxDQUFBO1FBRVI7OztXQUdHO1FBQ0gseURBQVcsQ0FBQTtJQUNiLENBQUMsRUFiVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQWFyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGh9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlVXBkYXRlIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSB0ZXh0LlxuICAgKi9cbiAgbmV3VGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBvcmlnaW5hbCBwcm9ncmFtIHRoYXQgaXMgYmVpbmcgdXBkYXRlZC4gSWYgdGhlIGZpbGUgdXBkYXRlXG4gICAqIHRhcmdldHMgYSBzaGltIGZpbGUgdGhlbiB0aGlzIGlzIG51bGwsIGFzIHNoaW0gZmlsZXMgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgb3JpZ2luYWxGaWxlOiB0cy5Tb3VyY2VGaWxlfG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBOZ09yaWdpbmFsRmlsZSA9IFN5bWJvbCgnTmdPcmlnaW5hbEZpbGUnKTtcblxuLyoqXG4gKiBJZiBhbiB1cGRhdGVkIGZpbGUgaGFzIGFuIGFzc29jaWF0ZWQgb3JpZ2luYWwgc291cmNlIGZpbGUsIHRoZW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlXG4gKiBpcyBhdHRhY2hlZCB0byB0aGUgdXBkYXRlZCBmaWxlIHVzaW5nIHRoZSBgTmdPcmlnaW5hbEZpbGVgIHN5bWJvbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXliZVNvdXJjZUZpbGVXaXRoT3JpZ2luYWxGaWxlIGV4dGVuZHMgdHMuU291cmNlRmlsZSB7XG4gIFtOZ09yaWdpbmFsRmlsZV0/OiB0cy5Tb3VyY2VGaWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1Ecml2ZXIge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN0cmF0ZWd5IHN1cHBvcnRzIG1vZGlmeWluZyB1c2VyIGZpbGVzIChpbmxpbmUgbW9kaWZpY2F0aW9ucykgaW4gYWRkaXRpb24gdG9cbiAgICogbW9kaWZ5aW5nIHR5cGUtY2hlY2tpbmcgc2hpbXMuXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0c0lubGluZU9wZXJhdGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSwgY29udGFpbmluZyBhbGwgdGhlIHVwZGF0ZXMgbWFkZSB0aHVzIGZhci5cbiAgICovXG4gIGdldFByb2dyYW0oKTogdHMuUHJvZ3JhbTtcblxuICAvKipcbiAgICogSW5jb3Jwb3JhdGUgYSBzZXQgb2YgY2hhbmdlcyB0byBlaXRoZXIgYXVnbWVudCBvciBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIHR5cGUtY2hlY2tpbmcgY29kZVxuICAgKiBpbmNsdWRlZCBpbiB0aGUgdHlwZS1jaGVja2luZyBwcm9ncmFtLlxuICAgKi9cbiAgdXBkYXRlRmlsZXMoY29udGVudHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVVwZGF0ZT4sIHVwZGF0ZU1vZGU6IFVwZGF0ZU1vZGUpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0cmluZyB2ZXJzaW9uIGZvciBhIGdpdmVuIGB0cy5Tb3VyY2VGaWxlYCwgd2hpY2ggbXVjaCBjaGFuZ2Ugd2hlbiB0aGUgY29udGVudHMgb2ZcbiAgICogdGhlIGZpbGUgaGF2ZSBjaGFuZ2VkLlxuICAgKlxuICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBwcmVzZW50LCB0aGUgY29tcGlsZXIgd2lsbCB1c2UgdGhlc2UgdmVyc2lvbnMgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGlkZW50aXR5XG4gICAqIGZvciBgdHMuU291cmNlRmlsZWBzIHRvIGRldGVybWluZSB3aGF0J3MgY2hhbmdlZCBiZXR3ZWVuIHR3byBpbmNyZW1lbnRhbCBwcm9ncmFtcy4gVGhpcyBpc1xuICAgKiB2YWx1YWJsZSBmb3Igc29tZSBjbGllbnRzIChzdWNoIGFzIHRoZSBMYW5ndWFnZSBTZXJ2aWNlKSB0aGF0IHRyZWF0IGB0cy5Tb3VyY2VGaWxlYHMgYXMgbXV0YWJsZVxuICAgKiBvYmplY3RzLlxuICAgKi9cbiAgZ2V0U291cmNlRmlsZVZlcnNpb24/KHNmOiB0cy5Tb3VyY2VGaWxlKTogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBVcGRhdGVNb2RlIHtcbiAgLyoqXG4gICAqIEEgY29tcGxldGUgdXBkYXRlIGNyZWF0ZXMgYSBjb21wbGV0ZWx5IG5ldyBvdmVybGF5IG9mIHR5cGUtY2hlY2tpbmcgY29kZSBvbiB0b3Agb2YgdGhlIHVzZXInc1xuICAgKiBvcmlnaW5hbCBwcm9ncmFtLCB3aGljaCBkb2Vzbid0IGluY2x1ZGUgdHlwZS1jaGVja2luZyBjb2RlIGZyb20gcHJldmlvdXMgY2FsbHMgdG9cbiAgICogYHVwZGF0ZUZpbGVzYC5cbiAgICovXG4gIENvbXBsZXRlLFxuXG4gIC8qKlxuICAgKiBBbiBpbmNyZW1lbnRhbCB1cGRhdGUgY2hhbmdlcyB0aGUgY29udGVudHMgb2Ygc29tZSBmaWxlcyBpbiB0aGUgdHlwZS1jaGVja2luZyBwcm9ncmFtIHdpdGhvdXRcbiAgICogcmV2ZXJ0aW5nIGFueSBwcmlvciBjaGFuZ2VzLlxuICAgKi9cbiAgSW5jcmVtZW50YWwsXG59XG4iXX0=