@angular/compiler-cli 8.0.0 → 8.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/ngcc/index.d.ts +1 -0
  2. package/ngcc/index.js +1 -1
  3. package/ngcc/main-ngcc.js +4 -4
  4. package/ngcc/src/analysis/decoration_analyzer.d.ts +5 -1
  5. package/ngcc/src/analysis/decoration_analyzer.js +12 -12
  6. package/ngcc/src/analysis/module_with_providers_analyzer.js +2 -2
  7. package/ngcc/src/analysis/private_declarations_analyzer.d.ts +3 -2
  8. package/ngcc/src/analysis/private_declarations_analyzer.js +8 -7
  9. package/ngcc/src/dependencies/commonjs_dependency_host.d.ts +46 -0
  10. package/ngcc/src/dependencies/commonjs_dependency_host.js +133 -0
  11. package/ngcc/src/dependencies/dependency_host.d.ts +17 -0
  12. package/ngcc/src/dependencies/dependency_host.js +20 -0
  13. package/ngcc/src/{packages → dependencies}/dependency_resolver.d.ts +13 -8
  14. package/ngcc/src/dependencies/dependency_resolver.js +138 -0
  15. package/ngcc/src/dependencies/esm_dependency_host.d.ts +62 -0
  16. package/ngcc/src/dependencies/esm_dependency_host.js +122 -0
  17. package/ngcc/src/dependencies/module_resolver.d.ts +139 -0
  18. package/ngcc/src/dependencies/module_resolver.js +297 -0
  19. package/ngcc/src/dependencies/umd_dependency_host.d.ts +46 -0
  20. package/ngcc/src/dependencies/umd_dependency_host.js +114 -0
  21. package/ngcc/src/file_system/file_system.d.ts +36 -0
  22. package/ngcc/src/file_system/file_system.js +20 -0
  23. package/ngcc/src/file_system/node_js_file_system.d.ts +27 -0
  24. package/ngcc/src/file_system/node_js_file_system.js +44 -0
  25. package/ngcc/src/host/commonjs_host.d.ts +43 -0
  26. package/ngcc/src/host/commonjs_host.js +187 -0
  27. package/ngcc/src/host/esm2015_host.d.ts +8 -10
  28. package/ngcc/src/host/esm2015_host.js +70 -40
  29. package/ngcc/src/host/esm5_host.js +3 -3
  30. package/ngcc/src/host/umd_host.d.ts +51 -0
  31. package/ngcc/src/host/umd_host.js +250 -0
  32. package/ngcc/src/main.d.ts +7 -8
  33. package/ngcc/src/main.js +64 -48
  34. package/ngcc/src/packages/build_marker.d.ts +3 -2
  35. package/ngcc/src/packages/build_marker.js +5 -6
  36. package/ngcc/src/packages/bundle_program.d.ts +13 -4
  37. package/ngcc/src/packages/bundle_program.js +11 -12
  38. package/ngcc/src/packages/entry_point.d.ts +6 -10
  39. package/ngcc/src/packages/entry_point.js +28 -24
  40. package/ngcc/src/packages/entry_point_bundle.d.ts +3 -1
  41. package/ngcc/src/packages/entry_point_bundle.js +10 -21
  42. package/ngcc/src/packages/entry_point_finder.d.ts +33 -3
  43. package/ngcc/src/packages/entry_point_finder.js +80 -18
  44. package/ngcc/src/packages/ngcc_compiler_host.d.ts +31 -0
  45. package/ngcc/src/packages/ngcc_compiler_host.js +108 -0
  46. package/ngcc/src/packages/transformer.d.ts +7 -5
  47. package/ngcc/src/packages/transformer.js +36 -12
  48. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +25 -0
  49. package/ngcc/src/rendering/commonjs_rendering_formatter.js +89 -0
  50. package/ngcc/src/rendering/dts_renderer.d.ts +51 -0
  51. package/ngcc/src/rendering/dts_renderer.js +135 -0
  52. package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +21 -0
  53. package/ngcc/src/rendering/esm5_rendering_formatter.js +44 -0
  54. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +63 -0
  55. package/ngcc/src/rendering/esm_rendering_formatter.js +202 -0
  56. package/ngcc/src/rendering/renderer.d.ts +16 -112
  57. package/ngcc/src/rendering/renderer.js +38 -285
  58. package/ngcc/src/rendering/rendering_formatter.d.ts +35 -0
  59. package/ngcc/src/rendering/rendering_formatter.js +14 -0
  60. package/ngcc/src/rendering/source_maps.d.ts +45 -0
  61. package/ngcc/src/rendering/source_maps.js +129 -0
  62. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +28 -0
  63. package/ngcc/src/rendering/umd_rendering_formatter.js +222 -0
  64. package/ngcc/src/rendering/utils.d.ts +25 -0
  65. package/ngcc/src/rendering/utils.js +34 -0
  66. package/ngcc/src/utils.d.ts +12 -0
  67. package/ngcc/src/utils.js +10 -1
  68. package/ngcc/src/writing/file_writer.d.ts +2 -2
  69. package/ngcc/src/writing/file_writer.js +1 -1
  70. package/ngcc/src/writing/in_place_file_writer.d.ts +6 -10
  71. package/ngcc/src/writing/in_place_file_writer.js +18 -19
  72. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +4 -4
  73. package/ngcc/src/writing/new_entry_point_file_writer.js +24 -25
  74. package/package.json +2 -2
  75. package/src/ngtsc/annotations/src/base_def.d.ts +5 -4
  76. package/src/ngtsc/annotations/src/base_def.js +12 -3
  77. package/src/ngtsc/annotations/src/component.d.ts +0 -1
  78. package/src/ngtsc/annotations/src/component.js +2 -5
  79. package/src/ngtsc/annotations/src/directive.d.ts +2 -1
  80. package/src/ngtsc/annotations/src/directive.js +5 -4
  81. package/src/ngtsc/annotations/src/injectable.js +1 -3
  82. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -1
  83. package/src/ngtsc/annotations/src/ng_module.js +17 -10
  84. package/src/ngtsc/annotations/src/pipe.js +1 -1
  85. package/src/ngtsc/annotations/src/util.js +7 -4
  86. package/src/ngtsc/imports/src/emitter.d.ts +8 -6
  87. package/src/ngtsc/imports/src/emitter.js +10 -38
  88. package/src/ngtsc/imports/src/resolver.js +4 -5
  89. package/src/ngtsc/incremental/src/state.d.ts +15 -3
  90. package/src/ngtsc/incremental/src/state.js +72 -52
  91. package/src/ngtsc/metadata/src/api.d.ts +18 -1
  92. package/src/ngtsc/metadata/src/api.js +1 -1
  93. package/src/ngtsc/metadata/src/util.d.ts +2 -2
  94. package/src/ngtsc/metadata/src/util.js +28 -9
  95. package/src/ngtsc/partial_evaluator/index.d.ts +1 -1
  96. package/src/ngtsc/partial_evaluator/index.js +1 -1
  97. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +2 -1
  98. package/src/ngtsc/partial_evaluator/src/dynamic.js +1 -1
  99. package/src/ngtsc/partial_evaluator/src/interface.d.ts +10 -3
  100. package/src/ngtsc/partial_evaluator/src/interface.js +6 -7
  101. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +4 -3
  102. package/src/ngtsc/partial_evaluator/src/interpreter.js +11 -9
  103. package/src/ngtsc/path/src/logical.js +4 -3
  104. package/src/ngtsc/path/src/types.d.ts +19 -7
  105. package/src/ngtsc/path/src/types.js +48 -9
  106. package/src/ngtsc/program.js +13 -12
  107. package/src/ngtsc/scope/src/local.d.ts +23 -5
  108. package/src/ngtsc/scope/src/local.js +34 -11
  109. package/src/ngtsc/shims/src/factory_generator.js +4 -2
  110. package/src/ngtsc/transform/src/api.d.ts +0 -1
  111. package/src/ngtsc/transform/src/api.js +1 -1
  112. package/src/ngtsc/transform/src/compilation.d.ts +4 -2
  113. package/src/ngtsc/transform/src/compilation.js +22 -20
  114. package/src/ngtsc/translator/index.d.ts +1 -1
  115. package/src/ngtsc/translator/index.js +1 -1
  116. package/src/ngtsc/translator/src/translator.d.ts +21 -8
  117. package/src/ngtsc/translator/src/translator.js +3 -12
  118. package/src/ngtsc/typecheck/src/api.d.ts +2 -1
  119. package/src/ngtsc/typecheck/src/api.js +1 -1
  120. package/src/ngtsc/typecheck/src/expression.js +104 -88
  121. package/src/ngtsc/typecheck/src/type_check_block.js +17 -11
  122. package/src/ngtsc/util/src/typescript.d.ts +7 -0
  123. package/src/ngtsc/util/src/typescript.js +17 -1
  124. package/src/version.js +1 -1
  125. package/ngcc/src/packages/dependency_host.d.ts +0 -84
  126. package/ngcc/src/packages/dependency_host.js +0 -164
  127. package/ngcc/src/packages/dependency_resolver.js +0 -126
  128. package/ngcc/src/rendering/esm5_renderer.d.ts +0 -14
  129. package/ngcc/src/rendering/esm5_renderer.js +0 -47
  130. package/ngcc/src/rendering/esm_renderer.d.ts +0 -30
  131. package/ngcc/src/rendering/esm_renderer.js +0 -141
