@angular/compiler 19.0.0-next.1 → 19.0.0-next.11

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/compiler.mjs +5465 -4675
  3. package/fesm2022/compiler.mjs.map +1 -1
  4. package/index.d.ts +115 -15
  5. package/package.json +2 -4
  6. package/esm2022/compiler.mjs +0 -13
  7. package/esm2022/index.mjs +0 -13
  8. package/esm2022/public_api.mjs +0 -15
  9. package/esm2022/src/assertions.mjs +0 -31
  10. package/esm2022/src/chars.mjs +0 -90
  11. package/esm2022/src/compiler.mjs +0 -88
  12. package/esm2022/src/compiler_facade_interface.mjs +0 -29
  13. package/esm2022/src/config.mjs +0 -20
  14. package/esm2022/src/constant_pool.mjs +0 -285
  15. package/esm2022/src/core.mjs +0 -96
  16. package/esm2022/src/expression_parser/ast.mjs +0 -755
  17. package/esm2022/src/expression_parser/lexer.mjs +0 -421
  18. package/esm2022/src/expression_parser/parser.mjs +0 -1222
  19. package/esm2022/src/i18n/digest.mjs +0 -322
  20. package/esm2022/src/i18n/extractor_merger.mjs +0 -409
  21. package/esm2022/src/i18n/i18n_ast.mjs +0 -212
  22. package/esm2022/src/i18n/i18n_html_parser.mjs +0 -54
  23. package/esm2022/src/i18n/i18n_parser.mjs +0 -247
  24. package/esm2022/src/i18n/index.mjs +0 -16
  25. package/esm2022/src/i18n/message_bundle.mjs +0 -93
  26. package/esm2022/src/i18n/parse_util.mjs +0 -17
  27. package/esm2022/src/i18n/serializers/placeholder.mjs +0 -139
  28. package/esm2022/src/i18n/serializers/serializer.mjs +0 -77
  29. package/esm2022/src/i18n/serializers/xliff.mjs +0 -300
  30. package/esm2022/src/i18n/serializers/xliff2.mjs +0 -349
  31. package/esm2022/src/i18n/serializers/xmb.mjs +0 -188
  32. package/esm2022/src/i18n/serializers/xml_helper.mjs +0 -94
  33. package/esm2022/src/i18n/serializers/xtb.mjs +0 -186
  34. package/esm2022/src/i18n/translation_bundle.mjs +0 -164
  35. package/esm2022/src/injectable_compiler_2.mjs +0 -138
  36. package/esm2022/src/jit_compiler_facade.mjs +0 -681
  37. package/esm2022/src/ml_parser/ast.mjs +0 -167
  38. package/esm2022/src/ml_parser/defaults.mjs +0 -24
  39. package/esm2022/src/ml_parser/entities.mjs +0 -2144
  40. package/esm2022/src/ml_parser/html_parser.mjs +0 -18
  41. package/esm2022/src/ml_parser/html_tags.mjs +0 -156
  42. package/esm2022/src/ml_parser/html_whitespaces.mjs +0 -107
  43. package/esm2022/src/ml_parser/icu_ast_expander.mjs +0 -125
  44. package/esm2022/src/ml_parser/lexer.mjs +0 -1210
  45. package/esm2022/src/ml_parser/parser.mjs +0 -539
  46. package/esm2022/src/ml_parser/tags.mjs +0 -47
  47. package/esm2022/src/ml_parser/tokens.mjs +0 -9
  48. package/esm2022/src/ml_parser/xml_parser.mjs +0 -19
  49. package/esm2022/src/ml_parser/xml_tags.mjs +0 -32
  50. package/esm2022/src/output/abstract_emitter.mjs +0 -524
  51. package/esm2022/src/output/abstract_js_emitter.mjs +0 -130
  52. package/esm2022/src/output/map_util.mjs +0 -19
  53. package/esm2022/src/output/output_ast.mjs +0 -1301
  54. package/esm2022/src/output/output_jit.mjs +0 -138
  55. package/esm2022/src/output/output_jit_trusted_types.mjs +0 -100
  56. package/esm2022/src/output/source_map.mjs +0 -150
  57. package/esm2022/src/parse_util.mjs +0 -198
  58. package/esm2022/src/render3/partial/api.mjs +0 -9
  59. package/esm2022/src/render3/partial/class_metadata.mjs +0 -52
  60. package/esm2022/src/render3/partial/component.mjs +0 -197
  61. package/esm2022/src/render3/partial/directive.mjs +0 -264
  62. package/esm2022/src/render3/partial/factory.mjs +0 -35
  63. package/esm2022/src/render3/partial/injectable.mjs +0 -67
  64. package/esm2022/src/render3/partial/injector.mjs +0 -41
  65. package/esm2022/src/render3/partial/ng_module.mjs +0 -63
  66. package/esm2022/src/render3/partial/pipe.mjs +0 -50
  67. package/esm2022/src/render3/partial/util.mjs +0 -79
  68. package/esm2022/src/render3/r3_ast.mjs +0 -493
  69. package/esm2022/src/render3/r3_class_debug_info_compiler.mjs +0 -35
  70. package/esm2022/src/render3/r3_class_metadata_compiler.mjs +0 -92
  71. package/esm2022/src/render3/r3_control_flow.mjs +0 -421
  72. package/esm2022/src/render3/r3_deferred_blocks.mjs +0 -170
  73. package/esm2022/src/render3/r3_deferred_triggers.mjs +0 -316
  74. package/esm2022/src/render3/r3_factory.mjs +0 -200
  75. package/esm2022/src/render3/r3_identifiers.mjs +0 -480
  76. package/esm2022/src/render3/r3_injector_compiler.mjs +0 -28
  77. package/esm2022/src/render3/r3_jit.mjs +0 -29
  78. package/esm2022/src/render3/r3_module_compiler.mjs +0 -211
  79. package/esm2022/src/render3/r3_pipe_compiler.mjs +0 -35
  80. package/esm2022/src/render3/r3_template_transform.mjs +0 -560
  81. package/esm2022/src/render3/util.mjs +0 -90
  82. package/esm2022/src/render3/view/api.mjs +0 -14
  83. package/esm2022/src/render3/view/compiler.mjs +0 -546
  84. package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +0 -113
  85. package/esm2022/src/render3/view/i18n/icu_serializer.mjs +0 -43
  86. package/esm2022/src/render3/view/i18n/localize_utils.mjs +0 -118
  87. package/esm2022/src/render3/view/i18n/meta.mjs +0 -259
  88. package/esm2022/src/render3/view/i18n/util.mjs +0 -70
  89. package/esm2022/src/render3/view/query_generation.mjs +0 -182
  90. package/esm2022/src/render3/view/t2_api.mjs +0 -9
  91. package/esm2022/src/render3/view/t2_binder.mjs +0 -823
  92. package/esm2022/src/render3/view/template.mjs +0 -113
  93. package/esm2022/src/render3/view/util.mjs +0 -192
  94. package/esm2022/src/resource_loader.mjs +0 -17
  95. package/esm2022/src/schema/dom_element_schema_registry.mjs +0 -471
  96. package/esm2022/src/schema/dom_security_schema.mjs +0 -96
  97. package/esm2022/src/schema/element_schema_registry.mjs +0 -10
  98. package/esm2022/src/schema/trusted_types_sinks.mjs +0 -41
  99. package/esm2022/src/selector.mjs +0 -400
  100. package/esm2022/src/shadow_css.mjs +0 -1053
  101. package/esm2022/src/style_url_resolver.mjs +0 -17
  102. package/esm2022/src/template/pipeline/ir/index.mjs +0 -18
  103. package/esm2022/src/template/pipeline/ir/src/enums.mjs +0 -503
  104. package/esm2022/src/template/pipeline/ir/src/expression.mjs +0 -997
  105. package/esm2022/src/template/pipeline/ir/src/handle.mjs +0 -13
  106. package/esm2022/src/template/pipeline/ir/src/operations.mjs +0 -261
  107. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +0 -405
  108. package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +0 -25
  109. package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +0 -43
  110. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +0 -277
  111. package/esm2022/src/template/pipeline/ir/src/traits.mjs +0 -64
  112. package/esm2022/src/template/pipeline/ir/src/variable.mjs +0 -13
  113. package/esm2022/src/template/pipeline/src/compilation.mjs +0 -194
  114. package/esm2022/src/template/pipeline/src/conversion.mjs +0 -64
  115. package/esm2022/src/template/pipeline/src/emit.mjs +0 -238
  116. package/esm2022/src/template/pipeline/src/ingest.mjs +0 -1058
  117. package/esm2022/src/template/pipeline/src/instruction.mjs +0 -564
  118. package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +0 -32
  119. package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +0 -63
  120. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +0 -63
  121. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +0 -138
  122. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +0 -75
  123. package/esm2022/src/template/pipeline/src/phases/chaining.mjs +0 -112
  124. package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +0 -32
  125. package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +0 -58
  126. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +0 -214
  127. package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +0 -52
  128. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +0 -105
  129. package/esm2022/src/template/pipeline/src/phases/deduplicate_text_bindings.mjs +0 -40
  130. package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +0 -29
  131. package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +0 -113
  132. package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +0 -47
  133. package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +0 -192
  134. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +0 -218
  135. package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +0 -66
  136. package/esm2022/src/template/pipeline/src/phases/generate_local_let_references.mjs +0 -29
  137. package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +0 -46
  138. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +0 -170
  139. package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +0 -28
  140. package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +0 -81
  141. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +0 -309
  142. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +0 -97
  143. package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +0 -43
  144. package/esm2022/src/template/pipeline/src/phases/namespace.mjs +0 -26
  145. package/esm2022/src/template/pipeline/src/phases/naming.mjs +0 -179
  146. package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +0 -75
  147. package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +0 -29
  148. package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +0 -47
  149. package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +0 -33
  150. package/esm2022/src/template/pipeline/src/phases/ordering.mjs +0 -140
  151. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +0 -137
  152. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +0 -42
  153. package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +0 -74
  154. package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +0 -30
  155. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +0 -81
  156. package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +0 -55
  157. package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +0 -58
  158. package/esm2022/src/template/pipeline/src/phases/reify.mjs +0 -433
  159. package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +0 -31
  160. package/esm2022/src/template/pipeline/src/phases/remove_i18n_contexts.mjs +0 -27
  161. package/esm2022/src/template/pipeline/src/phases/remove_illegal_let_references.mjs +0 -36
  162. package/esm2022/src/template/pipeline/src/phases/remove_unused_i18n_attrs.mjs +0 -33
  163. package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +0 -60
  164. package/esm2022/src/template/pipeline/src/phases/resolve_defer_deps_fns.mjs +0 -31
  165. package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +0 -36
  166. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +0 -266
  167. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +0 -70
  168. package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +0 -124
  169. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +0 -123
  170. package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +0 -64
  171. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +0 -62
  172. package/esm2022/src/template/pipeline/src/phases/store_let_optimization.mjs +0 -35
  173. package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +0 -42
  174. package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +0 -87
  175. package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +0 -52
  176. package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +0 -88
  177. package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +0 -36
  178. package/esm2022/src/template/pipeline/src/phases/transform_two_way_binding_set.mjs +0 -43
  179. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +0 -155
  180. package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +0 -423
  181. package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +0 -41
  182. package/esm2022/src/template/pipeline/src/util/elements.mjs +0 -29
  183. package/esm2022/src/template_parser/binding_parser.mjs +0 -465
  184. package/esm2022/src/template_parser/template_preparser.mjs +0 -84
  185. package/esm2022/src/util.mjs +0 -124
  186. package/esm2022/src/version.mjs +0 -15
