@codeperfect/eslint-plugin 2.4.0 → 2.6.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 (163) hide show
  1. package/README.md +2 -0
  2. package/dist/application/custom-rules.d.ts +3 -0
  3. package/dist/application/custom-rules.d.ts.map +1 -1
  4. package/dist/application/custom-rules.js +6 -2
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.d.ts.map +1 -1
  7. package/dist/application/index.js +2 -2
  8. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  9. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +1 -11
  10. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +6 -14
  12. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  13. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +2 -4
  14. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts.map +1 -1
  15. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.js +4 -134
  16. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.d.ts +14 -0
  17. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.js +154 -0
  19. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +1 -1
  20. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +10 -12
  21. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  22. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +4 -11
  23. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -1
  24. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +2 -12
  25. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  26. package/dist/domain/architecture/consistent-barrel-files/rule.js +4 -3
  27. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.d.ts +14 -0
  28. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.d.ts.map +1 -0
  29. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.js +187 -0
  30. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.d.ts +26 -0
  31. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.d.ts.map +1 -0
  32. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.js +95 -0
  33. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.d.ts +32 -0
  34. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.d.ts.map +1 -0
  35. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.js +78 -0
  36. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.d.ts +18 -0
  37. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.d.ts.map +1 -0
  38. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.js +45 -0
  39. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.d.ts +34 -0
  40. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.d.ts.map +1 -0
  41. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.js +44 -0
  42. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.d.ts +59 -0
  43. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.d.ts.map +1 -0
  44. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.js +133 -0
  45. package/dist/domain/architecture/no-unused-exports/{no-unused-exports-utilities.d.ts → no-unused-exports-usage-utilities.d.ts} +2 -23
  46. package/dist/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.d.ts.map +1 -0
  47. package/dist/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.js +106 -0
  48. package/dist/domain/architecture/no-unused-exports/rule.js +4 -2
  49. package/dist/domain/core/index.d.ts +1 -0
  50. package/dist/domain/core/index.d.ts.map +1 -1
  51. package/dist/domain/core/index.js +2 -1
  52. package/dist/domain/core/no-multiple-declarators/rule-utilities.d.ts +58 -0
  53. package/dist/domain/core/no-multiple-declarators/rule-utilities.d.ts.map +1 -0
  54. package/dist/domain/core/no-multiple-declarators/rule-utilities.js +204 -0
  55. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  56. package/dist/domain/core/no-multiple-declarators/rule.js +9 -211
  57. package/dist/domain/core/no-multiple-declarators/types.js +2 -2
  58. package/dist/domain/core/no-useless-delegation/index.d.ts +2 -0
  59. package/dist/domain/core/no-useless-delegation/index.d.ts.map +1 -0
  60. package/dist/domain/core/no-useless-delegation/index.js +2 -0
  61. package/dist/domain/core/no-useless-delegation/rule.d.ts +5 -0
  62. package/dist/domain/core/no-useless-delegation/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-useless-delegation/rule.js +200 -0
  64. package/dist/domain/core/prefer-interface-types/rule-utilities.d.ts +57 -0
  65. package/dist/domain/core/prefer-interface-types/rule-utilities.d.ts.map +1 -0
  66. package/dist/domain/core/prefer-interface-types/rule-utilities.js +105 -0
  67. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  68. package/dist/domain/core/prefer-interface-types/rule.js +2 -104
  69. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.d.ts +25 -0
  70. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.d.ts.map +1 -0
  71. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.js +64 -0
  72. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts +2 -24
  73. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
  74. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +3 -65
  75. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +2 -2
  76. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +2 -2
  77. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  78. package/dist/domain/docs/no-interface-member-docs/rule.js +3 -2
  79. package/dist/domain/docs/require-example-language/examples-collect.d.ts +15 -0
  80. package/dist/domain/docs/require-example-language/examples-collect.d.ts.map +1 -0
  81. package/dist/domain/docs/require-example-language/examples-collect.js +113 -0
  82. package/dist/domain/docs/require-example-language/examples.d.ts +24 -13
  83. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
  84. package/dist/domain/docs/require-example-language/examples.js +2 -111
  85. package/dist/domain/docs/require-example-language/fixes.js +4 -4
  86. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  87. package/dist/domain/docs/require-example-language/rule.js +9 -8
  88. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
  89. package/dist/domain/docs/require-example-language/types.js +1 -1
  90. package/dist/domain/index.d.ts +1 -1
  91. package/dist/domain/index.d.ts.map +1 -1
  92. package/dist/domain/index.js +2 -2
  93. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  94. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +8 -8
  95. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -1
  96. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +10 -9
  97. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -1
  98. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +2 -5
  99. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +14 -16
  100. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +6 -4
  101. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  102. package/dist/domain/testing/aaa/analyzer.super.js +10 -8
  103. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  104. package/dist/domain/testing/assert-actual-expected-names/rule.js +21 -23
  105. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -1
  106. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +1 -1
  107. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -1
  108. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +2 -160
  109. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.d.ts +41 -0
  110. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.d.ts.map +1 -0
  111. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.js +161 -0
  112. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -1
  113. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +2 -2
  114. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts +81 -0
  115. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts.map +1 -0
  116. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.js +181 -0
  117. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  118. package/dist/domain/testing/enforce-aaa-structure/rule.js +28 -217
  119. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts +29 -0
  120. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts.map +1 -0
  121. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.js +200 -0
  122. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts +12 -0
  123. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts.map +1 -0
  124. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.js +151 -0
  125. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts +16 -0
  126. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts.map +1 -0
  127. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.js +109 -0
  128. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +1 -1
  129. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +18 -450
  130. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -1
  131. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +7 -4
  132. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -1
  133. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +7 -4
  134. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +2 -2
  135. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.d.ts +18 -0
  136. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.d.ts.map +1 -0
  137. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.js +162 -0
  138. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -1
  139. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +5 -4
  140. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.d.ts +29 -0
  141. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.d.ts.map +1 -0
  142. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.js +100 -0
  143. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -1
  144. package/dist/domain/testing/prefer-vi-mocked-import/match.js +5 -246
  145. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  146. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +18 -20
  147. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  148. package/dist/domain/testing/require-act-result-capture/rule.js +47 -21
  149. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  150. package/dist/domain/testing/require-test-companion/rule.js +2 -4
  151. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  152. package/dist/domain/testing/single-act-statement/rule.js +20 -22
  153. package/dist/index.d.ts +1 -1
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +2 -2
  156. package/dist/infrastructure/codeperfect-plugin.d.ts +2 -0
  157. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -1
  158. package/dist/infrastructure/codeperfect-plugin.js +3 -2
  159. package/dist/infrastructure/presets.d.ts.map +1 -1
  160. package/dist/infrastructure/presets.js +3 -1
  161. package/package.json +60 -69
  162. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +0 -1
  163. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +0 -612
@@ -131,4 +131,4 @@ function getPatternIdentifierCollector(pattern) {
131
131
  }
132
132
  }