@@ -17,4 +17,4 @@
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Qm91bmRUYXJnZXQsIERpcmVjdGl2ZU1ldGF9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBvZiBgRGlyZWN0aXZlTWV0YWAgdGhhdCBpbmNsdWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHR5cGUtY2hlY2sgdGhlXG4gKiB1c2FnZSBvZiBhIHBhcnRpY3VsYXIgZGlyZWN0aXZlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVDaGVja2FibGVEaXJlY3RpdmVNZXRhIGV4dGVuZHMgRGlyZWN0aXZlTWV0YSB7XG4gIHJlZjogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+O1xuICBxdWVyaWVzOiBzdHJpbmdbXTtcbiAgbmdUZW1wbGF0ZUd1YXJkczogc3RyaW5nW107XG4gIGhhc05nVGVtcGxhdGVDb250ZXh0R3VhcmQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWV0YWRhdGEgcmVxdWlyZWQgaW4gYWRkaXRpb24gdG8gYSBjb21wb25lbnQgY2xhc3MgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSB0eXBlIGNoZWNrIGJsb2NrIChUQ0IpXG4gKiBmb3IgdGhhdCBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUNoZWNrQmxvY2tNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBTZW1hbnRpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGJvdW5kVGFyZ2V0OiBCb3VuZFRhcmdldDxUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YT47XG5cbiAgLypcbiAgICogUGlwZXMgdXNlZCBpbiB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHBpcGVzOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVDdG9yTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlcXVlc3RlZCB0eXBlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICAgKi9cbiAgZm5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBib2R5IGZvciB0aGUgZnVuY3Rpb24gb3Igbm90LlxuICAgKi9cbiAgYm9keTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5wdXQsIG91dHB1dCwgYW5kIHF1ZXJ5IGZpZWxkIG5hbWVzIGluIHRoZSB0eXBlIHdoaWNoIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBjb25zdHJ1Y3RvciBpbnB1dC5cbiAgICovXG4gIGZpZWxkczoge2lucHV0czogc3RyaW5nW107IG91dHB1dHM6IHN0cmluZ1tdOyBxdWVyaWVzOiBzdHJpbmdbXTt9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVDaGVja2luZ0NvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIHRoZSBsZWZ0LWhhbmQgc2lkZSB0eXBlIG9mIGJpbmRpbmcgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgaXMgYGZhbHNlYCB0aGVuIHRoZSBleHByZXNzaW9uIGBbaW5wdXRdPVwiZXhwclwiYCB3aWxsIGhhdmUgYGV4cHJgIHR5cGUtXG4gICAqIGNoZWNrZWQsIGJ1dCBub3QgdGhlIGFzc2lnbm1lbnQgb2YgdGhlIHJlc3VsdGluZyB0eXBlIHRvIHRoZSBgaW5wdXRgIHByb3BlcnR5IG9mIHdoaWNoZXZlclxuICAgKiBkaXJlY3RpdmUgb3IgY29tcG9uZW50IGlzIHJlY2VpdmluZyB0aGUgYmluZGluZy4gSWYgc2V0IHRvIGB0cnVlYCwgYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudFxuICAgKiBhcmUgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrVHlwZU9mQmluZGluZ3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gcGlwZXMgaW4gdGhlIHR5cGUtY2hlY2tpbmcgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGB0cnVlYCwgdGhlbiB0aGUgcGlwZSdzIHR5cGUgc2lnbmF0dXJlIGZvciBgdHJhbnNmb3JtKClgIHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGVcbiAgICogdXNhZ2Ugb2YgdGhlIHBpcGUuIElmIHRoaXMgaXMgYGZhbHNlYCwgdGhlbiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGEgcGlwZSB3aWxsIGJlIGBhbnlgLCBhbmRcbiAgICogdGhlIHR5cGVzIG9mIHRoZSBwaXBlJ3MgdmFsdWUgYW5kIGFyZ3VtZW50cyB3aWxsIG5vdCBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIGB0cmFuc2Zvcm0oKWBcbiAgICogbWV0aG9kLlxuICAgKi9cbiAgY2hlY2tUeXBlT2ZQaXBlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBuYXJyb3cgdGhlIHR5cGVzIG9mIHRlbXBsYXRlIGNvbnRleHRzLlxuICAgKi9cbiAgYXBwbHlUZW1wbGF0ZUNvbnRleHRHdWFyZHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGEgc3RyaWN0IHR5cGUgZm9yIG51bGwtc2FmZSBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCwgdGhlbiB0aGUgcmV0dXJuIHR5cGUgb2YgYGE/LmJgIG9yIGBhPygpYCB3aWxsIGJlIGBhbnlgLiBJZiBzZXQgdG8gYHRydWVgLFxuICAgKiB0aGVuIHRoZSByZXR1cm4gdHlwZSBvZiBgYT8uYmAgZm9yIGV4YW1wbGUgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiB0aGUgdGVybmFyeVxuICAgKiBleHByZXNzaW9uIGBhICE9IG51bGwgPyBhLmIgOiBhYC5cbiAgICovXG4gIHN0cmljdFNhZmVOYXZpZ2F0aW9uVHlwZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVzY2VuZCBpbnRvIHRlbXBsYXRlIGJvZGllcyBhbmQgY2hlY2sgYW55IGJpbmRpbmdzIHRoZXJlLlxuICAgKi9cbiAgY2hlY2tUZW1wbGF0ZUJvZGllczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjaGVjayByZXNvbHZhYmxlIHF1ZXJpZXMuXG4gICAqXG4gICAqIFRoaXMgaXMgY3VycmVudGx5IGFuIHVuc3VwcG9ydGVkIGZlYXR1cmUuXG4gICAqL1xuICBjaGVja1F1ZXJpZXM6IGZhbHNlO1xufVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Qm91bmRUYXJnZXQsIERpcmVjdGl2ZU1ldGF9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge1RlbXBsYXRlR3VhcmRNZXRhfSBmcm9tICcuLi8uLi9tZXRhZGF0YSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBvZiBgRGlyZWN0aXZlTWV0YWAgdGhhdCBpbmNsdWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHR5cGUtY2hlY2sgdGhlXG4gKiB1c2FnZSBvZiBhIHBhcnRpY3VsYXIgZGlyZWN0aXZlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVDaGVja2FibGVEaXJlY3RpdmVNZXRhIGV4dGVuZHMgRGlyZWN0aXZlTWV0YSB7XG4gIHJlZjogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+O1xuICBxdWVyaWVzOiBzdHJpbmdbXTtcbiAgbmdUZW1wbGF0ZUd1YXJkczogVGVtcGxhdGVHdWFyZE1ldGFbXTtcbiAgaGFzTmdUZW1wbGF0ZUNvbnRleHRHdWFyZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSByZXF1aXJlZCBpbiBhZGRpdGlvbiB0byBhIGNvbXBvbmVudCBjbGFzcyBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIHR5cGUgY2hlY2sgYmxvY2sgKFRDQilcbiAqIGZvciB0aGF0IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlQ2hlY2tCbG9ja01ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFNlbWFudGljIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgYm91bmRUYXJnZXQ6IEJvdW5kVGFyZ2V0PFR5cGVDaGVja2FibGVEaXJlY3RpdmVNZXRhPjtcblxuICAvKlxuICAgKiBQaXBlcyB1c2VkIGluIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcGlwZXM6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUN0b3JNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVxdWVzdGVkIHR5cGUgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAqL1xuICBmbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBnZW5lcmF0ZSBhIGJvZHkgZm9yIHRoZSBmdW5jdGlvbiBvciBub3QuXG4gICAqL1xuICBib2R5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnB1dCwgb3V0cHV0LCBhbmQgcXVlcnkgZmllbGQgbmFtZXMgaW4gdGhlIHR5cGUgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGNvbnN0cnVjdG9yIGlucHV0LlxuICAgKi9cbiAgZmllbGRzOiB7aW5wdXRzOiBzdHJpbmdbXTsgb3V0cHV0czogc3RyaW5nW107IHF1ZXJpZXM6IHN0cmluZ1tdO307XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUNoZWNraW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgdGhlIGxlZnQtaGFuZCBzaWRlIHR5cGUgb2YgYmluZGluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBpcyBgZmFsc2VgIHRoZW4gdGhlIGV4cHJlc3Npb24gYFtpbnB1dF09XCJleHByXCJgIHdpbGwgaGF2ZSBgZXhwcmAgdHlwZS1cbiAgICogY2hlY2tlZCwgYnV0IG5vdCB0aGUgYXNzaWdubWVudCBvZiB0aGUgcmVzdWx0aW5nIHR5cGUgdG8gdGhlIGBpbnB1dGAgcHJvcGVydHkgb2Ygd2hpY2hldmVyXG4gICAqIGRpcmVjdGl2ZSBvciBjb21wb25lbnQgaXMgcmVjZWl2aW5nIHRoZSBiaW5kaW5nLiBJZiBzZXQgdG8gYHRydWVgLCBib3RoIHNpZGVzIG9mIHRoZSBhc3NpZ25tZW50XG4gICAqIGFyZSBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tUeXBlT2ZCaW5kaW5nczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBwaXBlcyBpbiB0aGUgdHlwZS1jaGVja2luZyBvcGVyYXRpb24uXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYHRydWVgLCB0aGVuIHRoZSBwaXBlJ3MgdHlwZSBzaWduYXR1cmUgZm9yIGB0cmFuc2Zvcm0oKWAgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHRoZVxuICAgKiB1c2FnZSBvZiB0aGUgcGlwZS4gSWYgdGhpcyBpcyBgZmFsc2VgLCB0aGVuIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYSBwaXBlIHdpbGwgYmUgYGFueWAsIGFuZFxuICAgKiB0aGUgdHlwZXMgb2YgdGhlIHBpcGUncyB2YWx1ZSBhbmQgYXJndW1lbnRzIHdpbGwgbm90IGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgYHRyYW5zZm9ybSgpYFxuICAgKiBtZXRob2QuXG4gICAqL1xuICBjaGVja1R5cGVPZlBpcGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIG5hcnJvdyB0aGUgdHlwZXMgb2YgdGVtcGxhdGUgY29udGV4dHMuXG4gICAqL1xuICBhcHBseVRlbXBsYXRlQ29udGV4dEd1YXJkczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgYSBzdHJpY3QgdHlwZSBmb3IgbnVsbC1zYWZlIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgZmFsc2VgLCB0aGVuIHRoZSByZXR1cm4gdHlwZSBvZiBgYT8uYmAgb3IgYGE/KClgIHdpbGwgYmUgYGFueWAuIElmIHNldCB0byBgdHJ1ZWAsXG4gICAqIHRoZW4gdGhlIHJldHVybiB0eXBlIG9mIGBhPy5iYCBmb3IgZXhhbXBsZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mIHRoZSB0ZXJuYXJ5XG4gICAqIGV4cHJlc3Npb24gYGEgIT0gbnVsbCA/IGEuYiA6IGFgLlxuICAgKi9cbiAgc3RyaWN0U2FmZU5hdmlnYXRpb25UeXBlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZXNjZW5kIGludG8gdGVtcGxhdGUgYm9kaWVzIGFuZCBjaGVjayBhbnkgYmluZGluZ3MgdGhlcmUuXG4gICAqL1xuICBjaGVja1RlbXBsYXRlQm9kaWVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIHJlc29sdmFibGUgcXVlcmllcy5cbiAgICpcbiAgICogVGhpcyBpcyBjdXJyZW50bHkgYW4gdW5zdXBwb3J0ZWQgZmVhdHVyZS5cbiAgICovXG4gIGNoZWNrUXVlcmllczogZmFsc2U7XG59XG4iXX0=
@@ -44,34 +44,76 @@
44
44
  * AST.