@@ -1,70 +0,0 @@
1
- import { toPublicName } from '../../../i18n/serializers/xmb';
2
- import * as o from '../../../output/output_ast';
3
- /** Name of the i18n attributes **/
4
- export const I18N_ATTR = 'i18n';
5
- export const I18N_ATTR_PREFIX = 'i18n-';
6
- /** Prefix of var expressions used in ICUs */
7
- export const I18N_ICU_VAR_PREFIX = 'VAR_';
8
- export function isI18nAttribute(name) {
9
- return name === I18N_ATTR || name.startsWith(I18N_ATTR_PREFIX);
10
- }
11
- export function hasI18nAttrs(element) {
12
- return element.attrs.some((attr) => isI18nAttribute(attr.name));
13
- }
14
- export function icuFromI18nMessage(message) {
15
- return message.nodes[0];
16
- }
17
- export function placeholdersToParams(placeholders) {
18
- const params = {};
19
- placeholders.forEach((values, key) => {
20
- params[key] = o.literal(values.length > 1 ? `[${values.join('|')}]` : values[0]);
21
- });
22
- return params;
23
- }
24
- /**
25
- * Format the placeholder names in a map of placeholders to expressions.
26
- *
27
- * The placeholder names are converted from "internal" format (e.g. `START_TAG_DIV_1`) to "external"
28
- * format (e.g. `startTagDiv_1`).
29
- *
30
- * @param params A map of placeholder names to expressions.
31
- * @param useCamelCase whether to camelCase the placeholder name when formatting.
32
- * @returns A new map of formatted placeholder names to expressions.
33
- */
34
- export function formatI18nPlaceholderNamesInMap(params = {}, useCamelCase) {
35
- const _params = {};
36
- if (params && Object.keys(params).length) {
37
- Object.keys(params).forEach((key) => (_params[formatI18nPlaceholderName(key, useCamelCase)] = params[key]));
38
- }
39
- return _params;
40
- }
41
- /**
42
- * Converts internal placeholder names to public-facing format
43
- * (for example to use in goog.getMsg call).
44
- * Example: `START_TAG_DIV_1` is converted to `startTagDiv_1`.
45
- *
46
- * @param name The placeholder name that should be formatted
47
- * @returns Formatted placeholder name
48
- */
49
- export function formatI18nPlaceholderName(name, useCamelCase = true) {
50
- const publicName = toPublicName(name);
51
- if (!useCamelCase) {
52
- return publicName;
53
- }
54
- const chunks = publicName.split('_');
55
- if (chunks.length === 1) {
56
- // if no "_" found - just lowercase the value
57
- return name.toLowerCase();
58
- }
59
- let postfix;
60
- // eject last element if it's a number
61
- if (/^\d+$/.test(chunks[chunks.length - 1])) {
62
- postfix = chunks.pop();
63
- }
64
- let raw = chunks.shift().toLowerCase();
65
- if (chunks.length) {
66
- raw += chunks.map((c) => c.charAt(0).toUpperCase() + c.slice(1).toLowerCase()).join('');
67
- }
68
- return postfix ? `${raw}_${postfix}` : raw;
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3ZpZXcvaTE4bi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEtBQUssQ0FBQyxNQUFNLDRCQUE0QixDQUFDO0FBRWhELG1DQUFtQztBQUNuQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUV4Qyw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDO0FBRTFDLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQXFCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFvQixFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFxQjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUF3QixDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBbUM7SUFHdEUsTUFBTSxNQUFNLEdBQW9DLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBZ0IsRUFBRSxHQUFXLEVBQUUsRUFBRTtRQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FDN0MsU0FBeUMsRUFBRSxFQUMzQyxZQUFxQjtJQUVyQixNQUFNLE9BQU8sR0FBa0MsRUFBRSxDQUFDO0lBQ2xELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQ3pCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFZLEVBQUUsZUFBd0IsSUFBSTtJQUNsRixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4Qiw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDO0lBQ1osc0NBQXNDO0lBQ3RDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIGkxOG4gZnJvbSAnLi4vLi4vLi4vaTE4bi9pMThuX2FzdCc7XG5pbXBvcnQge3RvUHVibGljTmFtZX0gZnJvbSAnLi4vLi4vLi4vaTE4bi9zZXJpYWxpemVycy94bWInO1xuaW1wb3J0ICogYXMgaHRtbCBmcm9tICcuLi8uLi8uLi9tbF9wYXJzZXIvYXN0JztcbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuXG4vKiogTmFtZSBvZiB0aGUgaTE4biBhdHRyaWJ1dGVzICoqL1xuZXhwb3J0IGNvbnN0IEkxOE5fQVRUUiA9ICdpMThuJztcbmV4cG9ydCBjb25zdCBJMThOX0FUVFJfUFJFRklYID0gJ2kxOG4tJztcblxuLyoqIFByZWZpeCBvZiB2YXIgZXhwcmVzc2lvbnMgdXNlZCBpbiBJQ1VzICovXG5leHBvcnQgY29uc3QgSTE4Tl9JQ1VfVkFSX1BSRUZJWCA9ICdWQVJfJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSTE4bkF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5hbWUgPT09IEkxOE5fQVRUUiB8fCBuYW1lLnN0YXJ0c1dpdGgoSTE4Tl9BVFRSX1BSRUZJWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJMThuQXR0cnMoZWxlbWVudDogaHRtbC5FbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBlbGVtZW50LmF0dHJzLnNvbWUoKGF0dHI6IGh0bWwuQXR0cmlidXRlKSA9PiBpc0kxOG5BdHRyaWJ1dGUoYXR0ci5uYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpY3VGcm9tSTE4bk1lc3NhZ2UobWVzc2FnZTogaTE4bi5NZXNzYWdlKSB7XG4gIHJldHVybiBtZXNzYWdlLm5vZGVzWzBdIGFzIGkxOG4uSWN1UGxhY2Vob2xkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGFjZWhvbGRlcnNUb1BhcmFtcyhwbGFjZWhvbGRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPik6IHtcbiAgW25hbWU6IHN0cmluZ106IG8uTGl0ZXJhbEV4cHI7XG59IHtcbiAgY29uc3QgcGFyYW1zOiB7W25hbWU6IHN0cmluZ106IG8uTGl0ZXJhbEV4cHJ9ID0ge307XG4gIHBsYWNlaG9sZGVycy5mb3JFYWNoKCh2YWx1ZXM6IHN0cmluZ1tdLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIHBhcmFtc1trZXldID0gby5saXRlcmFsKHZhbHVlcy5sZW5ndGggPiAxID8gYFske3ZhbHVlcy5qb2luKCd8Jyl9XWAgOiB2YWx1ZXNbMF0pO1xuICB9KTtcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIHBsYWNlaG9sZGVyIG5hbWVzIGluIGEgbWFwIG9mIHBsYWNlaG9sZGVycyB0byBleHByZXNzaW9ucy5cbiAqXG4gKiBUaGUgcGxhY2Vob2xkZXIgbmFtZXMgYXJlIGNvbnZlcnRlZCBmcm9tIFwiaW50ZXJuYWxcIiBmb3JtYXQgKGUuZy4gYFNUQVJUX1RBR19ESVZfMWApIHRvIFwiZXh0ZXJuYWxcIlxuICogZm9ybWF0IChlLmcuIGBzdGFydFRhZ0Rpdl8xYCkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyBBIG1hcCBvZiBwbGFjZWhvbGRlciBuYW1lcyB0byBleHByZXNzaW9ucy5cbiAqIEBwYXJhbSB1c2VDYW1lbENhc2Ugd2hldGhlciB0byBjYW1lbENhc2UgdGhlIHBsYWNlaG9sZGVyIG5hbWUgd2hlbiBmb3JtYXR0aW5nLlxuICogQHJldHVybnMgQSBuZXcgbWFwIG9mIGZvcm1hdHRlZCBwbGFjZWhvbGRlciBuYW1lcyB0byBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEkxOG5QbGFjZWhvbGRlck5hbWVzSW5NYXAoXG4gIHBhcmFtczoge1tuYW1lOiBzdHJpbmddOiBvLkV4cHJlc3Npb259ID0ge30sXG4gIHVzZUNhbWVsQ2FzZTogYm9vbGVhbixcbikge1xuICBjb25zdCBfcGFyYW1zOiB7W2tleTogc3RyaW5nXTogby5FeHByZXNzaW9ufSA9IHt9O1xuICBpZiAocGFyYW1zICYmIE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoKSB7XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKFxuICAgICAgKGtleSkgPT4gKF9wYXJhbXNbZm9ybWF0STE4blBsYWNlaG9sZGVyTmFtZShrZXksIHVzZUNhbWVsQ2FzZSldID0gcGFyYW1zW2tleV0pLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIF9wYXJhbXM7XG59XG5cbi8qKlxuICogQ29udmVydHMgaW50ZXJuYWwgcGxhY2Vob2xkZXIgbmFtZXMgdG8gcHVibGljLWZhY2luZyBmb3JtYXRcbiAqIChmb3IgZXhhbXBsZSB0byB1c2UgaW4gZ29vZy5nZXRNc2cgY2FsbCkuXG4gKiBFeGFtcGxlOiBgU1RBUlRfVEFHX0RJVl8xYCBpcyBjb252ZXJ0ZWQgdG8gYHN0YXJ0VGFnRGl2XzFgLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBwbGFjZWhvbGRlciBuYW1lIHRoYXQgc2hvdWxkIGJlIGZvcm1hdHRlZFxuICogQHJldHVybnMgRm9ybWF0dGVkIHBsYWNlaG9sZGVyIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEkxOG5QbGFjZWhvbGRlck5hbWUobmFtZTogc3RyaW5nLCB1c2VDYW1lbENhc2U6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgY29uc3QgcHVibGljTmFtZSA9IHRvUHVibGljTmFtZShuYW1lKTtcbiAgaWYgKCF1c2VDYW1lbENhc2UpIHtcbiAgICByZXR1cm4gcHVibGljTmFtZTtcbiAgfVxuICBjb25zdCBjaHVua3MgPSBwdWJsaWNOYW1lLnNwbGl0KCdfJyk7XG4gIGlmIChjaHVua3MubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gaWYgbm8gXCJfXCIgZm91bmQgLSBqdXN0IGxvd2VyY2FzZSB0aGUgdmFsdWVcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGxldCBwb3N0Zml4O1xuICAvLyBlamVjdCBsYXN0IGVsZW1lbnQgaWYgaXQncyBhIG51bWJlclxuICBpZiAoL15cXGQrJC8udGVzdChjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdKSkge1xuICAgIHBvc3RmaXggPSBjaHVua3MucG9wKCk7XG4gIH1cbiAgbGV0IHJhdyA9IGNodW5rcy5zaGlmdCgpIS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoY2h1bmtzLmxlbmd0aCkge1xuICAgIHJhdyArPSBjaHVua3MubWFwKChjKSA9PiBjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCcnKTtcbiAgfVxuICByZXR1cm4gcG9zdGZpeCA/IGAke3Jhd31fJHtwb3N0Zml4fWAgOiByYXc7XG59XG4iXX0=
@@ -1,182 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as o from '../../output/output_ast';
9
- import { Identifiers as R3 } from '../r3_identifiers';
10
- import { CONTEXT_NAME, RENDER_FLAGS, TEMPORARY_NAME, temporaryAllocator } from './util';
11
- // if (rf & flags) { .. }
12
- function renderFlagCheckIfStmt(flags, statements) {
13
- return o.ifStmt(o.variable(RENDER_FLAGS).bitwiseAnd(o.literal(flags), null, false), statements);
14
- }
15
- /**
16
- * Translates query flags into `TQueryFlags` type in
17
- * packages/core/src/render3/interfaces/query.ts
18
- * @param query
19
- */
20
- function toQueryFlags(query) {
21
- return ((query.descendants ? 1 /* QueryFlags.descendants */ : 0 /* QueryFlags.none */) |
22
- (query.static ? 2 /* QueryFlags.isStatic */ : 0 /* QueryFlags.none */) |
23
- (query.emitDistinctChangesOnly ? 4 /* QueryFlags.emitDistinctChangesOnly */ : 0 /* QueryFlags.none */));
24
- }
25
- export function getQueryPredicate(query, constantPool) {
26
- if (Array.isArray(query.predicate)) {
27
- let predicate = [];
28
- query.predicate.forEach((selector) => {
29
- // Each item in predicates array may contain strings with comma-separated refs
30
- // (for ex. 'ref, ref1, ..., refN'), thus we extract individual refs and store them
31
- // as separate array entities
32
- const selectors = selector.split(',').map((token) => o.literal(token.trim()));
33
- predicate.push(...selectors);
34
- });
35
- return constantPool.getConstLiteral(o.literalArr(predicate), true);
36
- }
37
- else {
38
- // The original predicate may have been wrapped in a `forwardRef()` call.
39
- switch (query.predicate.forwardRef) {
40
- case 0 /* ForwardRefHandling.None */:
41
- case 2 /* ForwardRefHandling.Unwrapped */:
42
- return query.predicate.expression;
43
- case 1 /* ForwardRefHandling.Wrapped */:
44
- return o.importExpr(R3.resolveForwardRef).callFn([query.predicate.expression]);
45
- }
46
- }
47
- }
48
- export function createQueryCreateCall(query, constantPool, queryTypeFns, prependParams) {
49
- const parameters = [];
50
- if (prependParams !== undefined) {
51
- parameters.push(...prependParams);
52
- }
53
- if (query.isSignal) {
54
- parameters.push(new o.ReadPropExpr(o.variable(CONTEXT_NAME), query.propertyName));
55
- }
56
- parameters.push(getQueryPredicate(query, constantPool), o.literal(toQueryFlags(query)));
57
- if (query.read) {
58
- parameters.push(query.read);
59
- }
60
- const queryCreateFn = query.isSignal ? queryTypeFns.signalBased : queryTypeFns.nonSignal;
61
- return o.importExpr(queryCreateFn).callFn(parameters);
62
- }
63
- const queryAdvancePlaceholder = Symbol('queryAdvancePlaceholder');
64
- /**
65
- * Collapses query advance placeholders in a list of statements.
66
- *
67
- * This allows for less generated code because multiple sibling query advance
68
- * statements can be collapsed into a single call with the count as argument.
69
- *
70
- * e.g.
71
- *
72
- * ```ts
73
- * bla();
74
- * queryAdvance();
75
- * queryAdvance();
76
- * bla();
77
- * ```
78
- *
79
- * --> will turn into
80
- *
81
- * ```
82
- * bla();
83
- * queryAdvance(2);
84
- * bla();
85
- * ```
86
- */
87
- function collapseAdvanceStatements(statements) {
88
- const result = [];
89
- let advanceCollapseCount = 0;
90
- const flushAdvanceCount = () => {
91
- if (advanceCollapseCount > 0) {
92
- result.unshift(o
93
- .importExpr(R3.queryAdvance)
94
- .callFn(advanceCollapseCount === 1 ? [] : [o.literal(advanceCollapseCount)])
95
- .toStmt());
96
- advanceCollapseCount = 0;
97
- }
98
- };
99
- // Iterate through statements in reverse and collapse advance placeholders.
100
- for (let i = statements.length - 1; i >= 0; i--) {
101
- const st = statements[i];
102
- if (st === queryAdvancePlaceholder) {
103
- advanceCollapseCount++;
104
- }
105
- else {
106
- flushAdvanceCount();
107
- result.unshift(st);
108
- }
109
- }
110
- flushAdvanceCount();
111
- return result;
112
- }
113
- // Define and update any view queries
114
- export function createViewQueriesFunction(viewQueries, constantPool, name) {
115
- const createStatements = [];
116
- const updateStatements = [];
117
- const tempAllocator = temporaryAllocator((st) => updateStatements.push(st), TEMPORARY_NAME);
118
- viewQueries.forEach((query) => {
119
- // creation call, e.g. r3.viewQuery(somePredicate, true) or
120
- // r3.viewQuerySignal(ctx.prop, somePredicate, true);
121
- const queryDefinitionCall = createQueryCreateCall(query, constantPool, {
122
- signalBased: R3.viewQuerySignal,
123
- nonSignal: R3.viewQuery,
124
- });
125
- createStatements.push(queryDefinitionCall.toStmt());
126
- // Signal queries update lazily and we just advance the index.
127
- if (query.isSignal) {
128
- updateStatements.push(queryAdvancePlaceholder);
129
- return;
130
- }
131
- // update, e.g. (r3.queryRefresh(tmp = r3.loadQuery()) && (ctx.someDir = tmp));
132
- const temporary = tempAllocator();
133
- const getQueryList = o.importExpr(R3.loadQuery).callFn([]);
134
- const refresh = o.importExpr(R3.queryRefresh).callFn([temporary.set(getQueryList)]);
135
- const updateDirective = o
136
- .variable(CONTEXT_NAME)
137
- .prop(query.propertyName)
138
- .set(query.first ? temporary.prop('first') : temporary);
139
- updateStatements.push(refresh.and(updateDirective).toStmt());
140
- });
141
- const viewQueryFnName = name ? `${name}_Query` : null;
142
- return o.fn([new o.FnParam(RENDER_FLAGS, o.NUMBER_TYPE), new o.FnParam(CONTEXT_NAME, null)], [
143
- renderFlagCheckIfStmt(1 /* core.RenderFlags.Create */, createStatements),
144
- renderFlagCheckIfStmt(2 /* core.RenderFlags.Update */, collapseAdvanceStatements(updateStatements)),
145
- ], o.INFERRED_TYPE, null, viewQueryFnName);
146
- }
147
- // Define and update any content queries
148
- export function createContentQueriesFunction(queries, constantPool, name) {
149
- const createStatements = [];
150
- const updateStatements = [];
151
- const tempAllocator = temporaryAllocator((st) => updateStatements.push(st), TEMPORARY_NAME);
152
- for (const query of queries) {
153
- // creation, e.g. r3.contentQuery(dirIndex, somePredicate, true, null) or
154
- // r3.contentQuerySignal(dirIndex, propName, somePredicate, <flags>, <read>).
155
- createStatements.push(createQueryCreateCall(query, constantPool, { nonSignal: R3.contentQuery, signalBased: R3.contentQuerySignal },
156
- /* prependParams */ [o.variable('dirIndex')]).toStmt());
157
- // Signal queries update lazily and we just advance the index.
158
- if (query.isSignal) {
159
- updateStatements.push(queryAdvancePlaceholder);
160
- continue;
161
- }
162
- // update, e.g. (r3.queryRefresh(tmp = r3.loadQuery()) && (ctx.someDir = tmp));
163
- const temporary = tempAllocator();
164
- const getQueryList = o.importExpr(R3.loadQuery).callFn([]);
165
- const refresh = o.importExpr(R3.queryRefresh).callFn([temporary.set(getQueryList)]);
166
- const updateDirective = o
167
- .variable(CONTEXT_NAME)
168
- .prop(query.propertyName)
169
- .set(query.first ? temporary.prop('first') : temporary);
170
- updateStatements.push(refresh.and(updateDirective).toStmt());
171
- }
172
- const contentQueriesFnName = name ? `${name}_ContentQueries` : null;
173
- return o.fn([
174
- new o.FnParam(RENDER_FLAGS, o.NUMBER_TYPE),
175
- new o.FnParam(CONTEXT_NAME, null),
176
- new o.FnParam('dirIndex', null),
177
- ], [
178
- renderFlagCheckIfStmt(1 /* core.RenderFlags.Create */, createStatements),
179
- renderFlagCheckIfStmt(2 /* core.RenderFlags.Update */, collapseAdvanceStatements(updateStatements)),
180
- ], o.INFERRED_TYPE, null, contentQueriesFnName);
181
- }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnlfZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3ZpZXcvcXVlcnlfZ2VuZXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEtBQUssQ0FBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJcEQsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXRGLDBCQUEwQjtBQUMxQixTQUFTLHFCQUFxQixDQUFDLEtBQXVCLEVBQUUsVUFBeUI7SUFDL0UsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFpQ0Q7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQXNCO0lBQzFDLE9BQU8sQ0FDTCxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQ0FBd0IsQ0FBQyx3QkFBZ0IsQ0FBQztRQUM5RCxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyw2QkFBcUIsQ0FBQyx3QkFBZ0IsQ0FBQztRQUN0RCxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLDRDQUFvQyxDQUFDLHdCQUFnQixDQUFDLENBQ3ZGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUFzQixFQUN0QixZQUEwQjtJQUUxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FB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QUFVLEVBQUUsSUFBSSxDQUFDO0tBQ2hDLEVBQ0Q7UUFDRSxxQkFBcUIsa0NBQTBCLGdCQUFnQixDQUFDO1FBQ2hFLHFCQUFxQixrQ0FBMEIseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUM1RixFQUNELENBQUMsQ0FBQyxhQUFhLEVBQ2YsSUFBSSxFQUNKLG9CQUFvQixDQUNyQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0NvbnN0YW50UG9vbH0gZnJvbSAnLi4vLi4vY29uc3RhbnRfcG9vbCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQge0lkZW50aWZpZXJzIGFzIFIzfSBmcm9tICcuLi9yM19pZGVudGlmaWVycyc7XG5pbXBvcnQge0ZvcndhcmRSZWZIYW5kbGluZ30gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7UjNRdWVyeU1ldGFkYXRhfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge0NPTlRFWFRfTkFNRSwgUkVOREVSX0ZMQUdTLCBURU1QT1JBUllfTkFNRSwgdGVtcG9yYXJ5QWxsb2NhdG9yfSBmcm9tICcuL3V0aWwnO1xuXG4vLyAgaWYgKHJmICYgZmxhZ3MpIHsgLi4gfVxuZnVuY3Rpb24gcmVuZGVyRmxhZ0NoZWNrSWZTdG10KGZsYWdzOiBjb3JlLlJlbmRlckZsYWdzLCBzdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdKTogby5JZlN0bXQge1xuICByZXR1cm4gby5pZlN0bXQoby52YXJpYWJsZShSRU5ERVJfRkxBR1MpLmJpdHdpc2VBbmQoby5saXRlcmFsKGZsYWdzKSwgbnVsbCwgZmFsc2UpLCBzdGF0ZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBIHNldCBvZiBmbGFncyB0byBiZSB1c2VkIHdpdGggUXVlcmllcy5cbiAqXG4gKiBOT1RFOiBFbnN1cmUgY2hhbmdlcyBoZXJlIGFyZSBpbiBzeW5jIHdpdGggYHBhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9xdWVyeS50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gUXVlcnlGbGFncyB7XG4gIC8qKlxuICAgKiBObyBmbGFnc1xuICAgKi9cbiAgbm9uZSA9IDBiMDAwMCxcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHF1ZXJ5IHNob3VsZCBkZXNjZW5kIGludG8gY2hpbGRyZW4uXG4gICAqL1xuICBkZXNjZW5kYW50cyA9IDBiMDAwMSxcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5IGNhbiBiZSBjb21wdXRlZCBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjYW4gYmUgYXNzaWduZWQgZWFnZXJseS5cbiAgICpcbiAgICogTk9URTogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaWV3RW5naW5lLlxuICAgKi9cbiAgaXNTdGF0aWMgPSAwYjAwMTAsXG5cbiAgLyoqXG4gICAqIElmIHRoZSBgUXVlcnlMaXN0YCBzaG91bGQgZmlyZSBjaGFuZ2UgZXZlbnQgb25seSBpZiBhY3R1YWwgY2hhbmdlIHRvIHF1ZXJ5IHdhcyBjb21wdXRlZCAodnMgb2xkXG4gICAqIGJlaGF2aW9yIHdoZXJlIHRoZSBjaGFuZ2Ugd2FzIGZpcmVkIHdoZW5ldmVyIHRoZSBxdWVyeSB3YXMgcmVjb21wdXRlZCwgZXZlbiBpZiB0aGUgcmVjb21wdXRlZFxuICAgKiBxdWVyeSByZXN1bHRlZCBpbiB0aGUgc2FtZSBsaXN0LilcbiAgICovXG4gIGVtaXREaXN0aW5jdENoYW5nZXNPbmx5ID0gMGIwMTAwLFxufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgcXVlcnkgZmxhZ3MgaW50byBgVFF1ZXJ5RmxhZ3NgIHR5cGUgaW5cbiAqIHBhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9xdWVyeS50c1xuICogQHBhcmFtIHF1ZXJ5XG4gKi9cbmZ1bmN0aW9uIHRvUXVlcnlGbGFncyhxdWVyeTogUjNRdWVyeU1ldGFkYXRhKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICAocXVlcnkuZGVzY2VuZGFudHMgPyBRdWVyeUZsYWdzLmRlc2NlbmRhbnRzIDogUXVlcnlGbGFncy5ub25lKSB8XG4gICAgKHF1ZXJ5LnN0YXRpYyA/IFF1ZXJ5RmxhZ3MuaXNTdGF0aWMgOiBRdWVyeUZsYWdzLm5vbmUpIHxcbiAgICAocXVlcnkuZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkgPyBRdWVyeUZsYWdzLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5IDogUXVlcnlGbGFncy5ub25lKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlQcmVkaWNhdGUoXG4gIHF1ZXJ5OiBSM1F1ZXJ5TWV0YWRhdGEsXG4gIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuKTogby5FeHByZXNzaW9uIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkucHJlZGljYXRlKSkge1xuICAgIGxldCBwcmVkaWNhdGU6IG8uRXhwcmVzc2lvbltdID0gW107XG4gICAgcXVlcnkucHJlZGljYXRlLmZvckVhY2goKHNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIC8vIEVhY2ggaXRlbSBpbiBwcmVkaWNhdGVzIGFycmF5IG1heSBjb250YWluIHN0cmluZ3Mgd2l0aCBjb21tYS1zZXBhcmF0ZWQgcmVmc1xuICAgICAgLy8gKGZvciBleC4gJ3JlZiwgcmVmMSwgLi4uLCByZWZOJyksIHRodXMgd2UgZXh0cmFjdCBpbmRpdmlkdWFsIHJlZnMgYW5kIHN0b3JlIHRoZW1cbiAgICAgIC8vIGFzIHNlcGFyYXRlIGFycmF5IGVudGl0aWVzXG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBzZWxlY3Rvci5zcGxpdCgnLCcpLm1hcCgodG9rZW4pID0+IG8ubGl0ZXJhbCh0b2tlbi50cmltKCkpKTtcbiAgICAgIHByZWRpY2F0ZS5wdXNoKC4uLnNlbGVjdG9ycyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwoby5saXRlcmFsQXJyKHByZWRpY2F0ZSksIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBvcmlnaW5hbCBwcmVkaWNhdGUgbWF5IGhhdmUgYmVlbiB3cmFwcGVkIGluIGEgYGZvcndhcmRSZWYoKWAgY2FsbC5cbiAgICBzd2l0Y2ggKHF1ZXJ5LnByZWRpY2F0ZS5mb3J3YXJkUmVmKSB7XG4gICAgICBjYXNlIEZvcndhcmRSZWZIYW5kbGluZy5Ob25lOlxuICAgICAgY2FzZSBGb3J3YXJkUmVmSGFuZGxpbmcuVW53cmFwcGVkOlxuICAgICAgICByZXR1cm4gcXVlcnkucHJlZGljYXRlLmV4cHJlc3Npb247XG4gICAgICBjYXNlIEZvcndhcmRSZWZIYW5kbGluZy5XcmFwcGVkOlxuICAgICAgICByZXR1cm4gby5pbXBvcnRFeHByKFIzLnJlc29sdmVGb3J3YXJkUmVmKS5jYWxsRm4oW3F1ZXJ5LnByZWRpY2F0ZS5leHByZXNzaW9uXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdWVyeUNyZWF0ZUNhbGwoXG4gIHF1ZXJ5OiBSM1F1ZXJ5TWV0YWRhdGEsXG4gIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICBxdWVyeVR5cGVGbnM6IHtzaWduYWxCYXNlZDogby5FeHRlcm5hbFJlZmVyZW5jZTsgbm9uU2lnbmFsOiBvLkV4dGVybmFsUmVmZXJlbmNlfSxcbiAgcHJlcGVuZFBhcmFtcz86IG8uRXhwcmVzc2lvbltdLFxuKTogby5JbnZva2VGdW5jdGlvbkV4cHIge1xuICBjb25zdCBwYXJhbWV0ZXJzOiBvLkV4cHJlc3Npb25bXSA9IFtdO1xuICBpZiAocHJlcGVuZFBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGFyYW1ldGVycy5wdXNoKC4uLnByZXBlbmRQYXJhbXMpO1xuICB9XG4gIGlmIChxdWVyeS5pc1NpZ25hbCkge1xuICAgIHBhcmFtZXRlcnMucHVzaChuZXcgby5SZWFkUHJvcEV4cHIoby52YXJpYWJsZShDT05URVhUX05BTUUpLCBxdWVyeS5wcm9wZXJ0eU5hbWUpKTtcbiAgfVxuICBwYXJhbWV0ZXJzLnB1c2goZ2V0UXVlcnlQcmVkaWNhdGUocXVlcnksIGNvbnN0YW50UG9vbCksIG8ubGl0ZXJhbCh0b1F1ZXJ5RmxhZ3MocXVlcnkpKSk7XG4gIGlmIChxdWVyeS5yZWFkKSB7XG4gICAgcGFyYW1ldGVycy5wdXNoKHF1ZXJ5LnJlYWQpO1xuICB9XG5cbiAgY29uc3QgcXVlcnlDcmVhdGVGbiA9IHF1ZXJ5LmlzU2lnbmFsID8gcXVlcnlUeXBlRm5zLnNpZ25hbEJhc2VkIDogcXVlcnlUeXBlRm5zLm5vblNpZ25hbDtcbiAgcmV0dXJuIG8uaW1wb3J0RXhwcihxdWVyeUNyZWF0ZUZuKS5jYWxsRm4ocGFyYW1ldGVycyk7XG59XG5cbmNvbnN0IHF1ZXJ5QWR2YW5jZVBsYWNlaG9sZGVyID0gU3ltYm9sKCdxdWVyeUFkdmFuY2VQbGFjZWhvbGRlcicpO1xuXG4vKipcbiAqIENvbGxhcHNlcyBxdWVyeSBhZHZhbmNlIHBsYWNlaG9sZGVycyBpbiBhIGxpc3Qgb2Ygc3RhdGVtZW50cy5cbiAqXG4gKiBUaGlzIGFsbG93cyBmb3IgbGVzcyBnZW5lcmF0ZWQgY29kZSBiZWNhdXNlIG11bHRpcGxlIHNpYmxpbmcgcXVlcnkgYWR2YW5jZVxuICogc3RhdGVtZW50cyBjYW4gYmUgY29sbGFwc2VkIGludG8gYSBzaW5nbGUgY2FsbCB3aXRoIHRoZSBjb3VudCBhcyBhcmd1bWVudC5cbiAqXG4gKiBlLmcuXG4gKlxuICogYGBgdHNcbiAqICAgYmxhKCk7XG4gKiAgIHF1ZXJ5QWR2YW5jZSgpO1xuICogICBxdWVyeUFkdmFuY2UoKTtcbiAqICAgYmxhKCk7XG4gKiBgYGBcbiAqXG4gKiAgIC0tPiB3aWxsIHR1cm4gaW50b1xuICpcbiAqIGBgYFxuICogICBibGEoKTtcbiAqICAgcXVlcnlBZHZhbmNlKDIpO1xuICogICBibGEoKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjb2xsYXBzZUFkdmFuY2VTdGF0ZW1lbnRzKFxuICBzdGF0ZW1lbnRzOiAoby5TdGF0ZW1lbnQgfCB0eXBlb2YgcXVlcnlBZHZhbmNlUGxhY2Vob2xkZXIpW10sXG4pOiBvLlN0YXRlbWVudFtdIHtcbiAgY29uc3QgcmVzdWx0OiBvLlN0YXRlbWVudFtdID0gW107XG4gIGxldCBhZHZhbmNlQ29sbGFwc2VDb3VudCA9IDA7XG4gIGNvbnN0IGZsdXNoQWR2YW5jZUNvdW50ID0gKCkgPT4ge1xuICAgIGlmIChhZHZhbmNlQ29sbGFwc2VDb3VudCA+IDApIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KFxuICAgICAgICBvXG4gICAgICAgICAgLmltcG9ydEV4cHIoUjMucXVlcnlBZHZhbmNlKVxuICAgICAgICAgIC5jYWxsRm4oYWR2YW5jZUNvbGxhcHNlQ291bnQgPT09IDEgPyBbXSA6IFtvLmxpdGVyYWwoYWR2YW5jZUNvbGxhcHNlQ291bnQpXSlcbiAgICAgICAgICAudG9TdG10KCksXG4gICAgICApO1xuICAgICAgYWR2YW5jZUNvbGxhcHNlQ291bnQgPSAwO1xuICAgIH1cbiAgfTtcblxuICAvLyBJdGVyYXRlIHRocm91Z2ggc3RhdGVtZW50cyBpbiByZXZlcnNlIGFuZCBjb2xsYXBzZSBhZHZhbmNlIHBsYWNlaG9sZGVycy5cbiAgZm9yIChsZXQgaSA9IHN0YXRlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBzdCA9IHN0YXRlbWVudHNbaV07XG4gICAgaWYgKHN0ID09PSBxdWVyeUFkdmFuY2VQbGFjZWhvbGRlcikge1xuICAgICAgYWR2YW5jZUNvbGxhcHNlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgZmx1c2hBZHZhbmNlQ291bnQoKTtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KHN0KTtcbiAgICB9XG4gIH1cbiAgZmx1c2hBZHZhbmNlQ291bnQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRGVmaW5lIGFuZCB1cGRhdGUgYW55IHZpZXcgcXVlcmllc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpZXdRdWVyaWVzRnVuY3Rpb24oXG4gIHZpZXdRdWVyaWVzOiBSM1F1ZXJ5TWV0YWRhdGFbXSxcbiAgY29uc3RhbnRQb29sOiBDb25zdGFudFBvb2wsXG4gIG5hbWU/OiBzdHJpbmcsXG4pOiBvLkV4cHJlc3Npb24ge1xuICBjb25zdCBjcmVhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGNvbnN0IHVwZGF0ZVN0YXRlbWVudHM6IChvLlN0YXRlbWVudCB8IHR5cGVvZiBxdWVyeUFkdmFuY2VQbGFjZWhvbGRlcilbXSA9IFtdO1xuICBjb25zdCB0ZW1wQWxsb2NhdG9yID0gdGVtcG9yYXJ5QWxsb2NhdG9yKChzdCkgPT4gdXBkYXRlU3RhdGVtZW50cy5wdXNoKHN0KSwgVEVNUE9SQVJZX05BTUUpO1xuXG4gIHZpZXdRdWVyaWVzLmZvckVhY2goKHF1ZXJ5OiBSM1F1ZXJ5TWV0YWRhdGEpID0+IHtcbiAgICAvLyBjcmVhdGlvbiBjYWxsLCBlLmcuIHIzLnZpZXdRdWVyeShzb21lUHJlZGljYXRlLCB0cnVlKSBvclxuICAgIC8vICAgICAgICAgICAgICAgIHIzLnZpZXdRdWVyeVNpZ25hbChjdHgucHJvcCwgc29tZVByZWRpY2F0ZSwgdHJ1ZSk7XG4gICAgY29uc3QgcXVlcnlEZWZpbml0aW9uQ2FsbCA9IGNyZWF0ZVF1ZXJ5Q3JlYXRlQ2FsbChxdWVyeSwgY29uc3RhbnRQb29sLCB7XG4gICAgICBzaWduYWxCYXNlZDogUjMudmlld1F1ZXJ5U2lnbmFsLFxuICAgICAgbm9uU2lnbmFsOiBSMy52aWV3UXVlcnksXG4gICAgfSk7XG4gICAgY3JlYXRlU3RhdGVtZW50cy5wdXNoKHF1ZXJ5RGVmaW5pdGlvbkNhbGwudG9TdG10KCkpO1xuXG4gICAgLy8gU2lnbmFsIHF1ZXJpZXMgdXBkYXRlIGxhemlseSBhbmQgd2UganVzdCBhZHZhbmNlIHRoZSBpbmRleC5cbiAgICBpZiAocXVlcnkuaXNTaWduYWwpIHtcbiAgICAgIHVwZGF0ZVN0YXRlbWVudHMucHVzaChxdWVyeUFkdmFuY2VQbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlLCBlLmcuIChyMy5xdWVyeVJlZnJlc2godG1wID0gcjMubG9hZFF1ZXJ5KCkpICYmIChjdHguc29tZURpciA9IHRtcCkpO1xuICAgIGNvbnN0IHRlbXBvcmFyeSA9IHRlbXBBbGxvY2F0b3IoKTtcbiAgICBjb25zdCBnZXRRdWVyeUxpc3QgPSBvLmltcG9ydEV4cHIoUjMubG9hZFF1ZXJ5KS5jYWxsRm4oW10pO1xuICAgIGNvbnN0IHJlZnJlc2ggPSBvLmltcG9ydEV4cHIoUjMucXVlcnlSZWZyZXNoKS5jYWxsRm4oW3RlbXBvcmFyeS5zZXQoZ2V0UXVlcnlMaXN0KV0pO1xuICAgIGNvbnN0IHVwZGF0ZURpcmVjdGl2ZSA9IG9cbiAgICAgIC52YXJpYWJsZShDT05URVhUX05BTUUpXG4gICAgICAucHJvcChxdWVyeS5wcm9wZXJ0eU5hbWUpXG4gICAgICAuc2V0KHF1ZXJ5LmZpcnN0ID8gdGVtcG9yYXJ5LnByb3AoJ2ZpcnN0JykgOiB0ZW1wb3JhcnkpO1xuICAgIHVwZGF0ZVN0YXRlbWVudHMucHVzaChyZWZyZXNoLmFuZCh1cGRhdGVEaXJlY3RpdmUpLnRvU3RtdCgpKTtcbiAgfSk7XG5cbiAgY29uc3Qgdmlld1F1ZXJ5Rm5OYW1lID0gbmFtZSA/IGAke25hbWV9X1F1ZXJ5YCA6IG51bGw7XG4gIHJldHVybiBvLmZuKFxuICAgIFtuZXcgby5GblBhcmFtKFJFTkRFUl9GTEFHUywgby5OVU1CRVJfVFlQRSksIG5ldyBvLkZuUGFyYW0oQ09OVEVYVF9OQU1FLCBudWxsKV0sXG4gICAgW1xuICAgICAgcmVuZGVyRmxhZ0NoZWNrSWZTdG10KGNvcmUuUmVuZGVyRmxhZ3MuQ3JlYXRlLCBjcmVhdGVTdGF0ZW1lbnRzKSxcbiAgICAgIHJlbmRlckZsYWdDaGVja0lmU3RtdChjb3JlLlJlbmRlckZsYWdzLlVwZGF0ZSwgY29sbGFwc2VBZHZhbmNlU3RhdGVtZW50cyh1cGRhdGVTdGF0ZW1lbnRzKSksXG4gICAgXSxcbiAgICBvLklORkVSUkVEX1RZUEUsXG4gICAgbnVsbCxcbiAgICB2aWV3UXVlcnlGbk5hbWUsXG4gICk7XG59XG5cbi8vIERlZmluZSBhbmQgdXBkYXRlIGFueSBjb250ZW50IHF1ZXJpZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZW50UXVlcmllc0Z1bmN0aW9uKFxuICBxdWVyaWVzOiBSM1F1ZXJ5TWV0YWRhdGFbXSxcbiAgY29uc3RhbnRQb29sOiBDb25zdGFudFBvb2wsXG4gIG5hbWU/OiBzdHJpbmcsXG4pOiBvLkV4cHJlc3Npb24ge1xuICBjb25zdCBjcmVhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGNvbnN0IHVwZGF0ZVN0YXRlbWVudHM6IChvLlN0YXRlbWVudCB8IHR5cGVvZiBxdWVyeUFkdmFuY2VQbGFjZWhvbGRlcilbXSA9IFtdO1xuICBjb25zdCB0ZW1wQWxsb2NhdG9yID0gdGVtcG9yYXJ5QWxsb2NhdG9yKChzdCkgPT4gdXBkYXRlU3RhdGVtZW50cy5wdXNoKHN0KSwgVEVNUE9SQVJZX05BTUUpO1xuXG4gIGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllcykge1xuICAgIC8vIGNyZWF0aW9uLCBlLmcuIHIzLmNvbnRlbnRRdWVyeShkaXJJbmRleCwgc29tZVByZWRpY2F0ZSwgdHJ1ZSwgbnVsbCkgb3JcbiAgICAvLyAgICAgICAgICAgICAgICByMy5jb250ZW50UXVlcnlTaWduYWwoZGlySW5kZXgsIHByb3BOYW1lLCBzb21lUHJlZGljYXRlLCA8ZmxhZ3M+LCA8cmVhZD4pLlxuICAgIGNyZWF0ZVN0YXRlbWVudHMucHVzaChcbiAgICAgIGNyZWF0ZVF1ZXJ5Q3JlYXRlQ2FsbChcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGNvbnN0YW50UG9vbCxcbiAgICAgICAge25vblNpZ25hbDogUjMuY29udGVudFF1ZXJ5LCBzaWduYWxCYXNlZDogUjMuY29udGVudFF1ZXJ5U2lnbmFsfSxcbiAgICAgICAgLyogcHJlcGVuZFBhcmFtcyAqLyBbby52YXJpYWJsZSgnZGlySW5kZXgnKV0sXG4gICAgICApLnRvU3RtdCgpLFxuICAgICk7XG5cbiAgICAvLyBTaWduYWwgcXVlcmllcyB1cGRhdGUgbGF6aWx5IGFuZCB3ZSBqdXN0IGFkdmFuY2UgdGhlIGluZGV4LlxuICAgIGlmIChxdWVyeS5pc1NpZ25hbCkge1xuICAgICAgdXBkYXRlU3RhdGVtZW50cy5wdXNoKHF1ZXJ5QWR2YW5jZVBsYWNlaG9sZGVyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSwgZS5nLiAocjMucXVlcnlSZWZyZXNoKHRtcCA9IHIzLmxvYWRRdWVyeSgpKSAmJiAoY3R4LnNvbWVEaXIgPSB0bXApKTtcbiAgICBjb25zdCB0ZW1wb3JhcnkgPSB0ZW1wQWxsb2NhdG9yKCk7XG4gICAgY29uc3QgZ2V0UXVlcnlMaXN0ID0gby5pbXBvcnRFeHByKFIzLmxvYWRRdWVyeSkuY2FsbEZuKFtdKTtcbiAgICBjb25zdCByZWZyZXNoID0gby5pbXBvcnRFeHByKFIzLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFt0ZW1wb3Jhcnkuc2V0KGdldFF1ZXJ5TGlzdCldKTtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3RpdmUgPSBvXG4gICAgICAudmFyaWFibGUoQ09OVEVYVF9OQU1FKVxuICAgICAgLnByb3AocXVlcnkucHJvcGVydHlOYW1lKVxuICAgICAgLnNldChxdWVyeS5maXJzdCA/IHRlbXBvcmFyeS5wcm9wKCdmaXJzdCcpIDogdGVtcG9yYXJ5KTtcbiAgICB1cGRhdGVTdGF0ZW1lbnRzLnB1c2gocmVmcmVzaC5hbmQodXBkYXRlRGlyZWN0aXZlKS50b1N0bXQoKSk7XG4gIH1cblxuICBjb25zdCBjb250ZW50UXVlcmllc0ZuTmFtZSA9IG5hbWUgPyBgJHtuYW1lfV9Db250ZW50UXVlcmllc2AgOiBudWxsO1xuICByZXR1cm4gby5mbihcbiAgICBbXG4gICAgICBuZXcgby5GblBhcmFtKFJFTkRFUl9GTEFHUywgby5OVU1CRVJfVFlQRSksXG4gICAgICBuZXcgby5GblBhcmFtKENPTlRFWFRfTkFNRSwgbnVsbCksXG4gICAgICBuZXcgby5GblBhcmFtKCdkaXJJbmRleCcsIG51bGwpLFxuICAgIF0sXG4gICAgW1xuICAgICAgcmVuZGVyRmxhZ0NoZWNrSWZTdG10KGNvcmUuUmVuZGVyRmxhZ3MuQ3JlYXRlLCBjcmVhdGVTdGF0ZW1lbnRzKSxcbiAgICAgIHJlbmRlckZsYWdDaGVja0lmU3RtdChjb3JlLlJlbmRlckZsYWdzLlVwZGF0ZSwgY29sbGFwc2VBZHZhbmNlU3RhdGVtZW50cyh1cGRhdGVTdGF0ZW1lbnRzKSksXG4gICAgXSxcbiAgICBvLklORkVSUkVEX1RZUEUsXG4gICAgbnVsbCxcbiAgICBjb250ZW50UXVlcmllc0ZuTmFtZSxcbiAgKTtcbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidDJfYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3JlbmRlcjMvdmlldy90Ml9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNUfSBmcm9tICcuLi8uLi9leHByZXNzaW9uX3BhcnNlci9hc3QnO1xuaW1wb3J0IHtcbiAgQm91bmRBdHRyaWJ1dGUsXG4gIEJvdW5kRXZlbnQsXG4gIENvbnRlbnQsXG4gIERlZmVycmVkQmxvY2ssXG4gIERlZmVycmVkQmxvY2tFcnJvcixcbiAgRGVmZXJyZWRCbG9ja0xvYWRpbmcsXG4gIERlZmVycmVkQmxvY2tQbGFjZWhvbGRlcixcbiAgRGVmZXJyZWRUcmlnZ2VyLFxuICBFbGVtZW50LFxuICBGb3JMb29wQmxvY2ssXG4gIEZvckxvb3BCbG9ja0VtcHR5LFxuICBJZkJsb2NrQnJhbmNoLFxuICBMZXREZWNsYXJhdGlvbixcbiAgTm9kZSxcbiAgUmVmZXJlbmNlLFxuICBTd2l0Y2hCbG9ja0Nhc2UsXG4gIFRlbXBsYXRlLFxuICBUZXh0QXR0cmlidXRlLFxuICBWYXJpYWJsZSxcbn0gZnJvbSAnLi4vcjNfYXN0JztcblxuLyoqIE5vZGUgdGhhdCBoYXMgYSBgU2NvcGVgIGFzc29jaWF0ZWQgd2l0aCBpdC4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlZE5vZGUgPVxuICB8IFRlbXBsYXRlXG4gIHwgU3dpdGNoQmxvY2tDYXNlXG4gIHwgSWZCbG9ja0JyYW5jaFxuICB8IEZvckxvb3BCbG9ja1xuICB8IEZvckxvb3BCbG9ja0VtcHR5XG4gIHwgRGVmZXJyZWRCbG9ja1xuICB8IERlZmVycmVkQmxvY2tFcnJvclxuICB8IERlZmVycmVkQmxvY2tMb2FkaW5nXG4gIHwgRGVmZXJyZWRCbG9ja1BsYWNlaG9sZGVyXG4gIHwgQ29udGVudDtcblxuLyoqIFBvc3NpYmxlIHZhbHVlcyB0aGF0IGEgcmVmZXJlbmNlIGNhbiBiZSByZXNvbHZlZCB0by4gKi9cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZVRhcmdldDxEaXJlY3RpdmVUPiA9XG4gIHwge1xuICAgICAgZGlyZWN0aXZlOiBEaXJlY3RpdmVUO1xuICAgICAgbm9kZTogRWxlbWVudCB8IFRlbXBsYXRlO1xuICAgIH1cbiAgfCBFbGVtZW50XG4gIHwgVGVtcGxhdGU7XG5cbi8qKiBFbnRpdHkgdGhhdCBpcyBsb2NhbCB0byB0aGUgdGVtcGxhdGUgYW5kIGRlZmluZWQgd2l0aGluIHRoZSB0ZW1wbGF0ZS4gKi9cbmV4cG9ydCB0eXBlIFRlbXBsYXRlRW50aXR5ID0gUmVmZXJlbmNlIHwgVmFyaWFibGUgfCBMZXREZWNsYXJhdGlvbjtcblxuLypcbiAqIHQyIGlzIHRoZSByZXBsYWNlbWVudCBmb3IgdGhlIGBUZW1wbGF0ZURlZmluaXRpb25CdWlsZGVyYC4gSXQgaGFuZGxlcyB0aGUgb3BlcmF0aW9ucyBvZlxuICogYW5hbHl6aW5nIEFuZ3VsYXIgdGVtcGxhdGVzLCBleHRyYWN0aW5nIHNlbWFudGljIGluZm8sIGFuZCB1bHRpbWF0ZWx5IHByb2R1Y2luZyBhIHRlbXBsYXRlXG4gKiBkZWZpbml0aW9uIGZ1bmN0aW9uIHdoaWNoIHJlbmRlcnMgdGhlIHRlbXBsYXRlIHVzaW5nIEl2eSBpbnN0cnVjdGlvbnMuXG4gKlxuICogdDIgZGF0YSBpcyBhbHNvIHV0aWxpemVkIGJ5IHRoZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGZhY2lsaXRpZXMgdG8gdW5kZXJzdGFuZCBhIHRlbXBsYXRlIGVub3VnaFxuICogdG8gZ2VuZXJhdGUgdHlwZS1jaGVja2luZyBjb2RlIGZvciBpdC5cbiAqL1xuXG4vKipcbiAqIEEgbG9naWNhbCB0YXJnZXQgZm9yIGFuYWx5c2lzLCB3aGljaCBjb3VsZCBjb250YWluIGEgdGVtcGxhdGUgb3Igb3RoZXIgdHlwZXMgb2YgYmluZGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0IHtcbiAgdGVtcGxhdGU/OiBOb2RlW107XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBjYW4gaW5kaWNhdGUgd2hldGhlciBhIGdpdmVuIHByb3BlcnR5IG5hbWUgaXMgcHJlc2VudCBvciBub3QuXG4gKlxuICogVGhpcyBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc2V0IG9mIGlucHV0cyBvciBvdXRwdXRzIHByZXNlbnQgb24gYSBkaXJlY3RpdmUsIGFuZCBhbGxvd3MgdGhlXG4gKiBiaW5kZXIgdG8gcXVlcnkgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIG1hcHBpbmcgZm9yIHByb3BlcnR5IG5hbWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0T3V0cHV0UHJvcGVydHlTZXQge1xuICBoYXNCaW5kaW5nUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNhcHR1cmVzIHRoZSBhbmltYXRpb24gdHJpZ2dlciBuYW1lcyB0aGF0IGFyZSBzdGF0aWNhbGx5IHJlc29sdmFibGVcbiAqIGFuZCB3aGV0aGVyIHNvbWUgbmFtZXMgY291bGQgbm90IGJlIHN0YXRpY2FsbHkgZXZhbHVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvblRyaWdnZXJOYW1lcyB7XG4gIGluY2x1ZGVzRHluYW1pY0FuaW1hdGlvbnM6IGJvb2xlYW47XG4gIHN0YXRpY1RyaWdnZXJOYW1lczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWV0YWRhdGEgcmVnYXJkaW5nIGEgZGlyZWN0aXZlIHRoYXQncyBuZWVkZWQgdG8gbWF0Y2ggaXQgYWdhaW5zdCB0ZW1wbGF0ZSBlbGVtZW50cy4gVGhpcyBpc1xuICogcHJvdmlkZWQgYnkgYSBjb25zdW1lciBvZiB0aGUgdDIgQVBJcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmVNZXRhIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGRpcmVjdGl2ZSBjbGFzcyAodXNlZCBmb3IgZGVidWdnaW5nKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIHNlbGVjdG9yIGZvciB0aGUgZGlyZWN0aXZlIG9yIGBudWxsYCBpZiB0aGVyZSBpc24ndCBvbmUuICovXG4gIHNlbGVjdG9yOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgYSBjb21wb25lbnQuXG4gICAqL1xuICBpc0NvbXBvbmVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IG9mIGlucHV0cyB3aGljaCB0aGlzIGRpcmVjdGl2ZSBjbGFpbXMuXG4gICAqXG4gICAqIEdvZXMgZnJvbSBwcm9wZXJ0eSBuYW1lcyB0byBmaWVsZCBuYW1lcy5cbiAgICovXG4gIGlucHV0czogSW5wdXRPdXRwdXRQcm9wZXJ0eVNldDtcblxuICAvKipcbiAgICogU2V0IG9mIG91dHB1dHMgd2hpY2ggdGhpcyBkaXJlY3RpdmUgY2xhaW1zLlxuICAgKlxuICAgKiBHb2VzIGZyb20gcHJvcGVydHkgbmFtZXMgdG8gZmllbGQgbmFtZXMuXG4gICAqL1xuICBvdXRwdXRzOiBJbnB1dE91dHB1dFByb3BlcnR5U2V0O1xuXG4gIC8qKlxuICAgKiBOYW1lIHVuZGVyIHdoaWNoIHRoZSBkaXJlY3RpdmUgaXMgZXhwb3J0ZWQsIGlmIGFueSAoZXhwb3J0QXMgaW4gQW5ndWxhcikuXG4gICAqXG4gICAqIE51bGwgb3RoZXJ3aXNlXG4gICAqL1xuICBleHBvcnRBczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgYSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSAoZS5nLiBgPGRpdiAqbmdJZj48L2Rpdj5gKS5cbiAgICovXG4gIGlzU3RydWN0dXJhbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhlIGRpcmVjdGl2ZSBpcyBhIGNvbXBvbmVudCwgaW5jbHVkZXMgdGhlIHNlbGVjdG9ycyBvZiBpdHMgYG5nLWNvbnRlbnRgIGVsZW1lbnRzLlxuICAgKi9cbiAgbmdDb250ZW50U2VsZWN0b3JzOiBzdHJpbmdbXSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRlbXBsYXRlIG9mIHRoZSBjb21wb25lbnQgcHJlc2VydmVzIHdoaXRlc3BhY2VzLlxuICAgKi9cbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYW5pbWF0aW9ucyB0aGF0IHRoZSB1c2VyIGRlZmluZXMgaW4gdGhlIGNvbXBvbmVudC5cbiAgICogT25seSBpbmNsdWRlcyB0aGUgYW5pbWF0aW9uIG5hbWVzLlxuICAgKi9cbiAgYW5pbWF0aW9uVHJpZ2dlck5hbWVzOiBBbmltYXRpb25UcmlnZ2VyTmFtZXMgfCBudWxsO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byB0aGUgYmluZGluZyBBUEksIHdoaWNoIHByb2Nlc3NlcyBhIHRlbXBsYXRlIGFuZCByZXR1cm5zIGFuIG9iamVjdCBzaW1pbGFyIHRvIHRoZVxuICogYHRzLlR5cGVDaGVja2VyYC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYEJvdW5kVGFyZ2V0YCBoYXMgYW4gQVBJIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzZWQgdGFyZ2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldEJpbmRlcjxEIGV4dGVuZHMgRGlyZWN0aXZlTWV0YT4ge1xuICBiaW5kKHRhcmdldDogVGFyZ2V0KTogQm91bmRUYXJnZXQ8RD47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHBlcmZvcm1pbmcgdGhlIGJpbmRpbmcgb3BlcmF0aW9uIGFnYWluc3QgYSBgVGFyZ2V0YC5cbiAqXG4gKiBUaGUgb3JpZ2luYWwgYFRhcmdldGAgaXMgYWNjZXNzaWJsZSwgYXMgd2VsbCBhcyBhIHN1aXRlIG9mIG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcgYmluZGluZ1xuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBgVGFyZ2V0YC5cbiAqXG4gKiBAcGFyYW0gRGlyZWN0aXZlVCBkaXJlY3RpdmUgbWV0YWRhdGEgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvdW5kVGFyZ2V0PERpcmVjdGl2ZVQgZXh0ZW5kcyBEaXJlY3RpdmVNZXRhPiB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIGBUYXJnZXRgIHRoYXQgd2FzIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEZvciBhIGdpdmVuIHRlbXBsYXRlIG5vZGUgKGVpdGhlciBhbiBgRWxlbWVudGAgb3IgYSBgVGVtcGxhdGVgKSwgZ2V0IHRoZSBzZXQgb2YgZGlyZWN0aXZlc1xuICAgKiB3aGljaCBtYXRjaGVkIHRoZSBub2RlLCBpZiBhbnkuXG4gICAqL1xuICBnZXREaXJlY3RpdmVzT2ZOb2RlKG5vZGU6IEVsZW1lbnQgfCBUZW1wbGF0ZSk6IERpcmVjdGl2ZVRbXSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZvciBhIGdpdmVuIGBSZWZlcmVuY2VgLCBnZXQgdGhlIHJlZmVyZW5jZSdzIHRhcmdldCAtIGVpdGhlciBhbiBgRWxlbWVudGAsIGEgYFRlbXBsYXRlYCwgb3JcbiAgICogYSBkaXJlY3RpdmUgb24gYSBwYXJ0aWN1bGFyIG5vZGUuXG4gICAqL1xuICBnZXRSZWZlcmVuY2VUYXJnZXQocmVmOiBSZWZlcmVuY2UpOiBSZWZlcmVuY2VUYXJnZXQ8RGlyZWN0aXZlVD4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGb3IgYSBnaXZlbiBiaW5kaW5nLCBnZXQgdGhlIGVudGl0eSB0byB3aGljaCB0aGUgYmluZGluZyBpcyBiZWluZyBtYWRlLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgZWl0aGVyIGJlIGEgZGlyZWN0aXZlIG9yIHRoZSBub2RlIGl0c2VsZi5cbiAgICovXG4gIGdldENvbnN1bWVyT2ZCaW5kaW5nKFxuICAgIGJpbmRpbmc6IEJvdW5kQXR0cmlidXRlIHwgQm91bmRFdmVudCB8IFRleHRBdHRyaWJ1dGUsXG4gICk6IERpcmVjdGl2ZVQgfCBFbGVtZW50IHwgVGVtcGxhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgZ2l2ZW4gYEFTVGAgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBgUmVmZXJlbmNlYCBvciBgVmFyaWFibGVgIHdpdGhpbiB0aGUgYFRhcmdldGAsIHRoZW5cbiAgICogcmV0dXJuIHRoYXQuXG4gICAqXG4gICAqIE90aGVyd2lzZSwgcmV0dXJucyBgbnVsbGAuXG4gICAqXG4gICAqIFRoaXMgaXMgb25seSBkZWZpbmVkIGZvciBgQVNUYCBleHByZXNzaW9ucyB0aGF0IHJlYWQgb3Igd3JpdGUgdG8gYSBwcm9wZXJ0eSBvZiBhblxuICAgKiBgSW1wbGljaXRSZWNlaXZlcmAuXG4gICAqL1xuICBnZXRFeHByZXNzaW9uVGFyZ2V0KGV4cHI6IEFTVCk6IFRlbXBsYXRlRW50aXR5IHwgbnVsbDtcblxuICAvKipcbiAgICogR2l2ZW4gYSBwYXJ0aWN1bGFyIGBSZWZlcmVuY2VgIG9yIGBWYXJpYWJsZWAsIGdldCB0aGUgYFNjb3BlZE5vZGVgIHdoaWNoIGNyZWF0ZWQgaXQuXG4gICAqXG4gICAqIEFsbCBgVmFyaWFibGVgcyBhcmUgZGVmaW5lZCBvbiBub2RlLCBzbyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBhIHZhbHVlIGZvciBhIGBWYXJpYWJsZWBcbiAgICogZnJvbSB0aGUgYFRhcmdldGAuIFJldHVybnMgYG51bGxgIG90aGVyd2lzZS5cbiAgICovXG4gIGdldERlZmluaXRpb25Ob2RlT2ZTeW1ib2woc3ltYm9sOiBUZW1wbGF0ZUVudGl0eSk6IFNjb3BlZE5vZGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5lc3RpbmcgbGV2ZWwgb2YgYSBwYXJ0aWN1bGFyIGBTY29wZWROb2RlYC5cbiAgICpcbiAgICogVGhpcyBzdGFydHMgYXQgMSBmb3IgdG9wLWxldmVsIG5vZGVzIHdpdGhpbiB0aGUgYFRhcmdldGAgYW5kIGluY3JlYXNlcyBmb3Igbm9kZXNcbiAgICogbmVzdGVkIGF0IGRlZXBlciBsZXZlbHMuXG4gICAqL1xuICBnZXROZXN0aW5nTGV2ZWwobm9kZTogU2NvcGVkTm9kZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogR2V0IGFsbCBgUmVmZXJlbmNlYHMgYW5kIGBWYXJpYWJsZXNgIHZpc2libGUgd2l0aGluIHRoZSBnaXZlbiBgU2NvcGVkTm9kZWAgKG9yIGF0IHRoZSB0b3BcbiAgICogbGV2ZWwsIGlmIGBudWxsYCBpcyBwYXNzZWQpLlxuICAgKi9cbiAgZ2V0RW50aXRpZXNJblNjb3BlKG5vZGU6IFNjb3BlZE5vZGUgfCBudWxsKTogUmVhZG9ubHlTZXQ8VGVtcGxhdGVFbnRpdHk+O1xuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZGlyZWN0aXZlcyB1c2VkIGJ5IHRoZSB0YXJnZXQsXG4gICAqIGluY2x1ZGluZyBkaXJlY3RpdmVzIGZyb20gYEBkZWZlcmAgYmxvY2tzLlxuICAgKi9cbiAgZ2V0VXNlZERpcmVjdGl2ZXMoKTogRGlyZWN0aXZlVFtdO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGVhZ2VybHkgdXNlZCBkaXJlY3RpdmVzIGZyb20gdGhlIHRhcmdldC5cbiAgICogTm90ZTogdGhpcyBsaXN0ICpleGNsdWRlcyogZGlyZWN0aXZlcyBmcm9tIGBAZGVmZXJgIGJsb2Nrcy5cbiAgICovXG4gIGdldEVhZ2VybHlVc2VkRGlyZWN0aXZlcygpOiBEaXJlY3RpdmVUW107XG5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBwaXBlcyB1c2VkIGJ5IHRoZSB0YXJnZXQsXG4gICAqIGluY2x1ZGluZyBwaXBlcyBmcm9tIGBAZGVmZXJgIGJsb2Nrcy5cbiAgICovXG4gIGdldFVzZWRQaXBlcygpOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiBlYWdlcmx5IHVzZWQgcGlwZXMgZnJvbSB0aGUgdGFyZ2V0LlxuICAgKiBOb3RlOiB0aGlzIGxpc3QgKmV4Y2x1ZGVzKiBwaXBlcyBmcm9tIGBAZGVmZXJgIGJsb2Nrcy5cbiAgICovXG4gIGdldEVhZ2VybHlVc2VkUGlwZXMoKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgYWxsIGBAZGVmZXJgIGJsb2NrcyB1c2VkIGJ5IHRoZSB0YXJnZXQuXG4gICAqL1xuICBnZXREZWZlckJsb2NrcygpOiBEZWZlcnJlZEJsb2NrW107XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVsZW1lbnQgdGhhdCBhIHNwZWNpZmljIGRlZmVycmVkIGJsb2NrIHRyaWdnZXIgaXMgdGFyZ2V0aW5nLlxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB0aGUgdHJpZ2dlciBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gdHJpZ2dlciBUcmlnZ2VyIHdob3NlIHRhcmdldCBpcyBiZWluZyBsb29rZWQgdXAuXG4gICAqL1xuICBnZXREZWZlcnJlZFRyaWdnZXJUYXJnZXQoYmxvY2s6IERlZmVycmVkQmxvY2ssIHRyaWdnZXI6IERlZmVycmVkVHJpZ2dlcik6IEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgZ2l2ZW4gbm9kZSBpcyBsb2NhdGVkIGluIGEgYEBkZWZlcmAgYmxvY2suXG4gICAqL1xuICBpc0RlZmVycmVkKG5vZGU6IEVsZW1lbnQpOiBib29sZWFuO1xufVxuIl19