133
133
  export { collectPatternIdentifiers };
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi1pZGVudGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGF0dGVybi1pZGVudGlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLE1BQU0sUUFBUSxHQUFJLE9BQStCLENBQUMsUUFJL0MsQ0FBQztJQUVKLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUNBQW1DLENBQzFDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLHlCQUF5QixDQUN0QixPQUFvQyxDQUFDLElBQUksRUFDMUMsV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1DQUFtQyxDQUMxQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4QixXQUFXLENBQUMsR0FBRyxDQUFFLE9BQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUywrQkFBK0IsQ0FDdEMsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFFBQVEsSUFBSyxPQUFnQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQXlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMseUJBQXlCLENBQ2hDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4Qix5QkFBeUIsQ0FDdEIsT0FBOEIsQ0FBQyxRQUFRLEVBQ3hDLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQ0FBb0MsQ0FDM0MsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxPQUFPLENBQUM7SUFDYixLQUFLLFdBQVcsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBdUI7SUFFdkIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sOEJBQThCLENBQUM7UUFDeEMsQ0FBQztRQUNELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sbUNBQW1DLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixPQUFPLG1DQUFtQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgcGF0dGVybiBpZGVudGlmaWVyIGNvbGxlY3RvcnMuICovXHJcbnR5cGUgUGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IgPSAoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhbiBhcnJheSBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBBcnJheSBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBcnJheVBhdHRlcm5JZGVudGlmaWVycyh7IGVsZW1lbnRzOiBbXSwgdHlwZTogXCJBcnJheVBhdHRlcm5cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFycmF5UGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgZWxlbWVudHMgPSAocGF0dGVybiBhcyBFU1RyZWUuQXJyYXlQYXR0ZXJuKS5lbGVtZW50cyBhcyAoXHJcbiAgICB8IEVTVHJlZS5QYXR0ZXJuXHJcbiAgICB8IG51bGxcclxuICAgIHwgdW5kZWZpbmVkXHJcbiAgKVtdO1xyXG5cclxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuICAgIGlmIChlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQgIT09IHZvaWQgMCkge1xyXG4gICAgICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKGVsZW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGFuIGFzc2lnbm1lbnQgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gQXNzaWdubWVudCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBc3NpZ25tZW50UGF0dGVybklkZW50aWZpZXJzKHsgbGVmdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHJpZ2h0OiB7IG5hbWU6IFwiZmFsbGJhY2tcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJBc3NpZ25tZW50UGF0dGVyblwiIH0gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuLCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKFxyXG4gICAgKHBhdHRlcm4gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuKS5sZWZ0LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYSBwbGFpbiBpZGVudGlmaWVyIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIElkZW50aWZpZXIgcGF0dGVybiB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RJZGVudGlmaWVyUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgaWRlbnRpZmllcnMuYWRkKChwYXR0ZXJuIGFzIEVTVHJlZS5JZGVudGlmaWVyKS5uYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYW4gb2JqZWN0IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIE9iamVjdCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoeyBwcm9wZXJ0aWVzOiBbXSwgdHlwZTogXCJPYmplY3RQYXR0ZXJuXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIChwYXR0ZXJuIGFzIEVTVHJlZS5PYmplY3RQYXR0ZXJuKS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkudmFsdWUsIGlkZW50aWZpZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkuYXJndW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBhbGwgaWRlbnRpZmllciBuYW1lcyBkZWNsYXJlZCBieSBhIGRlc3RydWN0dXJpbmcgb3IgaWRlbnRpZmllciBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIG5vZGUgdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IHVwZGF0ZWQgaW4gcGxhY2UuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBnZXRQYXR0ZXJuSWRlbnRpZmllckNvbGxlY3RvcihwYXR0ZXJuKShwYXR0ZXJuLCBpZGVudGlmaWVycyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGEgcmVzdCBlbGVtZW50IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFJlc3QgZWxlbWVudCB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyh7IGFyZ3VtZW50OiB7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJSZXN0RWxlbWVudFwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgICAocGF0dGVybiBhcyBFU1RyZWUuUmVzdEVsZW1lbnQpLmFyZ3VtZW50LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIElnbm9yZXMgcGF0dGVybiBraW5kcyB0aGF0IGRvIG5vdCBkZWNsYXJlIGlkZW50aWZpZXJzLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIHRvIGlnbm9yZS5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IGxlZnQgdW5jaGFuZ2VkLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycyh7IG9iamVjdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHByb3BlcnR5OiB7IG5hbWU6IFwibWVtYmVyXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiBcIk1lbWJlckV4cHJlc3Npb25cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFVuc3VwcG9ydGVkUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgdm9pZCBwYXR0ZXJuO1xyXG4gIHZvaWQgaWRlbnRpZmllcnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBpZGVudGlmaWVyIGNvbGxlY3RvciBmb3Igb25lIHN1cHBvcnRlZCBwYXR0ZXJuIGtpbmQuXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFBhdHRlcm4gd2hvc2UgY29sbGVjdG9yIGlzIG5lZWRlZC5cclxuICogQHJldHVybnMgQ29sbGVjdG9yIGZvciB0aGUgcGF0dGVybiwgd2hlbiBvbmUgZXhpc3RzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGNvbGxlY3RvciA9IGdldFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yKHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTtcclxuICogdm9pZCBjb2xsZWN0b3I7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbik6IFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yIHtcclxuICBzd2l0Y2ggKHBhdHRlcm4udHlwZSkge1xyXG4gICAgY2FzZSBcIkFycmF5UGF0dGVyblwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0QXJyYXlQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdFJlc3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0VW5zdXBwb3J0ZWRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzIH07XHJcbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi1pZGVudGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGF0dGVybi1pZGVudGlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLE1BQU0sUUFBUSxHQUFJLE9BQStCLENBQUMsUUFFL0MsQ0FBQztJQUVKLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUNBQW1DLENBQzFDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLHlCQUF5QixDQUN0QixPQUFvQyxDQUFDLElBQUksRUFDMUMsV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1DQUFtQyxDQUMxQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4QixXQUFXLENBQUMsR0FBRyxDQUFFLE9BQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUywrQkFBK0IsQ0FDdEMsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFFBQVEsSUFBSyxPQUFnQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQXlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMseUJBQXlCLENBQ2hDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4Qix5QkFBeUIsQ0FDdEIsT0FBOEIsQ0FBQyxRQUFRLEVBQ3hDLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQ0FBb0MsQ0FDM0MsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxPQUFPLENBQUM7SUFDYixLQUFLLFdBQVcsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBdUI7SUFFdkIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sOEJBQThCLENBQUM7UUFDeEMsQ0FBQztRQUNELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sbUNBQW1DLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixPQUFPLG1DQUFtQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgcGF0dGVybiBpZGVudGlmaWVyIGNvbGxlY3RvcnMuICovXHJcbnR5cGUgUGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IgPSAoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhbiBhcnJheSBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBBcnJheSBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBcnJheVBhdHRlcm5JZGVudGlmaWVycyh7IGVsZW1lbnRzOiBbXSwgdHlwZTogXCJBcnJheVBhdHRlcm5cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFycmF5UGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgZWxlbWVudHMgPSAocGF0dGVybiBhcyBFU1RyZWUuQXJyYXlQYXR0ZXJuKS5lbGVtZW50cyBhcyAoXHJcbiAgICBFU1RyZWUuUGF0dGVybiB8IG51bGwgfCB1bmRlZmluZWRcclxuICApW107XHJcblxyXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG4gICAgaWYgKGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudCAhPT0gdm9pZCAwKSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoZWxlbWVudCwgaWRlbnRpZmllcnMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYW4gYXNzaWdubWVudCBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBBc3NpZ25tZW50IHBhdHRlcm4gdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IHVwZGF0ZWQgaW4gcGxhY2UuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnMoeyBsZWZ0OiB7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgcmlnaHQ6IHsgbmFtZTogXCJmYWxsYmFja1wiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9LCB0eXBlOiBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIgfSBhcyBFU1RyZWUuQXNzaWdubWVudFBhdHRlcm4sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0QXNzaWdubWVudFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgICAocGF0dGVybiBhcyBFU1RyZWUuQXNzaWdubWVudFBhdHRlcm4pLmxlZnQsXHJcbiAgICBpZGVudGlmaWVycyxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhIHBsYWluIGlkZW50aWZpZXIgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gSWRlbnRpZmllciBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RJZGVudGlmaWVyUGF0dGVybklkZW50aWZpZXJzKHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdElkZW50aWZpZXJQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBpZGVudGlmaWVycy5hZGQoKHBhdHRlcm4gYXMgRVNUcmVlLklkZW50aWZpZXIpLm5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhbiBvYmplY3QgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gT2JqZWN0IHBhdHRlcm4gdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IHVwZGF0ZWQgaW4gcGxhY2UuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdE9iamVjdFBhdHRlcm5JZGVudGlmaWVycyh7IHByb3BlcnRpZXM6IFtdLCB0eXBlOiBcIk9iamVjdFBhdHRlcm5cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdE9iamVjdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgKHBhdHRlcm4gYXMgRVNUcmVlLk9iamVjdFBhdHRlcm4pLnByb3BlcnRpZXMpIHtcclxuICAgIGlmIChwcm9wZXJ0eS50eXBlID09PSBcIlByb3BlcnR5XCIpIHtcclxuICAgICAgY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyhwcm9wZXJ0eS52YWx1ZSwgaWRlbnRpZmllcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyhwcm9wZXJ0eS5hcmd1bWVudCwgaWRlbnRpZmllcnMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGFsbCBpZGVudGlmaWVyIG5hbWVzIGRlY2xhcmVkIGJ5IGEgZGVzdHJ1Y3R1cmluZyBvciBpZGVudGlmaWVyIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFBhdHRlcm4gbm9kZSB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGdldFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yKHBhdHRlcm4pKHBhdHRlcm4sIGlkZW50aWZpZXJzKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYSByZXN0IGVsZW1lbnQgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gUmVzdCBlbGVtZW50IHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RSZXN0UGF0dGVybklkZW50aWZpZXJzKHsgYXJndW1lbnQ6IHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9LCB0eXBlOiBcIlJlc3RFbGVtZW50XCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RSZXN0UGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICAgIChwYXR0ZXJuIGFzIEVTVHJlZS5SZXN0RWxlbWVudCkuYXJndW1lbnQsXHJcbiAgICBpZGVudGlmaWVycyxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogSWdub3JlcyBwYXR0ZXJuIGtpbmRzIHRoYXQgZG8gbm90IGRlY2xhcmUgaWRlbnRpZmllcnMuXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFBhdHRlcm4gdG8gaWdub3JlLlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgbGVmdCB1bmNoYW5nZWQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdFVuc3VwcG9ydGVkUGF0dGVybklkZW50aWZpZXJzKHsgb2JqZWN0OiB7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgcHJvcGVydHk6IHsgbmFtZTogXCJtZW1iZXJcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHR5cGU6IFwiTWVtYmVyRXhwcmVzc2lvblwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0VW5zdXBwb3J0ZWRQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICB2b2lkIHBhdHRlcm47XHJcbiAgdm9pZCBpZGVudGlmaWVycztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGlkZW50aWZpZXIgY29sbGVjdG9yIGZvciBvbmUgc3VwcG9ydGVkIHBhdHRlcm4ga2luZC5cclxuICogQHBhcmFtIHBhdHRlcm4gUGF0dGVybiB3aG9zZSBjb2xsZWN0b3IgaXMgbmVlZGVkLlxyXG4gKiBAcmV0dXJucyBDb2xsZWN0b3IgZm9yIHRoZSBwYXR0ZXJuLCB3aGVuIG9uZSBleGlzdHMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgY29sbGVjdG9yID0gZ2V0UGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IoeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0pO1xyXG4gKiB2b2lkIGNvbGxlY3RvcjtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQYXR0ZXJuSWRlbnRpZmllckNvbGxlY3RvcihcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuKTogUGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3Ige1xyXG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XHJcbiAgICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RBcnJheVBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0QXNzaWdubWVudFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RJZGVudGlmaWVyUGF0dGVybklkZW50aWZpZXJzO1xyXG4gICAgfVxyXG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdFVuc3VwcG9ydGVkUGF0dGVybklkZW50aWZpZXJzO1xyXG4gICAgfVxyXG4gICAgY2FzZSBcIk9iamVjdFBhdHRlcm5cIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdE9iamVjdFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJSZXN0RWxlbWVudFwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMgfTtcclxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"phase-purity-reporting.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAmQtD;;;;;;;;GAQG;AACH,iBAAS,2BAA2B,CAClC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAyBN;AAyED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"phase-purity-reporting.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAkFtD;;;;;;;;GAQG;AACH,iBAAS,2BAA2B,CAClC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAyBN;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { hasAssertion, isValidAssertStatement, } from "../aaa/analyzer.assertions.helpers.js";
2
2
  import { hasAsyncLogic, hasAwait, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, } from "../aaa/analyzer.classification.helpers.js";
3
3
  import { getAssertReferencedIdentifiers, isActResultAsserted, } from "./phase-purity-identifiers.js";