45
45
  */
46
46
  function astToTypescript(ast, maybeResolve, config) {
47
- var resolved = maybeResolve(ast);
48
- if (resolved !== null) {
49
- return resolved;
50
- }
51
- // Branch based on the type of expression being processed.
52
- if (ast instanceof compiler_1.ASTWithSource) {
53
- // Fall through to the underlying AST.
54
- return astToTypescript(ast.ast, maybeResolve, config);
55
- }
56
- else if (ast instanceof compiler_1.PropertyRead) {
57
- // This is a normal property read - convert the receiver to an expression and emit the correct
58
- // TypeScript expression to read the property.
59
- var receiver = astToTypescript(ast.receiver, maybeResolve, config);
60
- return ts.createPropertyAccess(receiver, ast.name);
61
- }
62
- else if (ast instanceof compiler_1.Interpolation) {
63
- return astArrayToExpression(ast.expressions, maybeResolve, config);
64
- }
65
- else if (ast instanceof compiler_1.Binary) {
66
- var lhs = astToTypescript(ast.left, maybeResolve, config);
67
- var rhs = astToTypescript(ast.right, maybeResolve, config);
47
+ var translator = new AstTranslator(maybeResolve, config);
48
+ return translator.translate(ast);
49
+ }
50
+ exports.astToTypescript = astToTypescript;
51
+ var AstTranslator = /** @class */ (function () {
52
+ function AstTranslator(maybeResolve, config) {
53
+ this.maybeResolve = maybeResolve;
54
+ this.config = config;
55
+ }
56
+ AstTranslator.prototype.translate = function (ast) {
57
+ // Skip over an `ASTWithSource` as its `visit` method calls directly into its ast's `visit`,
58
+ // which would prevent any custom resolution through `maybeResolve` for that node.
59
+ if (ast instanceof compiler_1.ASTWithSource) {
60
+ ast = ast.ast;
61
+ }
62
+ // First attempt to let any custom resolution logic provide a translation for the given node.
63
+ var resolved = this.maybeResolve(ast);
64
+ if (resolved !== null) {
65
+ return resolved;
66
+ }
67
+ return ast.visit(this);
68
+ };
69
+ AstTranslator.prototype.visitBinary = function (ast) {
70
+ var lhs = this.translate(ast.left);
71
+ var rhs = this.translate(ast.right);
68
72
  var op = BINARY_OPS.get(ast.operation);
69
73
  if (op === undefined) {
70
74
  throw new Error("Unsupported Binary.operation: " + ast.operation);
71
75
  }
72
76
  return ts.createBinary(lhs, op, rhs);
73
- }
74
- else if (ast instanceof compiler_1.LiteralPrimitive) {
77
+ };
78
+ AstTranslator.prototype.visitChain = function (ast) { throw new Error('Method not implemented.'); };
79
+ AstTranslator.prototype.visitConditional = function (ast) {
80
+ var condExpr = this.translate(ast.condition);
81
+ var trueExpr = this.translate(ast.trueExp);
82
+ var falseExpr = this.translate(ast.falseExp);
83
+ return ts.createParen(ts.createConditional(condExpr, trueExpr, falseExpr));
84
+ };
85
+ AstTranslator.prototype.visitFunctionCall = function (ast) { throw new Error('Method not implemented.'); };
86
+ AstTranslator.prototype.visitImplicitReceiver = function (ast) {
87
+ throw new Error('Method not implemented.');
88
+ };
89
+ AstTranslator.prototype.visitInterpolation = function (ast) {
90
+ var _this = this;
91
+ // Build up a chain of binary + operations to simulate the string concatenation of the
92
+ // interpolation's expressions. The chain is started using an actual string literal to ensure
93
+ // the type is inferred as 'string'.
94
+ return ast.expressions.reduce(function (lhs, ast) { return ts.createBinary(lhs, ts.SyntaxKind.PlusToken, _this.translate(ast)); }, ts.createLiteral(''));
95
+ };
96
+ AstTranslator.prototype.visitKeyedRead = function (ast) {
97
+ var receiver = this.translate(ast.obj);
98
+ var key = this.translate(ast.key);
99
+ return ts.createElementAccess(receiver, key);
100
+ };
101
+ AstTranslator.prototype.visitKeyedWrite = function (ast) { throw new Error('Method not implemented.'); };
102
+ AstTranslator.prototype.visitLiteralArray = function (ast) {
103
+ var _this = this;
104
+ var elements = ast.expressions.map(function (expr) { return _this.translate(expr); });
105
+ return ts.createArrayLiteral(elements);
106
+ };
107
+ AstTranslator.prototype.visitLiteralMap = function (ast) {
108
+ var _this = this;
109
+ var properties = ast.keys.map(function (_a, idx) {
110
+ var key = _a.key;
111
+ var value = _this.translate(ast.values[idx]);
112
+ return ts.createPropertyAssignment(ts.createStringLiteral(key), value);
113
+ });
114
+ return ts.createObjectLiteral(properties, true);
115
+ };
116
+ AstTranslator.prototype.visitLiteralPrimitive = function (ast) {
75
117
  if (ast.value === undefined) {
76
118
  return ts.createIdentifier('undefined');
77
119
  }
@@ -81,83 +123,57 @@
81
123
  else {
82
124
  return ts.createLiteral(ast.value);
83
125
  }
84
- }
85
- else if (ast instanceof compiler_1.MethodCall) {
86
- var receiver = astToTypescript(ast.receiver, maybeResolve, config);
126
+ };
127
+ AstTranslator.prototype.visitMethodCall = function (ast) {
128
+ var _this = this;
129
+ var receiver = this.translate(ast.receiver);
87
130
  var method = ts.createPropertyAccess(receiver, ast.name);
88
- var args = ast.args.map(function (expr) { return astToTypescript(expr, maybeResolve, config); });
131
+ var args = ast.args.map(function (expr) { return _this.translate(expr); });
89
132
  return ts.createCall(method, undefined, args);
90
- }
91
- else if (ast instanceof compiler_1.Conditional) {
92
- var condExpr = astToTypescript(ast.condition, maybeResolve, config);
93
- var trueExpr = astToTypescript(ast.trueExp, maybeResolve, config);
94
- var falseExpr = astToTypescript(ast.falseExp, maybeResolve, config);
95
- return ts.createParen(ts.createConditional(condExpr, trueExpr, falseExpr));
96
- }
97
- else if (ast instanceof compiler_1.LiteralArray) {
98
- var elements = ast.expressions.map(function (expr) { return astToTypescript(expr, maybeResolve, config); });
99
- return ts.createArrayLiteral(elements);
100
- }
101
- else if (ast instanceof compiler_1.LiteralMap) {
102
- var properties = ast.keys.map(function (_a, idx) {
103
- var key = _a.key;
104
- var value = astToTypescript(ast.values[idx], maybeResolve, config);
105
- return ts.createPropertyAssignment(ts.createStringLiteral(key), value);
106
- });
107
- return ts.createObjectLiteral(properties, true);
108
- }
109
- else if (ast instanceof compiler_1.KeyedRead) {
110
- var receiver = astToTypescript(ast.obj, maybeResolve, config);
111
- var key = astToTypescript(ast.key, maybeResolve, config);
112
- return ts.createElementAccess(receiver, key);
113
- }
114
- else if (ast instanceof compiler_1.NonNullAssert) {
115
- var expr = astToTypescript(ast.expression, maybeResolve, config);
133
+ };
134
+ AstTranslator.prototype.visitNonNullAssert = function (ast) {
135
+ var expr = this.translate(ast.expression);
116
136
  return ts.createNonNullExpression(expr);
117
- }
118
- else if (ast instanceof compiler_1.PrefixNot) {
119
- return ts.createLogicalNot(astToTypescript(ast.expression, maybeResolve, config));
120
- }
121
- else if (ast instanceof compiler_1.SafePropertyRead) {
137
+ };
138
+ AstTranslator.prototype.visitPipe = function (ast) { throw new Error('Method not implemented.'); };
139
+ AstTranslator.prototype.visitPrefixNot = function (ast) {
140
+ return ts.createLogicalNot(this.translate(ast.expression));
141
+ };
142
+ AstTranslator.prototype.visitPropertyRead = function (ast) {
143
+ // This is a normal property read - convert the receiver to an expression and emit the correct
144
+ // TypeScript expression to read the property.
145
+ var receiver = this.translate(ast.receiver);
146
+ return ts.createPropertyAccess(receiver, ast.name);
147
+ };
148
+ AstTranslator.prototype.visitPropertyWrite = function (ast) { throw new Error('Method not implemented.'); };
149
+ AstTranslator.prototype.visitQuote = function (ast) { throw new Error('Method not implemented.'); };
150
+ AstTranslator.prototype.visitSafeMethodCall = function (ast) {
151
+ var _this = this;
152
+ // See the comment in SafePropertyRead above for an explanation of the need for the non-null
153
+ // assertion here.
154
+ var receiver = this.translate(ast.receiver);
155
+ var method = ts.createPropertyAccess(ts.createNonNullExpression(receiver), ast.name);
156
+ var args = ast.args.map(function (expr) { return _this.translate(expr); });
157
+ var expr = ts.createCall(method, undefined, args);
158
+ var whenNull = this.config.strictSafeNavigationTypes ? UNDEFINED : NULL_AS_ANY;
159
+ return safeTernary(receiver, expr, whenNull);
160
+ };
161
+ AstTranslator.prototype.visitSafePropertyRead = function (ast) {
122
162
  // A safe property expression a?.b takes the form `(a != null ? a!.b : whenNull)`, where
123
163
  // whenNull is either of type 'any' or or 'undefined' depending on strictness. The non-null
124
164
  // assertion is necessary because in practice 'a' may be a method call expression, which won't
125
165
  // have a narrowed type when repeated in the ternary true branch.
126
- var receiver = astToTypescript(ast.receiver, maybeResolve, config);
166
+ var receiver = this.translate(ast.receiver);
127
167
  var expr = ts.createPropertyAccess(ts.createNonNullExpression(receiver), ast.name);
128
- var whenNull = config.strictSafeNavigationTypes ? UNDEFINED : NULL_AS_ANY;
129
- return safeTernary(receiver, expr, whenNull);
130
- }
131
- else if (ast instanceof compiler_1.SafeMethodCall) {
132
- var receiver = astToTypescript(ast.receiver, maybeResolve, config);
133
- // See the comment in SafePropertyRead above for an explanation of the need for the non-null
134
- // assertion here.
135
- var method = ts.createPropertyAccess(ts.createNonNullExpression(receiver), ast.name);
136
- var args = ast.args.map(function (expr) { return astToTypescript(expr, maybeResolve, config); });
137
- var expr = ts.createCall(method, undefined, args);
138
- var whenNull = config.strictSafeNavigationTypes ? UNDEFINED : NULL_AS_ANY;
168
+ var whenNull = this.config.strictSafeNavigationTypes ? UNDEFINED : NULL_AS_ANY;
139
169
  return safeTernary(receiver, expr, whenNull);
140
- }
141
- else {
142
- throw new Error("Unknown node type: " + Object.getPrototypeOf(ast).constructor);
143
- }
144
- }
145
- exports.astToTypescript = astToTypescript;
146
- /**
147
- * Convert an array of `AST` expressions into a single `ts.Expression`, by converting them all
148
- * and separating them with commas.
149
- */
150
- function astArrayToExpression(astArray, maybeResolve, config) {
151
- // Reduce the `asts` array into a `ts.Expression`. Multiple expressions are combined into a
152
- // `ts.BinaryExpression` with a comma separator. First make a copy of the input array, as
153
- // it will be modified during the reduction.
154
- var asts = astArray.slice();
155
- return asts.reduce(function (lhs, ast) { return ts.createBinary(lhs, ts.SyntaxKind.CommaToken, astToTypescript(ast, maybeResolve, config)); }, astToTypescript(asts.pop(), maybeResolve, config));
156
- }
170
+ };
171
+ return AstTranslator;
172
+ }());
157
173
  function safeTernary(lhs, whenNotNull, whenNull) {
158
174
  var notNullComp = ts.createBinary(lhs, ts.SyntaxKind.ExclamationEqualsToken, ts.createNull());
159
175
  var ternary = ts.createConditional(notNullComp, whenNotNull, whenNull);
160
176
  return ts.createParen(ternary);
161
177
  }
162
178
  });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy9leHByZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsOENBQXNPO0lBQ3RPLCtCQUFpQztJQUlqQyxJQUFNLFdBQVcsR0FDYixFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELElBQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUF3QjtRQUNoRCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUM5QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNsQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7UUFDekMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQztRQUM1QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUM7UUFDOUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFD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Q0FBQztRQUN6RSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBU1QsIEFTVFdpdGhTb3VyY2UsIEJpbmFyeSwgQ29uZGl0aW9uYWwsIEludGVycG9sYXRpb24sIEtleWVkUmVhZCwgTGl0ZXJhbEFycmF5LCBMaXRlcmFsTWFwLCBMaXRlcmFsUHJpbWl0aXZlLCBNZXRob2RDYWxsLCBOb25OdWxsQXNzZXJ0LCBQcmVmaXhOb3QsIFByb3BlcnR5UmVhZCwgU2FmZU1ldGhvZENhbGwsIFNhZmVQcm9wZXJ0eVJlYWR9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1R5cGVDaGVja2luZ0NvbmZpZ30gZnJvbSAnLi9hcGknO1xuXG5jb25zdCBOVUxMX0FTX0FOWSA9XG4gICAgdHMuY3JlYXRlQXNFeHByZXNzaW9uKHRzLmNyZWF0ZU51bGwoKSwgdHMuY3JlYXRlS2V5d29yZFR5cGVOb2RlKHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCkpO1xuY29uc3QgVU5ERUZJTkVEID0gdHMuY3JlYXRlSWRlbnRpZmllcigndW5kZWZpbmVkJyk7XG5cbmNvbnN0IEJJTkFSWV9PUFMgPSBuZXcgTWFwPHN0cmluZywgdHMuU3ludGF4S2luZD4oW1xuICBbJysnLCB0cy5TeW50YXhLaW5kLlBsdXNUb2tlbl0sXG4gIFsnLScsIHRzLlN5bnRheEtpbmQuTWludXNUb2tlbl0sXG4gIFsnPCcsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbl0sXG4gIFsnPicsIHRzLlN5bnRheEtpbmQuR3JlYXRlclRoYW5Ub2tlbl0sXG4gIFsnPD0nLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuRXF1YWxzVG9rZW5dLFxuICBbJz49JywgdHMuU3ludGF4S2luZC5HcmVhdGVyVGhhbkVxdWFsc1Rva2VuXSxcbiAgWyc9PScsIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzVG9rZW5dLFxuICBbJz09PScsIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzRXF1YWxzVG9rZW5dLFxuICBbJyonLCB0cy5TeW50YXhLaW5kLkFzdGVyaXNrVG9rZW5dLFxuICBbJy8nLCB0cy5TeW50YXhLaW5kLlNsYXNoVG9rZW5dLFxuICBbJyUnLCB0cy5TeW50YXhLaW5kLlBlcmNlbnRUb2tlbl0sXG4gIFsnIT0nLCB0cy5TeW50YXhLaW5kLkV4Y2xhbWF0aW9uRXF1YWxzVG9rZW5dLFxuICBbJyE9PScsIHRzLlN5bnRheEtpbmQuRXhjbGFtYXRpb25FcXVhbHNFcXVhbHNUb2tlbl0sXG4gIFsnfHwnLCB0cy5TeW50YXhLaW5kLkJhckJhclRva2VuXSxcbiAgWycmJicsIHRzLlN5bnRheEtpbmQuQW1wZXJzYW5kQW1wZXJzYW5kVG9rZW5dLFxuICBbJyYnLCB0cy5TeW50YXhLaW5kLkFtcGVyc2FuZFRva2VuXSxcbiAgWyd8JywgdHMuU3ludGF4S2luZC5CYXJUb2tlbl0sXG5dKTtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBU1RgIHRvIFR5cGVTY3JpcHQgY29kZSBkaXJlY3RseSwgd2l0aG91dCBnb2luZyB0aHJvdWdoIGFuIGludGVybWVkaWF0ZSBgRXhwcmVzc2lvbmBcbiAqIEFTVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzdFRvVHlwZXNjcmlwdChcbiAgICBhc3Q6IEFTVCwgbWF5YmVSZXNvbHZlOiAoYXN0OiBBU1QpID0+IHRzLkV4cHJlc3Npb24gfCBudWxsLFxuICAgIGNvbmZpZzogVHlwZUNoZWNraW5nQ29uZmlnKTogdHMuRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHJlc29sdmVkID0gbWF5YmVSZXNvbHZlKGFzdCk7XG4gIGlmIChyZXNvbHZlZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuICAvLyBCcmFuY2ggYmFzZWQgb24gdGhlIHR5cGUgb2YgZXhwcmVzc2lvbiBiZWluZyBwcm9jZXNzZWQuXG4gIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlKSB7XG4gICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSB1bmRlcmx5aW5nIEFTVC5cbiAgICByZXR1cm4gYXN0VG9UeXBlc2NyaXB0KGFzdC5hc3QsIG1heWJlUmVzb2x2ZSwgY29uZmlnKTtcbiAgfSBlbHNlIGlmIChhc3QgaW5zdGFuY2VvZiBQcm9wZXJ0eVJlYWQpIHtcbiAgICAvLyBUaGlzIGlzIGEgbm9ybWFsIHByb3BlcnR5IHJlYWQgLSBjb252ZXJ0IHRoZSByZWNlaXZlciB0byBhbiBleHByZXNzaW9uIGFuZCBlbWl0IHRoZSBjb3JyZWN0XG4gICAgLy8gVHlwZVNjcmlwdCBleHByZXNzaW9uIHRvIHJlYWQgdGhlIHByb3BlcnR5LlxuICAgIGNvbnN0IHJlY2VpdmVyID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5yZWNlaXZlciwgbWF5YmVSZXNvbHZlLCBjb25maWcpO1xuICAgIHJldHVybiB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgYXN0Lm5hbWUpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIEludGVycG9sYXRpb24pIHtcbiAgICByZXR1cm4gYXN0QXJyYXlUb0V4cHJlc3Npb24oYXN0LmV4cHJlc3Npb25zLCBtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gIH0gZWxzZSBpZiAoYXN0IGluc3RhbmNlb2YgQmluYXJ5KSB7XG4gICAgY29uc3QgbGhzID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5sZWZ0LCBtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gICAgY29uc3QgcmhzID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5yaWdodCwgbWF5YmVSZXNvbHZlLCBjb25maWcpO1xuICAgIGNvbnN0IG9wID0gQklOQVJZX09QUy5nZXQoYXN0Lm9wZXJhdGlvbik7XG4gICAgaWYgKG9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQmluYXJ5Lm9wZXJhdGlvbjogJHthc3Qub3BlcmF0aW9ufWApO1xuICAgIH1cbiAgICByZXR1cm4gdHMuY3JlYXRlQmluYXJ5KGxocywgb3AgYXMgYW55LCByaHMpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIExpdGVyYWxQcmltaXRpdmUpIHtcbiAgICBpZiAoYXN0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cy5jcmVhdGVJZGVudGlmaWVyKCd1bmRlZmluZWQnKTtcbiAgICB9IGVsc2UgaWYgKGFzdC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRzLmNyZWF0ZU51bGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRzLmNyZWF0ZUxpdGVyYWwoYXN0LnZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXN0IGluc3RhbmNlb2YgTWV0aG9kQ2FsbCkge1xuICAgIGNvbnN0IHJlY2VpdmVyID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5yZWNlaXZlciwgbWF5YmVSZXNvbHZlLCBjb25maWcpO1xuICAgIGNvbnN0IG1ldGhvZCA9IHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBhc3QubmFtZSk7XG4gICAgY29uc3QgYXJncyA9IGFzdC5hcmdzLm1hcChleHByID0+IGFzdFRvVHlwZXNjcmlwdChleHByLCBtYXliZVJlc29sdmUsIGNvbmZpZykpO1xuICAgIHJldHVybiB0cy5jcmVhdGVDYWxsKG1ldGhvZCwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgfSBlbHNlIGlmIChhc3QgaW5zdGFuY2VvZiBDb25kaXRpb25hbCkge1xuICAgIGNvbnN0IGNvbmRFeHByID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5jb25kaXRpb24sIG1heWJlUmVzb2x2ZSwgY29uZmlnKTtcbiAgICBjb25zdCB0cnVlRXhwciA9IGFzdFRvVHlwZXNjcmlwdChhc3QudHJ1ZUV4cCwgbWF5YmVSZXNvbHZlLCBjb25maWcpO1xuICAgIGNvbnN0IGZhbHNlRXhwciA9IGFzdFRvVHlwZXNjcmlwdChhc3QuZmFsc2VFeHAsIG1heWJlUmVzb2x2ZSwgY29uZmlnKTtcbiAgICByZXR1cm4gdHMuY3JlYXRlUGFyZW4odHMuY3JlYXRlQ29uZGl0aW9uYWwoY29uZEV4cHIsIHRydWVFeHByLCBmYWxzZUV4cHIpKTtcbiAgfSBlbHNlIGlmIChhc3QgaW5zdGFuY2VvZiBMaXRlcmFsQXJyYXkpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGFzdC5leHByZXNzaW9ucy5tYXAoZXhwciA9PiBhc3RUb1R5cGVzY3JpcHQoZXhwciwgbWF5YmVSZXNvbHZlLCBjb25maWcpKTtcbiAgICByZXR1cm4gdHMuY3JlYXRlQXJyYXlMaXRlcmFsKGVsZW1lbnRzKTtcbiAgfSBlbHNlIGlmIChhc3QgaW5zdGFuY2VvZiBMaXRlcmFsTWFwKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGFzdC5rZXlzLm1hcCgoe2tleX0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhc3RUb1R5cGVzY3JpcHQoYXN0LnZhbHVlc1tpZHhdLCBtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gICAgICByZXR1cm4gdHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KHRzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoa2V5KSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0cy5jcmVhdGVPYmplY3RMaXRlcmFsKHByb3BlcnRpZXMsIHRydWUpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIEtleWVkUmVhZCkge1xuICAgIGNvbnN0IHJlY2VpdmVyID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5vYmosIG1heWJlUmVzb2x2ZSwgY29uZmlnKTtcbiAgICBjb25zdCBrZXkgPSBhc3RUb1R5cGVzY3JpcHQoYXN0LmtleSwgbWF5YmVSZXNvbHZlLCBjb25maWcpO1xuICAgIHJldHVybiB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHJlY2VpdmVyLCBrZXkpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIE5vbk51bGxBc3NlcnQpIHtcbiAgICBjb25zdCBleHByID0gYXN0VG9UeXBlc2NyaXB0KGFzdC5leHByZXNzaW9uLCBtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZU5vbk51bGxFeHByZXNzaW9uKGV4cHIpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIFByZWZpeE5vdCkge1xuICAgIHJldHVybiB0cy5jcmVhdGVMb2dpY2FsTm90KGFzdFRvVHlwZXNjcmlwdChhc3QuZXhwcmVzc2lvbiwgbWF5YmVSZXNvbHZlLCBjb25maWcpKTtcbiAgfSBlbHNlIGlmIChhc3QgaW5zdGFuY2VvZiBTYWZlUHJvcGVydHlSZWFkKSB7XG4gICAgLy8gQSBzYWZlIHByb3BlcnR5IGV4cHJlc3Npb24gYT8uYiB0YWtlcyB0aGUgZm9ybSBgKGEgIT0gbnVsbCA/IGEhLmIgOiB3aGVuTnVsbClgLCB3aGVyZVxuICAgIC8vIHdoZW5OdWxsIGlzIGVpdGhlciBvZiB0eXBlICdhbnknIG9yIG9yICd1bmRlZmluZWQnIGRlcGVuZGluZyBvbiBzdHJpY3RuZXNzLiBUaGUgbm9uLW51bGxcbiAgICAvLyBhc3NlcnRpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gcHJhY3RpY2UgJ2EnIG1heSBiZSBhIG1ldGhvZCBjYWxsIGV4cHJlc3Npb24sIHdoaWNoIHdvbid0XG4gICAgLy8gaGF2ZSBhIG5hcnJvd2VkIHR5cGUgd2hlbiByZXBlYXRlZCBpbiB0aGUgdGVybmFyeSB0cnVlIGJyYW5jaC5cbiAgICBjb25zdCByZWNlaXZlciA9IGFzdFRvVHlwZXNjcmlwdChhc3QucmVjZWl2ZXIsIG1heWJlUmVzb2x2ZSwgY29uZmlnKTtcbiAgICBjb25zdCBleHByID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlTm9uTnVsbEV4cHJlc3Npb24ocmVjZWl2ZXIpLCBhc3QubmFtZSk7XG4gICAgY29uc3Qgd2hlbk51bGwgPSBjb25maWcuc3RyaWN0U2FmZU5hdmlnYXRpb25UeXBlcyA/IFVOREVGSU5FRCA6IE5VTExfQVNfQU5ZO1xuICAgIHJldHVybiBzYWZlVGVybmFyeShyZWNlaXZlciwgZXhwciwgd2hlbk51bGwpO1xuICB9IGVsc2UgaWYgKGFzdCBpbnN0YW5jZW9mIFNhZmVNZXRob2RDYWxsKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBhc3RUb1R5cGVzY3JpcHQoYXN0LnJlY2VpdmVyLCBtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIFNhZmVQcm9wZXJ0eVJlYWQgYWJvdmUgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBuZWVkIGZvciB0aGUgbm9uLW51bGxcbiAgICAvLyBhc3NlcnRpb24gaGVyZS5cbiAgICBjb25zdCBtZXRob2QgPSB0cy5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyh0cy5jcmVhdGVOb25OdWxsRXhwcmVzc2lvbihyZWNlaXZlciksIGFzdC5uYW1lKTtcbiAgICBjb25zdCBhcmdzID0gYXN0LmFyZ3MubWFwKGV4cHIgPT4gYXN0VG9UeXBlc2NyaXB0KGV4cHIsIG1heWJlUmVzb2x2ZSwgY29uZmlnKSk7XG4gICAgY29uc3QgZXhwciA9IHRzLmNyZWF0ZUNhbGwobWV0aG9kLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIGNvbnN0IHdoZW5OdWxsID0gY29uZmlnLnN0cmljdFNhZmVOYXZpZ2F0aW9uVHlwZXMgPyBVTkRFRklORUQgOiBOVUxMX0FTX0FOWTtcbiAgICByZXR1cm4gc2FmZVRlcm5hcnkocmVjZWl2ZXIsIGV4cHIsIHdoZW5OdWxsKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbm9kZSB0eXBlOiAke09iamVjdC5nZXRQcm90b3R5cGVPZihhc3QpLmNvbnN0cnVjdG9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBgQVNUYCBleHByZXNzaW9ucyBpbnRvIGEgc2luZ2xlIGB0cy5FeHByZXNzaW9uYCwgYnkgY29udmVydGluZyB0aGVtIGFsbFxuICogYW5kIHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy5cbiAqL1xuZnVuY3Rpb24gYXN0QXJyYXlUb0V4cHJlc3Npb24oXG4gICAgYXN0QXJyYXk6IEFTVFtdLCBtYXliZVJlc29sdmU6IChhc3Q6IEFTVCkgPT4gdHMuRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgY29uZmlnOiBUeXBlQ2hlY2tpbmdDb25maWcpOiB0cy5FeHByZXNzaW9uIHtcbiAgLy8gUmVkdWNlIHRoZSBgYXN0c2AgYXJyYXkgaW50byBhIGB0cy5FeHByZXNzaW9uYC4gTXVsdGlwbGUgZXhwcmVzc2lvbnMgYXJlIGNvbWJpbmVkIGludG8gYVxuICAvLyBgdHMuQmluYXJ5RXhwcmVzc2lvbmAgd2l0aCBhIGNvbW1hIHNlcGFyYXRvci4gRmlyc3QgbWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IGFycmF5LCBhc1xuICAvLyBpdCB3aWxsIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgcmVkdWN0aW9uLlxuICBjb25zdCBhc3RzID0gYXN0QXJyYXkuc2xpY2UoKTtcbiAgcmV0dXJuIGFzdHMucmVkdWNlKFxuICAgICAgKGxocywgYXN0KSA9PiB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICAgICAgbGhzLCB0cy5TeW50YXhLaW5kLkNvbW1hVG9rZW4sIGFzdFRvVHlwZXNjcmlwdChhc3QsIG1heWJlUmVzb2x2ZSwgY29uZmlnKSksXG4gICAgICBhc3RUb1R5cGVzY3JpcHQoYXN0cy5wb3AoKSAhLCBtYXliZVJlc29sdmUsIGNvbmZpZykpO1xufVxuXG5mdW5jdGlvbiBzYWZlVGVybmFyeShcbiAgICBsaHM6IHRzLkV4cHJlc3Npb24sIHdoZW5Ob3ROdWxsOiB0cy5FeHByZXNzaW9uLCB3aGVuTnVsbDogdHMuRXhwcmVzc2lvbik6IHRzLkV4cHJlc3Npb24ge1xuICBjb25zdCBub3ROdWxsQ29tcCA9IHRzLmNyZWF0ZUJpbmFyeShsaHMsIHRzLlN5bnRheEtpbmQuRXhjbGFtYXRpb25FcXVhbHNUb2tlbiwgdHMuY3JlYXRlTnVsbCgpKTtcbiAgY29uc3QgdGVybmFyeSA9IHRzLmNyZWF0ZUNvbmRpdGlvbmFsKG5vdE51bGxDb21wLCB3aGVuTm90TnVsbCwgd2hlbk51bGwpO1xuICByZXR1cm4gdHMuY3JlYXRlUGFyZW4odGVybmFyeSk7XG59XG4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy9leHByZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsOENBQXdVO0lBQ3hVLCtCQUFpQztJQUlqQyxJQUFNLFdBQVcsR0FDYixFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELElBQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUF3QjtRQUNoRCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUM5QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNsQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7UUFDekMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQztRQUM1QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUM7UUFDOUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFD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RyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNqRixPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDSCxvQkFBQztJQUFELENBQUMsQUF4SUQsSUF3SUM7SUFFRCxTQUFTLFdBQVcsQ0FDaEIsR0FBa0IsRUFBRSxXQUEwQixFQUFFLFFBQXVCO1FBQ3pFLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEcsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekUsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNULCBBU1RXaXRoU291cmNlLCBBc3RWaXNpdG9yLCBCaW5hcnksIEJpbmRpbmdQaXBlLCBDaGFpbiwgQ29uZGl0aW9uYWwsIEZ1bmN0aW9uQ2FsbCwgSW1wbGljaXRSZWNlaXZlciwgSW50ZXJwb2xhdGlvbiwgS2V5ZWRSZWFkLCBLZXllZFdyaXRlLCBMaXRlcmFsQXJyYXksIExpdGVyYWxNYXAsIExpdGVyYWxQcmltaXRpdmUsIE1ldGhvZENhbGwsIE5vbk51bGxBc3NlcnQsIFByZWZpeE5vdCwgUHJvcGVydHlSZWFkLCBQcm9wZXJ0eVdyaXRlLCBRdW90ZSwgU2FmZU1ldGhvZENhbGwsIFNhZmVQcm9wZXJ0eVJlYWR9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1R5cGVDaGVja2luZ0NvbmZpZ30gZnJvbSAnLi9hcGknO1xuXG5jb25zdCBOVUxMX0FTX0FOWSA9XG4gICAgdHMuY3JlYXRlQXNFeHByZXNzaW9uKHRzLmNyZWF0ZU51bGwoKSwgdHMuY3JlYXRlS2V5d29yZFR5cGVOb2RlKHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCkpO1xuY29uc3QgVU5ERUZJTkVEID0gdHMuY3JlYXRlSWRlbnRpZmllcigndW5kZWZpbmVkJyk7XG5cbmNvbnN0IEJJTkFSWV9PUFMgPSBuZXcgTWFwPHN0cmluZywgdHMuU3ludGF4S2luZD4oW1xuICBbJysnLCB0cy5TeW50YXhLaW5kLlBsdXNUb2tlbl0sXG4gIFsnLScsIHRzLlN5bnRheEtpbmQuTWludXNUb2tlbl0sXG4gIFsnPCcsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbl0sXG4gIFsnPicsIHRzLlN5bnRheEtpbmQuR3JlYXRlclRoYW5Ub2tlbl0sXG4gIFsnPD0nLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuRXF1YWxzVG9rZW5dLFxuICBbJz49JywgdHMuU3ludGF4S2luZC5HcmVhdGVyVGhhbkVxdWFsc1Rva2VuXSxcbiAgWyc9PScsIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzVG9rZW5dLFxuICBbJz09PScsIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzRXF1YWxzVG9rZW5dLFxuICBbJyonLCB0cy5TeW50YXhLaW5kLkFzdGVyaXNrVG9rZW5dLFxuICBbJy8nLCB0cy5TeW50YXhLaW5kLlNsYXNoVG9rZW5dLFxuICBbJyUnLCB0cy5TeW50YXhLaW5kLlBlcmNlbnRUb2tlbl0sXG4gIFsnIT0nLCB0cy5TeW50YXhLaW5kLkV4Y2xhbWF0aW9uRXF1YWxzVG9rZW5dLFxuICBbJyE9PScsIHRzLlN5bnRheEtpbmQuRXhjbGFtYXRpb25FcXVhbHNFcXVhbHNUb2tlbl0sXG4gIFsnfHwnLCB0cy5TeW50YXhLaW5kLkJhckJhclRva2VuXSxcbiAgWycmJicsIHRzLlN5bnRheEtpbmQuQW1wZXJzYW5kQW1wZXJzYW5kVG9rZW5dLFxuICBbJyYnLCB0cy5TeW50YXhLaW5kLkFtcGVyc2FuZFRva2VuXSxcbiAgWyd8JywgdHMuU3ludGF4S2luZC5CYXJUb2tlbl0sXG5dKTtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBU1RgIHRvIFR5cGVTY3JpcHQgY29kZSBkaXJlY3RseSwgd2l0aG91dCBnb2luZyB0aHJvdWdoIGFuIGludGVybWVkaWF0ZSBgRXhwcmVzc2lvbmBcbiAqIEFTVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzdFRvVHlwZXNjcmlwdChcbiAgICBhc3Q6IEFTVCwgbWF5YmVSZXNvbHZlOiAoYXN0OiBBU1QpID0+IHRzLkV4cHJlc3Npb24gfCBudWxsLFxuICAgIGNvbmZpZzogVHlwZUNoZWNraW5nQ29uZmlnKTogdHMuRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHRyYW5zbGF0b3IgPSBuZXcgQXN0VHJhbnNsYXRvcihtYXliZVJlc29sdmUsIGNvbmZpZyk7XG4gIHJldHVybiB0cmFuc2xhdG9yLnRyYW5zbGF0ZShhc3QpO1xufVxuXG5jbGFzcyBBc3RUcmFuc2xhdG9yIGltcGxlbWVudHMgQXN0VmlzaXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBtYXliZVJlc29sdmU6IChhc3Q6IEFTVCkgPT4gdHMuRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICBwcml2YXRlIGNvbmZpZzogVHlwZUNoZWNraW5nQ29uZmlnKSB7fVxuXG4gIHRyYW5zbGF0ZShhc3Q6IEFTVCk6IHRzLkV4cHJlc3Npb24ge1xuICAgIC8vIFNraXAgb3ZlciBhbiBgQVNUV2l0aFNvdXJjZWAgYXMgaXRzIGB2aXNpdGAgbWV0aG9kIGNhbGxzIGRpcmVjdGx5IGludG8gaXRzIGFzdCdzIGB2aXNpdGAsXG4gICAgLy8gd2hpY2ggd291bGQgcHJldmVudCBhbnkgY3VzdG9tIHJlc29sdXRpb24gdGhyb3VnaCBgbWF5YmVSZXNvbHZlYCBmb3IgdGhhdCBub2RlLlxuICAgIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlKSB7XG4gICAgICBhc3QgPSBhc3QuYXN0O1xuICAgIH1cblxuICAgIC8vIEZpcnN0IGF0dGVtcHQgdG8gbGV0IGFueSBjdXN0b20gcmVzb2x1dGlvbiBsb2dpYyBwcm92aWRlIGEgdHJhbnNsYXRpb24gZm9yIHRoZSBnaXZlbiBub2RlLlxuICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5tYXliZVJlc29sdmUoYXN0KTtcbiAgICBpZiAocmVzb2x2ZWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0LnZpc2l0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnkoYXN0OiBCaW5hcnkpOiB0cy5FeHByZXNzaW9uIHtcbiAgICBjb25zdCBsaHMgPSB0aGlzLnRyYW5zbGF0ZShhc3QubGVmdCk7XG4gICAgY29uc3QgcmhzID0gdGhpcy50cmFuc2xhdGUoYXN0LnJpZ2h0KTtcbiAgICBjb25zdCBvcCA9IEJJTkFSWV9PUFMuZ2V0KGFzdC5vcGVyYXRpb24pO1xuICAgIGlmIChvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEJpbmFyeS5vcGVyYXRpb246ICR7YXN0Lm9wZXJhdGlvbn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRzLmNyZWF0ZUJpbmFyeShsaHMsIG9wIGFzIGFueSwgcmhzKTtcbiAgfVxuXG4gIHZpc2l0Q2hhaW4oYXN0OiBDaGFpbik6IG5ldmVyIHsgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpOyB9XG5cbiAgdmlzaXRDb25kaXRpb25hbChhc3Q6IENvbmRpdGlvbmFsKTogdHMuRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgY29uZEV4cHIgPSB0aGlzLnRyYW5zbGF0ZShhc3QuY29uZGl0aW9uKTtcbiAgICBjb25zdCB0cnVlRXhwciA9IHRoaXMudHJhbnNsYXRlKGFzdC50cnVlRXhwKTtcbiAgICBjb25zdCBmYWxzZUV4cHIgPSB0aGlzLnRyYW5zbGF0ZShhc3QuZmFsc2VFeHApO1xuICAgIHJldHVybiB0cy5jcmVhdGVQYXJlbih0cy5jcmVhdGVDb25kaXRpb25hbChjb25kRXhwciwgdHJ1ZUV4cHIsIGZhbHNlRXhwcikpO1xuICB9XG5cbiAgdmlzaXRGdW5jdGlvbkNhbGwoYXN0OiBGdW5jdGlvbkNhbGwpOiBuZXZlciB7IHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTsgfVxuXG4gIHZpc2l0SW1wbGljaXRSZWNlaXZlcihhc3Q6IEltcGxpY2l0UmVjZWl2ZXIpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgdmlzaXRJbnRlcnBvbGF0aW9uKGFzdDogSW50ZXJwb2xhdGlvbik6IHRzLkV4cHJlc3Npb24ge1xuICAgIC8vIEJ1aWxkIHVwIGEgY2hhaW4gb2YgYmluYXJ5ICsgb3BlcmF0aW9ucyB0byBzaW11bGF0ZSB0aGUgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgdGhlXG4gICAgLy8gaW50ZXJwb2xhdGlvbidzIGV4cHJlc3Npb25zLiBUaGUgY2hhaW4gaXMgc3RhcnRlZCB1c2luZyBhbiBhY3R1YWwgc3RyaW5nIGxpdGVyYWwgdG8gZW5zdXJlXG4gICAgLy8gdGhlIHR5cGUgaXMgaW5mZXJyZWQgYXMgJ3N0cmluZycuXG4gICAgcmV0dXJuIGFzdC5leHByZXNzaW9ucy5yZWR1Y2UoXG4gICAgICAgIChsaHMsIGFzdCkgPT4gdHMuY3JlYXRlQmluYXJ5KGxocywgdHMuU3ludGF4S2luZC5QbHVzVG9rZW4sIHRoaXMudHJhbnNsYXRlKGFzdCkpLFxuICAgICAgICB0cy5jcmVhdGVMaXRlcmFsKCcnKSk7XG4gIH1cblxuICB2aXNpdEtleWVkUmVhZChhc3Q6IEtleWVkUmVhZCk6IHRzLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IHJlY2VpdmVyID0gdGhpcy50cmFuc2xhdGUoYXN0Lm9iaik7XG4gICAgY29uc3Qga2V5ID0gdGhpcy50cmFuc2xhdGUoYXN0LmtleSk7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3MocmVjZWl2ZXIsIGtleSk7XG4gIH1cblxuICB2aXNpdEtleWVkV3JpdGUoYXN0OiBLZXllZFdyaXRlKTogbmV2ZXIgeyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7IH1cblxuICB2aXNpdExpdGVyYWxBcnJheShhc3Q6IExpdGVyYWxBcnJheSk6IHRzLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYXN0LmV4cHJlc3Npb25zLm1hcChleHByID0+IHRoaXMudHJhbnNsYXRlKGV4cHIpKTtcbiAgICByZXR1cm4gdHMuY3JlYXRlQXJyYXlMaXRlcmFsKGVsZW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0TGl0ZXJhbE1hcChhc3Q6IExpdGVyYWxNYXApOiB0cy5FeHByZXNzaW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gYXN0LmtleXMubWFwKCh7a2V5fSwgaWR4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlKGFzdC52YWx1ZXNbaWR4XSk7XG4gICAgICByZXR1cm4gdHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KHRzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoa2V5KSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0cy5jcmVhdGVPYmplY3RMaXRlcmFsKHByb3BlcnRpZXMsIHRydWUpO1xuICB9XG5cbiAgdmlzaXRMaXRlcmFsUHJpbWl0aXZlKGFzdDogTGl0ZXJhbFByaW1pdGl2ZSk6IHRzLkV4cHJlc3Npb24ge1xuICAgIGlmIChhc3QudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3VuZGVmaW5lZCcpO1xuICAgIH0gZWxzZSBpZiAoYXN0LnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHMuY3JlYXRlTnVsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHMuY3JlYXRlTGl0ZXJhbChhc3QudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwpOiB0cy5FeHByZXNzaW9uIHtcbiAgICBjb25zdCByZWNlaXZlciA9IHRoaXMudHJhbnNsYXRlKGFzdC5yZWNlaXZlcik7XG4gICAgY29uc3QgbWV0aG9kID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIGFzdC5uYW1lKTtcbiAgICBjb25zdCBhcmdzID0gYXN0LmFyZ3MubWFwKGV4cHIgPT4gdGhpcy50cmFuc2xhdGUoZXhwcikpO1xuICAgIHJldHVybiB0cy5jcmVhdGVDYWxsKG1ldGhvZCwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZpc2l0Tm9uTnVsbEFzc2VydChhc3Q6IE5vbk51bGxBc3NlcnQpOiB0cy5FeHByZXNzaW9uIHtcbiAgICBjb25zdCBleHByID0gdGhpcy50cmFuc2xhdGUoYXN0LmV4cHJlc3Npb24pO1xuICAgIHJldHVybiB0cy5jcmVhdGVOb25OdWxsRXhwcmVzc2lvbihleHByKTtcbiAgfVxuXG4gIHZpc2l0UGlwZShhc3Q6IEJpbmRpbmdQaXBlKTogbmV2ZXIgeyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7IH1cblxuICB2aXNpdFByZWZpeE5vdChhc3Q6IFByZWZpeE5vdCk6IHRzLkV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0cy5jcmVhdGVMb2dpY2FsTm90KHRoaXMudHJhbnNsYXRlKGFzdC5leHByZXNzaW9uKSk7XG4gIH1cblxuICB2aXNpdFByb3BlcnR5UmVhZChhc3Q6IFByb3BlcnR5UmVhZCk6IHRzLkV4cHJlc3Npb24ge1xuICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgcHJvcGVydHkgcmVhZCAtIGNvbnZlcnQgdGhlIHJlY2VpdmVyIHRvIGFuIGV4cHJlc3Npb24gYW5kIGVtaXQgdGhlIGNvcnJlY3RcbiAgICAvLyBUeXBlU2NyaXB0IGV4cHJlc3Npb24gdG8gcmVhZCB0aGUgcHJvcGVydHkuXG4gICAgY29uc3QgcmVjZWl2ZXIgPSB0aGlzLnRyYW5zbGF0ZShhc3QucmVjZWl2ZXIpO1xuICAgIHJldHVybiB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgYXN0Lm5hbWUpO1xuICB9XG5cbiAgdmlzaXRQcm9wZXJ0eVdyaXRlKGFzdDogUHJvcGVydHlXcml0ZSk6IG5ldmVyIHsgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpOyB9XG5cbiAgdmlzaXRRdW90ZShhc3Q6IFF1b3RlKTogbmV2ZXIgeyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7IH1cblxuICB2aXNpdFNhZmVNZXRob2RDYWxsKGFzdDogU2FmZU1ldGhvZENhbGwpOiB0cy5FeHByZXNzaW9uIHtcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gU2FmZVByb3BlcnR5UmVhZCBhYm92ZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIG5lZWQgZm9yIHRoZSBub24tbnVsbFxuICAgIC8vIGFzc2VydGlvbiBoZXJlLlxuICAgIGNvbnN0IHJlY2VpdmVyID0gdGhpcy50cmFuc2xhdGUoYXN0LnJlY2VpdmVyKTtcbiAgICBjb25zdCBtZXRob2QgPSB0cy5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyh0cy5jcmVhdGVOb25OdWxsRXhwcmVzc2lvbihyZWNlaXZlciksIGFzdC5uYW1lKTtcbiAgICBjb25zdCBhcmdzID0gYXN0LmFyZ3MubWFwKGV4cHIgPT4gdGhpcy50cmFuc2xhdGUoZXhwcikpO1xuICAgIGNvbnN0IGV4cHIgPSB0cy5jcmVhdGVDYWxsKG1ldGhvZCwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICBjb25zdCB3aGVuTnVsbCA9IHRoaXMuY29uZmlnLnN0cmljdFNhZmVOYXZpZ2F0aW9uVHlwZXMgPyBVTkRFRklORUQgOiBOVUxMX0FTX0FOWTtcbiAgICByZXR1cm4gc2FmZVRlcm5hcnkocmVjZWl2ZXIsIGV4cHIsIHdoZW5OdWxsKTtcbiAgfVxuXG4gIHZpc2l0U2FmZVByb3BlcnR5UmVhZChhc3Q6IFNhZmVQcm9wZXJ0eVJlYWQpOiB0cy5FeHByZXNzaW9uIHtcbiAgICAvLyBBIHNhZmUgcHJvcGVydHkgZXhwcmVzc2lvbiBhPy5iIHRha2VzIHRoZSBmb3JtIGAoYSAhPSBudWxsID8gYSEuYiA6IHdoZW5OdWxsKWAsIHdoZXJlXG4gICAgLy8gd2hlbk51bGwgaXMgZWl0aGVyIG9mIHR5cGUgJ2FueScgb3Igb3IgJ3VuZGVmaW5lZCcgZGVwZW5kaW5nIG9uIHN0cmljdG5lc3MuIFRoZSBub24tbnVsbFxuICAgIC8vIGFzc2VydGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiBwcmFjdGljZSAnYScgbWF5IGJlIGEgbWV0aG9kIGNhbGwgZXhwcmVzc2lvbiwgd2hpY2ggd29uJ3RcbiAgICAvLyBoYXZlIGEgbmFycm93ZWQgdHlwZSB3aGVuIHJlcGVhdGVkIGluIHRoZSB0ZXJuYXJ5IHRydWUgYnJhbmNoLlxuICAgIGNvbnN0IHJlY2VpdmVyID0gdGhpcy50cmFuc2xhdGUoYXN0LnJlY2VpdmVyKTtcbiAgICBjb25zdCBleHByID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlTm9uTnVsbEV4cHJlc3Npb24ocmVjZWl2ZXIpLCBhc3QubmFtZSk7XG4gICAgY29uc3Qgd2hlbk51bGwgPSB0aGlzLmNvbmZpZy5zdHJpY3RTYWZlTmF2aWdhdGlvblR5cGVzID8gVU5ERUZJTkVEIDogTlVMTF9BU19BTlk7XG4gICAgcmV0dXJuIHNhZmVUZXJuYXJ5KHJlY2VpdmVyLCBleHByLCB3aGVuTnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZVRlcm5hcnkoXG4gICAgbGhzOiB0cy5FeHByZXNzaW9uLCB3aGVuTm90TnVsbDogdHMuRXhwcmVzc2lvbiwgd2hlbk51bGw6IHRzLkV4cHJlc3Npb24pOiB0cy5FeHByZXNzaW9uIHtcbiAgY29uc3Qgbm90TnVsbENvbXAgPSB0cy5jcmVhdGVCaW5hcnkobGhzLCB0cy5TeW50YXhLaW5kLkV4Y2xhbWF0aW9uRXF1YWxzVG9rZW4sIHRzLmNyZWF0ZU51bGwoKSk7XG4gIGNvbnN0IHRlcm5hcnkgPSB0cy5jcmVhdGVDb25kaXRpb25hbChub3ROdWxsQ29tcCwgd2hlbk5vdE51bGwsIHdoZW5OdWxsKTtcbiAgcmV0dXJuIHRzLmNyZWF0ZVBhcmVuKHRlcm5hcnkpO1xufVxuIl19