4
+ import { reportStatementViolations } from "./statement-purity-reporters.js";
4
5
  /**
5
6
  * Collects the phase-purity state for one analyzed statement.
6
7
  * @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
@@ -51,116 +52,6 @@ function getStatementPurityState(assertReferencedIdentifiers, statement) {
51
52
  function hasRequiredAaaSections(analysis) {
52
53
  return ["Act", "Assert"].every((phase) => analysis.sectionComments.some((sectionComment) => sectionComment.phases.includes(phase)));
53
54
  }
54
- /**
55
- * Reports violations for statements that belong to both Act and Assert.
56
- * @param context ESLint rule context.
57
- * @param statement Statement entry to report against.
58
- * @param purityState Phase-purity state for the statement.
59
- * @example
60
- * ```typescript
61
- * reportActAndAssertStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
62
- * ```
63
- */
64
- function reportActAndAssertStatement(context, statement, purityState) {
65
- if (purityState.containsMutation) {
66
- context.report({ messageId: "mutationAfterAct", node: statement.node });
67
- return;
68
- }
69
- if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
70
- context.report({ messageId: "setupAfterAct", node: statement.node });
71
- }
72
- if (purityState.containsAssertion && !purityState.isValidAssert) {
73
- context.report({ messageId: "nonAssertionInAssert", node: statement.node });
74
- }
75
- }
76
- /**
77
- * Reports Act-only phase violations for one statement.
78
- * @param context ESLint rule context.
79
- * @param statement Statement entry to report against.
80
- * @param purityState Phase-purity state for the statement.
81
- * @example
82
- * ```typescript
83
- * reportActOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
84
- * ```
85
- */
86
- function reportActOnlyStatement(context, statement, purityState) {
87
- if (purityState.containsAssertion && !purityState.allowsAssert) {
88
- context.report({
89
- messageId: "assertionOutsideAssert",
90
- node: statement.node,
91
- });
92
- }
93
- if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
94
- context.report({ messageId: "setupAfterAct", node: statement.node });
95
- }
96
- }
97
- /**
98
- * Reports violations for statements that belong to both Arrange and Act.
99
- * @param context ESLint rule context.
100
- * @param statement Statement entry to report against.
101
- * @param purityState Phase-purity state for the statement.
102
- * @example
103
- * ```typescript
104
- * reportArrangeAndActStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
105
- * ```
106
- */
107
- function reportArrangeAndActStatement(context, statement, purityState) {
108
- if (purityState.containsAssertion) {
109
- context.report({
110
- messageId: "assertionOutsideAssert",
111
- node: statement.node,
112
- });
113
- }
114
- }
115
- /**
116
- * Reports Arrange-only phase violations for one statement.
117
- * @param context ESLint rule context.
118
- * @param statement Statement entry to report against.
119
- * @param purityState Phase-purity state for the statement.
120
- * @example
121
- * ```typescript
122
- * reportArrangeOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
123
- * ```
124
- */
125
- function reportArrangeOnlyStatement(context, statement, purityState) {
126
- if (purityState.containsAssertion && !purityState.allowsAssert) {
127
- context.report({
128
- messageId: "assertionOutsideAssert",
129
- node: statement.node,
130
- });
131
- }
132
- if (purityState.containsAwait) {
133
- context.report({ messageId: "awaitOutsideAct", node: statement.node });
134
- }
135
- if (purityState.containsAsyncLogic) {
136
- context.report({ messageId: "asyncInArrange", node: statement.node });
137
- }
138
- if (purityState.isMeaningfulAct) {
139
- context.report({ messageId: "actionInArrange", node: statement.node });
140
- }
141
- }
142
- /**
143
- * Reports Assert-only phase violations for one statement.
144
- * @param context ESLint rule context.
145
- * @param statement Statement entry to report against.
146
- * @param purityState Phase-purity state for the statement.
147
- * @example
148
- * ```typescript
149
- * reportAssertOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
150
- * ```
151
- */
152
- function reportAssertOnlyStatement(context, statement, purityState) {
153
- if (purityState.containsAwait) {
154
- context.report({ messageId: "awaitOutsideAct", node: statement.node });
155
- }
156
- if (purityState.containsMutation) {
157
- context.report({ messageId: "mutationAfterAct", node: statement.node });
158
- return;
159
- }
160
- if (!purityState.isValidAssert) {
161
- context.report({ messageId: "nonAssertionInAssert", node: statement.node });
162
- }
163
- }
164
55
  /**
165
56
  * Reports all enforce-aaa-phase-purity violations for one test block.
166
57
  * @param context ESLint rule context.
@@ -189,54 +80,5 @@ function reportPhasePurityViolations(context, analysis) {
189
80
  });
190
81
  }
191
82
  }
192
- /**
193
- * Reports any phase-purity violations for one statement.
194
- * @param context ESLint rule context.
195
- * @param statement Statement entry to report against.
196
- * @param purityState Phase-purity state for the statement.
197
- * @example
198
- * ```typescript
199
- * reportStatementViolations({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
200
- * ```
201
- */
202
- function reportStatementViolations(context, statement, purityState) {
203
- if (purityState.allowsArrange &&
204
- !purityState.allowsAct &&
205
- !purityState.allowsAssert) {
206
- reportArrangeOnlyStatement(context, statement, purityState);
207
- return;
208
- }
209
- if (purityState.allowsAct &&
210
- !purityState.allowsArrange &&
211
- !purityState.allowsAssert) {
212
- reportActOnlyStatement(context, statement, purityState);
213
- return;
214
- }
215
- if (purityState.allowsAssert &&
216
- !purityState.allowsAct &&
217
- !purityState.allowsArrange) {
218
- reportAssertOnlyStatement(context, statement, purityState);
219
- return;
220
- }
221
- if (purityState.allowsArrange &&
222
- purityState.allowsAct &&
223
- !purityState.allowsAssert) {
224
- reportArrangeAndActStatement(context, statement, purityState);
225
- return;
226
- }
227
- if (purityState.allowsAct &&
228
- purityState.allowsAssert &&
229
- !purityState.allowsArrange) {
230
- reportActAndAssertStatement(context, statement, purityState);
231
- return;
232
- }
233
- if (purityState.allowsArrange &&
234
- purityState.allowsAct &&
235
- purityState.allowsAssert &&
236
- purityState.containsAssertion &&
237
- !purityState.isValidAssert) {
238
- context.report({ messageId: "nonAssertionInAssert", node: statement.node });
239
- }
240
- }
241
83
  export { reportPhasePurityViolations };
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixHQUN2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLG9CQUFvQixHQUNyQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ3BCLE1BQU0sNEJBQTRCLENBQUM7QUFzQ3BDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QiwyQkFBd0MsRUFDeEMsU0FBa0Q7SUFFbEQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxNQUFN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LENBQUMsYUFBYTtRQUN6QixXQUFXLENBQUMsU0FBUztRQUNyQixXQUFXLENBQUMsWUFBWTtRQUN4QixXQUFXLENBQUMsaUJBQWlCO1FBQzdCLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFDMUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYS90eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICBoYXNBc3NlcnRpb24sXHJcbiAgaXNWYWxpZEFzc2VydFN0YXRlbWVudCxcclxufSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmFzc2VydGlvbnMuaGVscGVyc1wiO1xyXG5pbXBvcnQge1xyXG4gIGhhc0FzeW5jTG9naWMsXHJcbiAgaGFzQXdhaXQsXHJcbiAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdCxcclxuICBoYXNNdXRhdGlvbixcclxuICBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQsXHJcbiAgaXNTZXR1cExpa2VTdGF0ZW1lbnQsXHJcbn0gZnJvbSBcIi4uL2FhYS9hbmFseXplci5jbGFzc2lmaWNhdGlvbi5oZWxwZXJzXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2V0QXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLFxyXG4gIGlzQWN0UmVzdWx0QXNzZXJ0ZWQsXHJcbn0gZnJvbSBcIi4vcGhhc2UtcHVyaXR5LWlkZW50aWZpZXJzXCI7XHJcblxyXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXHJcbmludGVyZmFjZSBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSB7XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFjdC4gKi9cclxuICBhbGxvd3NBY3Q6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgYmVsb25ncyB0byBBcnJhbmdlLiAqL1xyXG4gIGFsbG93c0FycmFuZ2U6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgYmVsb25ncyB0byBBc3NlcnQuICovXHJcbiAgYWxsb3dzQXNzZXJ0OiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIGFuIGFzc2VydGlvbi4gKi9cclxuICBjb250YWluc0Fzc2VydGlvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb250YWlucyBhc3luYyBsb2dpYy4gKi9cclxuICBjb250YWluc0FzeW5jTG9naWM6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgYW4gYXdhaXQgZXhwcmVzc2lvbi4gKi9cclxuICBjb250YWluc0F3YWl0OiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IG11dGF0ZXMgc3RhdGUuICovXHJcbiAgY29udGFpbnNNdXRhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBwZXJmb3JtcyBtZWFuaW5nZnVsIEFjdCB3b3JrLiAqL1xyXG4gIGlzTWVhbmluZ2Z1bEFjdDogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb3VudHMgYXMgbWVhbmluZ2Z1bCBBY3QgY29udGVudCBvdmVyYWxsLiAqL1xyXG4gIGlzTWVhbmluZ2Z1bEFjdENvbnRlbnQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgbG9va3MgbGlrZSBzZXR1cC4gKi9cclxuICBpc1NldHVwTGlrZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBpcyBhIHZhbGlkIGFzc2VydC1waGFzZSBzdGF0ZW1lbnQuICovXHJcbiAgaXNWYWxpZEFzc2VydDogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIHRoZSBwaGFzZS1wdXJpdHkgc3RhdGUgZm9yIG9uZSBhbmFseXplZCBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMgUmVmZXJlbmNlZCBpZGVudGlmaWVycyBjb2xsZWN0ZWQgZnJvbSBBc3NlcnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIGNsYXNzaWZ5LlxyXG4gKiBAcmV0dXJucyBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShuZXcgU2V0PHN0cmluZz4oKSwgeyBub2RlOiB7IHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIH0gYXMgbmV2ZXIsIHBoYXNlczogW10gfSk7XHJcbiAqIHZvaWQgc3RhdGU7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50UHVyaXR5U3RhdGUoXHJcbiAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4pOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSB7XHJcbiAgY29uc3QgYWxsb3dzQXJyYW5nZSA9IHN0YXRlbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpO1xyXG4gIGNvbnN0IGFsbG93c0FjdCA9IHN0YXRlbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBY3RcIik7XHJcbiAgY29uc3QgYWxsb3dzQXNzZXJ0ID0gc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFzc2VydFwiKTtcclxuICBjb25zdCBjb250YWluc0Fzc2VydGlvbiA9IGhhc0Fzc2VydGlvbihzdGF0ZW1lbnQubm9kZSk7XHJcbiAgY29uc3QgY29udGFpbnNBc3luY0xvZ2ljID0gaGFzQXN5bmNMb2dpYyhzdGF0ZW1lbnQubm9kZSk7XHJcbiAgY29uc3QgY29udGFpbnNBd2FpdCA9IGhhc0F3YWl0KHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBjb250YWluc011dGF0aW9uID0gaGFzTXV0YXRpb24oc3RhdGVtZW50Lm5vZGUpO1xyXG4gIGNvbnN0IGlzTWVhbmluZ2Z1bEFjdCA9IGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudChzdGF0ZW1lbnQubm9kZSk7XHJcbiAgY29uc3QgaXNNZWFuaW5nZnVsQWN0Q29udGVudCA9XHJcbiAgICBpc01lYW5pbmdmdWxBY3QgfHxcclxuICAgIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQoc3RhdGVtZW50Lm5vZGUpIHx8XHJcbiAgICBpc0FjdFJlc3VsdEFzc2VydGVkKGFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycywgc3RhdGVtZW50Lm5vZGUpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgYWxsb3dzQWN0LFxyXG4gICAgYWxsb3dzQXJyYW5nZSxcclxuICAgIGFsbG93c0Fzc2VydCxcclxuICAgIGNvbnRhaW5zQXNzZXJ0aW9uLFxyXG4gICAgY29udGFpbnNBc3luY0xvZ2ljLFxyXG4gICAgY29udGFpbnNBd2FpdCxcclxuICAgIGNvbnRhaW5zTXV0YXRpb24sXHJcbiAgICBpc01lYW5pbmdmdWxBY3QsXHJcbiAgICBpc01lYW5pbmdmdWxBY3RDb250ZW50LFxyXG4gICAgaXNTZXR1cExpa2U6IGlzU2V0dXBMaWtlU3RhdGVtZW50KHN0YXRlbWVudC5ub2RlKSxcclxuICAgIGlzVmFsaWRBc3NlcnQ6IGlzVmFsaWRBc3NlcnRTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYW5hbHl6ZWQgdGVzdCBibG9jayBkZWNsYXJlcyB0aGUgQWN0IGFuZCBBc3NlcnQgc2VjdGlvbnMuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIEFjdCBhbmQgQXNzZXJ0IGFyZSBib3RoIHByZXNlbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgY29tcGxldGUgPSBoYXNSZXF1aXJlZEFhYVNlY3Rpb25zKHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcclxuICogdm9pZCBjb21wbGV0ZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNSZXF1aXJlZEFhYVNlY3Rpb25zKGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBbXCJBY3RcIiwgXCJBc3NlcnRcIl0uZXZlcnkoKHBoYXNlKSA9PlxyXG4gICAgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLnNvbWUoKHNlY3Rpb25Db21tZW50KSA9PlxyXG4gICAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMocGhhc2UgYXMgbmV2ZXIpLFxyXG4gICAgKSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUmVwb3J0cyB2aW9sYXRpb25zIGZvciBzdGF0ZW1lbnRzIHRoYXQgYmVsb25nIHRvIGJvdGggQWN0IGFuZCBBc3NlcnQuXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIHJlcG9ydCBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIHJlcG9ydEFjdEFuZEFzc2VydFN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydEFjdEFuZEFzc2VydFN0YXRlbWVudChcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNNdXRhdGlvbikge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibXV0YXRpb25BZnRlckFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5pc1NldHVwTGlrZSAmJiAhcHVyaXR5U3RhdGUuaXNNZWFuaW5nZnVsQWN0Q29udGVudCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwic2V0dXBBZnRlckFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0Fzc2VydGlvbiAmJiAhcHVyaXR5U3RhdGUuaXNWYWxpZEFzc2VydCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibm9uQXNzZXJ0aW9uSW5Bc3NlcnRcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVwb3J0cyBBY3Qtb25seSBwaGFzZSB2aW9sYXRpb25zIGZvciBvbmUgc3RhdGVtZW50LlxyXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IFN0YXRlbWVudCBlbnRyeSB0byByZXBvcnQgYWdhaW5zdC5cclxuICogQHBhcmFtIHB1cml0eVN0YXRlIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiByZXBvcnRBY3RPbmx5U3RhdGVtZW50KHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBub2RlOiB7fSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9LCB7fSBhcyBuZXZlcik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gcmVwb3J0QWN0T25seVN0YXRlbWVudChcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiYgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwiYXNzZXJ0aW9uT3V0c2lkZUFzc2VydFwiLFxyXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmlzU2V0dXBMaWtlICYmICFwdXJpdHlTdGF0ZS5pc01lYW5pbmdmdWxBY3RDb250ZW50KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJzZXR1cEFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcG9ydHMgdmlvbGF0aW9ucyBmb3Igc3RhdGVtZW50cyB0aGF0IGJlbG9uZyB0byBib3RoIEFycmFuZ2UgYW5kIEFjdC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXJyYW5nZUFuZEFjdFN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydEFycmFuZ2VBbmRBY3RTdGF0ZW1lbnQoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXNzZXJ0aW9uKSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7XHJcbiAgICAgIG1lc3NhZ2VJZDogXCJhc3NlcnRpb25PdXRzaWRlQXNzZXJ0XCIsXHJcbiAgICAgIG5vZGU6IHN0YXRlbWVudC5ub2RlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVwb3J0cyBBcnJhbmdlLW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiByZXBvcnRBcnJhbmdlT25seVN0YXRlbWVudChcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiYgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwiYXNzZXJ0aW9uT3V0c2lkZUFzc2VydFwiLFxyXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0FzeW5jTG9naWMpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImFzeW5jSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwiYWN0aW9uSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcG9ydHMgQXNzZXJ0LW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXNzZXJ0T25seVN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydEFzc2VydE9ubHlTdGF0ZW1lbnQoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc011dGF0aW9uKSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJtdXRhdGlvbkFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFwdXJpdHlTdGF0ZS5pc1ZhbGlkQXNzZXJ0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGFsbCBlbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHRlc3QgYmxvY2suXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiByZXBvcnRQaGFzZVB1cml0eVZpb2xhdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcclxuKTogdm9pZCB7XHJcbiAgaWYgKCFoYXNSZXF1aXJlZEFhYVNlY3Rpb25zKGFuYWx5c2lzKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgbGV0IGhhc01lYW5pbmdmdWxBY3QgPSBmYWxzZTtcclxuICBjb25zdCBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMgPSBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMoYW5hbHlzaXMpO1xyXG5cclxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbmFseXNpcy5zdGF0ZW1lbnRzKSB7XHJcbiAgICBjb25zdCBwdXJpdHlTdGF0ZSA9IGdldFN0YXRlbWVudFB1cml0eVN0YXRlKFxyXG4gICAgICBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMsXHJcbiAgICAgIHN0YXRlbWVudCxcclxuICAgICk7XHJcblxyXG4gICAgaGFzTWVhbmluZ2Z1bEFjdCB8fD1cclxuICAgICAgcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmIHB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdENvbnRlbnQ7XHJcbiAgICByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zKGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFoYXNNZWFuaW5nZnVsQWN0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7XHJcbiAgICAgIG1lc3NhZ2VJZDogXCJtaXNzaW5nTWVhbmluZ2Z1bEFjdFwiLFxyXG4gICAgICBub2RlOiBhbmFseXNpcy5jYWxsRXhwcmVzc2lvbixcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcG9ydHMgYW55IHBoYXNlLXB1cml0eSB2aW9sYXRpb25zIGZvciBvbmUgc3RhdGVtZW50LlxyXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IFN0YXRlbWVudCBlbnRyeSB0byByZXBvcnQgYWdhaW5zdC5cclxuICogQHBhcmFtIHB1cml0eVN0YXRlIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBub2RlOiB7fSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9LCB7fSBhcyBuZXZlcik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAoXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlICYmXHJcbiAgICAhcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXHJcbiAgICAhcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0XHJcbiAgKSB7XHJcbiAgICByZXBvcnRBcnJhbmdlT25seVN0YXRlbWVudChjb250ZXh0LCBzdGF0ZW1lbnQsIHB1cml0eVN0YXRlKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIHB1cml0eVN0YXRlLmFsbG93c0FjdCAmJlxyXG4gICAgIXB1cml0eVN0YXRlLmFsbG93c0FycmFuZ2UgJiZcclxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnRcclxuICApIHtcclxuICAgIHJlcG9ydEFjdE9ubHlTdGF0ZW1lbnQoY29udGV4dCwgc3RhdGVtZW50LCBwdXJpdHlTdGF0ZSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQgJiZcclxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBY3QgJiZcclxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlXHJcbiAgKSB7XHJcbiAgICByZXBvcnRBc3NlcnRPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQXJyYW5nZSAmJlxyXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXHJcbiAgICAhcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0XHJcbiAgKSB7XHJcbiAgICByZXBvcnRBcnJhbmdlQW5kQWN0U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQgJiZcclxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlXHJcbiAgKSB7XHJcbiAgICByZXBvcnRBY3RBbmRBc3NlcnRTdGF0ZW1lbnQoY29udGV4dCwgc3RhdGVtZW50LCBwdXJpdHlTdGF0ZSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlICYmXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBY3QgJiZcclxuICAgIHB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCAmJlxyXG4gICAgcHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiZcclxuICAgICFwdXJpdHlTdGF0ZS5pc1ZhbGlkQXNzZXJ0XHJcbiAgKSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyB9O1xyXG4iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixHQUN2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLG9CQUFvQixHQUNyQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ3BCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFekU7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsdUJBQXVCLENBQzlCLDJCQUF3QyxFQUN4QyxTQUFrRDtJQUVsRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sZUFBZSxHQUFHLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxNQUFNLHNCQUFzQixHQUMxQixlQUFlO1FBQ2Ysc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUN0QyxtQkFBbUIsQ0FBQywyQkFBMkIsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkUsT0FBTztRQUNMLFNBQVM7UUFDVCxhQUFhO1FBQ2IsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2pELGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3RELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxRQUEyQjtJQUN6RCxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3ZDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDL0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYyxDQUFDLENBQy9DLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLE9BQXlCLEVBQ3pCLFFBQTJCO0lBRTNCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FDekMsMkJBQTJCLEVBQzNCLFNBQVMsQ0FDVixDQUFDO1FBRUYsZ0JBQWdCO1lBQ2QsV0FBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsc0JBQXNCLENBQUM7UUFDOUQseUJBQXlCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLFNBQVMsRUFBRSxzQkFBc0I7WUFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXRlbWVudFB1cml0eVN0YXRlIH0gZnJvbSBcIi4vc3RhdGVtZW50LXB1cml0eS1yZXBvcnRlcnNcIjtcblxuaW1wb3J0IHtcbiAgaGFzQXNzZXJ0aW9uLFxuICBpc1ZhbGlkQXNzZXJ0U3RhdGVtZW50LFxufSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmFzc2VydGlvbnMuaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgaGFzQXN5bmNMb2dpYyxcbiAgaGFzQXdhaXQsXG4gIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQsXG4gIGhhc011dGF0aW9uLFxuICBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQsXG4gIGlzU2V0dXBMaWtlU3RhdGVtZW50LFxufSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmNsYXNzaWZpY2F0aW9uLmhlbHBlcnNcIjtcbmltcG9ydCB7XG4gIGdldEFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyxcbiAgaXNBY3RSZXN1bHRBc3NlcnRlZCxcbn0gZnJvbSBcIi4vcGhhc2UtcHVyaXR5LWlkZW50aWZpZXJzXCI7XG5pbXBvcnQgeyByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zIH0gZnJvbSBcIi4vc3RhdGVtZW50LXB1cml0eS1yZXBvcnRlcnNcIjtcblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgcGhhc2UtcHVyaXR5IHN0YXRlIGZvciBvbmUgYW5hbHl6ZWQgc3RhdGVtZW50LlxuICogQHBhcmFtIGFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyBSZWZlcmVuY2VkIGlkZW50aWZpZXJzIGNvbGxlY3RlZCBmcm9tIEFzc2VydC5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIGNsYXNzaWZ5LlxuICogQHJldHVybnMgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGVtZW50UHVyaXR5U3RhdGUobmV3IFNldDxzdHJpbmc+KCksIHsgbm9kZTogeyB0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0pO1xuICogdm9pZCBzdGF0ZTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShcbiAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcbik6IFN0YXRlbWVudFB1cml0eVN0YXRlIHtcbiAgY29uc3QgYWxsb3dzQXJyYW5nZSA9IHN0YXRlbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpO1xuICBjb25zdCBhbGxvd3NBY3QgPSBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQWN0XCIpO1xuICBjb25zdCBhbGxvd3NBc3NlcnQgPSBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXNzZXJ0XCIpO1xuICBjb25zdCBjb250YWluc0Fzc2VydGlvbiA9IGhhc0Fzc2VydGlvbihzdGF0ZW1lbnQubm9kZSk7XG4gIGNvbnN0IGNvbnRhaW5zQXN5bmNMb2dpYyA9IGhhc0FzeW5jTG9naWMoc3RhdGVtZW50Lm5vZGUpO1xuICBjb25zdCBjb250YWluc0F3YWl0ID0gaGFzQXdhaXQoc3RhdGVtZW50Lm5vZGUpO1xuICBjb25zdCBjb250YWluc011dGF0aW9uID0gaGFzTXV0YXRpb24oc3RhdGVtZW50Lm5vZGUpO1xuICBjb25zdCBpc01lYW5pbmdmdWxBY3QgPSBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpO1xuICBjb25zdCBpc01lYW5pbmdmdWxBY3RDb250ZW50ID1cbiAgICBpc01lYW5pbmdmdWxBY3QgfHxcbiAgICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0KHN0YXRlbWVudC5ub2RlKSB8fFxuICAgIGlzQWN0UmVzdWx0QXNzZXJ0ZWQoYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLCBzdGF0ZW1lbnQubm9kZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvd3NBY3QsXG4gICAgYWxsb3dzQXJyYW5nZSxcbiAgICBhbGxvd3NBc3NlcnQsXG4gICAgY29udGFpbnNBc3NlcnRpb24sXG4gICAgY29udGFpbnNBc3luY0xvZ2ljLFxuICAgIGNvbnRhaW5zQXdhaXQsXG4gICAgY29udGFpbnNNdXRhdGlvbixcbiAgICBpc01lYW5pbmdmdWxBY3QsXG4gICAgaXNNZWFuaW5nZnVsQWN0Q29udGVudCxcbiAgICBpc1NldHVwTGlrZTogaXNTZXR1cExpa2VTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpLFxuICAgIGlzVmFsaWRBc3NlcnQ6IGlzVmFsaWRBc3NlcnRTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpLFxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhbmFseXplZCB0ZXN0IGJsb2NrIGRlY2xhcmVzIHRoZSBBY3QgYW5kIEFzc2VydCBzZWN0aW9ucy5cbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBBY3QgYW5kIEFzc2VydCBhcmUgYm90aCBwcmVzZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbXBsZXRlID0gaGFzUmVxdWlyZWRBYWFTZWN0aW9ucyh7IHNlY3Rpb25Db21tZW50czogW10gfSBhcyBuZXZlcik7XG4gKiB2b2lkIGNvbXBsZXRlO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGhhc1JlcXVpcmVkQWFhU2VjdGlvbnMoYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzKTogYm9vbGVhbiB7XG4gIHJldHVybiBbXCJBY3RcIiwgXCJBc3NlcnRcIl0uZXZlcnkoKHBoYXNlKSA9PlxuICAgIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5zb21lKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5pbmNsdWRlcyhwaGFzZSBhcyBuZXZlciksXG4gICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIGFsbCBlbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHRlc3QgYmxvY2suXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0UGhhc2VQdXJpdHlWaW9sYXRpb25zKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgaWYgKCFoYXNSZXF1aXJlZEFhYVNlY3Rpb25zKGFuYWx5c2lzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBoYXNNZWFuaW5nZnVsQWN0ID0gZmFsc2U7XG4gIGNvbnN0IGFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyA9IGdldEFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyhhbmFseXNpcyk7XG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYW5hbHlzaXMuc3RhdGVtZW50cykge1xuICAgIGNvbnN0IHB1cml0eVN0YXRlID0gZ2V0U3RhdGVtZW50UHVyaXR5U3RhdGUoXG4gICAgICBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMsXG4gICAgICBzdGF0ZW1lbnQsXG4gICAgKTtcblxuICAgIGhhc01lYW5pbmdmdWxBY3QgfHw9XG4gICAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBY3QgJiYgcHVyaXR5U3RhdGUuaXNNZWFuaW5nZnVsQWN0Q29udGVudDtcbiAgICByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zKGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xuICB9XG5cbiAgaWYgKCFoYXNNZWFuaW5nZnVsQWN0KSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbWVzc2FnZUlkOiBcIm1pc3NpbmdNZWFuaW5nZnVsQWN0XCIsXG4gICAgICBub2RlOiBhbmFseXNpcy5jYWxsRXhwcmVzc2lvbixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgeyByZXBvcnRQaGFzZVB1cml0eVZpb2xhdGlvbnMgfTtcbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import type { Rule } from "eslint";
2
+ import type { TestBlockAnalysis } from "../aaa/types.js";
3
+ /** Phase-purity state for one analyzed statement. */
4
+ interface StatementPurityState {
5
+ /** Whether the statement belongs to Act. */
6
+ allowsAct: boolean;
7
+ /** Whether the statement belongs to Arrange. */
8
+ allowsArrange: boolean;
9
+ /** Whether the statement belongs to Assert. */
10
+ allowsAssert: boolean;
11
+ /** Whether the statement contains an assertion. */
12
+ containsAssertion: boolean;
13
+ /** Whether the statement contains async logic. */
14
+ containsAsyncLogic: boolean;
15
+ /** Whether the statement contains an await expression. */
16
+ containsAwait: boolean;
17
+ /** Whether the statement mutates state. */
18
+ containsMutation: boolean;
19
+ /** Whether the statement performs meaningful Act work. */
20
+ isMeaningfulAct: boolean;
21
+ /** Whether the statement counts as meaningful Act content overall. */
22
+ isMeaningfulActContent: boolean;
23
+ /** Whether the statement looks like setup. */
24
+ isSetupLike: boolean;
25
+ /** Whether the statement is a valid assert-phase statement. */
26
+ isValidAssert: boolean;
27
+ }
28
+ /**
29
+ * Reports any phase-purity violations for one statement.
30
+ * @param context ESLint rule context.
31
+ * @param statement Statement entry to report against.
32
+ * @param purityState Phase-purity state for the statement.
33
+ * @example
34
+ * ```typescript
35
+ * reportStatementViolations({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
36
+ * ```
37
+ */
38
+ declare function reportStatementViolations(context: Rule.RuleContext, statement: TestBlockAnalysis["statements"][number], purityState: StatementPurityState): void;
39
+ export type { StatementPurityState };
40
+ export { reportStatementViolations };
41
+ //# sourceMappingURL=statement-purity-reporters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statement-purity-reporters.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,qDAAqD;AACrD,UAAU,oBAAoB;IAC5B,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;IAEnB,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;IAEtB,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC;IAE3B,kDAAkD;IAClD,kBAAkB,EAAE,OAAO,CAAC;IAE5B,0DAA0D;IAC1D,aAAa,EAAE,OAAO,CAAC;IAEvB,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAE1B,0DAA0D;IAC1D,eAAe,EAAE,OAAO,CAAC;IAEzB,sEAAsE;IACtE,sBAAsB,EAAE,OAAO,CAAC;IAEhC,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IAErB,+DAA+D;IAC/D,aAAa,EAAE,OAAO,CAAC;CACxB;AAiJD;;;;;;;;;GASG;AACH,iBAAS,yBAAyB,CAChC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,SAAS,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAClD,WAAW,EAAE,oBAAoB,GAChC,IAAI,CAuDN;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Reports violations for statements that belong to both Act and Assert.
3
+ * @param context ESLint rule context.
4
+ * @param statement Statement entry to report against.
5
+ * @param purityState Phase-purity state for the statement.
6
+ * @example
7
+ * ```typescript
8
+ * reportActAndAssertStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
9
+ * ```
10
+ */
11
+ function reportActAndAssertStatement(context, statement, purityState) {
12
+ if (purityState.containsMutation) {
13
+ context.report({ messageId: "mutationAfterAct", node: statement.node });
14
+ return;
15
+ }
16
+ if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
17
+ context.report({ messageId: "setupAfterAct", node: statement.node });
18
+ }
19
+ if (purityState.containsAssertion && !purityState.isValidAssert) {
20
+ context.report({ messageId: "nonAssertionInAssert", node: statement.node });
21
+ }
22
+ }
23
+ /**
24
+ * Reports Act-only phase violations for one statement.
25
+ * @param context ESLint rule context.
26
+ * @param statement Statement entry to report against.
27
+ * @param purityState Phase-purity state for the statement.
28
+ * @example
29
+ * ```typescript
30
+ * reportActOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
31
+ * ```
32
+ */
33
+ function reportActOnlyStatement(context, statement, purityState) {
34
+ if (purityState.containsAssertion && !purityState.allowsAssert) {
35
+ context.report({
36
+ messageId: "assertionOutsideAssert",
37
+ node: statement.node,
38
+ });
39
+ }
40
+ if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
41
+ context.report({ messageId: "setupAfterAct", node: statement.node });
42
+ }
43
+ }
44
+ /**
45
+ * Reports violations for statements that belong to both Arrange and Act.
46
+ * @param context ESLint rule context.
47
+ * @param statement Statement entry to report against.
48
+ * @param purityState Phase-purity state for the statement.
49
+ * @example
50
+ * ```typescript
51
+ * reportArrangeAndActStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
52
+ * ```
53
+ */
54
+ function reportArrangeAndActStatement(context, statement, purityState) {
55
+ if (purityState.containsAssertion) {
56
+ context.report({
57
+ messageId: "assertionOutsideAssert",
58
+ node: statement.node,
59
+ });
60
+ }
61
+ }
62
+ /**
63
+ * Reports Arrange-only phase violations for one statement.
64
+ * @param context ESLint rule context.
65
+ * @param statement Statement entry to report against.
66
+ * @param purityState Phase-purity state for the statement.
67
+ * @example
68
+ * ```typescript
69
+ * reportArrangeOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
70
+ * ```
71
+ */
72
+ function reportArrangeOnlyStatement(context, statement, purityState) {
73
+ if (purityState.containsAssertion && !purityState.allowsAssert) {
74
+ context.report({
75
+ messageId: "assertionOutsideAssert",
76
+ node: statement.node,
77
+ });
78
+ }
79
+ if (purityState.containsAwait) {
80
+ context.report({ messageId: "awaitOutsideAct", node: statement.node });
81
+ }
82
+ if (purityState.containsAsyncLogic) {
83
+ context.report({ messageId: "asyncInArrange", node: statement.node });
84
+ }
85
+ if (purityState.isMeaningfulAct) {
86
+ context.report({ messageId: "actionInArrange", node: statement.node });
87
+ }
88
+ }
89
+ /**
90
+ * Reports Assert-only phase violations for one statement.
91
+ * @param context ESLint rule context.
92
+ * @param statement Statement entry to report against.
93
+ * @param purityState Phase-purity state for the statement.
94
+ * @example
95
+ * ```typescript
96
+ * reportAssertOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
97
+ * ```
98
+ */
99
+ function reportAssertOnlyStatement(context, statement, purityState) {
100
+ if (purityState.containsAwait) {
101
+ context.report({ messageId: "awaitOutsideAct", node: statement.node });
102
+ }
103
+ if (purityState.containsMutation) {
104
+ context.report({ messageId: "mutationAfterAct", node: statement.node });
105
+ return;
106
+ }
107
+ if (!purityState.isValidAssert) {
108
+ context.report({ messageId: "nonAssertionInAssert", node: statement.node });
109
+ }
110
+ }
111
+ /**
112
+ * Reports any phase-purity violations for one statement.
113
+ * @param context ESLint rule context.
114
+ * @param statement Statement entry to report against.
115
+ * @param purityState Phase-purity state for the statement.
116
+ * @example
117
+ * ```typescript
118
+ * reportStatementViolations({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
119
+ * ```
120
+ */
121
+ function reportStatementViolations(context, statement, purityState) {
122
+ if (purityState.allowsArrange &&
123
+ !purityState.allowsAct &&
124
+ !purityState.allowsAssert) {
125
+ reportArrangeOnlyStatement(context, statement, purityState);
126
+ return;
127
+ }
128
+ if (purityState.allowsAct &&
129
+ !purityState.allowsArrange &&
130
+ !purityState.allowsAssert) {
131
+ reportActOnlyStatement(context, statement, purityState);
132
+ return;
133
+ }
134
+ if (purityState.allowsAssert &&
135
+ !purityState.allowsAct &&
136
+ !purityState.allowsArrange) {
137
+ reportAssertOnlyStatement(context, statement, purityState);
138
+ return;
139
+ }
140
+ if (purityState.allowsArrange &&
141
+ purityState.allowsAct &&
142
+ !purityState.allowsAssert) {
143
+ reportArrangeAndActStatement(context, statement, purityState);
144
+ return;
145
+ }
146
+ if (purityState.allowsAct &&
147
+ purityState.allowsAssert &&
148
+ !purityState.allowsArrange) {
149
+ reportActAndAssertStatement(context, statement, purityState);
150
+ return;
151
+ }
152
+ if (purityState.allowsArrange &&
153
+ purityState.allowsAct &&
154
+ purityState.allowsAssert &&
155
+ purityState.containsAssertion &&
156
+ !purityState.isValidAssert) {
157
+ context.report({ messageId: "nonAssertionInAssert", node: statement.node });
158
+ }
159
+ }
160
+ export { reportStatementViolations };
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LXB1cml0eS1yZXBvcnRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvZW5mb3JjZS1hYWEtcGhhc2UtcHVyaXR5L3N0YXRlbWVudC1wdXJpdHktcmVwb3J0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdDQTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLDJCQUEyQixDQUNsQyxPQUF5QixFQUN6QixTQUFrRCxFQUNsRCxXQUFpQztJQUVqQyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsc0JBQXNCLENBQzdCLE9BQXlCLEVBQ3pCLFNBQWtELEVBQ2xELFdBQWlDO0lBRWpDLElBQUksV0FBVyxDQUFDLGlCQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9ELE9BQU8s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U0FBUyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQztBQUdELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYS90eXBlc1wiO1xuXG4vKiogUGhhc2UtcHVyaXR5IHN0YXRlIGZvciBvbmUgYW5hbHl6ZWQgc3RhdGVtZW50LiAqL1xuaW50ZXJmYWNlIFN0YXRlbWVudFB1cml0eVN0YXRlIHtcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFjdC4gKi9cbiAgYWxsb3dzQWN0OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgYmVsb25ncyB0byBBcnJhbmdlLiAqL1xuICBhbGxvd3NBcnJhbmdlOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgYmVsb25ncyB0byBBc3NlcnQuICovXG4gIGFsbG93c0Fzc2VydDogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIGFuIGFzc2VydGlvbi4gKi9cbiAgY29udGFpbnNBc3NlcnRpb246IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb250YWlucyBhc3luYyBsb2dpYy4gKi9cbiAgY29udGFpbnNBc3luY0xvZ2ljOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgYW4gYXdhaXQgZXhwcmVzc2lvbi4gKi9cbiAgY29udGFpbnNBd2FpdDogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IG11dGF0ZXMgc3RhdGUuICovXG4gIGNvbnRhaW5zTXV0YXRpb246IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBwZXJmb3JtcyBtZWFuaW5nZnVsIEFjdCB3b3JrLiAqL1xuICBpc01lYW5pbmdmdWxBY3Q6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb3VudHMgYXMgbWVhbmluZ2Z1bCBBY3QgY29udGVudCBvdmVyYWxsLiAqL1xuICBpc01lYW5pbmdmdWxBY3RDb250ZW50OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgbG9va3MgbGlrZSBzZXR1cC4gKi9cbiAgaXNTZXR1cExpa2U6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBpcyBhIHZhbGlkIGFzc2VydC1waGFzZSBzdGF0ZW1lbnQuICovXG4gIGlzVmFsaWRBc3NlcnQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwb3J0cyB2aW9sYXRpb25zIGZvciBzdGF0ZW1lbnRzIHRoYXQgYmVsb25nIHRvIGJvdGggQWN0IGFuZCBBc3NlcnQuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydEFjdEFuZEFzc2VydFN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEFjdEFuZEFzc2VydFN0YXRlbWVudChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxuKTogdm9pZCB7XG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc011dGF0aW9uKSB7XG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibXV0YXRpb25BZnRlckFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHVyaXR5U3RhdGUuaXNTZXR1cExpa2UgJiYgIXB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdENvbnRlbnQpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJzZXR1cEFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xuICB9XG5cbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXNzZXJ0aW9uICYmICFwdXJpdHlTdGF0ZS5pc1ZhbGlkQXNzZXJ0KSB7XG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibm9uQXNzZXJ0aW9uSW5Bc3NlcnRcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIEFjdC1vbmx5IHBoYXNlIHZpb2xhdGlvbnMgZm9yIG9uZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydEFjdE9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRBY3RPbmx5U3RhdGVtZW50KFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxuICBwdXJpdHlTdGF0ZTogU3RhdGVtZW50UHVyaXR5U3RhdGUsXG4pOiB2b2lkIHtcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXNzZXJ0aW9uICYmICFwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBtZXNzYWdlSWQ6IFwiYXNzZXJ0aW9uT3V0c2lkZUFzc2VydFwiLFxuICAgICAgbm9kZTogc3RhdGVtZW50Lm5vZGUsXG4gICAgfSk7XG4gIH1cblxuICBpZiAocHVyaXR5U3RhdGUuaXNTZXR1cExpa2UgJiYgIXB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdENvbnRlbnQpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJzZXR1cEFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB2aW9sYXRpb25zIGZvciBzdGF0ZW1lbnRzIHRoYXQgYmVsb25nIHRvIGJvdGggQXJyYW5nZSBhbmQgQWN0LlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIHJlcG9ydCBhZ2FpbnN0LlxuICogQHBhcmFtIHB1cml0eVN0YXRlIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRBcnJhbmdlQW5kQWN0U3RhdGVtZW50KHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBub2RlOiB7fSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9LCB7fSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0QXJyYW5nZUFuZEFjdFN0YXRlbWVudChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxuKTogdm9pZCB7XG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0Fzc2VydGlvbikge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG1lc3NhZ2VJZDogXCJhc3NlcnRpb25PdXRzaWRlQXNzZXJ0XCIsXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgQXJyYW5nZS1vbmx5IHBoYXNlIHZpb2xhdGlvbnMgZm9yIG9uZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydEFycmFuZ2VPbmx5U3RhdGVtZW50KHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBub2RlOiB7fSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9LCB7fSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcbik6IHZvaWQge1xuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiYgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCkge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG1lc3NhZ2VJZDogXCJhc3NlcnRpb25PdXRzaWRlQXNzZXJ0XCIsXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0F3YWl0KSB7XG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwiYXdhaXRPdXRzaWRlQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xuICB9XG5cbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXN5bmNMb2dpYykge1xuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImFzeW5jSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xuICB9XG5cbiAgaWYgKHB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdCkge1xuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImFjdGlvbkluQXJyYW5nZVwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgQXNzZXJ0LW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gc3RhdGVtZW50IFN0YXRlbWVudCBlbnRyeSB0byByZXBvcnQgYWdhaW5zdC5cbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0QXNzZXJ0T25seVN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEFzc2VydE9ubHlTdGF0ZW1lbnQoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcbik6IHZvaWQge1xuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBd2FpdCkge1xuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgfVxuXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc011dGF0aW9uKSB7XG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibXV0YXRpb25BZnRlckFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXB1cml0eVN0YXRlLmlzVmFsaWRBc3NlcnQpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgYW55IHBoYXNlLXB1cml0eSB2aW9sYXRpb25zIGZvciBvbmUgc3RhdGVtZW50LlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIHJlcG9ydCBhZ2FpbnN0LlxuICogQHBhcmFtIHB1cml0eVN0YXRlIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBub2RlOiB7fSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9LCB7fSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxuKTogdm9pZCB7XG4gIGlmIChcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlICYmXG4gICAgIXB1cml0eVN0YXRlLmFsbG93c0FjdCAmJlxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnRcbiAgKSB7XG4gICAgcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoY29udGV4dCwgc3RhdGVtZW50LCBwdXJpdHlTdGF0ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKFxuICAgIHB1cml0eVN0YXRlLmFsbG93c0FjdCAmJlxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlICYmXG4gICAgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydFxuICApIHtcbiAgICByZXBvcnRBY3RPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQgJiZcbiAgICAhcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXG4gICAgIXB1cml0eVN0YXRlLmFsbG93c0FycmFuZ2VcbiAgKSB7XG4gICAgcmVwb3J0QXNzZXJ0T25seVN0YXRlbWVudChjb250ZXh0LCBzdGF0ZW1lbnQsIHB1cml0eVN0YXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQXJyYW5nZSAmJlxuICAgIHB1cml0eVN0YXRlLmFsbG93c0FjdCAmJlxuICAgICFwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnRcbiAgKSB7XG4gICAgcmVwb3J0QXJyYW5nZUFuZEFjdFN0YXRlbWVudChjb250ZXh0LCBzdGF0ZW1lbnQsIHB1cml0eVN0YXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0ICYmXG4gICAgIXB1cml0eVN0YXRlLmFsbG93c0FycmFuZ2VcbiAgKSB7XG4gICAgcmVwb3J0QWN0QW5kQXNzZXJ0U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlICYmXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmXG4gICAgcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0ICYmXG4gICAgcHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiZcbiAgICAhcHVyaXR5U3RhdGUuaXNWYWxpZEFzc2VydFxuICApIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSB7IFN0YXRlbWVudFB1cml0eVN0YXRlIH07XG5leHBvcnQgeyByZXBvcnRTdGF0ZW1lbnRWaW9sYXRpb25zIH07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"missing-section-fixes.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-structure/missing-section-fixes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAsGhE;;;;;;;;;;;GAWG;AACH,iBAAS,wBAAwB,CAC/B,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,EAAE,SAAS,QAAQ,EAAE,EACpC,KAAK,EAAE,IAAI,CAAC,SAAS,GACpB,IAAI,CAAC,GAAG,EAAE,CAWZ;AA4GD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"missing-section-fixes.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-structure/missing-section-fixes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAsGhE;;;;;;;;;;;GAWG;AACH,iBAAS,wBAAwB,CAC/B,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,EAAE,SAAS,QAAQ,EAAE,EACpC,KAAK,EAAE,IAAI,CAAC,SAAS,GACpB,IAAI,CAAC,GAAG,EAAE,CAUZ;AA4GD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -63,7 +63,7 @@ function buildMissingSectionFixes(analysis, missingSections, fixer) {
63
63
  if (anchors === void 0) {
64
64
  return [];
65
65
  }
66
- return [...buildAnchorMap(anchors, missingSections).entries()].map(([offset, phases]) => buildMissingSectionFix({ analysis, fixer, offset, phases }));
66
+ return [...buildAnchorMap(anchors, missingSections)].map(([offset, phases]) => buildMissingSectionFix({ analysis, fixer, offset, phases }));
67
67
  }
68
68
  /**
69
69
  * Selects the anchor statement used for one missing AAA phase.
@@ -147,4 +147,4 @@ function shouldInsertLeadingBlankLine(phases, previousLine) {
147
147
  previousLine.trim().length > 0);
148
148
  }
149
149
  export { buildMissingSectionFixes };
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZy1zZWN0aW9uLWZpeGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2VuZm9yY2UtYWFhLXN0cnVjdHVyZS9taXNzaW5nLXNlY3Rpb24tZml4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxrQ0FBa0MsQ0FBQztBQTZCMUM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsY0FBYyxDQUNyQixPQUF5QixFQUN6QixlQUFvQztJQUVwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUVoRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxLQUE2QjtJQUMzRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFR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IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgdHlwZSB7IEFhYVBoYXNlLCBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuLi9hYWEvdHlwZXNcIjtcblxuaW1wb3J0IHtcbiAgYWFhUGhhc2VPcmRlcixcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXG59IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVyc1wiO1xuXG4vKiogQ29tcG9zaXRlIGlucHV0IGZvciBidWlsZGluZyBvbmUgbWlzc2luZy1zZWN0aW9uIGZpeC4gKi9cbmludGVyZmFjZSBNaXNzaW5nU2VjdGlvbkZpeElucHV0IHtcbiAgLyoqIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLiAqL1xuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXM7XG5cbiAgLyoqIEVTTGludCBmaXhlciBpbnN0YW5jZS4gKi9cbiAgZml4ZXI6IFJ1bGUuUnVsZUZpeGVyO1xuXG4gIC8qKiBTb3VyY2Ugb2Zmc2V0IHdoZXJlIHRoZSBzZWN0aW9uIG1hcmtlciBzaG91bGQgYmUgaW5zZXJ0ZWQuICovXG4gIG9mZnNldDogbnVtYmVyO1xuXG4gIC8qKiBNaXNzaW5nIHBoYXNlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIGluc2VydGlvbiBvZmZzZXQuICovXG4gIHBoYXNlczogcmVhZG9ubHkgQWFhUGhhc2VbXTtcbn1cblxuLyoqIEFuY2hvciBzdGF0ZW1lbnRzIHVzZWQgdG8gcGxhY2UgbWlzc2luZyBBQUEgc2VjdGlvbiBjb21tZW50cy4gKi9cbmludGVyZmFjZSBTdGF0ZW1lbnRBbmNob3JzIHtcbiAgLyoqIEZpcnN0IHN0YXRlbWVudCBhdmFpbGFibGUgZm9yIGFuIEFycmFuZ2UgaW5zZXJ0aW9uLiAqL1xuICBmaXJzdFN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl1bXCJub2RlXCJdO1xuXG4gIC8qKiBMYXN0IHN0YXRlbWVudCBhdmFpbGFibGUgZm9yIGFuIEFzc2VydCBpbnNlcnRpb24uICovXG4gIGxhc3RTdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdW1wibm9kZVwiXTtcblxuICAvKiogTWlkZGxlIHN0YXRlbWVudCBhdmFpbGFibGUgZm9yIGFuIEFjdCBpbnNlcnRpb24uICovXG4gIG1pZGRsZVN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl1bXCJub2RlXCJdO1xufVxuXG4vKipcbiAqIEdyb3VwcyBtaXNzaW5nIHBoYXNlcyBieSBpbnNlcnRpb24gb2Zmc2V0LlxuICogQHBhcmFtIGFuY2hvcnMgQW5jaG9yIHN0YXRlbWVudHMgYXZhaWxhYmxlIGZvciBpbnNlcnRpb24uXG4gKiBAcGFyYW0gbWlzc2luZ1NlY3Rpb25zIE1pc3NpbmcgQUFBIHBoYXNlcyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyBNYXAgb2Ygc291cmNlIG9mZnNldHMgdG8gcGhhc2VzIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIHRoZXJlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFuY2hvck1hcCA9IGJ1aWxkQW5jaG9yTWFwKHsgZmlyc3RTdGF0ZW1lbnQ6IHsgcmFuZ2U6IFswLCAxXSB9IGFzIG5ldmVyLCBsYXN0U3RhdGVtZW50OiB7IHJhbmdlOiBbMiwgM10gfSBhcyBuZXZlciwgbWlkZGxlU3RhdGVtZW50OiB7IHJhbmdlOiBbMSwgMl0gfSBhcyBuZXZlciB9LCBbXCJBcnJhbmdlXCJdKTtcbiAqIHZvaWQgYW5jaG9yTWFwO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQW5jaG9yTWFwKFxuICBhbmNob3JzOiBTdGF0ZW1lbnRBbmNob3JzLFxuICBtaXNzaW5nU2VjdGlvbnM6IHJlYWRvbmx5IEFhYVBoYXNlW10sXG4pOiBNYXA8bnVtYmVyLCBBYWFQaGFzZVtdPiB7XG4gIGNvbnN0IGFuY2hvck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBBYWFQaGFzZVtdPigpO1xuXG4gIGZvciAoY29uc3QgcGhhc2Ugb2YgbWlzc2luZ1NlY3Rpb25zKSB7XG4gICAgY29uc3QgYW5jaG9yTm9kZSA9IGdldEFuY2hvck5vZGUoYW5jaG9ycywgcGhhc2UpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYW5jaG9yTWFwLmdldChhbmNob3JOb2RlLnJhbmdlWzBdKSA/PyBbXTtcblxuICAgIGV4aXN0aW5nLnB1c2gocGhhc2UpO1xuICAgIGFuY2hvck1hcC5zZXQoYW5jaG9yTm9kZS5yYW5nZVswXSwgZXhpc3RpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGFuY2hvck1hcDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgb25lIGF1dG9maXggdGhhdCBpbnNlcnRzIG1pc3Npbmcgc2VjdGlvbiBtYXJrZXJzIGJlZm9yZSBhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBpbnB1dCBDb21wb3NpdGUgaW5wdXQgZm9yIG9uZSBtaXNzaW5nLXNlY3Rpb24gZml4LlxuICogQHJldHVybnMgRml4IHRoYXQgaW5zZXJ0cyB0aGUgbWlzc2luZyBzZWN0aW9uIG1hcmtlciB0ZXh0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpeCA9IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXgoeyBhbmFseXNpczogeyBuZXdsaW5lOiBcIlxcblwiLCBzb3VyY2VUZXh0OiBcInZhbHVlXCIgfSBhcyBuZXZlciwgZml4ZXI6IHt9IGFzIG5ldmVyLCBvZmZzZXQ6IDAsIHBoYXNlczogW1wiQXJyYW5nZVwiXSB9KTtcbiAqIHZvaWQgZml4O1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXgoaW5wdXQ6IE1pc3NpbmdTZWN0aW9uRml4SW5wdXQpOiBSdWxlLkZpeCB7XG4gIGNvbnN0IHsgYW5hbHlzaXMsIGZpeGVyLCBvZmZzZXQsIHBoYXNlcyB9ID0gaW5wdXQ7XG4gIGNvbnN0IHNvdXJjZUxpbmVzID0gYW5hbHlzaXMuc291cmNlVGV4dC5zcGxpdCgvXFxyXFxufFxcbi91KTtcbiAgY29uc3Qgc29ydGVkUGhhc2VzID0gcGhhc2VzLnRvU29ydGVkKFxuICAgIChsZWZ0LCByaWdodCkgPT4gYWFhUGhhc2VPcmRlcltsZWZ0XSAtIGFhYVBoYXNlT3JkZXJbcmlnaHRdLFxuICApO1xuICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gYW5hbHlzaXMuc291cmNlVGV4dFxuICAgIC5zbGljZSgwLCBvZmZzZXQpXG4gICAgLnNwbGl0KC9cXHJcXG58XFxuL3UpLmxlbmd0aDtcbiAgY29uc3QgbGluZVN0YXJ0UmFuZ2UgPSBnZXRMaW5lU3RhcnRSYW5nZShhbmFseXNpcy5zb3VyY2VUZXh0LCBzdGF0ZW1lbnRMaW5lKTtcbiAgY29uc3QgW3ByZXZpb3VzTGluZSA9IFwiXCJdID1cbiAgICBzdGF0ZW1lbnRMaW5lID4gMVxuICAgICAgPyBzb3VyY2VMaW5lcy5zbGljZShzdGF0ZW1lbnRMaW5lIC0gMiwgc3RhdGVtZW50TGluZSAtIDEpXG4gICAgICA6IFtdO1xuICBjb25zdCBuZWVkc0xlYWRpbmdCbGFua0xpbmUgPSBzaG91bGRJbnNlcnRMZWFkaW5nQmxhbmtMaW5lKFxuICAgIHNvcnRlZFBoYXNlcyxcbiAgICBwcmV2aW91c0xpbmUsXG4gICk7XG4gIGNvbnN0IFtjdXJyZW50TGluZSA9IFwiXCJdID0gc291cmNlTGluZXMuc2xpY2UoXG4gICAgc3RhdGVtZW50TGluZSAtIDEsXG4gICAgc3RhdGVtZW50TGluZSxcbiAgKTtcbiAgY29uc3QgaW5kZW50YXRpb24gPSBnZXRMaW5lSW5kZW50YXRpb24oY3VycmVudExpbmUpO1xuXG4gIHJldHVybiBmaXhlci5pbnNlcnRUZXh0QmVmb3JlUmFuZ2UoXG4gICAgbGluZVN0YXJ0UmFuZ2UsXG4gICAgYCR7bmVlZHNMZWFkaW5nQmxhbmtMaW5lID8gYW5hbHlzaXMubmV3bGluZSA6IFwiXCJ9JHtpbmRlbnRhdGlvbn0vLyAke3NvcnRlZFBoYXNlcy5qb2luKFwiICYgXCIpfSR7YW5hbHlzaXMubmV3bGluZX1gLFxuICApO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhdXRvZml4IGVkaXRzIGZvciBlYWNoIG1pc3NpbmcgQUFBIHNlY3Rpb24gbWFya2VyLlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQHBhcmFtIG1pc3NpbmdTZWN0aW9ucyBNaXNzaW5nIEFBQSBwaGFzZXMgdG8gaW5zZXJ0LlxuICogQHBhcmFtIGZpeGVyIEVTTGludCBmaXhlciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEZpeGVzIHRoYXQgYWRkIHRoZSBtaXNzaW5nIHNlY3Rpb24gY29tbWVudHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZml4ZXMgPSBidWlsZE1pc3NpbmdTZWN0aW9uRml4ZXMoeyBuZXdsaW5lOiBcIlxcblwiLCBzb3VyY2VUZXh0OiBcInZhbHVlXCIgfSBhcyBuZXZlciwgW1wiQXJyYW5nZVwiXSwge30gYXMgbmV2ZXIpO1xuICogdm9pZCBmaXhlcztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBidWlsZE1pc3NpbmdTZWN0aW9uRml4ZXMoXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbiAgbWlzc2luZ1NlY3Rpb25zOiByZWFkb25seSBBYWFQaGFzZVtdLFxuICBmaXhlcjogUnVsZS5SdWxlRml4ZXIsXG4pOiBSdWxlLkZpeFtdIHtcbiAgY29uc3QgYW5jaG9ycyA9IGdldFNlY3Rpb25BbmNob3JzKGFuYWx5c2lzKTtcblxuICBpZiAoYW5jaG9ycyA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5idWlsZEFuY2hvck1hcChhbmNob3JzLCBtaXNzaW5nU2VjdGlvbnMpLmVudHJpZXMoKV0ubWFwKFxuICAgIChbb2Zmc2V0LCBwaGFzZXNdKSA9PlxuICAgICAgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeCh7IGFuYWx5c2lzLCBmaXhlciwgb2Zmc2V0LCBwaGFzZXMgfSksXG4gICk7XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgYW5jaG9yIHN0YXRlbWVudCB1c2VkIGZvciBvbmUgbWlzc2luZyBBQUEgcGhhc2UuXG4gKiBAcGFyYW0gYW5jaG9ycyBBbmNob3Igc3RhdGVtZW50cyBhdmFpbGFibGUgZm9yIGluc2VydGlvbi5cbiAqIEBwYXJhbSBwaGFzZSBNaXNzaW5nIHBoYXNlIGJlaW5nIGluc2VydGVkLlxuICogQHJldHVybnMgU3RhdGVtZW50IG5vZGUgdXNlZCBhcyB0aGUgaW5zZXJ0aW9uIGFuY2hvci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhbmNob3IgPSBnZXRBbmNob3JOb2RlKHsgZmlyc3RTdGF0ZW1lbnQ6IHt9IGFzIG5ldmVyLCBsYXN0U3RhdGVtZW50OiB7fSBhcyBuZXZlciwgbWlkZGxlU3RhdGVtZW50OiB7fSBhcyBuZXZlciB9LCBcIkFycmFuZ2VcIik7XG4gKiB2b2lkIGFuY2hvcjtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRBbmNob3JOb2RlKFxuICBhbmNob3JzOiBTdGF0ZW1lbnRBbmNob3JzLFxuICBwaGFzZTogQWFhUGhhc2UsXG4pOiBTdGF0ZW1lbnRBbmNob3JzW2tleW9mIFN0YXRlbWVudEFuY2hvcnNdIHtcbiAgc3dpdGNoIChwaGFzZSkge1xuICAgIGNhc2UgXCJBY3RcIjoge1xuICAgICAgcmV0dXJuIGFuY2hvcnMubWlkZGxlU3RhdGVtZW50O1xuICAgIH1cbiAgICBjYXNlIFwiQXJyYW5nZVwiOiB7XG4gICAgICByZXR1cm4gYW5jaG9ycy5maXJzdFN0YXRlbWVudDtcbiAgICB9XG4gICAgY2FzZSBcIkFzc2VydFwiOiB7XG4gICAgICByZXR1cm4gYW5jaG9ycy5sYXN0U3RhdGVtZW50O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYW5jaG9ycy5sYXN0U3RhdGVtZW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBpbmRlbnRhdGlvbiBwcmVmaXggZnJvbSBhIHNvdXJjZSBsaW5lLlxuICogQHBhcmFtIGxpbmVUZXh0IFNvdXJjZSBsaW5lIHRleHQuXG4gKiBAcmV0dXJucyBMZWFkaW5nIHdoaXRlc3BhY2UgZm9yIHRoZSBsaW5lLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGluZGVudGF0aW9uID0gZ2V0TGluZUluZGVudGF0aW9uKFwiICB2YWx1ZVwiKTtcbiAqIHZvaWQgaW5kZW50YXRpb247XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0TGluZUluZGVudGF0aW9uKGxpbmVUZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmVUZXh0LnRyaW1TdGFydCgpO1xuXG4gIHJldHVybiBsaW5lVGV4dC5zbGljZSgwLCBsaW5lVGV4dC5sZW5ndGggLSB0cmltbWVkTGluZS5sZW5ndGgpO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHN0YXRlbWVudCBub2RlcyB1c2VkIGFzIGluc2VydGlvbiBhbmNob3JzIGZvciBtaXNzaW5nIHNlY3Rpb25zLlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQHJldHVybnMgQW5jaG9yIHN0YXRlbWVudHMgZm9yIEFycmFuZ2UsIEFjdCwgYW5kIEFzc2VydCBpbnNlcnRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYW5jaG9ycyA9IGdldFNlY3Rpb25BbmNob3JzKHsgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiB2b2lkIGFuY2hvcnM7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkFuY2hvcnMoXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IFN0YXRlbWVudEFuY2hvcnMgfCB1bmRlZmluZWQge1xuICBjb25zdCBbZmlyc3RTdGF0ZW1lbnRFbnRyeV0gPSBhbmFseXNpcy5zdGF0ZW1lbnRzO1xuICBjb25zdCBtaWRkbGVTdGF0ZW1lbnRFbnRyeSA9XG4gICAgYW5hbHlzaXMuc3RhdGVtZW50c1tcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBhbmFseXNpcy5zdGF0ZW1lbnRzLmxlbmd0aCAtIDEsXG4gICAgICAgIE1hdGguZmxvb3IoYW5hbHlzaXMuc3RhdGVtZW50cy5sZW5ndGggLyAyKSxcbiAgICAgIClcbiAgICBdO1xuICBjb25zdCBsYXN0U3RhdGVtZW50RW50cnkgPSBhbmFseXNpcy5zdGF0ZW1lbnRzLmF0KC0xKTtcblxuICBpZiAoXG4gICAgZmlyc3RTdGF0ZW1lbnRFbnRyeSA9PT0gdm9pZCAwIHx8XG4gICAgbWlkZGxlU3RhdGVtZW50RW50cnkgPT09IHZvaWQgMCB8fFxuICAgIGxhc3RTdGF0ZW1lbnRFbnRyeSA9PT0gdm9pZCAwXG4gICkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpcnN0U3RhdGVtZW50OiBmaXJzdFN0YXRlbWVudEVudHJ5Lm5vZGUsXG4gICAgbGFzdFN0YXRlbWVudDogbGFzdFN0YXRlbWVudEVudHJ5Lm5vZGUsXG4gICAgbWlkZGxlU3RhdGVtZW50OiBtaWRkbGVTdGF0ZW1lbnRFbnRyeS5ub2RlLFxuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIG1pc3Npbmcgc2VjdGlvbiBpbnNlcnRpb24gbmVlZHMgYSBibGFuayBsaW5lIHByZWZpeC5cbiAqIEBwYXJhbSBwaGFzZXMgTWlzc2luZyBwaGFzZXMgaW5zZXJ0ZWQgYXQgdGhlIHNhbWUgb2Zmc2V0LlxuICogQHBhcmFtIHByZXZpb3VzTGluZSBTb3VyY2UgbGluZSBpbW1lZGlhdGVseSBhYm92ZSB0aGUgaW5zZXJ0aW9uIHBvaW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgaW5zZXJ0ZWQgbWFya2VyIHNob3VsZCBzdGFydCB3aXRoIGEgYmxhbmsgbGluZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhY3R1YWwgPSBzaG91bGRJbnNlcnRMZWFkaW5nQmxhbmtMaW5lKFtcIkFjdFwiXSwgXCJydW4oKTtcIik7XG4gKiB2b2lkIGFjdHVhbDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBzaG91bGRJbnNlcnRMZWFkaW5nQmxhbmtMaW5lKFxuICBwaGFzZXM6IHJlYWRvbmx5IEFhYVBoYXNlW10sXG4gIHByZXZpb3VzTGluZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcGhhc2VzLnNvbWUoKHBoYXNlKSA9PiBwaGFzZSAhPT0gXCJBcnJhbmdlXCIpICYmXG4gICAgcHJldmlvdXNMaW5lLnRyaW0oKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyB9O1xuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZy1zZWN0aW9uLWZpeGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2VuZm9yY2UtYWFhLXN0cnVjdHVyZS9taXNzaW5nLXNlY3Rpb24tZml4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxrQ0FBa0MsQ0FBQztBQTZCMUM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsY0FBYyxDQUNyQixPQUF5QixFQUN6QixlQUFvQztJQUVwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUVoRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxLQUE2QjtJQUMzRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFR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cm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQWFhUGhhc2UsIFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYS90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBhYWFQaGFzZU9yZGVyLFxuICBnZXRMaW5lU3RhcnRSYW5nZSxcbn0gZnJvbSBcIi4uL2FhYS9hbmFseXplci5hbmFseXNpcy5oZWxwZXJzXCI7XG5cbi8qKiBDb21wb3NpdGUgaW5wdXQgZm9yIGJ1aWxkaW5nIG9uZSBtaXNzaW5nLXNlY3Rpb24gZml4LiAqL1xuaW50ZXJmYWNlIE1pc3NpbmdTZWN0aW9uRml4SW5wdXQge1xuICAvKiogUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuICovXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcztcblxuICAvKiogRVNMaW50IGZpeGVyIGluc3RhbmNlLiAqL1xuICBmaXhlcjogUnVsZS5SdWxlRml4ZXI7XG5cbiAgLyoqIFNvdXJjZSBvZmZzZXQgd2hlcmUgdGhlIHNlY3Rpb24gbWFya2VyIHNob3VsZCBiZSBpbnNlcnRlZC4gKi9cbiAgb2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqIE1pc3NpbmcgcGhhc2VzIHRoYXQgc2hhcmUgdGhlIHNhbWUgaW5zZXJ0aW9uIG9mZnNldC4gKi9cbiAgcGhhc2VzOiByZWFkb25seSBBYWFQaGFzZVtdO1xufVxuXG4vKiogQW5jaG9yIHN0YXRlbWVudHMgdXNlZCB0byBwbGFjZSBtaXNzaW5nIEFBQSBzZWN0aW9uIGNvbW1lbnRzLiAqL1xuaW50ZXJmYWNlIFN0YXRlbWVudEFuY2hvcnMge1xuICAvKiogRmlyc3Qgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQXJyYW5nZSBpbnNlcnRpb24uICovXG4gIGZpcnN0U3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXVtcIm5vZGVcIl07XG5cbiAgLyoqIExhc3Qgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQXNzZXJ0IGluc2VydGlvbi4gKi9cbiAgbGFzdFN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl1bXCJub2RlXCJdO1xuXG4gIC8qKiBNaWRkbGUgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQWN0IGluc2VydGlvbi4gKi9cbiAgbWlkZGxlU3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXVtcIm5vZGVcIl07XG59XG5cbi8qKlxuICogR3JvdXBzIG1pc3NpbmcgcGhhc2VzIGJ5IGluc2VydGlvbiBvZmZzZXQuXG4gKiBAcGFyYW0gYW5jaG9ycyBBbmNob3Igc3RhdGVtZW50cyBhdmFpbGFibGUgZm9yIGluc2VydGlvbi5cbiAqIEBwYXJhbSBtaXNzaW5nU2VjdGlvbnMgTWlzc2luZyBBQUEgcGhhc2VzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIE1hcCBvZiBzb3VyY2Ugb2Zmc2V0cyB0byBwaGFzZXMgdGhhdCBzaG91bGQgYmUgaW5zZXJ0ZWQgdGhlcmUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYW5jaG9yTWFwID0gYnVpbGRBbmNob3JNYXAoeyBmaXJzdFN0YXRlbWVudDogeyByYW5nZTogWzAsIDFdIH0gYXMgbmV2ZXIsIGxhc3RTdGF0ZW1lbnQ6IHsgcmFuZ2U6IFsyLCAzXSB9IGFzIG5ldmVyLCBtaWRkbGVTdGF0ZW1lbnQ6IHsgcmFuZ2U6IFsxLCAyXSB9IGFzIG5ldmVyIH0sIFtcIkFycmFuZ2VcIl0pO1xuICogdm9pZCBhbmNob3JNYXA7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gYnVpbGRBbmNob3JNYXAoXG4gIGFuY2hvcnM6IFN0YXRlbWVudEFuY2hvcnMsXG4gIG1pc3NpbmdTZWN0aW9uczogcmVhZG9ubHkgQWFhUGhhc2VbXSxcbik6IE1hcDxudW1iZXIsIEFhYVBoYXNlW10+IHtcbiAgY29uc3QgYW5jaG9yTWFwID0gbmV3IE1hcDxudW1iZXIsIEFhYVBoYXNlW10+KCk7XG5cbiAgZm9yIChjb25zdCBwaGFzZSBvZiBtaXNzaW5nU2VjdGlvbnMpIHtcbiAgICBjb25zdCBhbmNob3JOb2RlID0gZ2V0QW5jaG9yTm9kZShhbmNob3JzLCBwaGFzZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhbmNob3JNYXAuZ2V0KGFuY2hvck5vZGUucmFuZ2VbMF0pID8/IFtdO1xuXG4gICAgZXhpc3RpbmcucHVzaChwaGFzZSk7XG4gICAgYW5jaG9yTWFwLnNldChhbmNob3JOb2RlLnJhbmdlWzBdLCBleGlzdGluZyk7XG4gIH1cblxuICByZXR1cm4gYW5jaG9yTWFwO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBvbmUgYXV0b2ZpeCB0aGF0IGluc2VydHMgbWlzc2luZyBzZWN0aW9uIG1hcmtlcnMgYmVmb3JlIGEgc3RhdGVtZW50LlxuICogQHBhcmFtIGlucHV0IENvbXBvc2l0ZSBpbnB1dCBmb3Igb25lIG1pc3Npbmctc2VjdGlvbiBmaXguXG4gKiBAcmV0dXJucyBGaXggdGhhdCBpbnNlcnRzIHRoZSBtaXNzaW5nIHNlY3Rpb24gbWFya2VyIHRleHQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZml4ID0gYnVpbGRNaXNzaW5nU2VjdGlvbkZpeCh7IGFuYWx5c2lzOiB7IG5ld2xpbmU6IFwiXFxuXCIsIHNvdXJjZVRleHQ6IFwidmFsdWVcIiB9IGFzIG5ldmVyLCBmaXhlcjoge30gYXMgbmV2ZXIsIG9mZnNldDogMCwgcGhhc2VzOiBbXCJBcnJhbmdlXCJdIH0pO1xuICogdm9pZCBmaXg7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gYnVpbGRNaXNzaW5nU2VjdGlvbkZpeChpbnB1dDogTWlzc2luZ1NlY3Rpb25GaXhJbnB1dCk6IFJ1bGUuRml4IHtcbiAgY29uc3QgeyBhbmFseXNpcywgZml4ZXIsIG9mZnNldCwgcGhhc2VzIH0gPSBpbnB1dDtcbiAgY29uc3Qgc291cmNlTGluZXMgPSBhbmFseXNpcy5zb3VyY2VUZXh0LnNwbGl0KC9cXHJcXG58XFxuL3UpO1xuICBjb25zdCBzb3J0ZWRQaGFzZXMgPSBwaGFzZXMudG9Tb3J0ZWQoXG4gICAgKGxlZnQsIHJpZ2h0KSA9PiBhYWFQaGFzZU9yZGVyW2xlZnRdIC0gYWFhUGhhc2VPcmRlcltyaWdodF0sXG4gICk7XG4gIGNvbnN0IHN0YXRlbWVudExpbmUgPSBhbmFseXNpcy5zb3VyY2VUZXh0XG4gICAgLnNsaWNlKDAsIG9mZnNldClcbiAgICAuc3BsaXQoL1xcclxcbnxcXG4vdSkubGVuZ3RoO1xuICBjb25zdCBsaW5lU3RhcnRSYW5nZSA9IGdldExpbmVTdGFydFJhbmdlKGFuYWx5c2lzLnNvdXJjZVRleHQsIHN0YXRlbWVudExpbmUpO1xuICBjb25zdCBbcHJldmlvdXNMaW5lID0gXCJcIl0gPVxuICAgIHN0YXRlbWVudExpbmUgPiAxXG4gICAgICA/IHNvdXJjZUxpbmVzLnNsaWNlKHN0YXRlbWVudExpbmUgLSAyLCBzdGF0ZW1lbnRMaW5lIC0gMSlcbiAgICAgIDogW107XG4gIGNvbnN0IG5lZWRzTGVhZGluZ0JsYW5rTGluZSA9IHNob3VsZEluc2VydExlYWRpbmdCbGFua0xpbmUoXG4gICAgc29ydGVkUGhhc2VzLFxuICAgIHByZXZpb3VzTGluZSxcbiAgKTtcbiAgY29uc3QgW2N1cnJlbnRMaW5lID0gXCJcIl0gPSBzb3VyY2VMaW5lcy5zbGljZShcbiAgICBzdGF0ZW1lbnRMaW5lIC0gMSxcbiAgICBzdGF0ZW1lbnRMaW5lLFxuICApO1xuICBjb25zdCBpbmRlbnRhdGlvbiA9IGdldExpbmVJbmRlbnRhdGlvbihjdXJyZW50TGluZSk7XG5cbiAgcmV0dXJuIGZpeGVyLmluc2VydFRleHRCZWZvcmVSYW5nZShcbiAgICBsaW5lU3RhcnRSYW5nZSxcbiAgICBgJHtuZWVkc0xlYWRpbmdCbGFua0xpbmUgPyBhbmFseXNpcy5uZXdsaW5lIDogXCJcIn0ke2luZGVudGF0aW9ufS8vICR7c29ydGVkUGhhc2VzLmpvaW4oXCIgJiBcIil9JHthbmFseXNpcy5uZXdsaW5lfWAsXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGF1dG9maXggZWRpdHMgZm9yIGVhY2ggbWlzc2luZyBBQUEgc2VjdGlvbiBtYXJrZXIuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAcGFyYW0gbWlzc2luZ1NlY3Rpb25zIE1pc3NpbmcgQUFBIHBoYXNlcyB0byBpbnNlcnQuXG4gKiBAcGFyYW0gZml4ZXIgRVNMaW50IGZpeGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgRml4ZXMgdGhhdCBhZGQgdGhlIG1pc3Npbmcgc2VjdGlvbiBjb21tZW50cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaXhlcyA9IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyh7IG5ld2xpbmU6IFwiXFxuXCIsIHNvdXJjZVRleHQ6IFwidmFsdWVcIiB9IGFzIG5ldmVyLCBbXCJBcnJhbmdlXCJdLCB7fSBhcyBuZXZlcik7XG4gKiB2b2lkIGZpeGVzO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyhcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuICBtaXNzaW5nU2VjdGlvbnM6IHJlYWRvbmx5IEFhYVBoYXNlW10sXG4gIGZpeGVyOiBSdWxlLlJ1bGVGaXhlcixcbik6IFJ1bGUuRml4W10ge1xuICBjb25zdCBhbmNob3JzID0gZ2V0U2VjdGlvbkFuY2hvcnMoYW5hbHlzaXMpO1xuXG4gIGlmIChhbmNob3JzID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gWy4uLmJ1aWxkQW5jaG9yTWFwKGFuY2hvcnMsIG1pc3NpbmdTZWN0aW9ucyldLm1hcCgoW29mZnNldCwgcGhhc2VzXSkgPT5cbiAgICBidWlsZE1pc3NpbmdTZWN0aW9uRml4KHsgYW5hbHlzaXMsIGZpeGVyLCBvZmZzZXQsIHBoYXNlcyB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBhbmNob3Igc3RhdGVtZW50IHVzZWQgZm9yIG9uZSBtaXNzaW5nIEFBQSBwaGFzZS5cbiAqIEBwYXJhbSBhbmNob3JzIEFuY2hvciBzdGF0ZW1lbnRzIGF2YWlsYWJsZSBmb3IgaW5zZXJ0aW9uLlxuICogQHBhcmFtIHBoYXNlIE1pc3NpbmcgcGhhc2UgYmVpbmcgaW5zZXJ0ZWQuXG4gKiBAcmV0dXJucyBTdGF0ZW1lbnQgbm9kZSB1c2VkIGFzIHRoZSBpbnNlcnRpb24gYW5jaG9yLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvck5vZGUoeyBmaXJzdFN0YXRlbWVudDoge30gYXMgbmV2ZXIsIGxhc3RTdGF0ZW1lbnQ6IHt9IGFzIG5ldmVyLCBtaWRkbGVTdGF0ZW1lbnQ6IHt9IGFzIG5ldmVyIH0sIFwiQXJyYW5nZVwiKTtcbiAqIHZvaWQgYW5jaG9yO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEFuY2hvck5vZGUoXG4gIGFuY2hvcnM6IFN0YXRlbWVudEFuY2hvcnMsXG4gIHBoYXNlOiBBYWFQaGFzZSxcbik6IFN0YXRlbWVudEFuY2hvcnNba2V5b2YgU3RhdGVtZW50QW5jaG9yc10ge1xuICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgY2FzZSBcIkFjdFwiOiB7XG4gICAgICByZXR1cm4gYW5jaG9ycy5taWRkbGVTdGF0ZW1lbnQ7XG4gICAgfVxuICAgIGNhc2UgXCJBcnJhbmdlXCI6IHtcbiAgICAgIHJldHVybiBhbmNob3JzLmZpcnN0U3RhdGVtZW50O1xuICAgIH1cbiAgICBjYXNlIFwiQXNzZXJ0XCI6IHtcbiAgICAgIHJldHVybiBhbmNob3JzLmxhc3RTdGF0ZW1lbnQ7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBhbmNob3JzLmxhc3RTdGF0ZW1lbnQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGluZGVudGF0aW9uIHByZWZpeCBmcm9tIGEgc291cmNlIGxpbmUuXG4gKiBAcGFyYW0gbGluZVRleHQgU291cmNlIGxpbmUgdGV4dC5cbiAqIEByZXR1cm5zIExlYWRpbmcgd2hpdGVzcGFjZSBmb3IgdGhlIGxpbmUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaW5kZW50YXRpb24gPSBnZXRMaW5lSW5kZW50YXRpb24oXCIgIHZhbHVlXCIpO1xuICogdm9pZCBpbmRlbnRhdGlvbjtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRMaW5lSW5kZW50YXRpb24obGluZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZVRleHQudHJpbVN0YXJ0KCk7XG5cbiAgcmV0dXJuIGxpbmVUZXh0LnNsaWNlKDAsIGxpbmVUZXh0Lmxlbmd0aCAtIHRyaW1tZWRMaW5lLmxlbmd0aCk7XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgc3RhdGVtZW50IG5vZGVzIHVzZWQgYXMgaW5zZXJ0aW9uIGFuY2hvcnMgZm9yIG1pc3Npbmcgc2VjdGlvbnMuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAcmV0dXJucyBBbmNob3Igc3RhdGVtZW50cyBmb3IgQXJyYW5nZSwgQWN0LCBhbmQgQXNzZXJ0IGluc2VydGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhbmNob3JzID0gZ2V0U2VjdGlvbkFuY2hvcnMoeyBzdGF0ZW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIHZvaWQgYW5jaG9ycztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uQW5jaG9ycyhcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogU3RhdGVtZW50QW5jaG9ycyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFtmaXJzdFN0YXRlbWVudEVudHJ5XSA9IGFuYWx5c2lzLnN0YXRlbWVudHM7XG4gIGNvbnN0IG1pZGRsZVN0YXRlbWVudEVudHJ5ID1cbiAgICBhbmFseXNpcy5zdGF0ZW1lbnRzW1xuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGFuYWx5c2lzLnN0YXRlbWVudHMubGVuZ3RoIC0gMSxcbiAgICAgICAgTWF0aC5mbG9vcihhbmFseXNpcy5zdGF0ZW1lbnRzLmxlbmd0aCAvIDIpLFxuICAgICAgKVxuICAgIF07XG4gIGNvbnN0IGxhc3RTdGF0ZW1lbnRFbnRyeSA9IGFuYWx5c2lzLnN0YXRlbWVudHMuYXQoLTEpO1xuXG4gIGlmIChcbiAgICBmaXJzdFN0YXRlbWVudEVudHJ5ID09PSB2b2lkIDAgfHxcbiAgICBtaWRkbGVTdGF0ZW1lbnRFbnRyeSA9PT0gdm9pZCAwIHx8XG4gICAgbGFzdFN0YXRlbWVudEVudHJ5ID09PSB2b2lkIDBcbiAgKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlyc3RTdGF0ZW1lbnQ6IGZpcnN0U3RhdGVtZW50RW50cnkubm9kZSxcbiAgICBsYXN0U3RhdGVtZW50OiBsYXN0U3RhdGVtZW50RW50cnkubm9kZSxcbiAgICBtaWRkbGVTdGF0ZW1lbnQ6IG1pZGRsZVN0YXRlbWVudEVudHJ5Lm5vZGUsXG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbWlzc2luZyBzZWN0aW9uIGluc2VydGlvbiBuZWVkcyBhIGJsYW5rIGxpbmUgcHJlZml4LlxuICogQHBhcmFtIHBoYXNlcyBNaXNzaW5nIHBoYXNlcyBpbnNlcnRlZCBhdCB0aGUgc2FtZSBvZmZzZXQuXG4gKiBAcGFyYW0gcHJldmlvdXNMaW5lIFNvdXJjZSBsaW5lIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBpbnNlcnRpb24gcG9pbnQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbnNlcnRlZCBtYXJrZXIgc2hvdWxkIHN0YXJ0IHdpdGggYSBibGFuayBsaW5lLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFjdHVhbCA9IHNob3VsZEluc2VydExlYWRpbmdCbGFua0xpbmUoW1wiQWN0XCJdLCBcInJ1bigpO1wiKTtcbiAqIHZvaWQgYWN0dWFsO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEluc2VydExlYWRpbmdCbGFua0xpbmUoXG4gIHBoYXNlczogcmVhZG9ubHkgQWFhUGhhc2VbXSxcbiAgcHJldmlvdXNMaW5lOiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwaGFzZXMuc29tZSgocGhhc2UpID0+IHBoYXNlICE9PSBcIkFycmFuZ2VcIikgJiZcbiAgICBwcmV2aW91c0xpbmUudHJpbSgpLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH07XG4iXX0=